diff --git a/esphome/components/wifi/wifi_component.cpp b/esphome/components/wifi/wifi_component.cpp index d717b68340..70dc082e81 100644 --- a/esphome/components/wifi/wifi_component.cpp +++ b/esphome/components/wifi/wifi_component.cpp @@ -210,6 +210,13 @@ void WiFiComponent::loop() { } } +void WiFiComponent::on_safe_shutdown() { + if (this->has_sta()) { + ESP_LOGD(TAG, "Disconnecting from WiFi..."); + this->wifi_disconnect_(); + } +} + WiFiComponent::WiFiComponent() { global_wifi_component = this; } bool WiFiComponent::has_ap() const { return this->has_ap_; } diff --git a/esphome/components/wifi/wifi_component.h b/esphome/components/wifi/wifi_component.h index 64797a5801..c66d5c4e85 100644 --- a/esphome/components/wifi/wifi_component.h +++ b/esphome/components/wifi/wifi_component.h @@ -263,6 +263,9 @@ class WiFiComponent : public Component { /// Reconnect WiFi if required. void loop() override; + /// Safely shutdown WiFi before deep sleep + void on_safe_shutdown() override; + bool has_sta() const; bool has_ap() const; diff --git a/tests/component_tests/deep_sleep/test_deep_sleep_esp8266_wifi.yaml b/tests/component_tests/deep_sleep/test_deep_sleep_esp8266_wifi.yaml new file mode 100644 index 0000000000..44543875bc --- /dev/null +++ b/tests/component_tests/deep_sleep/test_deep_sleep_esp8266_wifi.yaml @@ -0,0 +1,24 @@ +--- +esphome: + name: test_esp8266_wifi_deep_sleep + +esp8266: + board: esp12e + +wifi: + ssid: "test" + password: "test" + +api: + actions: + - action: goto_sleep + variables: + duration_ms: int + then: + - deep_sleep.enter: + id: deep_sleep_1 + sleep_duration: !lambda 'return duration_ms;' + +deep_sleep: + id: deep_sleep_1 + run_duration: 10s \ No newline at end of file