DYI CC2531 Zigbee Controller voor Domoticz

Voor mijn domotica platform (op basis van domoticz) gebruik ik voornamelijk Zwave+ met een proprietary USB dongle als controller. Dit zit in mijn Raspberry PI 3B+ en werkt als een raket. Echter, zigbee apparatuur zijn doorgaans goedkoper en doen het ook prima. Mindere range, het protocol werkt anders en hoewel dat allemaal minnen zijn, heeft het 1 voordeel: je kunt het zelf in elkaar knutselen en dat is leuk. Dus voor dit project wilde ik graag wat kennis opdoen van Zigbee, MQTT, CC2531, etc. Ik vond hiervoor het project 'zigbee2mqtt', te vinden op: https://www.zigbee2mqtt.io/. Dit heeft ook een domoticz plugin: https://github.com/stas-demydiuk/domoticz-zigbee2mqtt-plugin. En last but not least is hier een Domoticz zigbee2mqtt guide pagina van: https://www.domoticz.com/wiki/Zigbee2MQTT. Alle reden om hier eens op los te gaan dus! De eerste pagina beschrijft een prima artikel, maar is niet overal even duidelijk. Dus ik dacht: laten we eens wat delen! Ik hoop dat je er iets aan hebt!

Hardware

Ik heb de volgende items gebruikt, je kunt beter krijgen, maar ik ga zigbee niet als mijn defacto standaard protocol gebruiken, dit is meer voor de hobby:

  1. Wireless Zigbee CC2531 Sniffer + antenne
  2. CC Debugger
  3. CC2531 downloader cable
  4. Jouw laptop of desktop, met minimaal 2 USB-poorten
  5. Bij voorkeur een dedicated Raspberry PI voor de bridge software

Software

Op basis van bovenstaande hardware heb je de volgende software nodig (Als je andere hardware hebt, kijk dan hier: https://www.zigbee2mqtt.io/information/supported_adapters.html) :

  1. DEFAULT Coordinator firmware voor de CC2531
  2. Flash Programmer software (Non v2!)
  3. CC Debugger driver voor Windows (indien je dit doet op Windows)
Installeer nu softwaretitel 2 en daarna 3. Pak daarna de zip uit stap 1 uit naar een makkelijk te bereiken plaats

Aansluiten

  1. Draai de antenne op de module, als je dat nog niet had gedaan
  2. Plaats het kleine uiteinde van de downloader cable op de sniffer dongle
  3. Plaats het grote uiteinde van de downloader cable in de CC downloader
  4. Plaats de meegeleverde USB-kabel in de CC downloader
  5. Plaats nu de sniffer dongle in je laptop. Het lichtje op de dongle moet fel groen schijnen
  6. Plaats nu uit andere uiteinde van de USB-kabel uit de CC downloader in je laptop. Deze moet ook een groen licht geven. Doet dat het niet (was bij mij ook zo), druk dan 1x op de reset knop, hierna is het licht wel groen

Flashen

  1. Start nu het programma 'Texas Instruments SmartRF Flash Programmer'. Bovenin in het midden zie je je CC2531 module staan. Zo niet, controleer dan eerst of de driver goed geinstalleerd is. Dit kun je - in Windows - zien bij apparaatbeheer (iets met 'cabal CC')
  2. Iets daarboven staat 'What do you want to program?', zorg dat daar 'Program CCxxxx ...' staat
  3. Kies bij 'Flash image' de hex file uit de firmware die je hebt gedownload. Let op: kies NIET de bin file!
  4. Vink daaronder 'Retain IEEE address...' UIT!
  5. Zorg dat 'Actions' staat op: 'Erase, program and verify'
  6. Klik op 'Perform actions' en na enige tijd is het proces klaar
  7. Sluit dit programma

Na enige tijd gaat het groene lichtje op je sniffer dongle uit, dit is OK en dit stuk is nu klaar

Bridge

Nu kan de sniffer dongle informatie uit de lucht halen betreffende zigbee verkeer. Echter, is er niks wat deze informatie kan verwerken. Hiervoor gebruiken we een stuk software genaamd de "Bridge" of "Gateway" software. Dit is significante software, dus dit wil je liever niet op je domoticz machine. Als je geen andere keuze hebt moet je het doen. Als je dit wilt volgen op de originele website, ga je naar: https://www.domoticz.com/wiki/Zigbee2MQTT#Install_the_.28bridge.2Fgateway.29_software. Echter, hier lopen we al gelijk tegen het eerste bezwaar aan: de eerste stap is:
sh sudo curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
Los van het feit dat sh sudo niet werkte in mijn geval (laat sh weg, dan werkt het wel), is nodejs 8 deprecated! Dus je krijgt eerst een grote deprecation warning met de vraag of je dit echt wel wilt, want hiervoor worden geen security updates meer uitgebracht. Uit mijn test blijkt dat je zonder bezwaar 8 kunt vervangen met 12 (wellicht ook hoger, maar op dit moment wordt 12 aangeraden), dus:

  1. Download nodeJS met:
    sudo curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
  2. Na enige tijd is dit klaar en ga je verder met de installatie:
    sudo apt-get install -y nodejs make g++ gcc
  3. Kloon de github repo voor zigbee2mqtt:
    sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
  4. Zet de rechten:
    sudo chown -R pi:pi /opt/zigbee2mqtt
  5. Navigeer naar de aangemaakte map:
    cd /opt/zigbee2mqtt
  6. Installeer de bridge software:
    npm install
    Let op: dit proces duurt wel even
  7. De bridge software moet nog geconfigureerd worden. Type hiervoor:
    sudo nano /opt/zigbee2mqtt/data/configuration.yaml
    Zorg dat de volgende regel als zodanig staat:
    server: 'mqtt://localhost'. Save de wijzigingen en sluit de editor.

Broker

So far so good, maar je hebt nog een stuk software nodig, namelijk: De broker. Dit is 'Mosquitto' voor raspberry pi's en de installatie is simpel. Het is aan te raden dit op dezelfde machine te doen als waar de bridge software staat.

  1. Typ:
    wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
  2. Daarna:
    sudo apt-key add mosquitto-repo.gpg.key
  3. Ga naar de map apt map:
    cd /etc/apt/sources.list.d/
  4. OPTIONEEL (afhankelijk van OS versie) Download de sources file voor mosquitto:
    sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list
  5. Update de apt cache:
    sudo apt-get update
  6. Installeer mosquitto:
    sudo apt-get install mosquitto
  7. Zorg dat je in de cd /opt/zigbee2mqtt map zit:
    cd /opt/zigbee2mqtt
  8. Start de bridge software
    npm start.
    Als het goed gaat zie je iets als:
    Zigbee2MQTT:info  2021-02-03 19:19:46: Logging to console and directory: '/opt/zigbee2mqtt/data/log/2021-02-03.19-19-44' filename: log.txt
    Zigbee2MQTT:info  2021-02-03 19:19:46: Starting Zigbee2MQTT version 1.17.1 (commit #99274c7)
    Zigbee2MQTT:info  2021-02-03 19:19:46: Starting zigbee-herdsman (0.13.59)
    Zigbee2MQTT:info  2021-02-03 19:19:49: zigbee-herdsman started
    Zigbee2MQTT:info  2021-02-03 19:19:49: Coordinator firmware version: '{"meta":{"maintrel":3,"majorrel":2,"minorrel":6,"product":0,"revision":20201127,"transportrev":2},"type":"zStack12"}'
    Zigbee2MQTT:info  2021-02-03 19:19:49: Currently 0 devices are joined:
  9. We hebben er alleen niks aan om deze informatie te zien. Sterker nog, dit moet draaien als service. Dus we moeten een service aanmaken
    sudo nano /etc/systemd/system/zigbee2mqtt.service
  10. Zet daar de volgende code in:
    [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
    Save deze file
  11. Start de service:
    sudo systemctl start zigbee2mqtt
  12. Controleer de status:
    systemctl status zigbee2mqtt.service

Domoticz

Als dit gelukt is, heb je een USB-stick geflashed met zigbee coordinator firmware, deze in een dedicated machine geplaatst, daarop de bridge én broker software geinstalleerd. Goed bezig, maar we zijn er nog niet. We moeten nu nog domoticz klaarmaken hiervoor.

  1. Op de machine die domoticz draait ga je naar de plugins map:
    cd domoticz/plugins
  2. Kloon de zigbee2mqtt plugin:
    git clone https://github.com/stas-demydiuk/domoticz-zigbee2mqtt-plugin.git zigbee2mqtt
  3. Herstart domoticz:
    sudo systemctl restart domoticz.service
  4. Ga nu in de webinterface naar Hardware en voeg "zigbee2mqtt" als hardware toe
  5. Met deze configuratie hoef je alleen de server aan te passen, dat is het IP-adres van de dedicated broker machine. Vul dat in bij 'MQTT Server address' en klik daarna op toevoegen

Als je dit goed hebt gedaan zul je in de Domoticz log een aantal regels voorbij komen als 'Connected to MQTT server IPHIER', en daarna 'Zigbee2mqtt bridge is online' en het gaat voornamelijk om 'Received available devices list from bridge'. Als dit ook zo bij jou is heb je alles goed gedaan!

Nu staat je zigbee2mqtt module echter wel in een 'accept all devices' modus. Als je dit wilt aanpassen, geeft sudo systemctl status zigbee2mqtt je daar alle benodigde info over: 'Set `permit_join` to `false` once you joined all devices.'. Als je dit doet, accepteert hij geen nieuwe devices meer. Hier moet je wel de zigbee2mqtt plugin voor stoppen/starten