2020-05-30
md
Zigbee2MQTT On the Cheap
Adding an Ikea Trådfri Shortcut Button in Domoticz-> <-BLE Beacons with Tasmota32 - Proof of Concept

Will be using Raspberry Pi 1 with the cheapest Zigbee CC2531 Sniffer Module I could find d'analyseur de protocole USB pour assistant domestique, HAB ouvert, etc. USB CC2531 Bluetooth 4.0 protocole Analyseur Sniffer Antenne externe

Table of Content

  1. Install OS
  2. Installing Node.js

Install OS< toc

michel@hp:~$ ssh zigpi@zigpi.local The authenticity of host 'zigpi.local (192.168.0.11)' can't be established. ED25519 key fingerprint is SHA256:wj1TecoajN5L9qNEh4sazeXk2Z7/vuNjWminjSVYFMs. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'zigpi.local' (ED25519) to the list of known hosts. zigpi@zigpi.local's password: Linux zigpi 6.1.0-rpi7-rpi-v6 #1 Raspbian 1:6.1.63-1+rpt1 (2023-11-24) armv6l 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. zigpi@zigpi:~ $ uname -a Linux zigpi 6.1.0-rpi7-rpi-v6 #1 Raspbian 1:6.1.63-1+rpt1 (2023-11-24) armv6l GNU/Linux zigpi@zigpi:~ $ cat /etc/os-release PRETTY_NAME="Raspbian GNU/Linux 12 (bookworm)" NAME="Raspbian GNU/Linux" VERSION_ID="12" VERSION="12 (bookworm)" VERSION_CODENAME=bookworm ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs" zigpi@zigpi:~ $ cat /etc/debian_version 12.1
zigpi@zigpi:~ $ sudo apt update && sudo apt upgrade -y ... The following packages will be upgraded: bluez firmware-atheros firmware-brcm80211 firmware-libertas firmware-misc-nonfree firmware-realtek kms++-utils libbluetooth3 libkms++0 raspberrypi-net-mods raspi-config rpi-eeprom 12 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 74.2 MB of archives. After this operation, 17.8 MB of additional disk space will be used. ...

Decided to install to bare Linux, not in a Docker image. The documentation on how to do this is on the Zigbee2MQTT Web siteInstallation Linux.

Installing Node.js toc

As per About Node.js®, Node.js® is an open-source, cross-platform JavaScript runtime environment.. There's a lot of ® on that site.

Hint that there may be special consideration (Optional) Running as a daemon with systemctl "If you are using a Raspberry Pi 1 or Zero AND if you followed this guide, replace ExecStart=/usr/bin/npm start with ExecStart=/usr/local/bin/npm start." Install NodeJS on a Raspberry Pi Zero NodeJS Support for Pi Zero The Pi Zero uses a Broadcom BCM2835 SoC, which has an ARM processor that uses an ARMv6 instruction set. To install NodeJS, an ARMv6 build is required. However, NodeJS doesn't officially support the ARMv6 build required by the Pi Zero as of NodeJS 12 and later. It has now been demoted to experimental status, and while they do provide unofficial builds on the website, these binaries are automatically generated and could break between releases. So proceed with caution, as these builds aren't fully tested and could cause issues depending on which version of NodeJS you install. If you aren't comfortable running the unofficial builds, you can also install an older version of NodeJS 11.x which still supports the ARMv6 binaries. Install Node.js 10 on Raspberry Pi 1 or zero Node v12? How to install the latest NodeJS on Raspberry PI 0 W? Install NodeJs on your Raspberry Pi 1, 2, 3, 4, zero, and zero w

So first of all which Node.js version to use ?

Node.js supported version #6799 Koenkk in March 2021 Docs were a bit outdated. Current supported node version: 10, 12, 14 (recommended due to being current LTS) and 15 NPM version: 6 and 7 Search all opended and closed issues with is:issue Node.js version label:problem https://github.com/Koenkk/zigbee2mqtt/issues/17032 I have node.js version 16.18.1, I don't see.... and in his reply Koenkk did not blink, so will try to install that version. but V16 is past end of life. Install Zigbee2MQTT on a Raspberry Pi Zero W installs version 16.9, so close enough to give it a go ?
wget https://unofficial-builds.nodejs.org/download/release/v16.9.1/node-v16.9.1-linux-armv6l.tar.xz tar -xvf node-v16.9.1-linux-armv6l.tar.xz cd node-v16.9.1-linux-armv6l/ sudo cp -R * /usr/local/
Let's try it.
zigpi@zigpi:~ $ wget https://unofficial-builds.nodejs.org/download/release/v16.9.1/node-v16.9.1-linux-armv6l.tar.xz --2024-01-27 20:48:23-- https://unofficial-builds.nodejs.org/download/release/v16.9.1/node-v16.9.1-linux-armv6l.tar.xz Resolving unofficial-builds.nodejs.org (unofficial-builds.nodejs.org)... 45.55.98.129 Connecting to unofficial-builds.nodejs.org (unofficial-builds.nodejs.org)|45.55.98.129|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 18520852 (18M) [application/x-xz] Saving to: ‘node-v16.9.1-linux-armv6l.tar.xz’ node-v16.9.1-linux-armv6l.tar.xz 100%[=============================================================================>] 17.66M 3.29MB/s in 5.7s 2024-01-27 20:48:30 (3.12 MB/s) - ‘node-v16.9.1-linux-armv6l.tar.xz’ saved [18520852/18520852] zigpi@zigpi:~ $ tar -xvf node-v16.9.1-linux-armv6l.tar.xz node-v16.9.1-linux-armv6l/ node-v16.9.1-linux-armv6l/README.md node-v16.9.1-linux-armv6l/lib/ ... many files later ... node-v16.9.1-linux-armv6l/bin/node ... big file (71 558 360 bytes) takes a while to extract ... node-v16.9.1-linux-armv6l/bin/npm node-v16.9.1-linux-armv6l/bin/corepack node-v16.9.1-linux-armv6l/bin/npx zigpi@zigpi:~/node-v16.9.1-linux-armv6l $ sudo cp -R * /usr/local/ testing zigpi@zigpi:~/node-v16.9.1-linux-armv6l $ node --version v16.9.1 zigpi@zigpi:~/node-v16.9.1-linux-armv6l $ npm --version 7.21.1 cleanup zigpi@zigpi:~ $ mkdir downloads zigpi@zigpi:~ $ mv node-v16.9.1-linux-armv6l.tar.xz downloads/. zigpi@zigpi:~ $ rm -r node-v16.9.1-linux-armv6l/ zigpi@zigpi:~ $ ls downloads zigpi@zigpi:~ $ ls downloads node-v16.9.1-linux-armv6l.tar.xz

Installing zigbee2MQTT toc

To install zigbee2mqtt Stéphane uses git.

sudo apt install git sudo git clone --depth 1 https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt

Here's another way to do it that does not require installing git.

zigpi@zigpi:~ $ wget https://github.com/Koenkk/zigbee2mqtt/archive/master.zip --2024-01-27 21:18:21-- https://github.com/Koenkk/zigbee2mqtt/archive/master.zip Resolving github.com (github.com)... 140.82.112.4 Connecting to github.com (github.com)|140.82.112.4|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://codeload.github.com/Koenkk/zigbee2mqtt/zip/refs/heads/master [following] --2024-01-27 21:18:22-- https://codeload.github.com/Koenkk/zigbee2mqtt/zip/refs/heads/master Resolving codeload.github.com (codeload.github.com)... 140.82.114.10 Connecting to codeload.github.com (codeload.github.com)|140.82.114.10|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [application/zip] Saving to: ‘master.zip’ master.zip [ <=> ] 537.06K 1.47MB/s in 0.4s 2024-01-27 21:18:22 (1.47 MB/s) - ‘master.zip’ saved [549949] zigpi@zigpi:~ $ sudo unzip master.zip -d /opt Archive: master.zip 3c9620428ea00d759bd1001322b0ead55eca2285 creating: /opt/zigbee2mqtt-master/ inflating: /opt/zigbee2mqtt-master/.dockerignore extracting: /opt/zigbee2mqtt-master/.eslintignore inflating: /opt/zigbee2mqtt-master/tsconfig.json inflating: /opt/zigbee2mqtt-master/update.sh zigpi@zigpi:~/node-v16.9.1-linux-armv6l $ ls /opt pigpio zigbee2mqtt-master zigpi@zigpi:~/node-v16.9.1-linux-armv6l $ sudo mv /opt/zigbee2mqtt-master /opt/zigbee2mqtt checking zigpi@zigpi:~ $ ls -ld /opt/zig* drwxr-xr-x 9 root root 4096 Jan 10 07:18 /opt/zigbee2mqtt cleanup zigpi@zigpi:~ $ mv master.zip downloads/zigbee2mqtt.zip zigpi@zigpi:~ $ ls downloads node-v16.9.1-linux-armv6l.tar.xz zigbee2mqtt.zip

Flashing the Coordinator Firmware onto the CC2531 USB Stick toc

Supported Adapters

All officially supported adapters are listed on this page. Note that before an adapter can be used with Zigbee2MQTT it has to be flashed with a coordinator firmware (some adapters come preflashed).

Not recommended

The adapters below are well-supported but use outdated chips.

Will not follow the flashing instructions that require a CC debugger, instead will use one of the Alternative firmware flashing methods. The first one of these uses a Raspberry Pi which we happen to have on hand.

Installing WiringPi toc

zigpi@zigpi:~ $ wget wget https://github.com/WiringPi/WiringPi/archive/master.zip --2024-01-27 22:09:39-- http://wget/ Resolving wget (wget)... failed: Name or service not known. wget: unable to resolve host address ‘wget’ --2024-01-27 22:09:39-- https://github.com/WiringPi/WiringPi/archive/master.zip Resolving github.com (github.com)... 140.82.114.4 Connecting to github.com (github.com)|140.82.114.4|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://codeload.github.com/WiringPi/WiringPi/zip/refs/heads/master [following] --2024-01-27 22:09:40-- https://codeload.github.com/WiringPi/WiringPi/zip/refs/heads/master Resolving codeload.github.com (codeload.github.com)... 140.82.112.10 Connecting to codeload.github.com (codeload.github.com)|140.82.112.10|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [application/zip] Saving to: ‘master.zip’ master.zip [ <=> ] 279.84K 1.28MB/s in 0.2s 2024-01-27 22:09:41 (1.28 MB/s) - ‘master.zip’ saved [286554] FINISHED --2024-01-27 22:09:41-- Total wall clock time: 1.3s Downloaded: 1 files, 280K in 0.2s (1.28 MB/s) zigpi@zigpi:~ $ unzip master.zip Archive: master.zip 91284c42759d3268b09c185ba1d176d54ff59eea creating: WiringPi-master/ creating: WiringPi-master/.github/ creating: WiringPi-master/.github/workflows/ inflating: WiringPi-master/.github/workflows/build.yml inflating: WiringPi-master/.gitignore inflating: WiringPi-master/COPYING.LESSER inflating: WiringPi-master/INSTALL inflating: WiringPi-master/People inflating: WiringPi-master/README.md extracting: WiringPi-master/VERSION inflating: WiringPi-master/build creating: WiringPi-master/debian-template/ creating: WiringPi-master/debian-template/wiringPi/ creating: WiringPi-master/debian-template/wiringPi/DEBIAN/ inflating: WiringPi-master/debian-template/wiringPi/DEBIAN/control inflating: WiringPi-master/debian-template/wiringPi/DEBIAN/postinst inflating: WiringPi-master/debian-template/wiringPi/DEBIAN/postrm creating: WiringPi-master/debian/ inflating: WiringPi-master/debian/.gitignore inflating: WiringPi-master/debian/changelog extracting: WiringPi-master/debian/compat inflating: WiringPi-master/debian/control inflating: WiringPi-master/debian/copyright extracting: WiringPi-master/debian/libwiringpi-dev.dirs inflating: WiringPi-master/debian/libwiringpi-dev.install inflating: WiringPi-master/debian/libwiringpi2.install inflating: WiringPi-master/debian/libwiringpi2.shlibs inflating: WiringPi-master/debian/rules extracting: WiringPi-master/debian/wiringpi.dirs inflating: WiringPi-master/debian/wiringpi.install creating: WiringPi-master/devLib/ inflating: WiringPi-master/devLib/Makefile inflating: WiringPi-master/devLib/ds1302.c inflating: WiringPi-master/devLib/ds1302.h inflating: WiringPi-master/devLib/font.h inflating: WiringPi-master/devLib/gertboard.c inflating: WiringPi-master/devLib/gertboard.h inflating: WiringPi-master/devLib/lcd.c inflating: WiringPi-master/devLib/lcd.h inflating: WiringPi-master/devLib/lcd128x64.c inflating: WiringPi-master/devLib/lcd128x64.h inflating: WiringPi-master/devLib/maxdetect.c inflating: WiringPi-master/devLib/maxdetect.h inflating: WiringPi-master/devLib/piFace.c inflating: WiringPi-master/devLib/piFace.h inflating: WiringPi-master/devLib/piFaceOld.c inflating: WiringPi-master/devLib/piGlow.c inflating: WiringPi-master/devLib/piGlow.h inflating: WiringPi-master/devLib/piNes.c inflating: WiringPi-master/devLib/piNes.h inflating: WiringPi-master/devLib/scrollPhat.c inflating: WiringPi-master/devLib/scrollPhat.h inflating: WiringPi-master/devLib/scrollPhatFont.h creating: WiringPi-master/examples/ inflating: WiringPi-master/examples/COPYING.LESSER creating: WiringPi-master/examples/Gertboard/ inflating: WiringPi-master/examples/Gertboard/7segments.c inflating: WiringPi-master/examples/Gertboard/Makefile inflating: WiringPi-master/examples/Gertboard/buttons.c inflating: WiringPi-master/examples/Gertboard/gertboard.c inflating: WiringPi-master/examples/Gertboard/record.c inflating: WiringPi-master/examples/Gertboard/temperature.c inflating: WiringPi-master/examples/Gertboard/voltmeter.c inflating: WiringPi-master/examples/Gertboard/vumeter.c inflating: WiringPi-master/examples/Makefile creating: WiringPi-master/examples/PiFace/ inflating: WiringPi-master/examples/PiFace/Makefile inflating: WiringPi-master/examples/PiFace/blink.c inflating: WiringPi-master/examples/PiFace/buttons.c inflating: WiringPi-master/examples/PiFace/ladder.c inflating: WiringPi-master/examples/PiFace/metro.c inflating: WiringPi-master/examples/PiFace/motor.c inflating: WiringPi-master/examples/PiFace/reaction.c creating: WiringPi-master/examples/PiGlow/ inflating: WiringPi-master/examples/PiGlow/Makefile inflating: WiringPi-master/examples/PiGlow/piGlow0.c inflating: WiringPi-master/examples/PiGlow/piGlow1.c inflating: WiringPi-master/examples/PiGlow/piglow.c inflating: WiringPi-master/examples/README.TXT inflating: WiringPi-master/examples/blink-thread.c inflating: WiringPi-master/examples/blink.c inflating: WiringPi-master/examples/blink.rtb inflating: WiringPi-master/examples/blink.sh inflating: WiringPi-master/examples/blink12.c inflating: WiringPi-master/examples/blink12drcs.c inflating: WiringPi-master/examples/blink6drcs.c inflating: WiringPi-master/examples/blink8-drcn.c inflating: WiringPi-master/examples/blink8.c inflating: WiringPi-master/examples/clock.c inflating: WiringPi-master/examples/delayTest.c inflating: WiringPi-master/examples/ds1302.c inflating: WiringPi-master/examples/header.h inflating: WiringPi-master/examples/isr-osc.c inflating: WiringPi-master/examples/isr.c inflating: WiringPi-master/examples/lcd-adafruit.c inflating: WiringPi-master/examples/lcd.c inflating: WiringPi-master/examples/lowPower.c inflating: WiringPi-master/examples/max31855.c inflating: WiringPi-master/examples/nes.c inflating: WiringPi-master/examples/okLed.c inflating: WiringPi-master/examples/pwm.c creating: WiringPi-master/examples/q2w/ inflating: WiringPi-master/examples/q2w/Makefile inflating: WiringPi-master/examples/q2w/binary.c inflating: WiringPi-master/examples/q2w/blink-io.c inflating: WiringPi-master/examples/q2w/blink.c inflating: WiringPi-master/examples/q2w/blink.sh inflating: WiringPi-master/examples/q2w/bright.c inflating: WiringPi-master/examples/q2w/button.c inflating: WiringPi-master/examples/q2w/volts.c inflating: WiringPi-master/examples/rht03.c creating: WiringPi-master/examples/scrollPhat/ inflating: WiringPi-master/examples/scrollPhat/Makefile inflating: WiringPi-master/examples/scrollPhat/scphat.c inflating: WiringPi-master/examples/scrollPhat/test.c inflating: WiringPi-master/examples/serialRead.c inflating: WiringPi-master/examples/serialTest.c inflating: WiringPi-master/examples/servo.c inflating: WiringPi-master/examples/softPwm.c inflating: WiringPi-master/examples/softTone.c inflating: WiringPi-master/examples/speed.c inflating: WiringPi-master/examples/spiSpeed.c inflating: WiringPi-master/examples/wfi.c creating: WiringPi-master/gpio/ inflating: WiringPi-master/gpio/COPYING.LESSER inflating: WiringPi-master/gpio/Makefile inflating: WiringPi-master/gpio/gpio.1 inflating: WiringPi-master/gpio/gpio.c inflating: WiringPi-master/gpio/pintest inflating: WiringPi-master/gpio/readall.c inflating: WiringPi-master/gpio/test.sh inflating: WiringPi-master/newVersion creating: WiringPi-master/pins/ inflating: WiringPi-master/pins/Makefile inflating: WiringPi-master/pins/pins.pdf inflating: WiringPi-master/pins/pins.tex inflating: WiringPi-master/update inflating: WiringPi-master/version.h creating: WiringPi-master/wiringPi/ inflating: WiringPi-master/wiringPi/COPYING.LESSER inflating: WiringPi-master/wiringPi/Makefile inflating: WiringPi-master/wiringPi/ads1115.c inflating: WiringPi-master/wiringPi/ads1115.h inflating: WiringPi-master/wiringPi/bmp180.c inflating: WiringPi-master/wiringPi/bmp180.h inflating: WiringPi-master/wiringPi/drcNet.c inflating: WiringPi-master/wiringPi/drcNet.h inflating: WiringPi-master/wiringPi/drcSerial.c inflating: WiringPi-master/wiringPi/drcSerial.h inflating: WiringPi-master/wiringPi/ds18b20.c inflating: WiringPi-master/wiringPi/ds18b20.h inflating: WiringPi-master/wiringPi/htu21d.c inflating: WiringPi-master/wiringPi/htu21d.h inflating: WiringPi-master/wiringPi/max31855.c inflating: WiringPi-master/wiringPi/max31855.h inflating: WiringPi-master/wiringPi/max5322.c inflating: WiringPi-master/wiringPi/max5322.h inflating: WiringPi-master/wiringPi/mcp23008.c inflating: WiringPi-master/wiringPi/mcp23008.h inflating: WiringPi-master/wiringPi/mcp23016.c inflating: WiringPi-master/wiringPi/mcp23016.h inflating: WiringPi-master/wiringPi/mcp23016reg.h inflating: WiringPi-master/wiringPi/mcp23017.c inflating: WiringPi-master/wiringPi/mcp23017.h inflating: WiringPi-master/wiringPi/mcp23s08.c inflating: WiringPi-master/wiringPi/mcp23s08.h inflating: WiringPi-master/wiringPi/mcp23s17.c inflating: WiringPi-master/wiringPi/mcp23s17.h inflating: WiringPi-master/wiringPi/mcp23x08.h inflating: WiringPi-master/wiringPi/mcp23x0817.h inflating: WiringPi-master/wiringPi/mcp3002.c inflating: WiringPi-master/wiringPi/mcp3002.h inflating: WiringPi-master/wiringPi/mcp3004.c inflating: WiringPi-master/wiringPi/mcp3004.h inflating: WiringPi-master/wiringPi/mcp3422.c inflating: WiringPi-master/wiringPi/mcp3422.h inflating: WiringPi-master/wiringPi/mcp4802.c inflating: WiringPi-master/wiringPi/mcp4802.h inflating: WiringPi-master/wiringPi/noMoreStatic inflating: WiringPi-master/wiringPi/pcf8574.c inflating: WiringPi-master/wiringPi/pcf8574.h inflating: WiringPi-master/wiringPi/pcf8591.c inflating: WiringPi-master/wiringPi/pcf8591.h inflating: WiringPi-master/wiringPi/piHiPri.c inflating: WiringPi-master/wiringPi/piThread.c inflating: WiringPi-master/wiringPi/pseudoPins.c inflating: WiringPi-master/wiringPi/pseudoPins.h inflating: WiringPi-master/wiringPi/rht03.c inflating: WiringPi-master/wiringPi/rht03.h inflating: WiringPi-master/wiringPi/sn3218.c inflating: WiringPi-master/wiringPi/sn3218.h inflating: WiringPi-master/wiringPi/softPwm.c inflating: WiringPi-master/wiringPi/softPwm.h inflating: WiringPi-master/wiringPi/softServo.c inflating: WiringPi-master/wiringPi/softServo.h inflating: WiringPi-master/wiringPi/softTone.c inflating: WiringPi-master/wiringPi/softTone.h inflating: WiringPi-master/wiringPi/sr595.c inflating: WiringPi-master/wiringPi/sr595.h inflating: WiringPi-master/wiringPi/wiringPi.c inflating: WiringPi-master/wiringPi/wiringPi.h inflating: WiringPi-master/wiringPi/wiringPiI2C.c inflating: WiringPi-master/wiringPi/wiringPiI2C.h inflating: WiringPi-master/wiringPi/wiringPiSPI.c inflating: WiringPi-master/wiringPi/wiringPiSPI.h inflating: WiringPi-master/wiringPi/wiringSerial.c inflating: WiringPi-master/wiringPi/wiringSerial.h inflating: WiringPi-master/wiringPi/wiringShift.c inflating: WiringPi-master/wiringPi/wiringShift.h inflating: WiringPi-master/wiringPi/wpiExtensions.c inflating: WiringPi-master/wiringPi/wpiExtensions.h creating: WiringPi-master/wiringPiD/ inflating: WiringPi-master/wiringPiD/Makefile inflating: WiringPi-master/wiringPiD/daemonise.c inflating: WiringPi-master/wiringPiD/daemonise.h inflating: WiringPi-master/wiringPiD/drcNetCmd.h inflating: WiringPi-master/wiringPiD/network.c inflating: WiringPi-master/wiringPiD/network.h inflating: WiringPi-master/wiringPiD/runRemote.c inflating: WiringPi-master/wiringPiD/runRemote.h inflating: WiringPi-master/wiringPiD/wiringpid.c zigpi@zigpi:~/WiringPi-master $ ./build wiringPi Build script ===================== WiringPi Library [UnInstall] [Compile] wiringSerial.c [Compile] wiringShift.c [Compile] piHiPri.c [Compile] wiringPi.c [Compile] piThread.c [Compile] wiringPiSPI.c [Compile] wiringPiI2C.c [Compile] softPwm.c [Compile] softTone.c [Compile] mcp23008.c [Compile] mcp23016.c [Compile] mcp23017.c [Compile] mcp23s08.c [Compile] mcp23s17.c [Compile] sr595.c [Compile] pcf8574.c [Compile] pcf8591.c [Compile] mcp3002.c [Compile] mcp3004.c [Compile] mcp4802.c [Compile] mcp3422.c [Compile] max31855.c [Compile] max5322.c [Compile] ads1115.c [Compile] sn3218.c [Compile] bmp180.c [Compile] htu21d.c [Compile] ds18b20.c [Compile] rht03.c [Compile] drcSerial.c [Compile] drcNet.c [Compile] pseudoPins.c [Compile] wpiExtensions.c [Link (Dynamic)] [Install Headers] [Install Dynamic Lib] WiringPi Devices Library [UnInstall] [Compile] ds1302.c [Compile] maxdetect.c [Compile] piNes.c [Compile] piFace.c [Compile] gertboard.c [Compile] lcd128x64.c [Compile] lcd.c [Compile] scrollPhat.c [Compile] piGlow.c [Link (Dynamic)] [Install Headers] [Install Dynamic Lib] GPIO Utility [Compile] gpio.c [Compile] readall.c [Link] [Install] chown: warning: '.' should be ':': ‘root.root’ All Done. NOTE: To compile programs with wiringPi, you need to add: -lwiringPi to your compile line(s) To use the Gertboard, MaxDetect, etc. code (the devLib), you need to also add: -lwiringPiDev to your compile line(s).

This works in kernel 6.1.0 but it will probably not work in the future because GPIO access via sysfs likely to be dropped in 6.2 on. Fortunateley, there are other methods using the ESP8266 and RP2040 microcontrolers.

Cleaning up.

zigpi@zigpi:~ $ mv master.zip downloads/WiringPi.zip zigpi@zigpi:~ $ ls downloads WiringPi-master zigpi@zigpi:~ $ ls downloads node-v16.9.1-linux-armv6l.tar.xz WiringPi.zip zigbee2mqtt.zip zigpi@zigpi:~ $ rm -r WiringPi-master/

Testing WiringPi

zigpi@zigpi:~ $ gpio readall +-----+-----+---------+------+---+-Model B1-+---+------+---------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ | | | 3.3v | | | 1 || 2 | | | 5v | | | | 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5v | | | | 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | | | 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | ALT0 | TxD | 15 | 14 | | | | 0v | | | 9 || 10 | 1 | ALT0 | RxD | 16 | 15 | | 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 | | 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | | | 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 | | | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 | | 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | | | 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 | | 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 | | | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 | +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+---------+------+---+-Model B1-+---+------+---------+-----+-----+

Connecting the Pi and the USB Stick toc

USB stick pinout Will have to use a custom I/O pin assignment. The connection between

Raspberry PiCC2531
PIN 9GNDGDN
Pin 13GPIO 27DD
Pin 11GPIO 17DC
Pin 3GPIO 2RESET~
zigpi@zigpi:~ $ wget https://github.com/jmichault/flash_cc2531/archive/master.zip --2024-01-28 01:13:44-- https://github.com/jmichault/flash_cc2531/archive/master.zip Resolving github.com (github.com)... 140.82.114.3 Connecting to github.com (github.com)|140.82.114.3|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://codeload.github.com/jmichault/flash_cc2531/zip/refs/heads/master [following] --2024-01-28 01:13:45-- https://codeload.github.com/jmichault/flash_cc2531/zip/refs/heads/master Resolving codeload.github.com (codeload.github.com)... 140.82.112.10 Connecting to codeload.github.com (codeload.github.com)|140.82.112.10|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [application/zip] Saving to: ‘master.zip’ master.zip [ <=> ] 72.32K --.-KB/s in 0.08s 2024-01-28 01:13:45 (942 KB/s) - ‘master.zip’ saved [74060]
zigpi@zigpi:~ $ unzip master.zip Archive: master.zip 005054e5ff062128591e2a68b9977ab38856e807 creating: flash_cc2531-master/ creating: flash_cc2531-master/.github/ extracting: flash_cc2531-master/.github/FUNDING.yml inflating: flash_cc2531-master/.github/stale.yml extracting: flash_cc2531-master/.gitignore inflating: flash_cc2531-master/CCDebugger.c inflating: flash_cc2531-master/CCDebugger.h inflating: flash_cc2531-master/LICENSE inflating: flash_cc2531-master/Makefile inflating: flash_cc2531-master/README.md inflating: flash_cc2531-master/cc_chipid inflating: flash_cc2531-master/cc_chipid.c inflating: flash_cc2531-master/cc_erase inflating: flash_cc2531-master/cc_erase.c inflating: flash_cc2531-master/cc_read inflating: flash_cc2531-master/cc_read.c inflating: flash_cc2531-master/cc_write inflating: flash_cc2531-master/cc_write.c

The files cc_chipid, cc_erase, cc_read, and cc_write are all exectable, so there is no nead to build anything.

To quote Jean Michalt, now one can read the CC2531 ID, save, erase and write its flash memory with the following commands.

./cc_chipid -r 8 -c 0 -d 2 ./cc_read -r 8 -c 0 -d 2 save.hex ./cc_erase -r 8 -c 0 -d 2 ./cc_write -r 8 -c 0 -d 2 CC2531ZNP-Prod.hex

Of course if the default wiring was used, then the gpio pin parameters should not be used and the commands would simply be as follows.

./cc_chipid ./cc_read save.hex ./cc_erase ./cc_write CC2531ZNP-Prod.hex
zigpi@zigpi:~/flash_cc2531-master $ ./cc_chipid -r 8 -c 0 -d 2 ID = b522. zigpi@zigpi:~/flash_cc2531-master $ ./cc_read -r 8 -c 0 -d 2 save.hex ID = b522. reading 256k/256k zigpi@zigpi:~/flash_cc2531-master $ ./cc_erase -r 8 -c 0 -d 2 ID = b522. erase result = 00a2. zigpi@zigpi:~/flash_cc2531-master $ ./cc_write -r 8 -c 0 -d 2 ../CC2531ZNP-with-SBL.hex ID = 0000. reading line 15490. file loaded (15497 lines read). writing page 1/128.

The session was frozen. Used CtrlC to exit.

Powered up/down the chip and then tried again but with timing change

zigpi@zigpi:~/flash_cc2531-master $ ./cc_chipid -r 8 -c 0 -d 2 -m 100 ID = b522. zigpi@zigpi:~/flash_cc2531-master $ ./cc_erase -r 8 -c 0 -d 2 -m 100 ID = b522. erase result = 00a2. zigpi@zigpi:~/flash_cc2531-master $ ./cc_write -r 8 -c 0 -d 2 -m 100 ../CC2531ZNP-with-SBL.hex ID = b522. reading line 15490. writing page 65/128. flash error... Have you erased before write ?
zigpi@zigpi:~ $ wget https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_Home_1.2/bin/default/CC2531_DEFAULT_20211115.zip --2024-01-28 02:55:12-- https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_Home_1.2/bin/default/CC2531_DEFAULT_20211115.zip Resolving github.com (github.com)... 140.82.114.4 Connecting to github.com (github.com)|140.82.114.4|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://raw.githubusercontent.com/Koenkk/Z-Stack-firmware/master/coordinator/Z-Stack_Home_1.2/bin/default/CC2531_DEFAULT_20211115.zip [following] --2024-01-28 02:55:13-- https://raw.githubusercontent.com/Koenkk/Z-Stack-firmware/master/coordinator/Z-Stack_Home_1.2/bin/default/CC2531_DEFAULT_20211115.zip Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.111.133, 185.199.110.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 332844 (325K) [application/zip] Saving to: ‘CC2531_DEFAULT_20211115.zip’ CC2531_DEFAULT_20211115.zip 100%[=============================================================>] 325.04K --.-KB/s in 0.1s 2024-01-28 02:55:13 (2.55 MB/s) - ‘CC2531_DEFAULT_20211115.zip’ saved [332844/332844] zigpi@zigpi:~ $ unzip CC2531_DEFAULT_20211115.zip Archive: CC2531_DEFAULT_20211115.zip inflating: CC2531ZNP-Prod.hex inflating: CC2531ZNP-Prod.bin zigpi@zigpi:~ $ ls -l total 1908 -rw-r--r-- 1 zigpi zigpi 332844 Jan 28 02:55 CC2531_DEFAULT_20211115.zip -rw-r--r-- 1 zigpi zigpi 589641 Jan 28 02:35 CC2531_router_2020_09_29.zip -rw-r--r-- 1 zigpi zigpi 239616 Nov 15 2021 CC2531ZNP-Prod.bin -rw-r--r-- 1 zigpi zigpi 697099 Nov 15 2021 CC2531ZNP-Prod.hex drwxr-xr-x 2 zigpi zigpi 4096 Jan 28 00:53 downloads drwxr-xr-x 3 zigpi zigpi 4096 Jan 28 01:18 flash_cc2531-master -rw-r--r-- 1 zigpi zigpi 74060 Jan 28 01:13 master.zip zigpi@zigpi:~ $ ls CC2531_DEFAULT_20211115.zip CC2531ZNP-Prod.bin downloads master.zip CC2531_router_2020_09_29.zip CC2531ZNP-Prod.hex flash_cc2531-master zigpi@zigpi:~ $ cd flash_cc2531-master/ zigpi@zigpi:~/flash_cc2531-master $ ./cc_chipid -r 8 -c 0 -d 2 -m 300 ID = b522. zigpi@zigpi:~/flash_cc2531-master $ ./cc_erase -r 8 -c 0 -d 2 -m 300 ID = b522. erase result = 00a2. zigpi@zigpi:~/flash_cc2531-master $ ./cc_write -r 8 -c 0 -d 2 -m 300 ../CC2531ZNP-Prod.hex ID = b522. reading line 15490. file loaded (15497 lines read). writing page 65/128.verification error... Have you erased before write ?

And tried with router firmware

zigpi@zigpi:~/flash_cc2531-master $ ./cc_chipid -r 8 -c 0 -d 2 -m 300 ID = b522. zigpi@zigpi:~/flash_cc2531-master $ ./cc_erase -r 8 -c 0 -d 2 -m 300 ID = b522. erase result = 00a2. zigpi@zigpi:~/flash_cc2531-master $ ./cc_write -r 8 -c 0 -d 2 -m 300 ../router-cc2531-std.hex ID = b522. reading line 12070. file loaded (12073 lines read). writing page 65/ 95.verification error... Have you erased before write ?

An issue, writing page 65/128.verification error, corresponds to the encounted problem. Here is the pertinent part of the that last comment.

I saw that my chip was a cc2531 F 128. I bought another USB key with a 256 and it worked.

So my stick has only 128K of flash memory which apparently is not enough.

zigpi@zigpi:~ $ wget https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_3.0.x/bin/CC2531_20190425.zip --2024-01-28 00:35:01-- https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_3.0.x/bin/CC2531_20190425.zip Resolving github.com (github.com)... 140.82.114.4 Connecting to github.com (github.com)|140.82.114.4|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://raw.githubusercontent.com/Koenkk/Z-Stack-firmware/master/coordinator/Z-Stack_3.0.x/bin/CC2531_20190425.zip [following] --2024-01-28 00:35:01-- https://raw.githubusercontent.com/Koenkk/Z-Stack-firmware/master/coordinator/Z-Stack_3.0.x/bin/CC2531_20190425.zip Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.111.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 365947 (357K) [application/zip] Saving to: ‘CC2531_20190425.zip’ CC2531_20190425.zip 100%[=============================================================================>] 357.37K 2.26MB/s in 0.2s 2024-01-28 00:35:02 (2.26 MB/s) - ‘CC2531_20190425.zip’ saved [365947/365947] zigpi@zigpi:~ $ ls CC2531_20190425.zip downloads zigpi@zigpi:~ $ unzip CC2531_20190425.zip Archive: CC2531_20190425.zip inflating: CC2531ZNP-with-SBL.hex inflating: CC2531ZNP-without-SBL.bin zigpi@zigpi:~ $ ls CC2531_20190425.zip CC2531ZNP-without-SBL.bin CC2531ZNP-with-SBL.hex downloads C2531_20190425.zip CC2531ZNP-without-SBL.bin CC2531ZNP-with-SBL.hex downloads zigpi@zigpi:~ $ mv CC2531_20190425.zip downloads zigpi@zigpi:~ $ ls CC2531ZNP-without-SBL.bin CC2531ZNP-with-SBL.hex downloads
https://www.jakubikovi.eu/index.php/openbsd-2/32-cc2531-usb-stick-flash-koenk-firmware https://notenoughtech.com/home-automation/flashing-cc2531-without-cc-debugger/ https://notenoughtech.com/?s=cc2531 <------------------------------> https://www.zigbee2mqtt.io/advanced/zigbee/04_sniff_zigbee_traffic.html Sniff Zigbee traffic Router Besides serving as a coordinator some adapters can also be used as a Zigbee router (check if there is a router firmware by clicking on your adapter). To factory reset/pair: Texas Instruments CC2531: press the S2 button for 5 seconds.

Using ESP instead of Raspberry Pi with coordinator: Zigbee2Tasmota serves as a gateway

https://ptvo.info/zigbee-configurable-firmware-features/ Zigbee Configurable Firmware Features zigpi@zigpi:~/flash_cc2531-master $ ./cc_chipid -r 8 -c 0 -d 2 -m 300 ID = b522. zigpi@zigpi:~/flash_cc2531-master $ ./cc_erase -r 8 -c 0 -d 2 -m 300 ID = b522. erase result = 00a2. zigpi@zigpi:~/flash_cc2531-master $ ./cc_write -r 8 -c 0 -d 2 -m 300 factory_sniffer.hex ID = b522. reading line 530. file loaded (539 lines read). writing page 5/ 5. flash OK.