{
  "spec_version": 1,
  "slug": "stiebel-isg-wpm",
  "manufacturer": "STIEBEL ELTRON",
  "model": "WPM / WPM 3 / WPM 3i heat pump manager via ISG web",
  "category": "Heat pump",
  "supplier_url": "https://www.stiebel-eltron.co.uk/en/service/smart-home/modbus.html",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "one_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 507,
      "count": 1,
      "name": "Outside temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 508,
      "count": 1,
      "name": "Actual temperature heating circuit 1",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Room temperature of heating circuit 1 (WPMsystem, WPM 3)."
    },
    {
      "address": 509,
      "count": 1,
      "name": "Set temperature heating circuit 1",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 511,
      "count": 1,
      "name": "Actual temperature heating circuit 2",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 512,
      "count": 1,
      "name": "Set temperature heating circuit 2",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 513,
      "count": 1,
      "name": "Actual flow temperature heat pump",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 514,
      "count": 1,
      "name": "Actual flow temperature additional heat stage",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 515,
      "count": 1,
      "name": "Actual flow temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 516,
      "count": 1,
      "name": "Actual return temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 518,
      "count": 1,
      "name": "Actual buffer temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 519,
      "count": 1,
      "name": "Set buffer temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 521,
      "count": 1,
      "name": "Flow rate",
      "data_type": "Int16",
      "units": "l/min",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 522,
      "count": 1,
      "name": "Actual DHW temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 523,
      "count": 1,
      "name": "Set DHW temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 2501,
      "count": 1,
      "name": "Operating status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-coded: B0 = heating circuit 1 pump, B1 = heating circuit 2 pump, B2 = heat-up program, B3 = additional heat stages running, B4 = heat pump in heating mode, B5 = heat pump in DHW mode, B6 = compressor running, B7 = summer mode active, B8 = cooling mode active, B9 = at least one heat pump in defrost, B10 = silent mode 1 active, B11 = silent mode 2 active (heat pump off)."
    },
    {
      "address": 2502,
      "count": 1,
      "name": "Power-off (utility lock)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-coded: B0 = power-off active (EVU lock)."
    },
    {
      "address": 2503,
      "count": 1,
      "name": "Operating status compressors and buffer pumps",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit-coded: B0-B5 = compressor 1-6, B6-B11 = buffer charging pump 1-6."
    },
    {
      "address": 2504,
      "count": 1,
      "name": "Fault status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = no fault, 1 = system fault. Faults can only be acknowledged on the ISG service interface, not over Modbus."
    },
    {
      "address": 2506,
      "count": 1,
      "name": "Defrost active",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = defrost initiated."
    },
    {
      "address": 2507,
      "count": 1,
      "name": "Active fault number",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 2509,
      "count": 1,
      "name": "Heating circuit pump 1",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on. Only available on the WPMsystem."
    },
    {
      "address": 2515,
      "count": 1,
      "name": "Source pump",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on. Only available on the WPM 3."
    },
    {
      "address": 3680,
      "count": 1,
      "name": "Inverter power consumption, heat pump 1",
      "data_type": "Int16",
      "units": "kW",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Electrical input power of inverter heat pump 1; the WPM 3 without inverter does not provide it."
    },
    {
      "address": 5001,
      "count": 1,
      "name": "SG Ready operating state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = heating system must not start (frost protection assured), 2 = standard operation, 3 = accelerated mode with raised heating and DHW temperatures, 4 = immediate maximum heating and DHW temperatures."
    }
  ],
  "holding_registers": [
    {
      "address": 1501,
      "count": 1,
      "name": "Operating mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = emergency operation, 1 = standby, 2 = programmed operation, 3 = comfort mode, 4 = eco mode, 5 = DHW mode."
    },
    {
      "address": 1502,
      "count": 1,
      "name": "Comfort temperature heating circuit 1",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "5-30 °C, step 0.1 K."
    },
    {
      "address": 1503,
      "count": 1,
      "name": "Eco temperature heating circuit 1",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "5-30 °C, step 0.1 K."
    },
    {
      "address": 1504,
      "count": 1,
      "name": "Heating curve rise heating circuit 1",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "0-3, transmitted in hundredths (raw 250 = 2.50)."
    },
    {
      "address": 1510,
      "count": 1,
      "name": "Comfort temperature DHW",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "10-60 °C."
    },
    {
      "address": 1511,
      "count": 1,
      "name": "Eco temperature DHW",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "10-60 °C."
    },
    {
      "address": 1512,
      "count": 1,
      "name": "DHW stages",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Number of heat pump stages used for DHW; observe the number of connected heat pumps."
    },
    {
      "address": 4001,
      "count": 1,
      "name": "Switch SG Ready on and off",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = SG Ready function off, 1 = SG Ready function active."
    },
    {
      "address": 4002,
      "count": 1,
      "name": "SG Ready input 1",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = input 1 switched off, 1 = input 1 switched on."
    },
    {
      "address": 4003,
      "count": 1,
      "name": "SG Ready input 2",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = input 2 switched off, 1 = input 2 switched on."
    }
  ],
  "combined_registers": [],
  "notes": "Source: STIEBEL ELTRON, \"Software documentation - Modbus TCP/IP\" for the ISG web / ISG plus (document 321798-44755-9770, multilingual, sections 6 and 7: Modbus system values for heat pumps with WPM and further registers). The ISG is the Modbus TCP server on port 502 with the permanent slave ID 1; system values are read from input registers (function code 04) and system parameters from holding registers (function code 03/06/16). ISG addressing is 1-based, hence one_based above: the guide's register 501 is wire address 500. Values are 16-bit; data type 2 = signed x0.1, 7 = signed x0.01, 6 and 8 = unsigned integer, which the scale factors above reflect. Objects that are not available on the connected appliance return the substitute value 32768 (0x8000), so a reading of -3276.8 °C after scaling means \"not available\". Availability depends on the appliance family: the WPMsystem, WPM 3 and WPM 3i expose different subsets, and the guide marks each row with the families that support it. The Modbus TCP/IP function is a software extension for the ISG (part number 316303) and cannot be combined with other ISG interfaces except read-only access next to the EMI energy management extension. Faults cannot be acknowledged over Modbus, only in the ISG service interface; the heat pump energy and runtime blocks (3501-3560 and up) are not included because their row alignment is only partly unambiguous in the published table."
}
