dresden-elektronik / gcfflasher

GCFFlasher is the tool to program the firmware of dresden elektronik's Zigbee products.
BSD 3-Clause "New" or "Revised" License
34 stars 3 forks source link

Retry connect bootloader #15

Closed ndizazzo closed 1 year ago

ndizazzo commented 1 year ago

Hello, I'm having issues flashing the firmware to my ConBee II stick:

> ls /dev | grep ttyAC
ttyACM0
./GCFFlasher -f deCONZ_RaspBeeII_0x26720700.bin.GCF -t 60 -d /dev/ttyACM0
read file success: deCONZ_RaspBeeII_0x26720700.bin.GCF (164241 bytes)
flash firmware
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
retry connect bootloader /dev/ttyACM0
^C
> ./GCFFlasher -r -d /dev/ttyACM0
>

After a few reboots and mounting the stick into a virtual machine, it becomes available:

> GCFFlasher -l                                                          
1 devices found
DEV [0]: name: ConBee_II (DE2485204),path: /dev/ttyACM0 --> /dev/serial/by-id/usb-dresden_elektronik_ingenieurtechnik_GmbH_ConBee_II_DE2485204-if00
> GCFFlasher -r -d /dev/ttyACM0
>

I'm not entirely sure how I can continue - the firmware flasher doesn't really seem to be able to communicate with the USB stick. I've been using it successfully with the Docker container for over a year and was noticing some sluggishness communicating with some sensors recently, which I figured I might be able to address with a firmware update. This is the first time I've attempted to update the firmware.

In the docker image:

╰─ kubectl logs deployments/deconz -f
Found 7 pods, using pod/deconz-d65d5df4f-zx579
[deconzcommunity/deconz] Starting deCONZ...
[deconzcommunity/deconz] Current deCONZ version: 2.21.02
[deconzcommunity/deconz] Web UI port: 8081
[deconzcommunity/deconz] Websockets port: 8443
[deconzcommunity/deconz] Using options --auto-connect=1 --appdata=/opt/deCONZ --dbg-info=1 --dbg-aps=0 --dbg-zcl=0 --dbg-ddf=0 --dbg-dev=0 --dbg-zdp=0 --dbg-ota=0 --dbg-error=0 --dbg-http=0 --http-port=8081 --ws-port=8443
[deconzcommunity/deconz] Modifying user and group ID
[deconzcommunity/deconz] Checking device group ID
[deconzcommunity/deconz] VNC Disabled
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-deconz'
libpng warning: iCCP: known incorrect sRGB profile
This plugin does not support propagateSizeHints()
This plugin does not support propagateSizeHints()
23:53:24:922 HTTP Server listen on address 0.0.0.0, port: 8081, root: /usr/share/deCONZ/webapp/
23:53:24:926 Warning: /opt/deCONZ/config.ini doesn't exists
23:53:24:926 Warning: /opt/deCONZ/zll.db doesn't exists
23:53:24:968 COM: /dev/ttyACM0 / serialno: , ConBee II
23:53:24:968 ZCLDB init file /opt/deCONZ/zcldb.txt
23:53:25:032 DDF enabled for Gold status
23:53:25:216 gw run mode: normal
23:53:25:216 GW sd-card image version file does not exist: /opt/deCONZ/gw-version
23:53:25:217 Started websocket server on 0.0.0.0, port: 8443
23:53:25:218 create default username and password
23:53:25:218 [INFO] - Found file containing button maps. Parsing data...
23:53:25:225 [INFO] - Button maps loaded.
23:53:25:225 found node plugin: libde_rest_plugin.so - REST API Plugin
23:53:25:226 found node plugin: libde_signal_plugin.so - Signal Monitor Plugin
23:53:25:230 found node plugin: libstd_otau_plugin.so - STD OTAU Plugin
23:53:25:248 dlg action: Read binding table
23:53:25:001 New websocket 192.168.3.251:53222 (state: 3) 
23:53:26:256 COM: /dev/ttyACM0 / serialno: , ConBee II
This plugin does not support propagateSizeHints()
23:53:27:767 Device firmware version 0x26580700 ConBee II
23:53:27:772 unlocked max nodes: 512
23:53:27:772 Device protocol version: 0x010B
23:53:27:799 new node - ext: 0x00212effff080803, nwk: 0x0000
23:53:27:993 Current channel 15
23:53:28:076 CTRL ANT_CTRL 0x03
23:53:28:242 APS-DATA.indication from unknown node 0x0923
23:53:28:269 unknown node 0x00124B00246ED331 (0x0923), lqi: 223
23:53:28:269 APS-DATA.indication from unknown node 0x00124B00246ED331
23:53:30:470 GW update firmware found: /usr/share/deCONZ/firmware/deCONZ_ConBeeII_0x26720700.bin.GCF
23:53:30:470 GW firmware version shall be updated to: 0x26720700
23:53:31:261 Announced to internet https://phoscon.de/discover
23:53:33:618 DEV Tick.Init: booted after 8000 seconds
23:53:39:718 saved node state in 0 ms
23:53:39:718 sync() in 0 ms
23:53:40:603 new node - ext: 0x00124b00246ed331, nwk: 0x0923
23:53:42:578 ZDP get node descriptor for 0x0923
23:53:42:625 ZDP get active endpoints for 0x0923
23:53:42:678 ZDP get simple descriptor 0x01 for 0x0923
23:53:42:727 ZDP get simple descriptor 0x02 for 0x0923
23:53:42:859 DEV no DDF for 0x00124B00246ED331, modelId: ZB-SW02
23:53:42:859 DEV create on-the-fly DDF for 0x00124B00246ED331
23:53:45:219 Set bridgeid to 00212EFFFF080803
23:53:52:719 saved node state in 0 ms
23:53:52:719 sync() in 0 ms

Is this stick unable to be updated?

manup commented 1 year ago

It's the wrong firmware file, RaspBee II not ConBee II. Latest stable ConBee II firmware is http://deconz.dresden-elektronik.de/deconz-firmware/deCONZ_ConBeeII_0x26780700.bin.GCF

Virtual machines are always very tricky especially during firmware updates since the MCU needs to be restarted and the OS does re-enumeration where the new device name in the system might not be reachable within the VM /Docker.

Recommendation is to do firmware updates on a native system.

ndizazzo commented 1 year ago

Thanks - you're right, I had the wrong firmware file. Even after correcting this, I still wasn't able to successfully flash the stick on my Linux machines, so I tried my macOS laptop and it seemed to work using /dev/cu.usbmodem<SERIAL>

Thank you!