Raspberry i Banana Pi

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

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

Wojtek

Zobacz komentarze

  • 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

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

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

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

  • Udało się ;)

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

  • 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

    • Zacznij od sprawdzenia logów w domoticzu, a później /var/logs/ i logi w raspbianie

  • 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}'

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

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

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

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

Ostatnie posty

Szybka naprawa pilota zamka centralnego Volvo P2

W tym krótkim wpisie opiszę prostą i szybką naprawę irytującej usterki kluczyka-pilota Volvo V70 z…

6 dni temu

Nieudana naprawa i udany przeszczep – Boombox Philips

Mamy w domu dość wiekowy (2012) Boombox Philips, model AZ385/12 używany przez dzieci głównie jako…

2 tygodnie temu

Tani moduł IoT z kamerką ESP32 CAM – pierwsze uruchomienie

Mega tanie, bezprzewodowe moduły Internet of Things na dobre zadomowiły się w naszych sieciach. Od…

7 miesięcy temu

Aktualizacja oprogramowania w stacji lutowniczej AiXun T3A

Pewnie nie każdy posiadacz tytułowej stacji lutowniczej wie, że posiada ona możliwość aktualizacji firmware'u. Producent…

8 miesięcy temu

Programator USB AVR ISP z Arduino Nano

Jakiś czas temu, przeglądając Aliexpress natknąłem się na ciekawy shield do Arduino Nano. Według opisu…

8 miesięcy temu

Tester elementów elektronicznych na atmega – aktualizacja firmware’u

W mailach i komentarzach kilka razy przewijała się prośba o ten wpis. Chodzi o aktualizację…

9 miesięcy temu