13#ifdef USE_ESP32_FRAMEWORK_ARDUINO
23#if defined(USE_ESP_IDF) && defined(USE_WIFI_WPA2_EAP)
24#if (ESP_IDF_VERSION_MAJOR >= 5) && (ESP_IDF_VERSION_MINOR >= 1)
25#include <esp_eap_client.h>
32#include <ESP8266WiFi.h>
33#include <ESP8266WiFiType.h>
35#if defined(USE_ESP8266) && USE_ARDUINO_VERSION_CODE < VERSION_CODE(2, 4, 0)
37#include <user_interface.h>
45#include "cyw43_country.h"
46#include "pico/cyw43_arch.h"
105#ifdef USE_WIFI_WPA2_EAP
125 void set_ssid(
const std::string &ssid);
129#ifdef USE_WIFI_WPA2_EAP
136 const std::string &
get_ssid()
const;
139#ifdef USE_WIFI_WPA2_EAP
151#ifdef USE_WIFI_WPA2_EAP
162 WiFiScanResult(
const bssid_t &bssid, std::string ssid, uint8_t channel, int8_t rssi,
bool with_auth,
bool is_hidden);
169 const std::string &
get_ssid()
const;
252 void save_wifi_sta(
const std::string &ssid,
const std::string &password);
256 void setup()
override;
264 void loop()
override;
269#ifdef USE_WIFI_11KV_SUPPORT
285 if (it.bssid == bssid)
292 if (it.bssid == bssid)
299 if (it.bssid == bssid) {
367#ifdef USE_ESP32_FRAMEWORK_ARDUINO
411#ifdef USE_WIFI_11KV_SUPPORT
449 TEMPLATABLE_VALUE(std::string, ssid)
450 TEMPLATABLE_VALUE(std::string, password)
451 TEMPLATABLE_VALUE(
bool, save)
452 TEMPLATABLE_VALUE(uint32_t, connection_timeout)
454 void play(Ts...
x)
override {
455 auto ssid = this->ssid_.value(
x...);
456 auto password = this->password_.value(
x...);
458 if (this->connecting_)
468 this->
new_sta_.set_password(password);
470 this->
old_sta_ = global_wifi_component->get_sta();
474 this->connecting_ =
true;
478 if (this->save_.value(
x...)) {
486 this->
set_timeout(
"wifi-connect-timeout", this->connection_timeout_.value(
x...), [
this]() {
487 this->connecting_ = false;
489 global_wifi_component->disable();
490 global_wifi_component->save_wifi_sta(old_sta_.get_ssid(), old_sta_.get_password());
491 global_wifi_component->enable();
493 this->error_trigger_->trigger();
500 void loop()
override {
501 if (!this->connecting_)
506 this->connecting_ =
false;
518 bool connecting_{
false};
virtual void play(Ts... x)=0
bool cancel_timeout(const std::string &name)
Cancel a timeout function.
virtual void loop()
This method will be called repeatedly.
void set_timeout(const std::string &name, uint32_t timeout, std::function< void()> &&f)
Set a timeout function with a unique name.
Base class for all automation conditions.
void trigger(Ts... x)
Inform the parent automation that the event has triggered.
void set_priority(float priority)
const optional< bssid_t > & get_bssid() const
const std::string & get_ssid() const
void set_ssid(const std::string &ssid)
const optional< uint8_t > & get_channel() const
const optional< EAPAuth > & get_eap() const
void set_channel(optional< uint8_t > channel)
const std::string & get_password() const
void set_bssid(bssid_t bssid)
optional< uint8_t > channel_
optional< bssid_t > bssid_
optional< ManualIP > manual_ip_
void set_eap(optional< EAPAuth > eap_auth)
void set_password(const std::string &password)
void set_manual_ip(optional< ManualIP > manual_ip)
float get_priority() const
const optional< ManualIP > & get_manual_ip() const
void set_hidden(bool hidden)
This component is responsible for managing the ESP WiFi interface.
bool is_captive_portal_active_()
Trigger * get_connect_trigger() const
bool error_from_callback_
void add_sta(const WiFiAP &ap)
bool wifi_apply_power_save_()
void set_ap(const WiFiAP &ap)
Setup an Access Point that should be created if no connection to a station can be made.
ESPPreferenceObject pref_
void set_sta(const WiFiAP &ap)
WiFiPowerSaveMode power_save_
bool has_sta_priority(const bssid_t &bssid)
std::string get_use_address() const
void check_connecting_finished()
void save_wifi_sta(const std::string &ssid, const std::string &password)
void load_fast_connect_settings_()
WiFiComponentState state_
void print_connect_params_()
void loop() override
Reconnect WiFi if required.
bool wifi_sta_ip_config_(optional< ManualIP > manual_ip)
void set_enable_on_boot(bool enable_on_boot)
void check_scanning_finished()
float get_sta_priority(const bssid_t bssid)
static int s_wifi_scan_result(void *env, const cyw43_ev_scan_result_t *result)
network::IPAddress get_dns_address(int num)
static void wifi_event_callback(System_Event_t *event)
WiFiComponent()
Construct a WiFiComponent.
std::vector< WiFiScanResult > scan_result_
void wifi_process_event_(IDFWiFiEvent *data)
std::vector< WiFiSTAPriority > sta_priorities_
bool wifi_ap_ip_config_(optional< ManualIP > manual_ip)
void save_fast_connect_settings_()
bool wifi_start_ap_(const WiFiAP &ap)
int32_t get_wifi_channel()
void start_connecting(const WiFiAP &ap, bool two)
network::IPAddress wifi_subnet_mask_()
bool has_saved_wifi_settings_
network::IPAddress wifi_soft_ap_ip()
void set_passive_scan(bool passive)
void wifi_event_callback_(arduino_event_id_t event, arduino_event_info_t info)
network::IPAddress wifi_gateway_ip_()
const std::vector< WiFiScanResult > & get_scan_result() const
static void s_wifi_scan_done_callback(void *arg, STATUS status)
void set_power_save_mode(WiFiPowerSaveMode power_save)
Trigger * connect_trigger_
void set_use_address(const std::string &use_address)
ESPPreferenceObject fast_connect_pref_
void wifi_scan_result(void *env, const cyw43_ev_scan_result_t *result)
network::IPAddress wifi_dns_ip_(int num)
float get_loop_priority() const override
bool wifi_apply_hostname_()
bool wifi_sta_pre_setup_()
network::IPAddresses get_ip_addresses()
Trigger * disconnect_trigger_
std::vector< WiFiAP > sta_
float get_setup_priority() const override
WIFI setup_priority.
void set_output_power(float output_power)
bool is_esp32_improv_active_()
Trigger * get_disconnect_trigger() const
void dump_config() override
optional< float > output_power_
static std::string format_mac_addr(const uint8_t mac[6])
void set_ap_timeout(uint32_t ap_timeout)
void set_sta_priority(const bssid_t bssid, float priority)
void set_fast_connect(bool fast_connect)
bool wifi_apply_output_power_(float output_power)
WiFiSTAConnectStatus wifi_sta_connect_status_()
bool wifi_sta_connect_(const WiFiAP &ap)
bool wifi_mode_(optional< bool > sta, optional< bool > ap)
void set_reboot_timeout(uint32_t reboot_timeout)
bool can_proceed() override
network::IPAddresses wifi_sta_ip_addresses()
uint8_t num_ipv6_addresses_
bool wifi_scan_start_(bool passive)
bool handled_connected_state_
void wifi_scan_done_callback_()
void setup() override
Setup WiFi interface.
bool check(Ts... x) override
void play(Ts... x) override
void play(Ts... x) override
bool check(Ts... x) override
const std::string & get_ssid() const
void set_priority(float priority)
uint8_t get_channel() const
bool get_with_auth() const
const bssid_t & get_bssid() const
WiFiScanResult(const bssid_t &bssid, std::string ssid, uint8_t channel, int8_t rssi, bool with_auth, bool is_hidden)
void set_matches(bool matches)
bool matches(const WiFiAP &config)
bool get_is_hidden() const
bool operator==(const WiFiScanResult &rhs) const
float get_priority() const
std::array< IPAddress, 5 > IPAddresses
std::array< uint8_t, 6 > bssid_t
struct esphome::wifi::SavedWifiSettings PACKED
@ ERROR_NETWORK_NOT_FOUND
@ WIFI_COMPONENT_STATE_DISABLED
WiFi is disabled.
@ WIFI_COMPONENT_STATE_AP
WiFi is in AP-only mode and internal AP is already enabled.
@ WIFI_COMPONENT_STATE_STA_CONNECTING
WiFi is in STA(+AP) mode and currently connecting to an AP.
@ WIFI_COMPONENT_STATE_OFF
Nothing has been initialized yet.
@ WIFI_COMPONENT_STATE_STA_SCANNING
WiFi is in STA-only mode and currently scanning for APs.
@ WIFI_COMPONENT_STATE_STA_CONNECTING_2
WiFi is in STA(+AP) mode and currently connecting to an AP a second time.
@ WIFI_COMPONENT_STATE_COOLDOWN
WiFi is in cooldown mode because something went wrong, scanning will begin after a short period of ti...
@ WIFI_COMPONENT_STATE_STA_CONNECTED
WiFi is in STA(+AP) mode and successfully connected.
WiFiComponent * global_wifi_component
Providing packet encoding functions for exchanging data with a remote host.
esp_eap_ttls_phase2_types ttls_phase_2
Struct for setting static IPs in WiFiComponent.
network::IPAddress static_ip
network::IPAddress dns1
The first DNS server. 0.0.0.0 for default.
network::IPAddress gateway
network::IPAddress dns2
The second DNS server. 0.0.0.0 for default.
network::IPAddress subnet