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:
- CC2531 z anteną na PCB i zewnętrzną, kabel do programownia – https://bit.ly/2VyQjfU
- CC Debugger, gdyby ktoś jednak chciał kupić – https://bit.ly/3aAOp2H
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:
- za pomocą CC Debuggera – opis na stronie zigbee2mqtt
- z użyciem Raspberry Pi, Arduino i ESP – opis ze strony zigbee2mgtt
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).
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
Obawiam się, że takie układy nie są zgodne z prawem.
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 totrue
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
tofalse
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???
Zajrzyj do logów w domoticzu
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ć.
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]
Znalazł Pan rozwiązanie? Mam identyczną sytuację
Chodzi mi o komentarz Pana Piotra S
probuje sflaszowac za pomoca pi2 lecz nic nie idzie, zwraca mi urzadzenie id =0000 oco kaman?
Nierozpoznane urządzenie, jakiego dokładnie masz dongla USB, co zwraca komenda lsusb?
Bus 001 Device 005: ID 0451:16ae Texas Instruments, Inc.
Zobacz w komentarzach wyżej był podobny problem, ID = ffff, pomogła modyfikacja zmiennej cc_delay_mult
probowalem, nic nie pomogło. nawet apt upgrade nic nie pomogl
no i mam – wina przewodu, chinskie badziewie. Zrobilem wlasny z przewodów od płytki stykowej i bangla.
No na to ciężko byłoby nam wpaść 🙂
Czy z urządzeniami Tuya Zigbee 3.0 będzie działało?
Nie sprawdzałem, ale chyba powinno
Co zrobić jak nie chce się pojawić dongel w zakładce własne? W urządzeniach jest widoczny