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 12 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}’

Dodaj komentarz

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