ESPHOME deepsleep + OTA
ESPHOME deepsleep + OTA …. jak to ugryźć?
Opiszę to ma przykładzie mojego czujnika BME/AHT wraz z zasilaniem z ogniwa LiION i ładowarką.
Mamy tu kod standardowego czujnika, który po wybudzeniu wykonuje odczyt i wysyła go do Home Assistant przez 10 sekund i idzie spać na 890 sekund, co w sumie daje nam 15 minut.
Skrypt YAML ESPHOME:
substitutions: device_name: Czujnik_AHTesphome: name: czujnik-aht friendly_name: Czujnk_AHT on_boot: priority: -100.0 then: - delay: 1s - script.execute: test_otaesp8266: board: nodemcuv2api: encryption: key: "NASZ KLUCZ API"ota: password: "NASZ KLUCZ OTA" safe_mode: Truewifi: ssid: !secret wifi_ssid password: !secret wifi_password ap: ssid: "Czujnik-AHT AP" password: "HASLO DO AP"captive_portal:logger:i2c: sda: GPIO5 scl: GPIO4 scan: true id: i2c_busstatus_led: pin: GPIO2binary_sensor: - platform: status name: Status - platform: homeassistant id: czujnik_aht_otamode entity_id: input_boolean.czujnik_aht_otatext_sensor: - platform: wifi_info ip_address: name: IP ssid: name: SSID mac_address: name: MACsensor: - platform: aht10 i2c_id: i2c_bus address: 0x38 temperature: name: Temperatura accuracy_decimals: 1 humidity: name: Wilgotnosc accuracy_decimals: 0 - platform: wifi_signal name: RSSI - platform: adc name: LiION unit_of_measurement: 'V' accuracy_decimals: 2 pin: GPIO17 filters: - calibrate_linear: - 0.650 -> 2.625 - 0.999 -> 4.155script: - id: test_ota mode: queued then: - logger.log: "Checking OTA Mode" - if: condition: binary_sensor.is_on: Czujnik_aht_otamode then: - logger.log: 'OTA Mode ON' - deep_sleep.prevent: deep_sleep_handler else: - logger.log: 'OTA Mode OFF' - delay: 2s - script.execute: test_otadeep_sleep: id: deep_sleep_handler run_duration: 10s sleep_duration: 890sbutton: - platform: restart name: RestartDodatkowo można zauważyć wpis dotyczący OTA:
on_boot: priority: -100.0 then: - delay: 1s - script.execute: test_otabinary_sensor: - platform: homeassistant id: garaz_aht_otamode entity_id: input_boolean.czujnik_aht_otascript: - id: test_ota mode: queued then: - logger.log: "Checking OTA Mode" - if: condition: binary_sensor.is_on: czujnik_aht_otamode then: - logger.log: 'OTA Mode ON' - deep_sleep.prevent: deep_sleep_handler else: - logger.log: 'OTA Mode OFF' - delay: 2s - script.execute: test_otabutton: - platform: restart name: RestartWidzimy 'script:’, który odpowiada za sprawdzenie czy w HA jest włączony przełącznik OTA, wykorzystuje on do tego 'binary_sensor:’ i ty musimy zapamiętać: entity_id: input_boolean.czujnik_aht_ota gdyż będzie nam potrzebne w HA do dodania Pomocnika. Jak widać skrypt jest sprawdzany przy każdym starcie ESP i gdy zobaczy aktywne OTA nie pozwala wejść w deepsleep. Dodatkowo mamy przycisk 'Restart’.
Co ważne przy pierwszej kompilacji i wgraniu programu do ESP ważne aby parametr ’deep_sleep:run_duration: 10s’ ustawić na powiedzmy 600s dzięki temu prawidłowo dodamy integrację w HA.
Po kolei….
- Piszemy nasz program wraz z wisami dotyczącymi OTA, pamiętamy o wydłużeniu czasu 'run_duration:’.
- Wgrywamy nasz program do ESP.
- Po uruchomieniu dodajemy Integrację w Home Assistant.
- Dodajemy 'Pomocnika’ w HA gdzie identyfikator encji będzie taki jak w naszym programie 'input_boolean.czujnik_aht_ota’.
- Uruchamiamy 'Pomocnika’ i czekamy aż nasze ESP będzie w trybie OTA
- Następnie modyfikuję 'run_duration:’ na właściwy i wgrywam program przez WiFi.
- Po wgraniu programu wyłączam 'Pomocnika’ i w integracji klikam przycisk Reset.
- I mamy działający ESP z deepsleep i OTA
Posiadam kilka PCB z nadwyżek do czujników. Gdyby ktoś potrzebował złożone lub samo PCB zapraszam do kontaktu.
Pozdrawiam Hymek

