Saturday, 25 July 2026

Getting Modbus comms going to Sungrow S100 power meter

(Weds 26 August 2026)

Well, I got my two ESP32-C3s shipping data from my Sungrow S100 meter via MQTT and Node-Red to my Sungrow SH3.0RS Hybrid Inverter last week. But after a firmware update to the inverter on Monday it stopped working.

So, it looks like my code was marginal and the new inverter has now less than 100 mSec between inverter Modbus transmissions at 9600 baud. So later today I will reflash the ESP32s with a 10 mSec inter-byte time-out but for now I will fix it in Node-Red :)

This means processing MQTT messages received on topic: home/solar/sungrow/esp32c3_s100_emulator/RxBytes to chop and tail inverter messages that have been fused together.

So these rx messages:

fe03003f0001a009

f604101f0001118b

207300000001c370

fe03500000018105

fe03003f0001a009

f604101f0001118b

etc.

Huh? This looks OK. So how is the S100 meter responding? Battery was low so after changing it I got more garbled rx data from the inverter


207300000001c370   got S100 response 20730203275e69

fe03500000018105

fe03003f0001a009

f604101f0001118b

207300000001c370 got S100 response 20730203275e69

030000000d82be20030000000d82be20030000000d82be20030000000d82be20030000000d82be

fe03500000018105


So I will clip the garbled 207300000001c370 message in Node-Red and send the cleaned up one to the S100 ESP32


This caused the S100 meter to eventually respond with:

20031a00002ebd0000056c00002951092800000294000002fc01e513835580
20031a00002ebe0000056d00002951091900000271000002e802041383e90d
20031a00002ebe0000056d00002951091d00000261000002c001e71383bbfd
20031a00002ebe0000056d00002951091600000266000002dc01f41388e686
20031a00002ebe0000056d0000295109160000025f0000027401c01388f8c1


But the inverter is only seeing these every 30 seconds or so...



(base) coderdojo@rhubarb:~$ 
(base) coderdojo@rhubarb:~$ mosquitto_sub -h 192.168.1.1 -p 1883 -u user -P password -t  home/solar/sungrow/esp32c3_s100_emulator/RxBytes  -v
home/solar/sungrow/esp32c3_s100_emulator/RxBytes f604101f0001118b
home/solar/sungrow/esp32c3_s100_emulator/RxBytes 207300000001c370
home/solar/sungrow/esp32c3_s100_emulator/RxBytes fe03500000018105
home/solar/sungrow/esp32c3_s100_emulator/RxBytes fe03003f0001a009
home/solar/sungrow/esp32c3_s100_emulator/RxBytes f604101f0001118b
home/solar/sungrow/esp32c3_s100_emulator/RxBytes 207300000001c370
home/solar/sungrow/esp32c3_s100_emulator/RxBytes 030000000d82be20030000000d82be20030000000d82be20030000000d82be20030000000d82be
home/solar/sungrow/esp32c3_s100_emulator/RxBytes fe03500000018105
home/solar/sungrow/esp32c3_s100_emulator/RxBytes fe03003f0001a009
home/solar/sungrow/esp32c3_s100_emulator/RxBytes f604101f0001118b
home/solar/sungrow/esp32c3_s100_emulator/RxBytes 207300000001c370
home/solar/sungrow/esp32c3_s100_emulator/RxBytes fe03500000018105
home/solar/sungrow/esp32c3_s100_emulator/RxBytes fe03003f0001a009
home/solar/sungrow/esp32c3_s100_emulator/RxBytes f604101f0001118b
home/solar/sungrow/esp32c3_s100_emulator/RxBytes 207300000001c370
home/solar/sungrow/esp32c3_s100_emulator/RxBytes 030000000d82be20030000000d82be20030000000d82be20030000000d82be20030000000d82be
home/solar/sungrow/esp32c3_s100_emulator/RxBytes fe03500000018105
^C(base) coderdojo@rhubarb:~$ 
(base) coderdojo@rhubarb:~$ date
Wed 26 Aug 2026 11:18:19 IST
(base) coderdojo@rhubarb:~$ mosquitto_sub -h 192.168.1.1 -p 1883 -u user -P password -t  home/solar/sungrow/esp32c3_s100_emulator/TxBytes  -v
home/solar/sungrow/esp32c3_s100_emulator/TxBytes 20730203275e69
home/solar/sungrow/esp32c3_s100_emulator/TxBytes 20730203275e69
home/solar/sungrow/esp32c3_s100_emulator/TxBytes 20031a00002ebe0000056d00002951091900000271000002e802041383e90d
home/solar/sungrow/esp32c3_s100_emulator/TxBytes 20730203275e69
home/solar/sungrow/esp32c3_s100_emulator/TxBytes 20031a00002ebe0000056d00002951091d00000261000002c001e71383bbfd
home/solar/sungrow/esp32c3_s100_emulator/TxBytes 20730203275e69
home/solar/sungrow/esp32c3_s100_emulator/TxBytes 20031a00002ebe0000056d00002951091600000266000002dc01f41388e686
home/solar/sungrow/esp32c3_s100_emulator/TxBytes 20730203275e69
home/solar/sungrow/esp32c3_s100_emulator/TxBytes 20730203275e69
home/solar/sungrow/esp32c3_s100_emulator/TxBytes 20730203275e69
home/solar/sungrow/esp32c3_s100_emulator/TxBytes 20031a00002ebe0000056d0000295109160000025f0000027401c01388f8c1

(11:24) So I think I need to try fixing the ESP32 firmware next...

Looking at the existing it is crashing! So that needs to be fixed :)


11:34:07.669 -> onnecting to Tola Park
11:34:07.669 -> 
11:34:07.669 -> ...
11:34:07.669 -> 
11:34:07.669 -> WiFi connected
11:34:07.669 -> 
11:34:07.669 -> IP address: 
11:34:07.669 -> 
11:34:07.669 -> 192.168.1.198
11:34:07.669 -> 
11:34:07.669 -> Attempting MQTT connection...connected
11:34:07.669 -> 
11:34:07.669 -> New response from S100 meter:254 3 80 0 0 1 129 5 
11:34:07.669 -> 
11:34:07.669 -> mqttPublishRxData: [home/solar/sungrow/esp32c3_s100_emulator/RxBytes:
11:34:07.669 -> 
11:34:07.669 -> fe03500000018105]
11:34:07.669 -> 
11:34:14.004 -> New response from S100 meter:254 3 0 63 0 1 160 9 
11:34:14.004 -> mqttPublishRxData: [home/solar/sungrow/esp32c3_s100_emulator/RxBytes:
11:34:14.004 -> fe03003f0001a009]
11:34:24.019 -> New response from S100 meter:246 4 16 31 0 1 17 139 
11:34:24.019 -> mqttPublishRxData: [home/solar/sungrow/esp32c3_s100_emulator/RxBytes:
11:34:24.019 -> f604101f0001118b]
11:34:34.016 -> New response from S100 meter:32 115 0 0 0 1 195 112 
11:34:34.016 -> mqttPublishRxData: [home/solar/sungrow/esp32c3_s100_emulator/RxBytes:
11:34:34.016 -> 207300000001c370]
11:34:34.348 -> Message arrived on topic: home/solar/sungrow/esp32c3_s100_emulator/TxBytes. Message: <20730203275e69>
11:34:34.348 -> Modbus Tx msg to send: [ 32 115 2 3 39 94 105 :7]
11:34:34.348 -> 7 bytes Modbus tx message: < 32 115 2 3 39 94 105 >
11:34:35.211 -> rxCount overflow!
11:34:35.709 -> New response from S100 meter:3 0 0 0 13 130 190 32 3 0 0 0 13 130 190 32 3 0 0 0 13 130 190 32 3 0 0 0 13 130 190 32 3 0 0 0 13 130 190 
11:34:35.709 -> mqttPublishRxData: [home/solar/sungrow/esp32c3_s100_emulator/RxBytes:
11:34:35.709 -> 030000000d82be20030000000d82be20030000000d82be20030000000d82be20030000000d82be]
11:34:35.974 -> Message arrived on topic: home/solar/sungrow/esp32c3_s100_emulator/TxBytes. Message: <20031a00002ebf0000056e00002951091e0000021c0000005c000013836a81>
11:34:35.974 -> Modbus Tx msg to send: [ 32 3 26 0 0 46 191 0 0 5 110 0 0 41 81 9 30 0 0 2 28 0 0 0 92 0 0 19 131 106 129 :31]
11:34:35.974 -> 31 bytes Modbus tx messGuru Meditation Error: Core  0 panic'ed (Instruction access fault). Exception was unhandled.
11:34:35.974 -> 
11:34:35.974 -> Core  0 register dump:
11:34:35.974 -> MEPC    : 0x006e616e  RA      : 0x42006c68  SP      : 0x3fca2800  GP      : 0x3fc90a00  
11:34:36.008 -> TP      : 0x3fca28a0  T0      : 0x7f7f7f7f  T1      : 0x40380354  T2      : 0xffffffff  
11:34:36.008 -> S0/FP   : 0x3fc93980  S1      : 0x3fc94000  A0      : 0x3fc93a00  A1      : 0x3fca280f  
11:34:36.008 -> A2      : 0x00000001  A3      : 0x00000001  A4      : 0x00000000  A5      : 0x006e616e  
11:34:36.008 -> A6      : 0x00000004  A7      : 0x00000009  S2      : 0x00000001  S3      : 0x3fc99000  
11:34:36.041 -> S4      : 0x3fc94000  S5      : 0x3c0c0000  S6      : 0x00000000  S7      : 0x00000000  
11:34:36.041 -> S8      : 0x00000000  S9      : 0x00000000  S10     : 0x00000000  S11     : 0x00000000  
11:34:36.041 -> T3      : 0x652f776f  T4      : 0x32337073  T5      : 0x735f3363  T6      : 0x5f303031  
11:34:36.041 -> MSTATUS : 0x00001881  MTVEC   : 0x40380001  MCAUSE  : 0x00000001  MTVAL   : 0x006e616e  
11:34:36.134 -> MHARTID : 0x00000000  
11:34:36.134 -> 
11:34:36.134 -> Stack memory:
11:34:36.134 -> 3fca2800: 0x00000000 0x00000000 0x00000000 0x20c99000 0x3fc99000 0x3fc94000 0x3fc94000 0x420002aa
11:34:36.134 -> 3fca2820: 0x00000000 0x00000000 0x00000000 0x00000000 0x3fc99000 0x4200d000 0x3fc99000 0x42000136
11:34:36.134 -> 3fca2840: 0x30303033 0x00000000 0x00000000 0x00000000 0x00000000 0x4200d000 0x3fc99000 0x4200afc6
11:34:36.134 -> 3fca2860: 0x00000000 0x00000000 0x00000000 0x403881ea 0x00000000 0x00000000 0x00000000 0x00000000
11:34:36.134 -> 3fca2880: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5
11:34:36.134 -> 3fca28a0: 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xa5a5a5a5 0xbaad5678 0x15fdf73c 0xc0129370 0xcbf4f686
11:34:36.134 -> 3fca28c0: 0xbb014120 0x00e03016 0x929e966f 0x62aaa540 0xbd81cae8 0xe50f5bd6 0xc84c08b6 0xbb6e6505
11:34:36.134 -> 3fca28e0: 0xe8b20461 0xd1c5975a 0x3b65773e 0x3c1102ed 0xd8007dc2 0x638cf032 0x167e8136 0xf9fc1ccc
11:34:36.134 -> 3fca2900: 0x0460b370 0xda383dd0 0x6dd6904a 0x62440f91 0xd904f79f 0xb9d4559b 0xd8b89b4f 0xa64a85a2
11:34:36.134 -> 3fca2920: 0xc571613b 0x42150e60 0xe437f7bf 0x448a3b06 0x5f134579 0xcad6f51b 0x35399a7a 0x5b41d4b7
11:34:36.134 -> 3fca2940: 0xb4947443 0x583922c4 0x4ea3b59c 0x77372cc1 0xe12a9cc8 0x1bfb5746 0x18e1c049 0xfee80f3c
11:34:36.152 -> 3fca2960: 0x28d35c45 0x9c440c06 0x4cb6e28e 0xd1add68d 0x27b315c7 0x1ef2397e 0xf1520207 0xf3f3af89
11:34:36.152 -> 3fca2980: 0x1e403a56 0x7ee10568 0x0b5fa76f 0xf004fcfe 0xc5983ebe 0x6ea13dd5 0x20880629 0xde6298f9
11:34:36.174 -> 3fca29a0: 0xe94bcf31 0x02209ae1 0xb2d69694 0x1a3fe845 0xd2cde1fd 0x4fe2e6a4 0x43c301b0 0x27527c74
11:34:36.174 -> 3fca29c0: 0xbcf96a8c 0xb1e163b8 0x31e4bd25 0x1920d1a4 0xe6c1b7df 0x693eb93d 0x2e4085b1 0x3fd29483
11:34:36.207 -> 3fca29e0: 0xc5b804a5 0x7a4e62ba 0x6b8723ac 0x0a8d1701 0x1f067fc0 0xb0c0fad7 0x5e097b2b 0xbe6c14ce
11:34:36.207 -> 3fca2a00: 0x6a2bec04 0x43c47883 0x4cf23bb7 0x07b6a26d 0x97907e86 0x9a95c98f 0x276ce1cb 0xeda225bb
11:34:36.207 -> 3fca2a20: 0x5662383b 0xc259da97 0x677fb7fb 0x201b3b65 0x79787f4a 0x208ce1a3 0x8419be82 0x414fcf9d
11:34:36.207 -> 3fca2a40: 0x1da56912 0x59582f20 0x2c7eba4e 0x4d85dc38 0x7304b1ca 0xee0db524 0xc22bc5ba 0x59f0b974
11:34:36.240 -> 3fca2a60: 0x2b091472 0xe2b1450b 0x6d60f8e5 0x0c12db44 0x3b3afea3 0x9b9b3cfa 0xc330cc93 0x79b6c660
11:34:36.240 -> 3fca2a80: 0x27c3293c 0x20bc1634 0xe0f01cee 0x8c444277 0xffafe90f 0xc77a7977 0x751d0ca8 0x3edaffb8
11:34:36.240 -> 3fca2aa0: 0xc61526d5 0x3fca08a0 0x00000170 0xabba1234 0x0000015c 0x3fca2720 0x00009aaa 0x3fc9433c
11:34:36.240 -> 3fca2ac0: 0x3fc9433c 0x3fca2ab4 0x3fc94334 0x00000018 0x3fcb0b90 0x3fcb0b90 0x3fca2ab4 0x00000000
11:34:36.273 -> 3fca2ae0: 0x00000001 0x3fca08b0 0x706f6f6c 0x6b736154 0x00000000 0x00000000 0x3fca28a0 0x00000005
11:34:36.273 -> 3fca2b00: 0x00000000 0x00000001 0x00000000 0x3fc9e3c8 0x42016708 0x01b72dff 0x0000000b 0x3fc99ce4
11:34:36.273 -> 3fca2b20: 0x3fc99d4c 0x3fc99db4 0x00000000 0x00000000 0x00000001 0x00000000 0x00000000 0x00000000
11:34:36.273 -> 3fca2b40: 0x4201628e 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
11:34:36.307 -> 3fca2b60: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
11:34:36.307 -> 3fca2b80: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
11:34:36.307 -> 3fca2ba0: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
11:34:36.307 -> 3fca2bc0: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
11:34:36.340 -> 3fca2be0: 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
11:34:36.406 -> 
11:34:36.406 -> 
11:34:36.406 -> 
11:34:36.406 -> ELF file SHA256: 7732dc014
11:34:36.406 -> 
11:34:36.406 -> Rebooting...
11:34:36.406 -> ESP-ROM:esp32c3-api1-20210207
11:34:36.406 -> Build:Feb  7 2021
11:34:36.406 -> rst:0xc (RTC_SW_CPU_RST),boot:0xd (SPI_FAST_FLASH_BOOT)
11:34:36.406 -> Saved PC:0x40386eb2
11:34:36.406 -> SPIWP:0xee
11:34:36.406 -> mode:DIO, clock div:1
11:34:36.406 -> load:0x3fcd5820,len:0x1010
11:34:36.406 -> load:0x403cbf10,len:0x9f4
11:34:36.406 -> load:0x403ce710,len:0x2e94
11:34:36.406 -> entry 0x403cbf10
11:34:46.601 -> 
11:34:46.601 -> 
11:34:46.601 -> 
11:34:46.601 -> Sungrow esp32c3_s100_emulator.ino v2.0 
11:34:46.601 -> 
11:34:46.601 -> 
11:34:46.601 -> Connecting to Tola Park
11:34:47.199 -> ...
11:34:48.196 -> WiFi connected
11:34:48.196 -> IP address: 
11:34:48.196 -> 192.168.1.198
11:34:48.196 -> Attempting MQTT connection...connected
11:34:48.328 -> New response from S100 meter:254 3 80 0 0 1 129 5 
11:34:48.328 -> mqttPublishRxData: [home/solar/sungrow/esp32c3_s100_emulator/RxBytes:
11:34:48.328 -> fe03500000018105]


I'll post the code to Github later :)

So lets change

// Changing the Modbus inter-byte timeout to 10 mSec (from 100 mSec)

// Modbus is operating at 9600 baud so a 10-bit transmittion takes about 1 mSec

#define MODBUS_RX_TIMEOUT 10


And take it for a spin..

After turning off serial debug in the code I got the inverter to report in grid power in the iSolarClod app. Job done! :)





12:15:48.963 -> 

12:15:48.963 -> 

12:15:48.963 -> 

12:15:48.963 -> Sungrow esp32c3_s100_emulator.ino v2.1 

12:15:48.963 -> 

12:15:48.963 -> 

12:15:48.963 -> Connecting to Tola Park

12:15:49.527 -> ...

12:15:50.522 -> WiFi connected

12:15:50.522 -> IP address: 

12:15:50.522 -> 192.168.1.198

12:15:50.555 -> Attempting MQTT connection...connected



(Mon 27th Jul 2026 21:54)

Created an emulator ESP32 devicewhich is tested by the working monitor ESP32 device (which was tested talking to a Sungrow S100 meter)






2026-07-27T21:53:40+0100{"tst":"2026-07-27T21:53:40.899401+0100","topic":"home/solar/sungrow/MonTxBytes","qos":0,"retain":0,"payloadlen":18,"payload":"20030009000212b8"}

2026-07-27T21:53:51+0100{"tst":"2026-07-27T21:53:51.504754+0100","topic":"home/solar/sungrow/MonTxBytes","qos":0,"retain":0,"payloadlen":18,"payload":"20030009000212b8"}

2026-07-27T21:53:52+0100{"tst":"2026-07-27T21:53:52.199721+0100","topic":"home/solar/sungrow/EmuRxBytes","qos":0,"retain":0,"payloadlen":18,"payload":"20030009000212b8"}

2026-07-27T21:53:52+0100{"tst":"2026-07-27T21:53:52.324962+0100","topic":"home/solar/sungrow/Emulated_power","qos":0,"retain":0,"payloadlen":5,"payload":220}

2026-07-27T21:53:52+0100{"tst":"2026-07-27T21:53:52.334065+0100","topic":"home/solar/sungrow/EmuTxBytes","qos":0,"retain":0,"payloadlen":20,"payload":"20030400000898cd5b"}

2026-07-27T21:53:53+0100{"tst":"2026-07-27T21:53:53.272921+0100","topic":"home/solar/sungrow/Feeder_power","qos":0,"retain":0,"payloadlen":5,"payload":220}

2026-07-27T21:53:53+0100{"tst":"2026-07-27T21:53:53.282750+0100","topic":"home/solar/sungrow/MonRxBytes","qos":0,"retain":0,"payloadlen":22,"payload":"8:20030400000898cd5b"}

2026-07-27T21:54:04+0100{"tst":"2026-07-27T21:54:04.145330+0100","topic":"home/solar/sungrow/MonTxBytes","qos":0,"retain":0,"payloadlen":18,"payload":"20030009000212b8"}

2026-07-27T21:54:04+0100{"tst":"2026-07-27T21:54:04.636205+0100","topic":"home/solar/sungrow/EmuRxBytes","qos":0,"retain":0,"payloadlen":18,"payload":"20030009000212b8"}

2026-07-27T21:54:04+0100{"tst":"2026-07-27T21:54:04.826091+0100","topic":"home/solar/sungrow/Emulated_power","qos":0,"retain":0,"payloadlen":5,"payload":316}

2026-07-27T21:54:04+0100{"tst":"2026-07-27T21:54:04.829405+0100","topic":"home/solar/sungrow/EmuTxBytes","qos":0,"retain":0,"payloadlen":20,"payload":"20030400000c58cfcb"}

^C(base) coderdojo@rhubarb:~$ 


So every few requests from the Monitor (made once every 10 secs) it sees the response from the Emulator

'2026-07-27T22:00:10+0100{"tst":"2026-07-27T22:00:10.879481+0100","topic":"home/solar/sungrow/Feeder_power","qos":0,"retain":0,"payloadlen":5,"payload":351}

2026-07-27T22:00:23+0100{"tst":"2026-07-27T22:00:23.306534+0100","topic":"home/solar/sungrow/Feeder_power","qos":0,"retain":0,"payloadlen":5,"payload":156}

2026-07-27T22:00:45+0100{"tst":"2026-07-27T22:00:45.020536+0100","topic":"home/solar/sungrow/Feeder_power","qos":0,"retain":0,"payloadlen":5,"payload":268}

2026-07-27T22:01:07+0100{"tst":"2026-07-27T22:01:07.447752+0100","topic":"home/solar/sungrow/Feeder_power","qos":0,"retain":0,"payloadlen":5,"payload":178}

2026-07-27T22:01:19+0100{"tst":"2026-07-27T22:01:19.742903+0100","topic":"home/solar/sungrow/Feeder_power","qos":0,"retain":0,"payloadlen":5,"payload":266}

2026-07-27T22:02:03+0100{"tst":"2026-07-27T22:02:03.681408+0100","topic":"home/solar/sungrow/Feeder_power","qos":0,"retain":0,"payloadlen":5,"payload":247}

2026-07-27T22:02:16+0100{"tst":"2026-07-27T22:02:16.184611+0100","topic":"home/solar/sungrow/Feeder_power","qos":0,"retain":0,"payloadlen":5,"payload":137}


So next is to connect Monitor to S100 near ESB meter and change Emulator to use values posted to topic "home/solar/sungrow/Feeder_power" rather than the random ones :)




(Sat 25th Jul 2026 16:42) 

It is working over RS485 to the SH3.0RS over two wires (A,B). But the CT sensor needs to be between the consumer unit and the ESB meter clamped on the live wire the correct way round. Otherwise it won't know how much energy from the inverter is being consumed within the house.

My plan is to relay this information using ESP32 devices.

The first step is to capture th current comms between the inverter and the S100 meter. I'm expecting the inverter to be sending read commands every few seconds to the meter to which it responds.

I have found a blue USB RS485 dongle and a MAX485 board attached to a Heltec CubeCell Board Plus.

So I'd like to get something lik Modbus Poll running on my Rhubarb Linux laptop first. However..

(base) coderdojo@rhubarb:~$ date

Sat 25 Jul 2026 16:49:26 IST

(base) coderdojo@rhubarb:~$ ldd --version

ldd (Ubuntu GLIBC 2.39-0ubuntu8.7) 2.39

Copyright (C) 2024 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Written by Roland McGrath and Ulrich Drepper.

(base) coderdojo@rhubarb:~$ cd Downloads/

(base) coderdojo@rhubarb:~/Downloads$ ./"Modbus Poll_0.1.5_amd64.AppImage"

modbus-poll: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.43' not found (required by /tmp/.mount_ModbusLFngMe/usr/lib/libglib-2.0.so.0)

modbus-poll: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.43' not found (required by /tmp/.mount_ModbusLFngMe/usr/lib/libwebkit2gtk-4.1.so.0)

modbus-poll: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.42' not found (required by /tmp/.mount_ModbusLFngMe/usr/lib/libwebkit2gtk-4.1.so.0)

modbus-poll: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.43' not found (required by /tmp/.mount_ModbusLFngMe/usr/lib/libjavascriptcoregtk-4.1.so.0)

modbus-poll: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.43' not found (required by /tmp/.mount_ModbusLFngMe/usr/lib/liblcms2.so.2)

modbus-poll: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.43' not found (required by /tmp/.mount_ModbusLFngMe/usr/lib/libjxl.so.0.11)

(base) coderdojo@rhubarb:~/Downloads$ 


(base) coderdojo@rhubarb:~$ dmesg -w


[  299.296263] usb 1-3: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.62

[  299.296281] usb 1-3: New USB device strings: Mfr=0, Product=2, SerialNumber=0

[  299.296289] usb 1-3: Product: USB2.0-Serial

[  299.346087] usbcore: registered new interface driver usbserial_generic

[  299.346102] usbserial: USB Serial support registered for generic

[  299.347405] usbcore: registered new interface driver ch341

[  299.347423] usbserial: USB Serial support registered for ch341-uart

[  299.347437] ch341 1-3:1.0: ch341-uart converter detected

[  299.347902] usb 1-3: ch341-uart converter now attached to ttyUSB0


https://github.com/gavinying/modpoll


(base) coderdojo@rhubarb:~$ pip3 install 'modpoll[serial]'

(base) coderdojo@rhubarb:~$ modpoll


Modpoll v1.6.0 - A New Command-line Tool for Modbus and MQTT


usage: modpoll [-h] [-v] -f CONFIG [CONFIG ...] [-d] [-r RATE] [-1] [--interval INTERVAL] [--tcp TCP] [--tcp-port TCP_PORT]

               [--udp UDP] [--udp-port UDP_PORT] [--serial SERIAL] [--serial-baud SERIAL_BAUD]

               [--serial-parity {none,odd,even}] [--timeout TIMEOUT] [-o EXPORT] [--mqtt-version {3.1.1,5.0}]

               [--mqtt-host MQTT_HOST] [--mqtt-port MQTT_PORT] [--mqtt-clientid MQTT_CLIENTID]

               [--mqtt-publish-topic-pattern MQTT_PUBLISH_TOPIC_PATTERN]

               [--mqtt-subscribe-topic-pattern MQTT_SUBSCRIBE_TOPIC_PATTERN]

               [--mqtt-diagnostics-topic-pattern MQTT_DIAGNOSTICS_TOPIC_PATTERN] [--mqtt-qos {0,1,2}]

               [--mqtt-user MQTT_USER] [--mqtt-pass MQTT_PASS] [--mqtt-use-tls] [--mqtt-insecure]

               [--mqtt-cacerts MQTT_CACERTS] [--mqtt-tls-version {tlsv1.2,tlsv1.1,tlsv1}] [--mqtt-single]

               [--diagnostics-rate DIAGNOSTICS_RATE] [--autoremove] [--loglevel {DEBUG,INFO,WARNING,ERROR,CRITICAL}]

               [--timestamp] [--delay DELAY] [--framer {default,ascii,rtu,socket}]

modpoll: error: the following arguments are required: -f/--config

(base) coderdojo@rhubarb:~$ modpoll --serial /dev/ttyUSB0


(base) coderdojo@rhubarb:~$ git clone https://github.com/gavinying/modpoll.git

Cloning into 'modpoll'...

remote: Enumerating objects: 1871, done.

remote: Counting objects: 100% (336/336), done.

remote: Compressing objects: 100% (110/110), done.

remote: Total 1871 (delta 267), reused 226 (delta 226), pack-reused 1535 (from 2)

Receiving objects: 100% (1871/1871), 16.17 MiB | 1.71 MiB/s, done.

Resolving deltas: 100% (1093/1093), done.

(base) coderdojo@rhubarb:~$ cat modpoll/contrib/eniwise/scpms6.csv 

device,scpm001,1,,,

poll,holding_register,46001,6,BE_BE,

ref,CT_TYPE,46001,uint16,rw,

ref,CT_RATING,46002,uint16,rw,

ref,DATA_SCALAR,46003,uint16,rw,

ref,ReservedA,46004,uint16,rw,

ref,ReservedB,46005,uint16,rw,

ref,SIGNED_MODE,46006,uint16,rw,

poll,holding_register,46011,92,BE_BE,

ref,Hz,46011,int16,r,Hz,1

ref,V,46012,int16,r,V,1

ref,CH1_A,46013,int16,r,A,1

ref,CH2_A,46014,int16,r,A,1

ref,CH3_A,46015,int16,r,A,1

ref,CH4_A,46016,int16,r,A,1

ref,CH5_A,46017,int16,r,A,1

ref,CH6_A,46018,int16,r,A,1

ref,CH1_kWh,46019,uint32,r,kWh,1

ref,CH2_kWh,46021,uint32,r,kWh,1

ref,CH3_kWh,46023,uint32,r,kWh,1

ref,CH4_kWh,46025,uint32,r,kWh,1

ref,CH5_kWh,46027,uint32,r,kWh,1

ref,CH6_kWh,46029,uint32,r,kWh,1

ref,CH1_kWh_P,46031,uint32,r,kWh,1

ref,CH2_kWh_P,46033,uint32,r,kWh,1

ref,CH3_kWh_P,46035,uint32,r,kWh,1

ref,CH4_kWh_P,46037,uint32,r,kWh,1

ref,CH5_kWh_P,46039,uint32,r,kWh,1

ref,CH6_kWh_P,46041,uint32,r,kWh,1

ref,CH1_kWh_N,46043,uint32,r,kWh,1

ref,CH2_kWh_N,46045,uint32,r,kWh,1

ref,CH3_kWh_N,46047,uint32,r,kWh,1

ref,CH4_kWh_N,46049,uint32,r,kWh,1

ref,CH5_kWh_N,46051,uint32,r,kWh,1

ref,CH6_kWh_N,46053,uint32,r,kWh,1

ref,CH1_kVARh,46055,uint32,r,kVARh,1

ref,CH2_kVARh,46057,uint32,r,kVARh,1

ref,CH3_kVARh,46059,uint32,r,kVARh,1

ref,CH4_kVARh,46061,uint32,r,kVARh,1

ref,CH5_kVARh,46063,uint32,r,kVARh,1

ref,CH6_kVARh,46065,uint32,r,kVARh,1

ref,CH1_kVARh_P,46067,uint32,r,kVARh,1

ref,CH2_kVARh_P,46069,uint32,r,kVARh,1

ref,CH3_kVARh_P,46071,uint32,r,kVARh,1

ref,CH4_kVARh_P,46073,uint32,r,kVARh,1

ref,CH5_kVARh_P,46075,uint32,r,kVARh,1

ref,CH6_kVARh_P,46077,uint32,r,kVARh,1

ref,CH1_kVARh_N,46079,uint32,r,kVARh,1

ref,CH2_kVARh_N,46081,uint32,r,kVARh,1

ref,CH3_kVARh_N,46083,uint32,r,kVARh,1

ref,CH4_kVARh_N,46085,uint32,r,kVARh,1

ref,CH5_kVARh_N,46087,uint32,r,kVARh,1

ref,CH6_kVARh_N,46089,uint32,r,kVARh,1

ref,CH1_kVA,46091,int16,r,kVA,1

ref,CH2_kVA,46092,int16,r,kVA,1

ref,CH3_kVA,46093,int16,r,kVA,1

ref,CH4_kVA,46094,int16,r,kVA,1

ref,CH5_kVA,46095,int16,r,kVA,1

ref,CH6_kVA,46096,int16,r,kVA,1

ref,CH1_PF,46097,int16,r,,1

ref,CH2_PF,46098,int16,r,,1

ref,CH3_PF,46099,int16,r,,1

ref,Reserved1,46100,int16,r,

ref,Reserved2,46101,int16,r,

ref,Reserved3,46102,int16,r,



(base) coderdojo@rhubarb:~$ modpoll   --serial /dev/ttyUSB0   --serial-baud 9600   --config modpoll/contrib/eniwise/scpms6.csv


Modpoll v1.6.0 - A New Command-line Tool for Modbus and MQTT


2026-07-25 17:00:44,347 | I | modpoll.main | No MQTT host specified, skip MQTT setup.

2026-07-25 17:00:44,347 | I | modpoll.modbus_task | Loading config from: modpoll/contrib/eniwise/scpms6.csv

2026-07-25 17:00:44,348 | I | modpoll.modbus_task | Added 1 device(s)...

2026-07-25 17:00:44,348 | I | modpoll.main | Loaded 1 Modbus config(s).

2026-07-25 17:00:44,348 | I | modpoll.main |  === Modpoll is polling at rate:10.0s, actual:10.0s ===

^C2026-07-25 17:00:55,487 | I | modpoll.main | Exiting /home/coderdojo/anaconda3/bin/modpoll

2026-07-25 17:00:56,363 | E | pymodbus.logging | No response received after 3 retries, continue with next request

2026-07-25 17:00:56,363 | E | modpoll.modbus_task | Modbus exception: scpm001 3 46001 6


Device: scpm001

+-------------+-------+-------+

| Reference   | Value | Unit  |

+-------------+-------+-------+

| CT_TYPE     |  None |       |

| CT_RATING   |  None |       |

| DATA_SCALAR |  None |       |

| ReservedA   |  None |       |

| ReservedB   |  None |       |

| SIGNED_MODE |  None |       |

| Hz          |  None | Hz    |

| V           |  None | V     |

| CH1_A       |  None | A     |

| CH2_A       |  None | A     |

| CH3_A       |  None | A     |

| CH4_A       |  None | A     |

| CH5_A       |  None | A     |

| CH6_A       |  None | A     |

| CH1_kWh     |  None | kWh   |

| CH2_kWh     |  None | kWh   |

| CH3_kWh     |  None | kWh   |

| CH4_kWh     |  None | kWh   |

| CH5_kWh     |  None | kWh   |

| CH6_kWh     |  None | kWh   |

| CH1_kWh_P   |  None | kWh   |

| CH2_kWh_P   |  None | kWh   |

| CH3_kWh_P   |  None | kWh   |

| CH4_kWh_P   |  None | kWh   |

| CH5_kWh_P   |  None | kWh   |

| CH6_kWh_P   |  None | kWh   |

| CH1_kWh_N   |  None | kWh   |

| CH2_kWh_N   |  None | kWh   |

| CH3_kWh_N   |  None | kWh   |

| CH4_kWh_N   |  None | kWh   |

| CH5_kWh_N   |  None | kWh   |

| CH6_kWh_N   |  None | kWh   |

| CH1_kVARh   |  None | kVARh |

| CH2_kVARh   |  None | kVARh |

| CH3_kVARh   |  None | kVARh |

| CH4_kVARh   |  None | kVARh |

| CH5_kVARh   |  None | kVARh |

| CH6_kVARh   |  None | kVARh |

| CH1_kVARh_P |  None | kVARh |

| CH2_kVARh_P |  None | kVARh |

| CH3_kVARh_P |  None | kVARh |

| CH4_kVARh_P |  None | kVARh |

| CH5_kVARh_P |  None | kVARh |

| CH6_kVARh_P |  None | kVARh |

| CH1_kVARh_N |  None | kVARh |

| CH2_kVARh_N |  None | kVARh |

| CH3_kVARh_N |  None | kVARh |

| CH4_kVARh_N |  None | kVARh |

| CH5_kVARh_N |  None | kVARh |

| CH6_kVARh_N |  None | kVARh |

| CH1_kVA     |  None | kVA   |

| CH2_kVA     |  None | kVA   |

| CH3_kVA     |  None | kVA   |

| CH4_kVA     |  None | kVA   |

| CH5_kVA     |  None | kVA   |

| CH6_kVA     |  None | kVA   |

| CH1_PF      |  None |       |

| CH2_PF      |  None |       |

| CH3_PF      |  None |       |

| Reserved1   |  None |       |

| Reserved2   |  None |       |

| Reserved3   |  None |       |

+-------------+-------+-------+

(base) coderdojo@rhubarb:~$ ^C

(base) coderdojo@rhubarb:~$ date

Sat 25 Jul 2026 17:00:59 IST

(base) coderdojo@rhubarb:~$ 


Can I set this up to interoogate my simulation of the Sungrow S100 meter?

https://github.com/Linux-RISC/Sungrow-Meter-cheater/issues/1



Monday, 20 July 2026

Trying to talk to all three 24v LFP batteries over BLE

(25/7/26 12:38)

Got some battery inform running 

/home/coderdojo/Arduino/M5 Stamp/BLE_client_v1_3/BLE_client_v1_3.ino

12:38:15.135 -> 

12:38:15.135 -> Looking for BLE device name [BR2262e-s]..

12:38:15.202 -> A BLE Advertised Device named [SP10S009-L8S-100A-B-U] found

12:38:15.235 -> A BLE Advertised Device named [BR2262e-s] found

12:38:15.235 -> Desired BLE Device [BR2262e-s] found

12:38:18.746 -> We are now connected to the BLE Server.

12:38:18.746 -> 0xdd, 0x03, 0x00, 0x19, 0x0a, 0x42, 0x00, 0x00, 0x10, 0x28, 0x27, 0x10, 0x00, 0x7d, 0x2a, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x2b, 0x03, 0x08, 0x01, 0x0b, 0x83, 0xfc, 0xeb, 0x77, 

12:38:18.746 -> Battery current= 0.00 I

12:38:18.746 -> Battery balance=0

12:38:18.746 -> (Not being read!)Battery temperature=0.000000

12:38:18.746 -> messageMask=3

12:38:18.779 -> A BLE Advertised Device named [SP10S009-L8S-100A-B-U] found

12:38:18.779 -> A BLE Advertised Device named [BR2262e-s] found

12:38:18.779 -> Desired BLE Device [BR2262e-s] found

12:38:21.823 -> We are now connected to the BLE Server.

12:38:21.823 -> 0xdd, 0x04, 0x00, 0x10, 0x0c, 0xd4, 0x0c, 0xd3, 0x0c, 0xd3, 0x0c, 0xd2, 0x0c, 0xd2, 0x0c, 0xd2, 0x0c, 0xd3, 0x0c, 0xd4, 0xf8, 0xf9, 0x77, 

12:38:21.823 -> Cell 1=3284 mV, Cell 2=3283 mV, Cell 3=3283 mV, Cell 4=3282 mV, Cell 5=3282 mV, Cell 6=3282 mV, Cell 7=3283 mV, Cell 8=3284 mV, 

12:38:21.823 -> Total volts=26.26 V

12:38:21.823 -> messageMask=7




(25/7/26 10:39)

Just had some success with a M5 Stamp scanning near the batteries..

/home/coderdojo/Arduino/M5 Stamp/Scan/Scan.io



10:49:29.175 -> Advertised Device: Name: SP10S009-L8S-100A-B-U, Address: a4:c1:37:10:00:d2, manufacturer data: d2001037c1a4, serviceUUID: 0000ff00-0000-1000-8000-00805f9b34fb, rssi: -67 

10:49:29.175 -> Advertised Device: Name: , Address: 6e:2e:2e:be:f1:fe, manufacturer data: e000086aca8c48f4, serviceUUID: 0000fe9f-0000-1000-8000-00805f9b34fb, rssi: -83, serviceData:  

10:49:29.473 -> Advertised Device: Name: BR2262e-s, Address: 04:7f:0e:00:1a:7c, manufacturer data: 02a7dc3855a4, serviceUUID: 0000ff00-0000-1000-8000-00805f9b34fb, serviceUUID: 6e40ff00-b5a3-f393-e0a9-e50e24dcca9e, rssi: -69 

10:49:30.536 -> Advertised Device: Name: , Address: 40:00:4d:d3:2d:27, serviceUUID: 0000feed-0000-1000-8000-00805f9b34fb, rssi: -67, serviceData:  

10:49:30.669 -> Advertised Device: Name: DL-401804012334, Address: 40:18:04:01:23:34, manufacturer data: 020316401804012334444c, rssi: -84 

10:49:32.028 -> Advertised Device: Name: , Address: 55:8d:e4:9f:15:a7, serviceUUID: 0000fef3-0000-1000-8000-00805f9b34fb, rssi: -105, serviceData: J#CN2H2X⸮⸮⸮m⸮gLnc⸮)g⸮aB$ 

10:49:32.028 -> Advertised Device: Name: , Address: 40:00:59:aa:b7:e0, serviceUUID: 0000feed-0000-1000-8000-00805f9b34fb, rssi: -76, serviceData:  

10:49:34.153 -> Devices found: 7

10:49:34.153 -> Scan done!


I will next see if I can get battery info!




(20/7/26)

I have three 24v nominal LFP batteries.

Can I use Python3 code to access each over BLE ?

First, "SP10S009-L8S-100A-B-U" A4:C1:37:10:00:D2

Second, "BR2262e-s" 04:7F:0E:00:1A:7C

Third. "????" xx:xx  (daly BMS)


Starting with with First do I write to characteristic 0xFF01 of service 0xFF00 ?


./gatt-python could discover but not connect to "B" or "S"

pi@sionnach:~/gatt-python $ python3 ./discover.py 

Discovered [41:3c:6e:a0:75:f1] 41-3C-6E-A0-75-F1

Discovered [40:00:59:aa:b7:e0] 40-00-59-AA-B7-E0

Discovered [a4:c1:37:10:00:d2] SP10S009-L8S-100A-B-U

Discovered [a4:c1:37:10:00:d2] SP10S009-L8S-100A-B-U

Discovered [04:7f:0e:00:1a:7c] BR2262e-s

Discovered [a4:c1:37:10:00:d2] SP10S009-L8S-100A-B-U

Discovered [a4:c1:37:10:00:d2] SP10S009-L8S-100A-B-U


pi@sionnach:~/gatt-python $ 

pi@sionnach:~/gatt-python $ python3 ./connects_S.py 

[a4:c1:37:10:00:d2] Connection failed: Device does not exist, check adapter name and MAC address.


(2026_05_bleak) pi@sionnach:~/2026_05_bleak also failed.

2026_05_bleak) pi@sionnach:~/2026_05_bleak $ nano scanner_S.py 

(2026_05_bleak) pi@sionnach:~/2026_05_bleak $ 

(2026_05_bleak) pi@sionnach:~/2026_05_bleak $ python3 ./scanner_S.py 

Traceback (most recent call last):

  File "/home/pi/2026_05_bleak/./scanner_S.py", line 37, in <module>

    asyncio.run(main(address))

  File "/usr/lib/python3.11/asyncio/runners.py", line 190, in run

    return runner.run(main)

           ^^^^^^^^^^^^^^^^

  File "/usr/lib/python3.11/asyncio/runners.py", line 118, in run

    return self._loop.run_until_complete(task)


This directory was also no good...


(24v_battery) pi@sionnach:~/24v_battery/bin $ ./gattctl 

Module 'dbus' not found

Please run: sudo apt-get install python3-dbus

See also: https://github.com/getsenic/gatt-python#installing-gatt-sdk-for-python

(24v_battery) pi@sionnach:~/24v_battery/bin $ 


(24v_battery) pi@sionnach:~/jbdtool/build $ 

(24v_battery) pi@sionnach:~/jbdtool/build $ ls ..

battery.h  build.h  changelog  dsfuncs.h  jbd_info.c  list.h    module.h  pack.h    README.md  utils.h

bt.c       can.c    config.h   ip.c       jbd_info.h  main.c    mqtt.c    parson.c  serial.c   uuid.h

buffer.h   cfg.c    daemon.c   jbd.c      LICENSE     Makefile  mqtt.h    parson.h  si.h       worker.h

build      cfg.h    debug.h    jbd.h      list.c      module.c  mybmm.h   r         utils.c

(24v_battery) pi@sionnach:~/jbdtool/build $ 

Also no good



Also no good

(JBD_BMS_BTLE) pi@sionnach:~/JBD_BMS_BTLE $ cd ..


Didn't try aiobmsble as it looks incomplete as no runnable .py script!


Didn't try ANT_BMS as it uses serial port


smart_bms also failed..

docs  dumb_test.py  examples  LICENSE.txt  README.md  requirements.txt  smart_bms  test.py

pi@sionnach:~/smart_bms $ vim test.py 

pi@sionnach:~/smart_bms $ python3 ./test.py 

('A4:C1:37:10:00:D2', 'SP10S009-L8S-100A-B-U', 'Jikong')

WALSH: Running bluetootchctl command <disconnect A4:C1:37:10:00:D2>

WALSH: Running bluetootchctl command <power on>

Traceback (most recent call last):

  File "/usr/lib/python3.11/asyncio/tasks.py", line 490, in wait_for

    return fut.result()

           ^^^^^^^^^^^^

  File "/home/pi/smart_bms/smart_bms/TransportBLE.py", line 70, in _read_inner

    data = [await self._read_queue.get()]




pi@sionnach:~/solar-bt-monitor $ nano solar-bt-monitor.ini

pi@sionnach:~/solar-bt-monitor $ nano solar-bt-monitor.ini.B

pi@sionnach:~/solar-bt-monitor $ 

pi@sionnach:~/solar-bt-monitor $ python3 ./solar-bt-monitor.py 

DEBUG: [CONFIG] mac_addr: A4:C1:37:10:00:D2

DEBUG: [CONFIG] alias: SP10S009-L8S-100A-B-U

DEBUG: [CONFIG] adapter: hci0

DEBUG: [CONFIG] reconnect: True

DEBUG: [CONFIG] continuous_monitor: True

DEBUG: [CONFIG] data_read_interval: 30

DEBUG: [CONFIG] logger_type: prometheus

INFO: Starting Prometheus Server

INFO: Adapter status - Powered: True

INFO: Starting discovery...

INFO: Devices found: 5

INFO: Found bt1 device SP10S009-L8S-100A-B-U  [A4:C1:37:10:00:D2]

INFO: Found bt1 device SP10S009-L8S-100A-B-U  [a4:c1:37:10:00:d2]

DEBUG: Found. So connecting...

DEBUG: _connect() run manager...

INFO: [a4:c1:37:10:00:d2] Discovered, alias = SP10S009-L8S-100A-B-U

INFO: [A4:C1:37:10:00:D2] Connected

INFO: [a4:c1:37:10:00:d2] Discovered, alias = SP10S009-L8S-100A-B-U

INFO: [A4:C1:37:10:00:D2] Resolved services

DEBUG: resolved services

DEBUG: request_data...

DEBUG: create_read_request 256 => [255, 3, 1, 0, 0, 34, 209, 241]

ERROR: Exception in handler for D-Bus signal:

Traceback (most recent call last):

  File "/usr/lib/python3/dist-packages/dbus/connection.py", line 218, in maybe_handle_message

    self._handler(*args, **kwargs)

  File "/home/pi/.local/lib/python3.11/site-packages/gatt/gatt_linux.py", line 398, in properties_changed

    self.services_resolved()

  File "/home/pi/solar-bt-monitor/SolarDevice.py", line 63, in services_resolved

    self.resolved_callback()

  File "/home/pi/solar-bt-monitor/BTOneApp.py", line 95, in on_resolved

    self.request_data()

  File "/home/pi/solar-bt-monitor/BTOneApp.py", line 91, in request_data

    self.device.characteristic_write_value(request)

  File "/home/pi/solar-bt-monitor/SolarDevice.py", line 79, in characteristic_write_value

    self.write_characteristic.write_value(value)

    ^^^^^^^^^^^^^^^^^^^^^^^^^

AttributeError: 'SolarDevice' object has no attribute 'write_characteristic'

INFO: [a4:c1:37:10:00:d2] Discovered, alias = SP10S009-L8S-100A-B-U



^CDEBUG: _connect() keyboard exception...

INFO: gracefully_exit

INFO: Exit: Disconnecting device: SP10S009-L8S-100A-B-U [A4:C1:37:10:00:D2]

pi@sionnach:~/solar-bt-monitor $ 

pi@sionnach:~/solar-bt-monitor $ 

pi@sionnach:~/solar-bt-monitor $ date

Mon 20 Jul 17:40:23 IST 2026

pi@sionnach:~/solar-bt-monitor $ # Got further may be worth debugging?

pi@sionnach:~/solar-bt-monitor $ 

pi@sionnach:~/solar-bt-monitor $ 

Or should I use a wired connection to each BMS ? Scary


What does Android app make of them ?


daly

jbd

xiaoxiang




Hurrah!!!!



(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ vim jbd_bms_bleak2.py 

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ 

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ 

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ 

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ vim ./jbd_bms_bleak2.py 

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ 

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ python3 ./jbd_bms_bleak2.py 

INFO:__main__:Found device: SP10S009-L8S-100A-B-U (A4:C1:37:10:00:D2)

INFO:__main__:Updating BMS data...

INFO:__main__:BMS data: {'voltage': 25.99,

        'current': 0.0,

        'cycle_charge': 0.14,

        'design_capacity': 100,

        'cycles': 584,

        'balancer': 0,

        'problem_code': 4096,

        'battery_level': 0,

        'chrg_mosfet': True,

        'dischrg_mosfet': False,

        'temp_sensors': 2,

        'temp_values': [TempSensor(22.6,

        <T.GENERIC: 0>),

        TempSensor(22.7,

        <T.GENERIC: 0>)],

        'cell_voltages': [3.249,

        3.25,

        3.247,

        3.249,

        3.248,

        3.248,

        3.248,

        3.253],

        'delta_voltage': 0.006,

        'cell_count': 8,

        'cycle_capacity': 3.639,

        'power': 0.0,

        'battery_charging': False,

        'temperature': 22.65,

        'problem': True}

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ date

Mon 20 Jul 2026 19:16:20 IST

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ 


Now lets try that on a Raspberry Pi!

Pythoin version only 3.11 needs to be at least 3.12



(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ 

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ python3 ./jbd_S_bms_bleak.py 

INFO:__main__:Found device: SP10S009-L8S-100A-B-U (A4:C1:37:10:00:D2)

INFO:__main__:Updating BMS data...

INFO:__main__:BMS data: {'voltage': 25.99,

        'current': 0.0,

        'cycle_charge': 0.14,

        'design_capacity': 100,

        'cycles': 584,

        'balancer': 0,

        'problem_code': 4096,

        'battery_level': 0,

        'chrg_mosfet': True,

        'dischrg_mosfet': False,

        'temp_sensors': 2,

        'temp_values': [TempSensor(22.6,

        <T.GENERIC: 0>),

        TempSensor(22.7,

        <T.GENERIC: 0>)],

        'cell_voltages': [3.249,

        3.25,

        3.247,

        3.249,

        3.248,

        3.248,

        3.248,

        3.253],

        'delta_voltage': 0.006,

        'cell_count': 8,

        'cycle_capacity': 3.639,

        'power': 0.0,

        'battery_charging': False,

        'temperature': 22.65,

        'problem': True}

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ 

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ nano jbd_B_bms_bleak.py 

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ 

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ vim jbd_B_bms_bleak.py 

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ 

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ python3 ./jbd_B_bms_bleak.py 

ERROR:root:Device 'BR2262e-s' not found.

(jbd_bms_bleak) (base) coderdojo@rhubarb:~/jbd_bms_bleak$ date

Mon 20 Jul 2026 19:27:29 IST



https://raspberrytips.com/install-latest-python-raspberry-pi/


Trying to build Python 3.12.g on sionnach to run aiobmsble!


pi@sionnach:~/Python-3.13.6 $ sudo make


..

e.o  Modules/_weakref.o  Modules/_abc.o  Modules/_functoolsmodule.o  Modules/_localemodule.o  Modules/_operator.o  Modules/_stat.o  Modules/symtablemodule.o  Modules/pwdmodule.o Modules/getpath.o Python/frozen.o -ldl                           -lm 

sed -e "s,/usr/bin/env python3,/usr/local/bin/python3.13," < ./Tools/scripts/idle3 > build/scripts-3.13/idle3.13

sed -e "s,/usr/bin/env python3,/usr/local/bin/python3.13," < ./Tools/scripts/pydoc3 > build/scripts-3.13/pydoc3.13

The following modules are *disabled* in configure script:

_sqlite3                                                                   


The necessary bits to build these optional modules were not found:

_bz2                      _ctypes                   _ctypes_test           

_curses                   _curses_panel             _dbm                   

_gdbm                     _lzma                     _tkinter               

_uuid                     readline                                         

To find the necessary bits, look in configure.ac and config.log.


Checked 112 modules (33 built-in, 66 shared, 1 n/a on linux-aarch64, 1 disabled, 11 missing, 0 failed on import)

pi@sionnach:~/Python-3.13.6 $ 



pi@sionnach:~/Python-3.13.6 $ sudo make install

..

Looking in links: /tmp/tmpawanvuou

Processing /tmp/tmpawanvuou/pip-25.2-py3-none-any.whl

Installing collected packages: pip

Successfully installed pip-25.2

WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.

pi@sionnach:~/Python-3.13.6 $ 


pi@sionnach:~/Python-3.13.6 $ 

pi@sionnach:~/Python-3.13.6 $ ls -al python

-rwxr-xr-x 1 root root 32817424 Jul 20 23:07 python

pi@sionnach:~/Python-3.13.6 $ date

Tue 21 Jul 10:06:15 IST 2026

pi@sionnach:~/Python-3.13.6 $ ./python

Fatal Python error: Failed to import encodings module

Python runtime state: core initialized

ModuleNotFoundError: No module named 'encodings'


Current thread 0x0000007f8e77d040 (most recent call first):

  <no Python frame>

pi@sionnach:~/Python-3.13.6 $ 

pi@sionnach:~/Python-3.13.6 $ 


So still cannot execute it!

















Thursday, 9 July 2026

Getting NextCloud going on self-hosted Lint Mint server in Tola attic

 (Thurs 9th July 2026) Getting it going on my Lint Mint lserver (from Malcolm STMS)




(Weds 8th July 2026) Getting it going on my Lint Mint laptop (rhubarb)

https://nextcloud.com/install/#aio

https://github.com/nextcloud/all-in-one#how-to-use-this

sudo docker run   --init   --sig-proxy=false   --name nextcloud-aio-mastercontainer   --restart always   --publish 80:80   --publish 8080:8080   --publish 8443:8443   --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config   --volume /var/run/docker.sock:/var/run/docker.sock:ro   ghcr.io/nextcloud-releases/all-in-one:latest


But failed to install as it needs to contact through port 443. I opened up GL.iNet on http://192.168.22.1/ as shannonclare.zapto.org  and bm9364b.glddns.com but this didn't seemd to helps so more needed. Also lets put in on a server desktop in the attic!





Wednesday, 8 July 2026

Getting Home Assistant to run in Docker on a Linux Mint Laptop

(Weds 7th July 2026)
To get HACS installed I followed the instructions at:

https://lazyadmin.nl/smart-home/install-hacs-home-assistan/


But HA couldn't see it to add. So I decided to launch HA using composer on my laptop rather that the CLI "docker run" command.

But first I will relearn docker CLI by watching this video..

https://www.youtube.com/watch?v=DQdB7wFEygo&t=48s


Gave up and used the CLI to restart HA..


(base) coderdojo@rhubarb:~/HomeAssistant$ docker images
                                                                                                             i Info →   U  In Use
IMAGE                                          ID             DISK USAGE   CONTENT SIZE   EXTRA
dockurr/windows:latest                         70a979906f6a        428MB             0B        
ghcr.io/esphome/esphome:latest                 1973bed8914f        739MB             0B        
ghcr.io/home-assistant/home-assistant:stable   ceb81d836a0b       2.36GB             0B    U   
hello-world:latest                             1b44b5a3e06a       10.1kB             0B    U   
(base) coderdojo@rhubarb:~/HomeAssistant$ docker ps
CONTAINER ID   IMAGE                                          COMMAND   CREATED        STATUS        PORTS     NAMES
34693f51fada   ghcr.io/home-assistant/home-assistant:stable   "/init"   10 hours ago   Up 10 hours             homeassistant
(base) coderdojo@rhubarb:~/HomeAssistant$ 
(base) coderdojo@rhubarb:~/HomeAssistant$ docker restart 34693f51fada
34693f51fada
(base) coderdojo@rhubarb:~/HomeAssistant$ docker ps
CONTAINER ID   IMAGE                                          COMMAND   CREATED        STATUS         PORTS     NAMES
34693f51fada   ghcr.io/home-assistant/home-assistant:stable   "/init"   10 hours ago   Up 3 seconds             homeassistant
(base) coderdojo@rhubarb:~/HomeAssistant$ 


So next to see if it can see HACS now..  Nope!


Lets go through these steps..

https://www.simplysmart.house/blog/how-to-install-HACS-on-home-assistant-Docker


That worked when I followed the instructions to a tee include Github sign on :)


Now to add some HACS stuff!  Such as "local tuya"

But cannot access https://github.com/codetheweb/tuyapi/blob/master/docs/SETUP.md

page at present! Huh?






(Tues 7th July 2026)
I tried on a Raspberry Pi first after being excited by watching this video:

https://www.youtube.com/watch?v=PhJIycywIA0&t=133s

but it failed to find an image for that architecture:

pi@tarbh:~ $ cd HomeAssistant/
pi@tarbh:~/HomeAssistant $ cat compose.yaml 
version: '3'
services:
  homeassistant:
    container_name: homeassistant
    image: ghcr.io/home-assistant/home-assistant:stable
    volumes:
      - /home/pi/homeassistant:/config 
      - /etc/localtime:/etc/localtime:ie
      - /run/dbus:/run/dbus:ro 
    restart: unless-stopped 
    privileged: true
    network_mode: host 
pi@tarbh:~/HomeAssistant $ ls
compose.yaml
pi@tarbh:~/HomeAssistant $ docker compose up -d
WARN[0000] /home/pi/HomeAssistant/compose.yaml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
[+] up 0/1
 ⠇ Image ghcr.io/home-assistant/home-assistant:stable Pulling                                                                1.9s
no matching manifest for linux/arm/v8 in the manifest list entries
pi@tarbh:~/HomeAssistant $ 


So next I thought I'd try it on my Linux Mint Laptop..

(base) coderdojo@rhubarb:~/HomeAssistant$ docker run -d   --name homeassistant   --privileged   --restart=unless-stopped   -e TZ=Europe/Dublin   -v /home/coderdojo/HomeAssistant:/config   -v /run/dbus:/run/dbus:ro   --network=host   ghcr.io/home-assistant/home-assistant:stable

Unable to find image 'ghcr.io/home-assistant/home-assistant:stable' locally

stable: Pulling from home-assistant/home-assistant

c5cfc437e4cd: Pull complete 

a0599c81070e: Pull complete 

37f806cc4461: Pull complete 

..

f1ad270565d0: Pull complete 

9a5335991821: Pull complete 

5835c1c32669: Pull complete 

Digest: sha256:f73512ba4fe06bb4d57636fe3578d0820cdec46f81e8f837ab59e451662ff3cb

Status: Downloaded newer image for ghcr.io/home-assistant/home-assistant:stable

34693f51fadad4a6fdc67679ec42cc12cd4da6c8ff024ab25536811e97b6d6e2

(base) coderdojo@rhubarb:~/HomeAssistant$ 



So success! It did take an age on onboard after I created a user account at localhost:8123 and eventually hanged.


But eventually I could login in and access at in another tab at: http://192.168.1.193:8123 event while the first tab was hung :)


Here's how it looks now..



So next to get HACS on it.

















Friday, 26 June 2026

Moving Zigbee smart home sensors to Python3 monitoring (from Node-Red)

So I though a more punchy system service with journal logging might be better than using the web portal or Node-Red logging.

This is the current state of play of all my smart home Zigbee devices:

Sonoff ZbBridge Tasmota_ZbBridge router (192.168.1.151) running Tasmota 12.2.0 by Theo Arends that knows of these devices..


Front Door 🕗19h

Front Presence SNZB06P 🕗95d

Kitchen Door 🕗56m

kitchen window 🕗04h

TRV Frontroom 🕗48d ┆ ☀️ 0.5°C 🎯 6.2°C ⚙️ 0%

TRV James Bedroom 🕗28m ┆ ☀️ 0.5°C 🎯 3.5°C

unknown device ┆ Off

Yard Presence SNZB06P

 back_bedroom 🕗72d ┆ ☀️ 17.8°C 💧 84%

Bathroom 🕗06m ┆ ☀️ 27.0°C 💧 74%

bathroom window 🕗11h

electric blanket 🕗43m┆ Off

Electric Heater ┆ ☀️ 12.1°C

Front Room Ceiling Light  ┆ On 🔅 0% #FF0000

front_bedroom ┆ ☀️ 16.3°C 💧 77%

front_room_3x_power ┆ On

Frontroom ┆ ☀️ 20.2°C 💧 68%

Hallway 🕗39m ┆ ☀️ 18.5°C 💧 78%

Kitchen 🕗48m┆ ☀️ 23.7°C 💧 89%

Kitchen Repeater  ðŸ•—23h

kitchen_led 🕗10m┆ Off 🔅 0% #FF0000

Office 🕗04m┆ ☀️ 25.1°C 💧 75%

PIR Pergola  

PIR Porch 🕗31d

PIR Studio  

Shower Pump Switch 🕗01h

SNZB02D Front room window ┆ ☀️ 19.2°C 💧 50%

SNZB02D James Bedroom 🕗03m┆ ☀️ 24.7°C 💧 68%

Tony Bedroom Door  

tony_LED ┆ Off 🔅 0% #FF0000

tonys window 🕗62d

TRV Front Room ┆ ☀️ 17.0°C 🎯 15.0°C ⚙️ 0%

TRV Kitchen 🕗08m┆ ☀️ 0.5°C 🎯 3.5°C ⚙️ 0%

TRV Office 🕗00m┆ ☀️ 0.5°C 🎯 3.5°C

TRV Seans Bedroom 🕗06m┆ ☀️ 0.5°C 🎯 3.5°C

TRV Tonys Bedroom ┆ ☀️ 18.5°C 🎯 15.0°C ⚙️ 0%

Upstairs Repeater 🕗19h

Device 0x130C  

Device 0x135E 🕗06m

Device 0x16AD  

Device 0x3794 ┆ Off 🔅 0% #FF0000

Device 0x4B3E

Device 0x6568

Device 0x6640

Device 0x803A 🕗62d┆ On

Device 0x8826  

Device 0x894A  

Device 0xABAD  

Device 0xCFF7  

Device 0xEE12  

Device 0xF394

 

So this is a mess! So I will audit every mentioned device and checking its still communicating and changing its name to include its adress, location and function.. e.g  0xXXXX_kitchen_TRV

zblist command on web consule returns


10:31:45.936 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0xEE12":{"Device":"0xEE12","IEEEAddr":"0xBC33ACFFFE37F766","Endpoints":[],"Config":[],"Reachable":false,"LastSeen":43334975,"LastSeenEpoch":1739131330,"LinkQuality":92}}}

10:31:45.954 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0x130C":{"Device":"0x130C","IEEEAddr":"0x0000000000000000","Endpoints":[1],"Config":["I01"],"Occupancy":0,"Reachable":false,"LastSeen":13798156,"LastSeenEpoch":1768668149,"LinkQuality":76}}}

10:31:45.971 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0x6640":{"Device":"0x6640","IEEEAddr":"0x00124B001CD60DD6","ModelId":"TH01","Manufacturer":"eWeLink","Endpoints":[1],"Config":[],"Reachable":false,"LastSeen":37289674,"LastSeenEpoch":1745176631,"LinkQuality":89}}}

10:31:45.988 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0x8826":{"Device":"0x8826","IEEEAddr":"0x00124B001F918A6E","ModelId":"TH01","Manufacturer":"eWeLink","Endpoints":[1],"Config":[],"Reachable":false,"LastSeen":37288605,"LastSeenEpoch":1745177700,"LinkQuality":63}}}

10:31:46.002 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0x894A":{"Device":"0x894A","IEEEAddr":"0x00124B001F91D531","ModelId":"TH01","Manufacturer":"eWeLink","Endpoints":[1],"Config":[],"Reachable":false,"LastSeen":37288485,"LastSeenEpoch":1745177820,"LinkQuality":81}}}

10:31:46.017 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0x16AD":{"Device":"0x16AD","IEEEAddr":"0x00124B001F918CBF","ModelId":"TH01","Manufacturer":"eWeLink","Endpoints":[1],"Config":[],"Reachable":false,"LastSeen":37288166,"LastSeenEpoch":1745178140,"LinkQuality":84}}}

10:31:46.034 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0xF394":{"Device":"0xF394","IEEEAddr":"0x00124B001CD5956C","ModelId":"TH01","Manufacturer":"eWeLink","Endpoints":[1],"Config":[],"Reachable":false,"LastSeen":37287943,"LastSeenEpoch":1745178363,"LinkQuality":128}}}

10:31:46.049 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0xCFF7":{"Device":"0xCFF7","IEEEAddr":"0x00124B001F91991B","ModelId":"WB01","Manufacturer":"eWeLink","Endpoints":[1],"Config":[],"Reachable":false,"LastSeen":37286879,"LastSeenEpoch":1745179427,"LinkQuality":63}}}

10:31:46.066 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0xABAD":{"Device":"0xABAD","IEEEAddr":"0x00124B001FAF2ACC","ModelId":"MS01","Manufacturer":"eWeLink","Endpoints":[1],"Config":[],"Reachable":false,"BatteryPercentage":100,"BatteryLastSeenEpoch":1745179511,"LastSeen":37237312,"LastSeenEpoch":1745228994,"LinkQuality":50}}}

10:31:46.084 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0x4B3E":{"Device":"0x4B3E","IEEEAddr":"0x00124B001FAF4F89","ModelId":"ms01","Manufacturer":"eWeLink","Endpoints":[1],"Config":[],"Reachable":false,"BatteryPercentage":100,"BatteryLastSeenEpoch":1745179507,"LastSeen":37237312,"LastSeenEpoch":1745228994,"LinkQuality":48}}}

10:31:46.103 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0x3794":{"Device":"0x3794","IEEEAddr":"0x0000000000000000","Endpoints":[1],"Config":["L01","O01"],"Dimmer":1,"Hue":0,"Sat":254,"X":45874,"Y":19660,"CT":500,"ColorMode":2,"RGB":"FF0000","RGBb":"010000","Power":0,"Reachable":false,"LastSeen":12825219,"LastSeenEpoch":1769641087,"LinkQuality":29}}}

10:31:46.121 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0x6568":{"Device":"0x6568","IEEEAddr":"0x0000000000000000","Endpoints":[],"Config":[],"Reachable":false,"LastSeen":9646458,"LastSeenEpoch":1772819848,"LinkQuality":58}}}

10:31:46.138 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbInfo":{"0x135E":{"Device":"0x135E","IEEEAddr":"0x0000000000000000","Endpoints":[1],"Config":["I01"],"Occupancy":0,"Reachable":true,"LastSeen":443,"LastSeenEpoch":1782465863,"LinkQuality":115}}}

10:31:46.152 MQT: stat/tasmota_zbbridge_0576A9/RESULT = {"ZbInfo":"Done"}


We need a list by device address !

10:33:54.401 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbReceived":{"0xEF0E":{"Device":"0xEF0E","Name":"Bathroom","BatteryPercentage":64,"Endpoint":1,"LinkQuality":102}}}

10:34:21.904 MQT: tele/tasmota_zbbridge_0576A9/SENSOR = {"ZbReceived":{"0xE1B9":{"Device":"0xE1B9","Name":"Office","Temperature":25.3,"Endpoint":1,"LinkQuality":102}}}


0xEF0E Bathroom 



Sonoff  SNZB-01P Switch

Sonoff SNZB-02    Temperature and Humidity


Fresh audit..

Tonys Bedroom  SNZB-02"Device":"0x9AFE","Name":"back_bedroom" needs CR2450 battery

now online