Smart dzwonek, czyli nowe życie zwykłego, przewodowego dzwonka 230V

Wpadłem na pomysł, żeby zrobić powiadomienie, gdy ktoś dzwoni do drzwi, a mnie nie ma w domu. Dodatkowo chciałbym, żeby zewnętrzna kamera robiła zdjęcie i zapisywała je, ewentualnie przesyłał mi na telefon jeśli system nie wykryje niczyjej obecności w domu.

Mam zwykły przewodowy dzwonek na 230V, ale nie chciałbym przerabiać ani dzwonka, ani przycisku przy drzwiach. Mam za to dostęp do kabli w szafce z bezpiecznikami. Przyszło mi do głowy, że mógłbym wykrywać kiedy w kablu płynie prąd – są takie moduły wykrywania napięcia. Ktoś jednak doradził mi, że przecież mogę zautomatyzować sam dzwonek. Że też wcześniej na to nie wpadłem! Najprostsza i dająca najwięcej możliwości opcja.

Od razu wziąłem Sonoff basic, który ostatnio służył mi do sterowania oświetleniem choinki (w końcu mogłem powiedzieć: „OK Google, włącz choinkę”). Napisałem krótki program do sterowania dzwonkiem. No dobrze, może trochę przekombinowałem, ale jak już ma być „inteligentny dzwonek” to niech ma kilka funkcji:

  1. Dzwonek ma dzwonić. Tak, pomimo całej tej elektroniki i sterowania przez internet powinien dzwonić, gdy ktoś tradycyjnie naciska przycisk przy drzwiach 😎
  2. Gdy ktoś naciska przycisk zbyt krótko, powinien dzwonić minimalnie przez określony czas (np. 1 sekunda). Czasem ktoś naciskał przycisk zbyt krótko, żeby ktokolwiek w domu to usłyszał.
  3. Gdy ktoś już zadzwoni, powinien przesłać wiadomość mqtt, dzięki czemu mogę ustawić jakąś automatykę w Home Assistant. Nie przy każdym dzwonku, bo przecież jedna osoba może zadzwonić kilka razy.
  4. Alarm – dodatkowo wymyśliłem sobie, że mogę wysłać zdalnie polecenie przez mqtt, żeby dzwonek zadzwonił. To może wydać się zbędne, ale mam pewne zastosowanie. Zdarza się, że wyjeżdżamy gdzieś, a w domu zostaje moja mama i nie mogę się z nią skontaktować (wyciszony lub rozładowany telefon) – wtedy umówiony znak, na przykład 10 krótkich dzwonków i już wie, że próbuję się z nią skontaktować. Teoretycznie można by to użyć jako alarm – na przykład połączony z czujnikiem dymu.
  5. Aktualizacja OTA, tak na wszelki wypadek, gdybym chciał zmienić parametry.
  6. Zapewnienie, żeby połączenie z wifi czy z brokerem mqtt odbywało się w sposób niezakłócający pracy dzwonka (żadnych delayów, wszystko w tle). Brak sieci != brak dzwonka.

Do Sonoffa wystarczyło przylutować kabelki RX, TX, 3V, GND oraz GPIO14. Łatwiej byłoby z Shelly, które ma wyprowadzone na zewnątrz piny, ale Sonoff był pod ręką.

Przycisk przy drzwiach podłączyłem do GPIO14 (na wszelki wypadek dałem rezystor podciągający, bo dzwonek jest podłączony grubymi przewodami przewidzianymi na 230V), a z drugiej strony GND. Istniejący przycisk Sonoffa (GPIO0)  wykorzystałem jako kontrolny dzwonek (krótkie przyciśnięcie) i reset (przyciśnięty powyżej sekundy). Wbudowana dioda (GPIO13) ma się świecić, gdy ktoś dzwoni. I to wszystko. Wbudowany relay jest na GPIO12.

Komunikaty mqtt:

  • dzwonek/dzwoni – wysyłany przez dzwonek gdy ktoś dzwoni do drzwi, nie częściej niż co 60s.
  • dzwonek/OTA – wysyłany do dzwonka, zawartość payload to nowe firmware.
  • dzwonek/alarm – wysyłam do dzwonka komunikat w formacie „ilosc_dzwonków,długość_dzwonka,długość_przerwy” np. „10,500,500”

Kod źródłowy programu:

W programie korzystam dodatkowo z biblioteki pubsubclient http://imroy.github.io/pubsubclient. Jest to fork znanej biblioteki, której oryginalnie autorem jest Nicholas O’Leary, moim zdaniem łatwiejsza w użyciu i jest wbudowana aktualizacja OTA przez mqtt. Trochę inne API, wiadomości wysyła się bezpośrednio jako String, a w oryginale const char[] i trzeba robić konwersję. Niestety w innym projekcie ten OTA sprawiał mi problemu z inną wersją płytki, ale w ostatnich dniach ktoś zaczął pracować nad OTA do tej „oryginalnej” wersji biblioteki.

Na koniec prosta automatyka w Home Assistant (automations.yaml):

i uruchomienie skryptu, który robi zdjęcie i przesyła maila lub powiadomienie push jeśli nie ma nie w domu.

Napisz odpowiedź

Twój adres e-mail nie zostanie opublikowany.