Taillieu.Info

More Than a Hobby..

Setting up a Zigbee2mqtt gateway

Setting up a Zigbee2mqtt gateway

Here are the steps I performed to setup a Zigbee2mqtt gateway using a CC2530+CC2591 board and a RaspberryPI 3.
  • 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:

     
The steps can be structured in three groups:

  1. Flash the Z-Stack coordinator firmware on the Zigbee board
  2. Install zigbee2mqtt to run on the Raspberry Pi
  3. 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.)

    NameRaspiCC2530+CC2591*
    3,3V/VCC Pin01 P12 Pin02
    GND Pin39 P12 Pin01
    RESET Pin35 P12 Pin03
    DC Pin36 P14 Pin04
    DD Pin38 P14 Pin05
    *) P12 - 12pin connector, P14 - 14 pin connector

     


  • 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 on
My steps were
  • Connect the Zigbee board with the Raspberry for operation mode

    NameRaspiCC2530+CC2591*
    3,3V/VCC Pin01 P12 Pin02
    GND Pin39 P12 Pin01
    TX (R→Z) Pin08 P12 Pin07
    RX (R←Z) Pin10 P12 Pin08
    *) P12 - 12pin connector




  • 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
    Before
    pi@racknode:~ $ cat /boot/cmdline.txt
    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=...
    
    After
    pi@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.js
    pi@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 to pi
    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/