Weewx

To get Weewx to read Modbus sensors using a EW11 (RS485-wifi), Weewx-ModbusTcp and pymodbus.
As at 26-Jan-2026 I had to make a fix to Weewx-ModbusTcp. Replace “device_id” with “slave” at line 294.


             #  rr_read = self.read_holding_registers(address=register, count=length, device_id=slave_id)
                rr_read = self.read_holding_registers(address=register, count=length, slave=slave_id)

To test a Modbus temperature/humidity sensor connected to a EW11 wifi-to-RS48 adapter.
This reads the first 2 holding registers from the Modbus sensor with address 4.  To run it:  $ sudo python3 pymodbus_modbus-temp-example.py

The yellow LED on the EW11 RJ45 connector indicates activity.  The green LED indicates wifi activity.


#!/usr/bin/env python3
"""Read temperature from a Modbus sensor."""

from pymodbus.client import ModbusTcpClient

def read_temperature():
    # Connect to device
    client = ModbusTcpClient('192.168.1.90', port=502)

    if client.connect():
        print("✓ Connected to device")

        # Read temperature (assuming it's at register 0)
        # result = client.read_holding_registers(address=0, count=2) - original example missing slave id.
        result = client.read_holding_registers(address=0, count=2, slave=4)

        if not result.isError():
            # Convert register value to temperature
            # Many devices store temperature * 10
            temperature = result.registers[0] / 100.0
            print(f"Temperature: {temperature}°C")
            humidity = result.registers[1] / 10.0
            print(f"Humidity: {humidity}%")
        else:
            print(f"Error: {result}")

        client.close()
    else:
        print("✗ Failed to connect")

if __name__ == "__main__":
    read_temperature()

.


.

.