1
0
mirror of https://github.com/esphome/esphome.git synced 2025-11-16 06:45:48 +00:00

WiFi networks priority (#658)

* WiFi networks priority

Fixes https://github.com/esphome/feature-requests/issues/136

* Print priority
This commit is contained in:
Otto Winter
2019-07-03 20:42:46 +02:00
committed by GitHub
parent 6516a6ff7e
commit 1876c21e3e
3 changed files with 60 additions and 1 deletions

View File

@@ -66,12 +66,14 @@ class WiFiAP {
void set_bssid(optional<bssid_t> bssid);
void set_password(const std::string &password);
void set_channel(optional<uint8_t> channel);
void set_priority(float priority) { priority_ = priority; }
void set_manual_ip(optional<ManualIP> manual_ip);
void set_hidden(bool hidden);
const std::string &get_ssid() const;
const optional<bssid_t> &get_bssid() const;
const std::string &get_password() const;
const optional<uint8_t> &get_channel() const;
float get_priority() const { return priority_; }
const optional<ManualIP> &get_manual_ip() const;
bool get_hidden() const;
@@ -80,6 +82,7 @@ class WiFiAP {
optional<bssid_t> bssid_;
std::string password_;
optional<uint8_t> channel_;
float priority_{0};
optional<ManualIP> manual_ip_;
bool hidden_{false};
};
@@ -99,6 +102,8 @@ class WiFiScanResult {
int8_t get_rssi() const;
bool get_with_auth() const;
bool get_is_hidden() const;
float get_priority() const { return priority_; }
void set_priority(float priority) { priority_ = priority; }
protected:
bool matches_{false};
@@ -108,6 +113,12 @@ class WiFiScanResult {
int8_t rssi_;
bool with_auth_;
bool is_hidden_;
float priority_{0.0f};
};
struct WiFiSTAPriority {
bssid_t bssid;
float priority;
};
enum WiFiPowerSaveMode {
@@ -175,6 +186,30 @@ class WiFiComponent : public Component {
IPAddress wifi_soft_ap_ip();
bool has_sta_priority(const bssid_t &bssid) {
for (auto &it : this->sta_priorities_)
if (it.bssid == bssid)
return true;
return false;
}
float get_sta_priority(const bssid_t bssid) {
for (auto &it : this->sta_priorities_)
if (it.bssid == bssid)
return it.priority;
return 0.0f;
}
void set_sta_priority(const bssid_t bssid, float priority) {
for (auto &it : this->sta_priorities_)
if (it.bssid == bssid) {
it.priority = priority;
return;
}
this->sta_priorities_.push_back(WiFiSTAPriority{
.bssid = bssid,
.priority = priority,
});
}
protected:
static std::string format_mac_addr(const uint8_t mac[6]);
void setup_ap_config_();
@@ -209,6 +244,7 @@ class WiFiComponent : public Component {
std::string use_address_;
std::vector<WiFiAP> sta_;
std::vector<WiFiSTAPriority> sta_priorities_;
WiFiAP selected_ap_;
bool fast_connect_{false};