{
  "spec_version": 1,
  "slug": "eastron-sdm120",
  "manufacturer": "Eastron",
  "model": "SDM120-Modbus",
  "category": "Energy meter",
  "supplier_url": "https://www.eastroneurope.com/products/sdm120-modbus",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "None",
      "baud_rate": 2400,
      "data_bits": 8,
      "stop_bits": 1
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 0,
      "count": 2,
      "name": "Voltage",
      "data_type": "Float32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 6,
      "count": 2,
      "name": "Current",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12,
      "count": 2,
      "name": "Power (Active)",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 18,
      "count": 2,
      "name": "Power (Apparent)",
      "data_type": "Float32",
      "units": "VA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 24,
      "count": 2,
      "name": "Power (Reactive)",
      "data_type": "Float32",
      "units": "VAr",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 30,
      "count": 2,
      "name": "Power Factor",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 36,
      "count": 2,
      "name": "Phase Angle",
      "data_type": "Float32",
      "units": "°",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 70,
      "count": 2,
      "name": "Frequency",
      "data_type": "Float32",
      "units": "Hz",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 72,
      "count": 2,
      "name": "Imported Energy (Active)",
      "data_type": "Float32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 74,
      "count": 2,
      "name": "Exported Energy (Active)",
      "data_type": "Float32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 76,
      "count": 2,
      "name": "Imported Energy (Reactive)",
      "data_type": "Float32",
      "units": "kVArh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 78,
      "count": 2,
      "name": "Exported Energy (Reactive)",
      "data_type": "Float32",
      "units": "kVArh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 84,
      "count": 2,
      "name": "Total Demand Power (Active)",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 86,
      "count": 2,
      "name": "Maximum Total Demand Power (Active)",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 88,
      "count": 2,
      "name": "Import Demand Power (Active)",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 90,
      "count": 2,
      "name": "Maximum Import Demand Power (Active)",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 92,
      "count": 2,
      "name": "Export Demand Power (Active)",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 94,
      "count": 2,
      "name": "Maximum Export Demand Power (Active)",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 258,
      "count": 2,
      "name": "Total Demand Current",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 264,
      "count": 2,
      "name": "Maximum Total Demand Current",
      "data_type": "Float32",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 342,
      "count": 2,
      "name": "Total Energy (Active)",
      "data_type": "Float32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 344,
      "count": 2,
      "name": "Total Energy (Reactive)",
      "data_type": "Float32",
      "units": "kVArh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    }
  ],
  "holding_registers": [
    {
      "address": 0,
      "count": 2,
      "name": "Demand Time",
      "data_type": "Float32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 2,
      "count": 2,
      "name": "Demand Period",
      "data_type": "Float32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 12,
      "count": 2,
      "name": "Relay Pulse Width",
      "data_type": "Float32",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 18,
      "count": 2,
      "name": "Network Parity Stop",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Values: 0 = N-1, 1 = E-1, 2 = O-1, 3 = N-2."
    },
    {
      "address": 20,
      "count": 2,
      "name": "Meter ID",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 28,
      "count": 2,
      "name": "Baud Rate",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Values: 0 = 2400, 1 = 4800, 2 = 9600, 5 = 1200."
    },
    {
      "address": 86,
      "count": 2,
      "name": "P1 Output Mode",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Values: 0 = 0, 1 = Import Energy (Active), 2 = Import + Export Energy (Active), 3 = 3, 4 = Export Energy (Active), 5 = Import Energy (Reactive), 6 = Import + Export Energy (Reactive), 7 = 7, 8 = Export Energy (Reactive)."
    },
    {
      "address": 63744,
      "count": 2,
      "name": "Display Scroll Timing",
      "data_type": "Float32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 63760,
      "count": 2,
      "name": "P1 Divisor",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Values: 0 = 0.001kWh/imp, 1 = 0.01kWh/imp, 2 = 0.1kWh/imp, 3 = 1kWh/imp."
    },
    {
      "address": 63776,
      "count": 2,
      "name": "Measurement Mode",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Values: 0 = 0, 1 = Total Imported, 2 = Total Imported + Exported, 3 = Total Imported - Exported."
    },
    {
      "address": 63792,
      "count": 2,
      "name": "Pulse/LED Indicator Mode",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Values: 0 = Import + Export Energy (Active), 1 = Import Energy (Active), 2 = Export Energy (Active)."
    },
    {
      "address": 64512,
      "count": 2,
      "name": "Serial Number",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 64515,
      "count": 2,
      "name": "Software Version",
      "data_type": "Float32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    }
  ],
  "combined_registers": [],
  "notes": "RS-485 device: reach it through a Modbus RTU-to-TCP gateway using the factory serial settings above. Measurements are IEEE-754 Float32 values (high word first) read with function code 04; the configuration registers are read/written with function code 03."
}
