Reading Orno WE 515 Single Phase Modbus Meter


I am trying to fathom out how to read a Orno WE 515 Modbus meter.

The table of Registers for this meter shows:

At present in my emonhub.conf I have

    Type = EmonHubMinimalModbusInterfacer
        device = /dev/ttyUSB0
        baud = 9600
        parity = even
        datatype = int

        pubchannels = ToEmonCMS,
        read_interval = 10
        nodename = we515
                address = 1
                registers = 304, 305, 314, 321, 344
                names = Frequency, Voltage, Current ,Power ,PowerFactor
                precision = 2, 2, 3, 3, 3
                scales = 0.01, 0.01, 0.001, 0.001, 0.001

This works for low values of current and power because it is reading the ‘low byte’ values of the current and power values, but clearly this is not going to work when the current drawn is large enough that the ‘high byte’ values of the 139H-13AH and 140H-141H registers are being used.

So how do I read both 139H and 13AH registers and combine them to represent the true measured current values and the 140H and 141H registers for the Power measurement ?

Presently I’m testing using a USB to RS485 adaptor, but later I will want to change to use a Ethernet/Wifi to RS485 device (probably the WaveShare DIN Rail version) and so presumably I will need to change to using the EmonModbusTcpInterfacer (once I fathom out the how to configure the WaveShare unit).

Just in case anyone else is trying to get one of these to work.

I failed to fathom out if the MinimalModbusIntergfacer could be made to work (with USB to RS-485).

I did write my own python code (based on something I found on GitHub) to read the meter and post the readings via MQTT, that is not really what I wanted to achieve, but at least I learned how to read the meter.

I have managed to get it working using the EmonModbusTcpInterfacer and a Waveshare RS-485 to EtherNet / Wifi converter (for just a single meter device so far - I may want to read more later).

These are the settings I used in emonhub.conf

    Type = EmonModbusTcpInterfacer
        modbus_IP =   # ip address of client to retrieve data from
        modbus_port = 8899          # Portclient listens on
        # List of starting registers
        # These need to be 1 higher than the device as the code takes one off (very odd)
        register = 305, 306, 314, 321, 329, 337, 345, 0xA001
        nodeId = 30
        # Channel to publish data to should leave as ToEmonCMS
        pubchannels = ToEmonCMS,
        # time in seconds between checks, This is in addition to sleep time of .01
        # use this value to set the frequency of data retrieval from modbus client
        interval = 10

    nodename = we515
        # list of names of items being retrieved
        names = Frequency, Voltage, Current, Active Power, Reactive Power, Apparent Power, Power Factor, Total Active Power
        datacodes = H, H, L, L, L, L, H, L
        scales = 0.01, 0.01, 0.001, 1, 1, 1, 0.001, 0.01
        units = H, V, I, W, W, W, PF, kW