In my setup i have to read different input register from an SDM120 Modbus power monitor. I have it connected via ad RS232 to TCP converter.
This is the documentation of the protocol: http://www.eastroneurope.com/media/_system/tech_specs/3914/SDM120%20PROTOCOL.pdf
This is my modbus.things
Bridge modbus:tcp:TCPContatore [ host="192.168.2.98", port=502, id=1 ] {
Bridge poller inputRegisters [ start=0, length=2, refresh=1000, type="input" ] {
Thing data voltage [ readStart="0", readValueType="float32" ]
Thing data current [ readStart="6", readValueType="float32" ]
Thing data activepower [ readStart="12", readValueType="float32" ]
Thing data frequency [ readStart="70", readValueType="float32" ]
Thing data importactiveenergy [ readStart="72", readValueType="float32" ]
}
}
This is my modbus.items:
Group energy_items
Number contatore_voltaggio "Voltaggio [%.1f V]" (energy_items) { channel="modbus:data:TCPContatore:inputRegisters:voltage:number" }
Number contatore_current "Corrente [%.1f A]" (energy_items) { channel="modbus:data:TCPContatore:inputRegisters:current:number" }
Number contatore_frequency "Frequenza [%.1f Hz]" (energy_items) { channel="modbus:data:TCPContatore:inputRegisters:frequency:number" }
Number contatore_activepower "Potenza [%.1f W]" (energy_items) { channel="modbus:data:TCPContatore:inputRegisters:activepower:number" }
Number contatore_importactiveenergy "Consumi [%.1f kWh]" (energy_items) { channel="modbus:data:TCPContatore:inputRegisters:importactiveenergy:number" }
Only the first item (contatore_voltaggio) is being updated. I also looked at the log in Trace mode, only calls for updating contatore_voltaggio are being made.
This is a section of the log:
21:13:13.542 [DEBUG] [.handler.ModbusPollerThingHandlerImpl] - Thing modbus:poller:TCPContatore:inputRegisters received registers RegisterArrayWrappingInputRegister(43 66 99 9a) for request ModbusPollerThingHandlerImpl.ModbusPollerReadRequest@35fbab6[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=0,length=2,maxTries=3]
21:13:13.545 [TRACE] [ternal.handler.ModbusDataThingHandler] - Channel number will be updated to '230.60000610351562' (type DecimalType). Input data: number value 230.60000610351562 (value type 'float32' taken into account) and bool value true. Transformation: <identity>
21:13:13.551 [INFO ] [smarthome.event.ItemStateChangedEvent] - contatore_voltaggio changed from 230.1999969482422 to 230.60000610351562
21:13:13.552 [DEBUG] [ternal.handler.ModbusDataThingHandler] - Thing modbus:data:TCPContatore:inputRegisters:voltage channels updated: {modbus:data:TCPContatore:inputRegisters:voltage:number=230.60000610351562}. readValueType=float32, readIndex=Optional[0], readSubIndex(or 0)=0, extractIndex=0 -> numeric value 230.60000610351562 and boolValue=true. Registers RegisterArrayWrappingInputRegister(43 66 99 9a) for request ModbusPollerThingHandlerImpl.ModbusPollerReadRequest@35fbab6[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=0,length=2,maxTries=3]
21:13:14.831 [DEBUG] [.handler.ModbusPollerThingHandlerImpl] - Thing modbus:poller:TCPContatore:inputRegisters received registers RegisterArrayWrappingInputRegister(43 67 00 00) for request ModbusPollerThingHandlerImpl.ModbusPollerReadRequest@35fbab6[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=0,length=2,maxTries=3]
21:13:14.833 [TRACE] [ternal.handler.ModbusDataThingHandler] - Channel number will be updated to '231.0' (type DecimalType). Input data: number value 231.0 (value type 'float32' taken into account) and bool value true. Transformation: <identity>
21:13:14.838 [DEBUG] [ternal.handler.ModbusDataThingHandler] - Thing modbus:data:TCPContatore:inputRegisters:voltage channels updated: {modbus:data:TCPContatore:inputRegisters:voltage:number=231.0}. readValueType=float32, readIndex=Optional[0], readSubIndex(or 0)=0, extractIndex=0 -> numeric value 231.0 and boolValue=true. Registers RegisterArrayWrappingInputRegister(43 67 00 00) for request ModbusPollerThingHandlerImpl.ModbusPollerReadRequest@35fbab6[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=0,length=2,maxTries=3]
21:13:14.842 [INFO ] [smarthome.event.ItemStateChangedEvent] - contatore_voltaggio changed from 230.60000610351562 to 231.0
21:13:16.067 [DEBUG] [.handler.ModbusPollerThingHandlerImpl] - Thing modbus:poller:TCPContatore:inputRegisters received registers RegisterArrayWrappingInputRegister(43 66 b3 33) for request ModbusPollerThingHandlerImpl.ModbusPollerReadRequest@35fbab6[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=0,length=2,maxTries=3]
21:13:16.069 [TRACE] [ternal.handler.ModbusDataThingHandler] - Channel number will be updated to '230.6999969482422' (type DecimalType). Input data: number value 230.6999969482422 (value type 'float32' taken into account) and bool value true. Transformation: <identity>
21:13:16.074 [DEBUG] [ternal.handler.ModbusDataThingHandler] - Thing modbus:data:TCPContatore:inputRegisters:voltage channels updated: {modbus:data:TCPContatore:inputRegisters:voltage:number=230.6999969482422}. readValueType=float32, readIndex=Optional[0], readSubIndex(or 0)=0, extractIndex=0 -> numeric value 230.6999969482422 and boolValue=true. Registers RegisterArrayWrappingInputRegister(43 66 b3 33) for request ModbusPollerThingHandlerImpl.ModbusPollerReadRequest@35fbab6[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=0,length=2,maxTries=3]
21:13:16.077 [INFO ] [smarthome.event.ItemStateChangedEvent] - contatore_voltaggio changed from 231.0 to 230.6999969482422
21:13:16.275 [INFO ] [smarthome.event.ItemStateChangedEvent] - solar_voltage changed from 132.6697540283203 to 132.00257873535156
21:13:16.315 [INFO ] [smarthome.event.ItemStateChangedEvent] - cucina_hum changed from 42.40 to 42.50
21:13:16.637 [INFO ] [smarthome.event.ItemStateChangedEvent] - solar_current changed from 0.02094560069963336 to 0.021751200780272484
21:13:17.306 [DEBUG] [.handler.ModbusPollerThingHandlerImpl] - Thing modbus:poller:TCPContatore:inputRegisters received registers RegisterArrayWrappingInputRegister(43 66 66 66) for request ModbusPollerThingHandlerImpl.ModbusPollerReadRequest@35fbab6[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=0,length=2,maxTries=3]
21:13:17.309 [TRACE] [ternal.handler.ModbusDataThingHandler] - Channel number will be updated to '230.39999389648438' (type DecimalType). Input data: number value 230.39999389648438 (value type 'float32' taken into account) and bool value true. Transformation: <identity>
21:13:17.319 [INFO ] [smarthome.event.ItemStateChangedEvent] - contatore_voltaggio changed from 230.6999969482422 to 230.39999389648438
21:13:17.324 [DEBUG] [ternal.handler.ModbusDataThingHandler] - Thing modbus:data:TCPContatore:inputRegisters:voltage channels updated: {modbus:data:TCPContatore:inputRegisters:voltage:number=230.39999389648438}. readValueType=float32, readIndex=Optional[0], readSubIndex(or 0)=0, extractIndex=0 -> numeric value 230.39999389648438 and boolValue=true. Registers RegisterArrayWrappingInputRegister(43 66 66 66) for request ModbusPollerThingHandlerImpl.ModbusPollerReadRequest@35fbab6[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=0,length=2,maxTries=3]
21:13:18.001 [INFO ] [smarthome.event.ItemStateChangedEvent] - sala_hum changed from 46.50 to 46.60
21:13:18.550 [DEBUG] [.handler.ModbusPollerThingHandlerImpl] - Thing modbus:poller:TCPContatore:inputRegisters received registers RegisterArrayWrappingInputRegister(43 67 00 00) for request ModbusPollerThingHandlerImpl.ModbusPollerReadRequest@35fbab6[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=0,length=2,maxTries=3]
21:13:18.552 [TRACE] [ternal.handler.ModbusDataThingHandler] - Channel number will be updated to '231.0' (type DecimalType). Input data: number value 231.0 (value type 'float32' taken into account) and bool value true. Transformation: <identity>
21:13:18.554 [DEBUG] [ternal.handler.ModbusDataThingHandler] - Thing modbus:data:TCPContatore:inputRegisters:voltage channels updated: {modbus:data:TCPContatore:inputRegisters:voltage:number=231.0}. readValueType=float32, readIndex=Optional[0], readSubIndex(or 0)=0, extractIndex=0 -> numeric value 231.0 and boolValue=true. Registers RegisterArrayWrappingInputRegister(43 67 00 00) for request ModbusPollerThingHandlerImpl.ModbusPollerReadRequest@35fbab6[slaveId=1,functionCode=READ_INPUT_REGISTERS,start=0,length=2,maxTries=3]
21:13:18.558 [INFO ] [smarthome.event.ItemStateChangedEvent] - contatore_voltaggio changed from 230.39999389648438 to 231.0
I’m new to modbus, but i don’t see anything wrong. Can you help me?