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:
@@ -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};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user