(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:~$

