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);

sudo apt update && sudo apt install wiringpi

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

git clone https://github.com/jmichault/flash_cc2531.git
Pobieranie flash_cc2531

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

cd flash_cc2531

I odpalamy skrypt sprawdzający ID chipu:

./cc_chipid

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:

wget https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_Home_1.2/bin/default/CC2531_DEFAULT_20190608.zip

Rozpakowujemy pobrane archiwum:

unzip CC2531_DEFAULT_20190608.zip

Czas na kasowanie flasha w cc2531

./cc_erase

I można flashować naszego dongla

./cc_write CC2531ZNP-Prod.hex

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:

sudo curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

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

I sama instalacja:

sudo apt-get install -y nodejs git make g++ gcc

Następnie klonujemy sobie z githuba zigbee2mqtt:

sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt

Ustawiamy właściciela na sklonowane pliki:

sudo chown -R pi:pi /opt/zigbee2mqtt

Przechodzimy do katalogu /opt/zigbee2mqtt/

cd /opt/zigbee2mqtt

I instalujemy zależności:

npm ci

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

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

nano /opt/zigbee2mqtt/data/configuration.yaml

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:

sudo apt update && sudo apt install mosquitto

Ustawiamy npm jako usługę:

sudo nano /etc/systemd/system/zigbee2mqtt.service

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

[Unit]
Description=zigbee2mqtt
After=network.target

[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

Uruchamiamy sobie nową usługę:

sudo systemctl start zigbee2mqtt

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

systemctl status zigbee2mqtt.service

I na koniec aktywacja usługi:

sudo systemctl enable zigbee2mqtt.service

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:

sudo journalctl -u zigbee2mqtt.service -f

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:

sudo apt update && sudo apt install python3

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:

git clone https://github.com/stas-demydiuk/domoticz-zigbee2mqtt-plugin.git zigbee2mqtt

Restartujemy usługę domoticz:

sudo service domoticz restart

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:

/opt/zigbee2mqtt/data/log/

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).

Możesz również polubić…

31 komentarzy

  1. gomens pisze:

    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. Rad pisze:

    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?

    • Wojtek pisze:

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

  3. Rad pisze:

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

    • Wojtek pisze:

      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. Al pisze:

    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. Al pisze:

    Udało się 😉

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

  6. Piotr S pisze:

    po zainstalowaniu zigbee2mqtt i próbie uruchomienia dostaję taki komunikat
    pi@DOMOTICZ:~ $ 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. Piotr S pisze:

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

    pi@DOMOTICZ:~ $ 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}’

  8. Jacek pisze:

    Po co ta przejściówka, bezpośrednio kabelkami nie da się podłączyć?

    • Wojtek pisze:

      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ę.

  9. Ramirez pisze:

    Da się to połączyć z aplikacją Tuya, czy potrzebna jest dedykowana bramka?

  10. Arek pisze:

    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???

  11. dudi pisze:

    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ć.

  12. Arek pisze:

    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]

  13. Paweł pisze:

    Znalazł Pan rozwiązanie? Mam identyczną sytuację

  14. Paweł pisze:

    Chodzi mi o komentarz Pana Piotra S

  15. webster21 pisze:

    probuje sflaszowac za pomoca pi2 lecz nic nie idzie, zwraca mi urzadzenie id =0000 oco kaman?

  16. webster21 pisze:

    Bus 001 Device 005: ID 0451:16ae Texas Instruments, Inc.

  17. webster21 pisze:

    probowalem, nic nie pomogło. nawet apt upgrade nic nie pomogl

  18. webster21 pisze:

    no i mam – wina przewodu, chinskie badziewie. Zrobilem wlasny z przewodów od płytki stykowej i bangla.

  19. Jacek pisze:

    Czy z urządzeniami Tuya Zigbee 3.0 będzie działało?

  20. Jacek pisze:

    Co zrobić jak nie chce się pojawić dongel w zakładce własne? W urządzeniach jest widoczny

  1. 08.07.2020

    […] Jako dobry przykład mogę polecić wpis na temat ZigBee + Raspberry. […]

Leave a Reply

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