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_AHT
esphome:
name: czujnik-aht
friendly_name: Czujnk_AHT
on_boot:
priority: -100.0
then:
- delay: 1s
- script.execute: test_ota
esp8266:
board: nodemcuv2
api:
encryption:
key: "NASZ KLUCZ API"
ota:
password: "NASZ KLUCZ OTA"
safe_mode: True
wifi:
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_bus
status_led:
pin: GPIO2
binary_sensor:
- platform: status
name: Status
- platform: homeassistant
id: czujnik_aht_otamode
entity_id: input_boolean.czujnik_aht_ota
text_sensor:
- platform: wifi_info
ip_address:
name: IP
ssid:
name: SSID
mac_address:
name: MAC
sensor:
- 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.155
script:
- 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_ota
deep_sleep:
id: deep_sleep_handler
run_duration: 10s
sleep_duration: 890s
button:
- platform: restart
name: Restart
Dodatkowo można zauważyć wpis dotyczący OTA:
on_boot:
priority: -100.0
then:
- delay: 1s
- script.execute: test_ota
binary_sensor:
- platform: homeassistant
id: garaz_aht_otamode
entity_id: input_boolean.czujnik_aht_ota
script:
- 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_ota
button:
- platform: restart
name: Restart
Widzimy '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