Domoticz #4 – budujemy własną bramkę ZigBee

Serce naszego inteligentnego domu, czyli Domoticz na Raspberry Pi, odczytuje już czujniki za pomocą Bluetooth oraz podłączone bezpośrednio do pinów. Czas na ZigBee – najpopularniejszy standard obsługi automatyki domowej o zasięgu do 100 metrów.

Bramka DIY ZigBee – potrzebny sprzęt

Do budowy własnej bramki ZigBee musimy zaopatrzyć się w sniffera tego protokołu z interfejsem USB, polecany to bardzo popularny CC2531 na chipie Texas Instruments:

Do sticka musimy wgrać odpowiedni firmware. Będzie do tego potrzebna przejściówka – kabel do programowania:

Samo programowanie można przeprowadzić za pomocą dedykowanego CC Debuggera (koszt ok. 10$). Druga możliwość (jedyna słuszna 😉 ) to programowanie za pomocą Raspberry Pi, Arduino lub ESP. Jedyna słuszna, bo odpada zakup CC Debuggera.

Dla zainteresowanych linki na aliexpress:

Flashowanie CC2531 za pomocą Raspberry Pi

Jak już wyżej pisałem, do CC2531 musimy wgrać odpowiedni firmware, by dongle pełnił rolę Koordynatora w naszej sieci ZigBee. Poza dedykowanym do tego celu CC Debuggerem, można to zrobić za pomocą Raspberry Pi, Arduino czy ESP. Wystarczy połączyć CC2531 za pomocą 4 kabelków (5 w przypadku Arduino i ESP), odpalić odpowiedni skrypt i wgrać soft. Skoro Domoticz pracuje na RPi, to aż grzech nie wykorzystać malinki do flashowania. Schemat połączenia wygląda następująco:

A tak to wyglądało u mnie:

Sprzętowo mamy to ogarnięte, czas na soft. Najpierw instalujemy wiringpi (o ile nie mamy jeszcze w systemie);

Ściągamy z Githuba flash_cc2531, najlepiej do katalogu domowego:

Pobieranie flash_cc2531

Sprawdźmy teraz, czy dobrze połączyliśmy kabelki między RPi a CC2531, przechodzimy do katalogu z flash_cc2531

I odpalamy skrypt sprawdzający ID chipu:

W odpowiedzi, jak na screenie wyżej, powinniśmy dostać ID=b524.

Kolejny krok to ściągnięcie firmware’u z githuba (wprost do katalogu flash_cc2531:

Rozpakowujemy pobrane archiwum:

Czas na kasowanie flasha w cc2531

I można flashować naszego dongla

Jeśli wszystko przebiegło pomyślnie, to mamy przygotowaną sprzętową stronę naszej bramki. Kabelki do flashowania można oczywiście już odpiąć od Rasberry Pi jak i samą przejściówkę z CC2531.

Powyższego oczywiście sam nie wymyśliłem, podpierałem się opisami ze strony zigbee2mqtt.io, linki do opisów flashowania:

Instalacja oprogramowania do obsługi bramki ZigBee2MQTT w Raspberry Pi

Następny krok to instalacja softu na Raspbianie. Na pierwszy ogień idzie Node.js. Na stronie wiki domoticza jest opisana instalacja w wersji 8.X, na stronie zigbee2mqtt.io jest to wersja 12.X. Generalnie jest już dostępna wersja 14, ale poszedłem za opisem ze strony zigbee2mqtt i zainstalowałem 12:

i dalsza część komunikatów z instalacji repo:

I sama instalacja:

Następnie klonujemy sobie z githuba zigbee2mqtt:

Ustawiamy właściciela na sklonowane pliki:

Przechodzimy do katalogu /opt/zigbee2mqtt/

I instalujemy zależności:

I końcowy ekran ( w międzyczasie mogą pojawić się jakieś warningi):

Sprawdzamy, czy plik konfiguracyjny wygląda jak niżej:

zapis permit_join: true powoduje, że będziemy mogli podłączać nowe czujniki do sieci zigbee. Potrzebujemy jeszcze brokera MQTT, czyli trzeba zainstalować pakiet mosquitto:

Ustawiamy npm jako usługę:

Do nowo tworzonego pliku wklejamy poniższą zawartość:

Uruchamiamy sobie nową usługę:

I sprawdzamy, czy wszystko jest ok (czyli jej status):

I na koniec aktywacja usługi:

Spróbujmy wykryć czujnik, ja użyłem Xiaomi Aqara z pomiarem temperatury, ciśnienia, wilgotności, model WSDCGQ11LM

Czujnik jest sprytny – wysyła dane tylko wtedy, gdy ulegną zmianie. Można też wymusić komunikację, wciskając mały przycisk z boku obudowy, odpalamy wyświetlenie loga:

I patrzymy czy nasza bramka odczytuje dane:

Jest ok, więc czas na obsługę ZigBee przez Domoticza.

Plugin ZigBee2MQTT do Domoticza

Plugin ZigBee2MQTT obsługiwany przez Domoticza jest napisany w Pythonie. Na tą chwilę, najnowsza wersja na Rpi to 3.7, instalujemy więc:

Jeśli korzystamy z Domoticza w wersji Beta, będzie potrzebny pakiet python3-dev. Niezbędna jest też biblioteka libpython w odpowiedniej wersji .

Przechodzimy do folderu /home/rpi/domoticz/plugins i ściągamy wtyczkę do obsługi bramki zigbee2mqtt:

Restartujemy usługę domoticz:

I przechodzimy na stronę www domoticza. Tam wchodzimy w Konfiguracja -> Sprzęt i dodajemy naszą bramkę zigbee2mqtt, ustawienia jak niżej:

Po dodaniu Sprzętu, przechodzimy do zakładki Urządzenia. Powinny się tam ujawnić wykryte czujniki pracujące w sieci Zigbee, jeśli ich nie ma, poczekajmy chwilę aż wyślą dane, lub wymuśmy ich wysłanie (guziczek):

Mimo jednego czujnika Xiaomi Aqara WSDCGQ11LM, mam w Domoticzu kilka pozycji. Są to jakby wirtualne czujniki, które wysyłają pojedyncze dane (np. tylko temperaturę, lub siłę sygnału) lub kombinację danych. Do systemu dodałem czujnik, który wysyła temperaturę, wilgotność i ciśnienie – Temp + Humidity + Baro.

W górnym menu pojawiła się nowa zakładka Własne, skąd możemy przejść do Zigbee2mqtt. Mamy tam kilka zakładek, w tym Devices, gdzie widzimy co jest w naszej sieci Zigbee – Coordinator to nasz usb stick cc2531:

W zakładce Network Map możemy zobaczyć jakie urządzenia są obsługiwane przez Koordynatora. W prawym górnym rogu możemy kliknąć w Allow new zigbee devices to join by zezwolić na automatyczne wykrywanie nowych czujników. Unikalne IEEE adresy obsługiwanych czujników są wpisywane do oglądanego już przez nas pliku /opt/zigbee2mqtt/data/configuration.yaml.

Podsumowanie

Jak widać wyżej, jest z tym chwila pracy (mi zajęło około 30 minut), ale warto z uwagi na znikome koszty takiego rozwiązania.

Jeśli na jakimś etapie instalacji i konfiguracji wystąpią problemy, to jak to w linuksie bywa, najlepiej zajrzeć do logów. Usługa Zigbee2mqtt swoje logi zapisu w ścieżce:

Znajdują się tam foldery z datami i czasem, a w nich plik log.txt z zapisanymi informacjami dotyczącymi m.in. odbierania danych z czujników.

Jeśli wystąpi problem z widocznością plugina zigbee2mqtt w zakładce Sprzęt Domoticza, to polecam zajrzeć do Konfiguracja -> Logi. U mnie np. brakowało pythona w wersji dev (posiadam betę domoticza). Po doinstalowaniu i restarcie usługi plugin był już obsługiwany.

Czujniki z obsługą Zigbee charakteryzują się oszczędnością energii. Dlatego m.in. dane wysyłane są tylko wtedy, gdy ulegną zmianie. W żaden sposób nie przeszkadza to w wykreślaniu czytelnych wykresów historii temperatury czy ciśnienia:

Mam jeszcze kilka innych gadżetów Xiaomi pracujących w sieci Zigbee, które wkrótce opiszę. Następna część będzie poświęcona obsłudze kwadratowego czujnika Xiaomi Mijia z wyświetlaczem temperatury i wilgotności – model LYWSD03MMC. Są one ostatnio bardzo popularne (bo tanie), a pracują inaczej niż opisywane już okrągłe czujniki (LYWSDCGQ).

Wpis “Domoticz #4 – budujemy własną bramkę ZigBee” komentowano 19 razy

  1. Ciekawe i na czasie ale……..
    Najchętniej skorzystałbym z Pana wiedzy w przedmiocie skutecznej walki elektronicznej z balkonowymi szczekaczami o każdej porze dnia i nocy. Sądzę ,że taki skuteczny projekt skopiuje setki tysięcy internautów, w nadziei na spokojny sen , nieprzerwany o 5 rano przez szczekającego kundla na balkonie, którego ciężko dostrzec gołym okiem.
    Liczymy na Pana

  2. Jak zawsze świetnie opisane. Zastanawiałem się nad bramką Xiaomi w połączeniu z domoticzem ale chyba pójdę w stronę Twojego rozwiązania tylko zakupie moduł cc2531 z anteną. Pytanie od laika: czy w Domoticzu po podłączeniu czujnikow zigbee pojawia się jakaś mapa ich połączeń? Tak by można widzieć które urządzenie jest ruterem a które urządzeniem końcowym?

    • Tak, jest mapa, wspominałem o tym: W zakładce Network Map możemy zobaczyć jakie urządzenia są obsługiwane przez Koordynatora.

  3. Super. Dziękuję.
    Jeszcze chciałbym zapytać jak z zasięgiem tego modułu cc2531w wersji bez anteny? Czy w domu jednorodzinnym da radę?

    • W domu jednorodzinnym zastosowałbym jednak wersję z anteną zewnętrzną. Stropy i ściany nie pomagają w propagacji sygnału. Robiłem testy z jednym stropem (drewnianym + płyta GK) i czujniki oddalone o ok. 10 metrów – działa bez zarzutu.

  4. Cześć,
    spiąłem wszystko u siebie i cały czas otrzymuję ID = ffff.

    Multimetrem upewniłem się czy przewody i przejściówki są ok, i czy piny na cc2531 mają kontakt z pinami na RBP.

    Wszystko wydaje się być podpięte właściwie a coś jednak jest nie tak. Czy ktoś z Was miał podobny problem?

  5. Udało się 😉

    Kombinowałem ze zmienną cc_delay_mult i w końcu przy wartości 91 otrzymałem odpowiedź ID = b524

  6. po zainstalowaniu zigbee2mqtt i próbie uruchomienia dostaję taki komunikat
    [email protected]:~ $ sudo systemctl start zigbee2mqtt
    Failed to start zigbee2mqtt.service: Unit zigbee2mqtt.service failed to load properly: Bad message.
    See system logs and ‘systemctl status zigbee2mqtt.service’ for details.

    prośba o pomoc, nie mogę odpalić zigbee z domoticzu

  7. uruchomiłem usługę zigbee2mqtt, w domoticzu też ją widzę. Niestety nie widzę czujnika temperatury

    [email protected]:~ $ sudo journalctl -u zigbee2mqtt.service -f
    — Logs begin at Thu 2020-07-23 19:17:01 BST. —
    lip 23 19:51:08 DOMOTICZ npm[514]: zigbee2mqtt:info 2020-07-23 19:51:08: Coordinator firmware version: ‘{“type”:”zStack12″,”meta”:{“transportrev”:2,”product”:0,”majorrel”:2,”minorrel”:6,”maintrel”:3,”revision”:20190608}}’
    lip 23 19:51:08 DOMOTICZ npm[514]: zigbee2mqtt:info 2020-07-23 19:51:08: Currently 0 devices are joined:
    lip 23 19:51:08 DOMOTICZ npm[514]: zigbee2mqtt:warn 2020-07-23 19:51:08: permit_join set to true in configuration.yaml.
    lip 23 19:51:08 DOMOTICZ npm[514]: zigbee2mqtt:warn 2020-07-23 19:51:08: Allowing new devices to join.
    lip 23 19:51:08 DOMOTICZ npm[514]: zigbee2mqtt:warn 2020-07-23 19:51:08: Set permit_join to false once you joined all devices.
    lip 23 19:51:08 DOMOTICZ npm[514]: zigbee2mqtt:info 2020-07-23 19:51:08: Zigbee: allowing new devices to join.
    lip 23 19:51:09 DOMOTICZ npm[514]: zigbee2mqtt:info 2020-07-23 19:51:09: Connecting to MQTT server at mqtt://localhost
    lip 23 19:51:09 DOMOTICZ npm[514]: zigbee2mqtt:info 2020-07-23 19:51:09: Connected to MQTT server
    lip 23 19:51:09 DOMOTICZ npm[514]: zigbee2mqtt:info 2020-07-23 19:51:09: MQTT publish: topic ‘zigbee2mqtt/bridge/state’, payload ‘online’
    lip 23 19:51:09 DOMOTICZ npm[514]: zigbee2mqtt:info 2020-07-23 19:51:09: MQTT publish: topic ‘zigbee2mqtt/bridge/config’, payload ‘{“version”:”1.14.2″,”commit”:”b91b456″,”coordinator”:{“type”:”zStack12″,”meta”:{“transportrev”:2,”product”:0,”majorrel”:2,”minorrel”:6,”maintrel”:3,”revision”:20190608}},”log_level”:”info”,”permit_join”:true}’

    • Przyjrzyj się, raster jest dużo mniejszy niż przy standardowych goldpinach, gdzie masz 2,54mm. Po co walczyć ze zbyt dużymi gniazdami goldpinów które wypadają jak za kilka złotych masz wygodną przejściówkę.

  8. Wszystko super opisane krok po kroku, wraz z zrzutami ekranu. Dobrze sie czyta a jeszcze lepiej korzysta 🙂 Zrobiłem wszystko jak w instrukcji, żadnych błędów a jednak nie mogę w Domoticzu ustawić nowego urządzenia. W ogóle go nie widzi, gdzieś popełniłem błąd. Jak zdiagnozować błąd???

  9. Witam Serdecznie.
    Postępowałem zgodnie z instrukcja i po wydaniu komendy
    sudo journalctl -u zigbee2mqtt.service -f widzę odczyty temperatur wilgotności itp.
    Niestety w Domoticzu coś nie bardzo chce pokazać mi te dane.
    Poniżej przedstawiam logi z domoticza

    2021-10-15 07:07:05.416 Error: Zigbee2mqtt: (Zigbee2MQTT) failed to load ‘plugin.py’, Python Path used was ‘/home/pi/domoticz/plugins/zigbee2mqtt/:/usr/lib/python37.zip:/usr/lib/python3.7:/usr/lib/python3.7/lib-dynload:/usr/local/lib/python3.7/dist-packages:/usr/lib/python3/dist-packages:/usr/lib/python3.7/dist-packages’.
    2021-10-15 07:07:05.416 Error: Zigbee2mqtt: (Zigbee2mqtt) Module Import failed, exception: ‘ModuleNotFoundError’
    2021-10-15 07:07:05.416 Error: Zigbee2mqtt: (Zigbee2mqtt) Module Import failed: ‘ Name: DomoticzEx’
    2021-10-15 07:07:05.416 Error: Zigbee2mqtt: (Zigbee2mqtt) Error Line details not available.

    Ktoś coś może doradzić i namierzyć w czym jest problem. Będę bardzo wdzięczny

    P.S. jeśli trzeba zainstalować np. inna wersję Pythona to proszę o komendę, bo komentarz zainstaluj wersje x spowoduje, że będę tydzień siedział przed kompem zastanawiając się jaką komendą ją zainstalować.

  10. Panie Wojtku, czy nie chciałby Pan odpłatnie mi pomóc w kwestii instalowania oprogramowania Zigbee2mqtt? Już nie mam pomysłów co robię źle. Jeśli to możliwe prosze o kontakt: [email protected]

Leave a Reply

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.