1
0
mirror of https://github.com/esphome/esphome.git synced 2025-10-26 12:43:48 +00:00
This commit is contained in:
J. Nick Koston
2025-10-21 13:25:51 -10:00
parent 9b1ac8f83d
commit f9fe2d21e5
3 changed files with 17 additions and 10 deletions

View File

@@ -378,18 +378,19 @@ async def to_code(config):
# Track if any network uses Enterprise authentication
has_eap = False
# Build all WiFiAP objects
# Initialize FixedVector with the count of networks
networks = config.get(CONF_NETWORKS, [])
if networks:
wifi_aps = []
cg.add(var.init_sta(len(networks)))
def add_sta(ap, network):
ip_config = network.get(CONF_MANUAL_IP, config.get(CONF_MANUAL_IP))
cg.add(var.add_sta(wifi_network(network, ap, ip_config)))
for network in networks:
if CONF_EAP in network:
has_eap = True
ip_config = network.get(CONF_MANUAL_IP, config.get(CONF_MANUAL_IP))
wifi_aps.append(wifi_network(network, WiFiAP(), ip_config))
# Set all WiFi networks at once
cg.add(var.set_stas(wifi_aps))
cg.with_local_variable(network[CONF_ID], WiFiAP(), add_sta, network)
if CONF_AP in config:
conf = config[CONF_AP]

View File

@@ -330,8 +330,13 @@ float WiFiComponent::get_loop_priority() const {
return 10.0f; // before other loop components
}
void WiFiComponent::set_stas(const std::initializer_list<WiFiAP> &aps) { this->sta_ = aps; }
void WiFiComponent::set_sta(const WiFiAP &ap) { this->set_stas({ap}); }
void WiFiComponent::init_sta(size_t count) { this->sta_.init(count); }
void WiFiComponent::add_sta(const WiFiAP &ap) { this->sta_.push_back(ap); }
void WiFiComponent::set_sta(const WiFiAP &ap) {
this->clear_sta();
this->init_sta(1);
this->add_sta(ap);
}
void WiFiComponent::clear_sta() { this->sta_.clear(); }
void WiFiComponent::save_wifi_sta(const std::string &ssid, const std::string &password) {
SavedWifiSettings save{}; // zero-initialized - all bytes set to \0, guaranteeing null termination

View File

@@ -219,7 +219,8 @@ class WiFiComponent : public Component {
void set_sta(const WiFiAP &ap);
WiFiAP get_sta() { return this->selected_ap_; }
void set_stas(const std::initializer_list<WiFiAP> &aps);
void init_sta(size_t count);
void add_sta(const WiFiAP &ap);
void clear_sta();
#ifdef USE_WIFI_AP