Nieprzypadkowo się mówi, że tymczasowe rozwiązania często stają się rozwiązaniami stałymi, i to nie tylko z powodu przyzwyczajenia. I tak właśnie było z dzwonkiem na furtce – po przeprowadzce, by był tymczasowy dzwonek, wykorzystałem istniejący przycisk, do którego doprowadziłem zasilanie 5V i dodałem najzwyklejszy buzzer (brzęczyk), który sobie popiskiwał, gdy ktoś nacisnął przycisk, tym samym zamykając obwód. Proste, ale skuteczne, bo nawet swój system zasilania awaryjnego posiadał, w postaci układu z akumulatorkiem 18650. W końcu jednak nadeszła pora, by brzęczyk był bardziej smart.
Inteligenty dzwonek na bazie ESP8266, ESPHome i Home Assistant
Uznałem, że skoro w znajdującej się przy „brzęczyku” szafce od bezpieczników mam i tak układ ESP8266, który odpowiada za odczytywanie liczników (wsparty modułem LM393 dla licznika prądu, i CC1101 dla licznika wody), to właściwie czemu nie wykorzystać tego ESP8266 również do obsługi dzwonka, bo w końcu wystarczy dodać buzzer (brzęczyk) oraz podłączyć przycisk.
Szybko jednak się okazało, że to niekoniecznie będzie takie proste, bo układ CC1101 to SPI, a więc zabrał całkiem pokaźną liczbę dostępnych GPIO, a do tego nie każdy GPIO może być dowolnie wykorzystywany. Na szczęście chwila czytania dokumentacji i udało się wytypować dwa GPIO, które można było wykorzystać. I tak po krótkiej chwili i kilku testach, w Home Asisstant pojawił się nowy „inteligentny dzwonek”, bazujący na ESPHome:
Całego kodu, jak i wszystkich automatyzacji nie będę pokazywał, bo wdrożyłem tu kilka mechanizmów dostosowanych do swoich potrzeb i możliwości (np. opcje związane z kamerą i rozbudowanymi powiadomieniami, działającymi zależnie od dodatkowych czynników/warunków). Natomiast pokażę niezbędne elementy, by taki „smart dzwonek” przygotować.
Standardowo, w kodzie będę korzystał ze zdefiniowanych nazw, a więc:
substitutions:
device_name: esph04 # ${device_name}
friendly_name: ESPH04 # ${friendly_name}
device_id: esph04 # ${device_id}
device_description: "Dzwonek"
Z racji tego, że to ESP8266, a nie ESP32, to dodałem obsługę zapisywania ustawień w pamięci układu, co 30 minut, by też nie obciążać zbytnio pamięci:
esp8266:
board: nodemcuv2
restore_from_flash: true
preferences:
flash_write_interval: 30min
A skoro to dzwonek, to musi być buzzer, czyli brzęczyk, oraz kod do jego obsługi:
output:
- platform: esp8266_pwm
pin: D8
id: ${device_id}_buzzer_output
rtttl:
output: ${device_id}_buzzer_output
Jak już napisałem wcześniej, w GPIO za bardzo nie mogłem grymasić, więc wziąłem, co było, czyli w tym przypadku pin D8, do którego podłączyłem zasilanie buzzera (+), oraz pin GND, który poszedł do „minusa” na buzzerze. Dodałem też moduł „rtttl”, bo zamiast zwyczajnie piszczeć, będzie muzyczka. Jak szaleć, to szaleć… ;-)
Dalej wirtualny przycisk, którego wirtualne naciśnięcie powoduje odtworzenie wybranej melodyjki. Dla przykładu niech to będzie Take On Me:
button:
- platform: template
name: "${friendly_name} Buzzer Button"
id: ${device_id}_buzzer_button
on_press:
- rtttl.play: 'TakeOnMe:d=4,o=4,b=160:8f#5,8f#5,8f#5,8d5,8p,8b,8p,8e5,8p,8e5,8p,8e5,8g#5,8g#5,8a5,8b5,8a5,8a5,8a5,8e5,8p,8d5,8p,8f#5,8p,8f#5,8p,8f#5,8e5,8e5,8f#5,8e5,8f#5,8f#5,8f#5,8d5,8p,8b,8p,8e5,8p,8e5,8p,8e5,8g#5,8g#5,8a5,8b5,8a5,8a5,8a5,8e5,8p,8d5,8p,8f#5,8p,8f#5,8p,8f#5,8e5,8e5'
I rzecz dla mnie ważna, czyli wirtualny przełącznik, za pomocą którego mogę zarządzać, czy ESP8266 ma sygnalizować naciśnięcie przycisku dzwonka, czy ma działać w trybie cichym, a obsługą sygnalizacji zajmie się już Home Assistant:
switch:
- platform: template
name: "${friendly_name}: Bell ESPH Switch"
id: ${device_id}_bell_esph_switch
icon: "mdi:bell-circle-outline"
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
Bo całość jest tak pomyślana, by ESP8266 z ESPHome mógł sygnalizować, że ktoś dzwoni przy furtce niejako samodzielnie, nawet gdyby z jakiegoś powodu serwer z Home Assistant był niedostępny. A jednocześnie mogę za pomocą przełącznika przełączyć układ w swego rodzaju tryb cichy.
No i tak dochodzimy do najważniejszego elementu w przypadku dzwonka, czyli obsługi przycisku dzwonka. Tym razem fizycznego, do czego przyda się moduł „binary_sensor”:
binary_sensor:
- platform: status
name: "${friendly_name} Status"
- platform: gpio
pin:
number: GPIO1 # TX
inverted: true
mode:
input: true
pullup: true
name: "${friendly_name} Bell Button"
id: ${device_id}_bell_btn
icon: "mdi:bell-circle"
filters:
- delayed_on: 10ms
- delayed_off: 30s
on_press:
then:
- if:
condition:
- switch.is_on: ${device_id}_bell_esph_switch
then:
- button.press: ${device_id}_buzzer_button
Zasada działania jest prosta, czyli przycisk podłączyłem do portu GPIO1 (TX), bo akurat był jeszcze dostępny, do tego pozwalał na wykorzystanie w takim celu, i masy (GND), co powoduje zamknięcie obwodu w momencie naciśnięcia przycisku dzwonka i sensor staje się aktywny, a więc „ktoś dzwoni”. Zamiast „on_press” można użyć „on_release”.
Z rzeczy istotnych, to jest tu zastosowany filtr „delayed_on” ustawiony na 10 milisekund, by eliminować „niby naciśnięcia przycisku”, powodowane przez różne zakłócenia. U mnie 10 milisekund się sprawdza, ale w razie potrzeby można dać dłuższy czas. Filtr „delayed_off” natomiast ma nawet nie tyle dać czas, by na pewno wszystkie automatyzacje zdążyły „zauważyć”, że przycisk został naciśnięty, ile wyeliminować akcje w sytuacji, gdy ktoś w krótkim czasie naciśnie przycisk kilkukrotnie, co jest chyba dość powszechne, a czego w przypadku „inteligentnego dzwonka” raczej nie potrzebujemy.
Dalej – po weryfikacji, czy ESP8266/ESPHome ma bezpośrednio sygnalizować, że ktoś dzwoni, następuje wywołanie wirtualnego przycisku, co powoduje uruchomienie sygnalizacji za pomocą buzzera (brzęczyka).
I jeśli chodzi o podstawy, to właściwie wszystko. Dalej, to już każdy wedle swoich potrzeb może kod rozbudować, czy też dodać np. różnego rodzaju automatyzacje w Home Assistant.
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01