Ik merkte de laatste tijd dat 2 van mijn Xiaomi Aqara motion sensors er regelmatig uitlagen. Dit gebeurde interessant genoeg alleen als ik het uitgaande IP-verkeer van de Xiaomi Gateway in mijn firewall blokkeerde. Op een of andere manier was er dus toch Chinees verkeer nodig om dit werkende te houden. Ik vertrouw de Chinezen niet en ben daarom naar een alternatief gaan zoeken wat ik heb gevonden met het project ‘Zigbee2MQTT’. Hierbij handel ik al mijn Zigbee verkeer lokaal op mijn eigen netwerk af zonder dat ik ergens van afhankelijk ben.
Zigbee2MQTT is open source software waarmee je je Zigbee apparaten via MQTT kunt uitlezen en aansturen. Je kunt dit verder onder andere koppelen met Home Assistant en Domoticz. Op de site van Zigbee2MQTT vind je alle informatie en stappen die je moet volgen om alles werkend te krijgen.
Het komt er normaal gesproken op neer dat je een CC2531 USB sniffer (en eventueel nog een router) van de juiste firmware voorziet.
Vervolgens installeer je de Zigbee2MQTT software op je Raspberry Pi en configureer je deze. Hierna moet je jouw ‘Zigbee’ devices nog pairen met de Zigbee2MQTT software. Hiervoor moet je even tijdelijk ‘permit_join: true’ configureren in je ‘/opt/zigbee2mqtt/data/configuration.yaml’ file.
Tenslotte kun je met de Domoticz Python Plugin je devices automatisch toevoegen aan Domoticz. Volg hiervoor de volgende stappen
- Clone repository in je domoticz plugins folder
cd domoticz/plugins git clone https://github.com/stas-demydiuk/domoticz-Zigbee2MQTT-plugin.git Zigbee2MQTT
- Restart domoticz
- In Domoticz settings controleer dat “Accepteer nieuwe Hardware/Sensoreren’ aan staat.
- Ga naar Instellingen > Hardware en kies item “Zigbee2MQTT”
- Configureer je MQTT server IP-adres en poort en voeg tenslotte je hardware toe aan Domoticz
Tips
- Zorg dat Zigbee22MQTT automatisch opstart met je Raspberry Pi. Zie de handleiding van Zigbee2MQTT hoe je dit doet.
- Pairen kan weleens lastig zijn. Zorg dat in Domoticz dat in je ‘domoticz-Zigbee2MQTT’ plugin de setting ‘Zigbee pairing’ op actief staat. Volg verder de volgende tips:
- Toon logging realtime met shell commando ‘sudo journalctl -u Zigbee2MQTT.service -f’
- Eventueel haal je de batterij even uit het device dat je wilt pairen zodat deze goed is gereset. Dit lijkt vooral nodig te zijn voor de Aqara switches.
- Druk op de reset knop 3 tot 5 seconden totdat de LED oplicht (pairing aanduiding – per device is dat soms wat verschillend)
- Daarna elke 2 seconden even kort de reset knop intikken zodat hij verbinding onderhoudt. Pairing kan soms wel 10 – 15 seconden duren dus gewoon doorgaan
- Indien je in de Zigbee2MQTT log “Message without device!” en “Device incoming” meldingen ziet gewoon even doorgaan met elke 2 seconden even kort de reset knop intikken, totdat je device is toegevoegd (zie logging)
- Opnieuw pairen van Router doe je door power on/power off 3 maal uit te voeren (power on, wacht 2 seconden, power off, herhaal deze cycles 3 maal)
- Eventueel daarna de Zigbee2MQTT even herstarten zodat je het device netjes in de lijst van Zigbee2MQTT ziet terugkomen.
- Als het toch niet is gelukt dit geheel herhalen. Soms helpt het om pair device dichter (< 2 meter) van je Zigbee2MQTT USB stick te brengen en te zorgen dat je volle batterij in je ‘pair-device’ hebt.
- Indien een apparaat wordt herkend als ‘unknown – undefined unknown (EndDevice)’ zul je deze uit je database moeten halen en opnieuw moeten pairen. Volg hiervoor de volgende stappen:
- Stop Zigbee2MQTT (sudo systemctl stop Zigbee2MQTT)
- Verwijder als entries van betreffende id (hexadecimale string van 16 karakters) uit je ‘/opt/zigbee2mqtt/data/database.db’ file. Dit is een tekst-file.
- Verwijder de betreffende entry ook uit je ‘/opt/zigbee2mqtt/data/configuration.yaml’ file
- Start Zigbee2MQTT (sudo systemctl stop Zigbee2MQTT). Indien starten niet lukt haal dan Zigbee2MQTT device even uit je USB poort en start Zigbee2MQTT opnieuw op.
- Pair device opnieuw
- Geef na het pairen het nieuw toegevoegde device een gemakkelijke (friendly_name) in de ‘/opt/Zigbee2MQTT/data/configuration.yaml’ configuratie file (stop eerst Zigbee2MQTT service, rename en restart de Zigbee2MQTT service).
Vergroten bereik
Om het bereik van het Zigbee netwerk te vergroten kun je onder andere routers inzetten. Je kunt het beste routers inzetten met een externe antenne zodat je het bereik aanzienlijk vergroot. Ik raad aan om de site van Zigbee2MQTT goed te volgen hoe je een 220V CC2530 + CC2591 router configureert. Hierna moet je de router pairen vlakbij je main hub (coordinator).
Je kunt de CC2530 + CC2591 router opnieuw pairen door deze snel 3x van stroom te voorzien en dan de stroom er weer afhalen.
Er kunnen maximaal 20 devices direct verbonden zijn met de coordinator USB stick. Elke AC powered CC2530 + CC2591 router kan weer 21 devices verbinden. Je kunt eventueel ook slimme lampen gebruiken als router maar die moeten dan wel altijd op spanning staan.
Netwerk Map
Om te kijken hoe alle Zigbee devices met elkaar verbonden zijn is het handig om een netwerk map te maken. Dit doe je door een mqtt bericht te versturen (publishen) en de output van de Zigbee2MQTT log te verwerken
- Publish het volgende mqtt bericht naar je MQTT broker
topic: "zigbee2mqtt/bridge/networkmap” payload: “graphviz”
Ik heb hiervoor gebruik gemaakt van de command-line van mosquitto:
sudo mosquitto_pub -h 192.168.1.70 -t zigbee2mqtt/bridge/networkmap -m graphviz
Dit kan even (minuut) duren, afhankelijk van het aantal devices dat je hebt toegevoegd.
- Ga naar je Zigbee2MQTT log en je ziet daar een aantal regels toegevoegd. Kopieer dan de tekst vanaf “digraph G” tot en met de laatste “}”
digraph G { node[shape=record]; }
- Paste je bovenstaande regels in deze website. De “circo” engine geeft de mooiste plaatjes.
Je kunt dit alles eventueel ook automatiseren via een web-pagina met de z2mvis tool.
Problemen
Op Tweakers is een levendige forum over Zigbee2MQTT waarin allerlei zaken hierover worden besproken. Als je issues hebt kun je het beste hier even checken.
Na het succesvol installeren van de brievenbus verklikker – motion sensor heb ik het Zigbee/Wifi netwerk verder uitgebreid met PIR elementen en een losse schakelaar op basis van Zigbee. Het heeft gewerkt maar op dit moment stuit ik op een probleem waar ik niet uitkomt.
Het Zigbee netwerk zelf werkt goed maar communiceert niet met Domoticz via MQTT. Ik krijg MQTT niet aan de praat.
Ik probeer 2 keer poort 1883 te koppelen en dan komt MQTT terug met:
Failed to start Mosquitto MQTT
Als ik naar het netwerk/poorten kijk ziet het zo uit
Als ik op fora ga zoeken lijkt het dat ik 2 MQTT sessies op 1883 wil zetten.
Dit zou misschien komen doordat ik Docker geïnstalleerd heb?
Heb jij enig idee hoe ik dit kan voorkomen.
Ik heb weinig ervaring met docker en heb het nooit op die manier geprobeerd. Wellicht dat een van mijn lezers je kan helpen?
Wat geeft het volgende commando voor output?
Kijk verder ook eens in ‘/var/log/mosquitto/mosquitto.log’ of deze aanwijzingen geeft waarom mosquitto niet start.
Henri,
Sorry voor mijn late reactie, maar was niet thuis, zat op het water.
Ik heb je suggesties geprobeerd met dit resultaat.
pi@raspberrypi:~ $ lsof -i -P -n | grep LISTEN
pi@raspberrypi:~ $
pi@raspberrypi:~ $ lsof -i -P -n | grep LISTEN
pi@raspberrypi:~ $ netstat -nlp|grep 1883
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN –
tcp6 0 0 :::1883 :::* LISTEN –
pi@raspberrypi:~ $ /var/log/mosquitto/mosquitto.log
bash: /var/log/mosquitto/mosquitto.log: Toegang geweigerd
Heb je nog andere ideeën of verwijzingen?
Je moet het netstat commando vooraf laten gaan door ‘sudo’.
Je moet de logging ook met sudo rechten bekijken. Wat is de relevante (niet alle!) output van het commando:
Henri, Net als de vorige keer werkt het weer, om voor mij onverklaarbare redenen
Als antwoord op je vraag
geeft dit als resultaat
Als ik de log bekijk met jouw statement
sudo cat /var/log/mosquitto/mosquitto.log
zie ik dit
Dat is toch vreemd
Het lijkt er op dat je mosquitto 2 maal probeert te starten. Wordt het wellicht op de achtergrond al als service gestart?
Ik probeer de map te vinden /opt/Zigbee2MQTT/data/configuration.yaml’ file.
Kan de map niet vinden heb alles draaien op een raspberry 3.
In Linux is het path case-sensitive. Probeer dus eens ‘/opt/zigbee2mqtt/data/configuration.yaml’. Zie ook attached screenshot.
Bedankt. Hoe weet ik op welke usb poort de CC2531 zit, want dat is niet duidelijk.
Ik heb mijn CC2531 geflasht op de manier in de onderstaande link. kreeg geen foutmelding.
Maar wil toch checken of dit goed is gegaan,is daar een mogelijkheid voor?
Want zie in domoticz dat hij bij loading blijft hangen.
Je kunt altijd je log file van zigbee2MQTT raadplegen in:
Om te kijken welke USB poorten allemaal in gebruik zijn kun je het volgende commando uitvoeren:
Top , alleen met pairen sensor krijg ik een foutmelding.
zie log.
info 2020-09-27 19:52:49: MQTT publish: topic ‘zigbee2mqtt/bridge/config’, payload ‘{“commit”:”0cd4607″,”coordinator”:{“meta”:{“maintrel”:3,”majorrel”:2,”minorrel”:6,”product”:0,”revision”:20190608,”transportrev”:2},”type”:”zStack12″},”log_level”:”info”,”network”:{“channel”:11,”extendedPanID”:”0xdddddddddddddddd”,”panID”:6754},”permit_join”:true,”version”:”1.14.4″}’
error 2020-09-27 19:53:06: Failed to execute LQI for ‘Vocht sensor badkamer’
error 2020-09-27 19:53:40: Failed to execute routing table for ‘Vocht sensor badkamer’
info 2020-09-27 19:53:40: Network scan finished
info 2020-09-27 19:53:40: MQTT publish: topic ‘zigbee2mqtt/bridge/networkmap/graphviz’, payload ‘digraph G {
Soms kan het helpen om sensor dichter bij je stick te brengen voor te pairen (indien dit mogelijk is).
Bedankt voor de tip!!
Wai is trouwens de bovenste regel
Dat is je CC2531 (de coordinator van je Zigbee netwerk).
Ik heb het idee dat bereik van de stick minder is dan de xiaomi gateway mijn rookmelder zolder lost connect, dat is jammer.
Zie deze link hoe je je bereik kunt vergroten.
Oke ik zag het ook in je artikel staan.
Maar ik zie ook dat het met een lamp gaat .ik heb ikea en phillips liggen, is dat geen oplossing?
Alles wat niet met batterij wordt gevoed kan in principe als repeater dienst doen. Een Ikea of Philips lamp (aangemeld aan je Zigbee netwerk dan) zou moeten werken.