A Domoticz Python plugin for reading Eastron SDM energy meters over Modbus RS485.
Supports multiple meters on a single RS485 bus from one plugin instance — no more serial port conflicts or duplicate hardware entries.
| Meter | Phases | Registers |
|---|---|---|
| SDM72 | 3P | 15 |
| SDM72V2 | 3P | 15 |
| SDM120 | 1P | 10 |
| SDM230 | 1P | 10 |
| SDM630 | 3P | 24 |
- Domoticz 2023.2 or newer
- USB to RS485 converter module (e.g. CH340, FTDI, etc.)
- Python 3 (included with Domoticz)
cd ~/domoticz/plugins
git clone https://github.com/gizmocuz/SDM630-Modbus
sudo systemctl restart domoticzCopy the example configuration file and edit it for your setup:
cd ~/domoticz/plugins/SDM630-Modbus
cp config.json.example config.json
nano config.jsonDefine each meter on your RS485 bus:
{
"meters": [
{"name": "Shed", "type": "SDM72V2", "id": 1, "offset": 0, "enabled": true},
{"name": "House", "type": "SDM120", "id": 2, "offset": 1, "enabled": false},
{"name": "Garage", "type": "SDM630", "id": 5, "offset": 2, "enabled": true}
]
}| Field | Description |
|---|---|
name |
Prefix for device names in Domoticz (e.g. "Shed - L1 Voltage") |
type |
Meter model: SDM72, SDM72V2, SDM120, SDM230, or SDM630 |
id |
Modbus slave address (1–247), must match the meter's configured ID |
offset |
Unique value 0–9, determines which Domoticz Unit range is used (each offset reserves 25 units) |
enabled |
Set to false to skip a meter without removing it from the config |
- Go to Setup → Hardware
- Select Eastron SDM630-Modbus from the Type dropdown
- Set the serial port (e.g.
/dev/ttyUSB0) - Set the baud rate (must match your meters, typically
9600) - Set the poll interval in seconds (minimum 5)
- Click Add
The plugin reads the meter configuration from config.json — the Domoticz hardware page only configures the serial port and timing.
sudo systemctl restart domoticzCheck the Domoticz log for:
Eastron Modbus plugin started. 2 meter(s) configured.
- Each meter must have a unique Modbus ID configured on the meter itself (via the meter's front panel menu)
- Each meter must have a unique offset value in config.json
- Disabled meters are skipped entirely — no serial traffic, no devices created
- If a single meter fails to respond, the plugin logs the error and continues polling the remaining meters
- The plugin uses a single serial port connection, polling meters sequentially to avoid RS485 bus collisions
Forked from MFxMF/SDM630-Modbus. Register definitions based on nmakel/sdm_modbus.