Setting up a Zigbee2mqtt gateway
Setting up a Zigbee2mqtt gateway
Labels: DIY, Electronic, Home, iot, Linux, maker, mqtt, Raspberry PI, zigbee
Here are the steps I performed to setup a Zigbee2mqtt gateway using a CC2530+CC2591 board and a RaspberryPI 3.
My steps were
- My RaspberryPI 3 is running
pi@racknode:~ $ uname -a Linux racknode 4.19.42-v7+ #1219 SMP Tue May 14 21:20:58 BST 2019 armv7l GNU/Linux pi@racknode:~ $ hostnamectl Static hostname: racknode Icon name: computer Machine ID: Boot ID: Operating System: Raspbian GNU/Linux 9 (stretch) Kernel: Linux 4.19.42-v7+ Architecture: arm
- My Zigbee board:
- Flash the Z-Stack coordinator firmware on the Zigbee board
- Install zigbee2mqtt to run on the Raspberry Pi
- Setup a daemon to run zigbee2mqtt
Flash the Z-Stack coordinator firmware on the Zigbee board
- Connect the Zigbee board with the Raspberry (Note: this is the connection schema for flashing the firmware, while normal operation another connection schema is used.)
*) P12 - 12pin connector, P14 - 14 pin connectorName Raspi CC2530+CC2591* 3,3V/VCC Pin01 P12 Pin02 GND Pin39 P12 Pin01 RESET Pin35 P12 Pin03 DC Pin36 P14 Pin04 DD Pin38 P14 Pin05
- Install the wiringPI library
sudo apt-get install wiringpi
- Install git
pi@racknode:~ $ sudo apt-get install git
- Clone the flasher repo
git clone https://github.com/jmichault/flash_cc2531.git
- Test the connection
pi@racknode:~/flash_cc2531 $ ./cc_chipid ID = a524.
- Get the firmware - as mentioned above I need the CC2530+CC2591 version. See
https://github.com/Koenkk/Z-Stack-firmware/tree/master/coordinator/Z-Stack_Home_1.2/bin/default
for the correct version.pi@racknode:~/flash_cc2531 $ wget https://github.com/Koenkk/Z-Stack-firmware/raw/master/ coordinator/Z-Stack_Home_1.2/bin/default/CC2530_CC2591_DEFAULT_20190608.zip
- Extract the archive
pi@racknode:~/flash_cc2531 $ unzip CC2530_CC2591_DEFAULT_20190608.zip Archive: CC2530_CC2591_DEFAULT_20190608.zip inflating: CC2530ZNP-Prod.hex inflating: CC2530ZNP-Prod.bin pi@racknode:~/flash_cc2531 $
- Erase the CC2531 CC2530
pi@racknode:~/flash_cc2531 $ ./cc_erase ID = a524. erase result = 00a6. pi@racknode:~/flash_cc2531 $
- Write the new firmware (takes about 2-3 minutes)
pi@racknode:~/flash_cc2531 $ ./cc_write CC2530ZNP-Prod.hex ID = a524. reading line 15490. file loaded (15497 lines read). writing page 128/128. verifying page 128/128. flash OK. pi@racknode:~/flash_cc2531 $ cd .. pi@racknode:~ $
Install zigbee2mqtt to run on the Raspberry Pi
Steps based onMy steps were
- Connect the Zigbee board with the Raspberry for operation mode
*) P12 - 12pin connectorName Raspi CC2530+CC2591* 3,3V/VCC Pin01 P12 Pin02 GND Pin39 P12 Pin01 TX (R→Z) Pin08 P12 Pin07 RX (R←Z) Pin10 P12 Pin08
- Enable UART and disable UART use for Bluetooth by adding following lines to
/boot/config.txt
pi@racknode:~ $ sudo vi /boot/config.txt enable_uart=1 dtoverlay=pi3-disable-bt
- Disable modem system
sudo systemctl disable hciuart
- Remove the serial console entry from
/boot/cmdline.txt
Beforepi@racknode:~ $ cat /boot/cmdline.txt dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=...
Afterpi@racknode:~ $ cat /boot/cmdline.txt dwc_otg.lpm_enable=0 console=tty1 root=...
- Reboot the Raspberry
- Installing the node.js 10.0 repo and install node.js
pi@racknode:~ $ sudo curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
... and install node.jspi@racknode:~ $ sudo apt-get install -y nodejs
- Clone the zigbee2mqtt repo
pi@racknode:~ $ sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
... and change own topi
pi@racknode:~ $ sudo chown -R pi:pi /opt/zigbee2mqtt
- Install the dependencies
pi@racknode:~ $ cd /opt/zigbee2mqtt prebuild-install WARN install No prebuilt binaries found (target=10.17.0 runtime=node arch=arm libc= platform=linux) make: Entering directory '/opt/zigbee2mqtt/node_modules/zigbee-herdsman/ node_modules/@serialport/bindings/build' CXX(target) Release/obj.target/bindings/src/serialport.o CXX(target) Release/obj.target/bindings/src/serialport_unix.o CXX(target) Release/obj.target/bindings/src/poller.o CXX(target) Release/obj.target/bindings/src/serialport_linux.o SOLINK_MODULE(target) Release/obj.target/bindings.node COPY Release/bindings.node make: Leaving directory '/opt/zigbee2mqtt/node_modules/zigbee-herdsman/ node_modules/@serialport/bindings/build' > serialport@8.0.1 postinstall /opt/zigbee2mqtt/node_modules/zigbee-herdsman/ node_modules/serialport > node thank-you.js Thank you for using serialport! If you rely on this package, please consider supporting our open collective: > https://opencollective.com/serialport/donate npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/ zigbee-herdsman/node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/ fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"}) added 1356 packages from 856 contributors and audited 877179 packages in 220.282s found 3 high severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
- Fix the mentioned issues
pi@racknode:/opt/zigbee2mqtt $ npm audit fix npm WARN Dit e-mailadres wordt beveiligd tegen spambots. JavaScript dient ingeschakeld te zijn om het te bekijken..1 requires a peer of typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || ↵ >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta but ↵ none is installed. You must install peer dependencies yourself. npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/↵ zigbee-herdsman/node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: ↵ wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"}) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.9 (node_modules/fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: ↵ wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"arm"}) updated 2 packages in 52.752s fixed 3 of 3 vulnerabilities in 877319 scanned packages pi@racknode:/opt/zigbee2mqtt $
- Enter your configuration in
/opt/zigbee2mqtt/data/configuration.yaml
vi data/configuration.yaml
Enter your settings# MQTT settings mqtt: # MQTT base topic for zigbee2mqtt MQTT messages base_topic: zigbee2mqtt # MQTT server URL server: 'mqtt://localhost' # MQTT server authentication, uncomment if required: # user: my_user # password: my_password # CC2590 is connected to serial line serial: port: /dev/ttyAMA0 advanced: baudrate: 115200 rtscts: false
- Start zigbee2mqtt
pi@racknode:/opt/zigbee2mqtt $ npm start > zigbee2mqtt@1.7.1 start /opt/zigbee2mqtt > node index.js Logging to directory: '/opt/zigbee2mqtt/data/log/2019-11-30.16-53-43' Starting zigbee2mqtt version 1.7.1 (commit #b459c35) Starting zigbee-herdsman... zigbee-herdsman started Coordinator firmware version: '{"type":"zStack12","meta":{"transportrev":2,↵ "product":0,"majorrel":2,"minorrel":6,"maintrel":3,"revision":20190608}}' Currently 0 devices are joined: `permit_join` set to `true` in configuration.yaml. Allowing new devices to join. Set `permit_join` to `false` once you joined all devices. Zigbee: allowing new devices to join. Connecting to MQTT server at mqtt://xxx.xxx.xxx Connected to MQTT server MQTT publish: topic 'zigbee/bridge/state', payload 'online' MQTT publish: topic 'zigbee/bridge/config', payload '{"version":"1.7.1",↵ "commit":"b459c35","coordinator":{"type":"zStack12","meta":{"transportrev":2,↵ "product":0,"majorrel":2,"minorrel":6,"maintrel":3,"revision":20190608}},↵ "log_level":"info","permit_join":true}'
Setup a daemon to run zigbee2mqtt
based on zigbee2mqtt - 5. (Optional) Running as a daemon with systemctl- Create a zigbee2mqtt service
sudo vi /etc/systemd/system/zigbee2mqtt.service
enter[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
- Verify that it works
pi@racknode:/opt/zigbee2mqtt $ sudo systemctl start zigbee2mqtt pi@racknode:/opt/zigbee2mqtt $ sudo systemctl status zigbee2mqtt ● zigbee2mqtt.service - zigbee2mqtt Loaded: loaded (/etc/systemd/system/zigbee2mqtt.service; disabled; ↵ vendor preset: enabled)
-
Active: active (running) since Tue 2019-12-03 08:35:46 CET; 7s ago Main PID: 626 (npm) Tasks: 23 (limit: 4915) CGroup: /system.slice/zigbee2mqtt.service ├─626 npm ├─643 sh -c node index.js └─644 node index.js Dec 03 08:35:46 racknode systemd[1]: Started zigbee2mqtt. Dec 03 08:35:50 racknode npm[626]: > zigbee2mqtt@1.7.1 start /opt/zigbee2mqtt Dec 03 08:35:50 racknode npm[626]: > node index.js Dec 03 08:35:53 racknode npm[626]: [..] Logging to directory: '/opt/zigb Dec 03 08:35:53 racknode npm[626]: [..] Starting zigbee2mqtt version 1.7 Dec 03 08:35:53 racknode npm[626]: [..] Starting zigbee-herdsman...
- Configure the autostart of the service
pi@racknode:/opt/zigbee2mqtt $ sudo systemctl enable zigbee2mqtt.service Created symlink /etc/systemd/system/multi-user.target.wants/zigbee2mqtt.service ↵ → /etc/systemd/system/zigbee2mqtt.service.
- Reboot the Raspberry to verify your setup
pi@racknode:/opt/zigbee2mqtt $ sudo reboot Connection to racknode closed by remote host. Connection to racknode closed. $ ssh pi@racknode Linux racknode 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Dec 3 08:42:26 2019 from 10.0.0.171 pi@racknode:~ $ sudo journalctl -u zigbee2mqtt.service -f -- Logs begin at Thu 2016-11-03 18:16:43 CET. -- [..] Started zigbee2mqtt. [..] > zigbee2mqtt@1.7.1 start /opt/zigbee2mqtt [..] > node index.js [..] Logging to directory: '/opt/zigbee2mqtt/data/log/2019-12-03.08-44-14' [..] Starting zigbee2mqtt version 1.7.1 (commit #b459c35) [..] Starting zigbee-herdsman... [..] zigbee-herdsman started [..] Coordinator firmware version: '{"type":"zStack12","meta":{"transportrev":2,↵ "product":0,"majorrel":2,"minorrel":6,"maintrel":3,"revision":20190608}}' [..] Currently 1 devices are joined: [..] 0x00158d00029acb06 (0x00158d00029acb06): MFKZQ01LM - Xiaomi Mi/Aqara smart ↵ home cube (EndDevice) [..] `permit_join` set to `true` in configuration.yaml. [..] Allowing new devices to join. [..] Set `permit_join` to `false` once you joined all devices. [..] Zigbee: allowing new devices to join. [..] Connecting to MQTT server at mqtt://mqtt.thomo.de [..] Connected to MQTT server [..] MQTT publish: topic 'zigbee/bridge/state', payload 'online' [..] MQTT publish: topic 'zigbee/0x00158d00029acb06', payload '{"battery":31,↵ "voltage":2825,"linkquality":18,"angle":10.55,"side":3}' [..] MQTT publish: topic 'zigbee/bridge/config', payload '{"version":"1.7.1",↵ "commit":"b459c35","coordinator":{"type":"zStack12","meta":{"transportrev":2,↵ "product":0,"majorrel":2,"minorrel":6,"maintrel":3,"revision":20190608}},↵ "log_level":"info","permit_join":true}' ^C pi@racknode:~ $
Links
- https://www.zigbee2mqtt.io/