{
  "spec_version": 1,
  "slug": "daheimladen-smart-touch",
  "manufacturer": "DaheimLaden",
  "model": "DaheimLader Smart / Touch (incl. Smart PRO, Touch PRO, Business PRO)",
  "category": "EV charger",
  "supplier_url": "https://www.daheimladen.de/post/modbus-api",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 255,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 0,
      "count": 1,
      "name": "Charging state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = standby (no vehicle, CP 12 V), 2 = connected (CP 9 V), 3 = ready to start (waiting for vehicle answer), 4 = charging, 5 = start error (timeout or cable pulled during start), 6 = charging finished, 7 = system error, 8 = scheduled charging, 9 = firmware upgrade active, 10 = powering up (CP unstable)."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Cable status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Mode C: 0 = not connected (CP 12 V), 1 = connected (CP 9 V/6 V). Mode B: 0 = not connected, 1 = connected (CP 12 V/6 V)."
    },
    {
      "address": 4,
      "count": 1,
      "name": "Error code",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = no error, 11 = CP voltage error, 12 = emergency stop pressed, 13 = undervoltage, 14 = overvoltage, 15 = overtemperature, 16 = meter error, 17 = faulty earth/leakage, 18 = output short circuit, 19 = overcurrent, 21 = vehicle not charging, 22 = vehicle not detected, 23 = relay stuck, 24 = leakage tester defective, 25 = PE error, 26 = start failed."
    },
    {
      "address": 6,
      "count": 1,
      "name": "Current L1",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Real-time charging current, only present while charging (0 A otherwise)."
    },
    {
      "address": 8,
      "count": 1,
      "name": "Current L2",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Real-time charging current, only present while charging (0 A otherwise)."
    },
    {
      "address": 10,
      "count": 1,
      "name": "Current L3",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Real-time charging current, only present while charging (0 A otherwise)."
    },
    {
      "address": 12,
      "count": 2,
      "name": "Active power, total",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 16,
      "count": 2,
      "name": "Active power L1",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 20,
      "count": 2,
      "name": "Active power L2",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 24,
      "count": 2,
      "name": "Active power L3",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 28,
      "count": 2,
      "name": "Meter reading",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Total consumption of the charging station, raw value in 0.1 kWh."
    },
    {
      "address": 32,
      "count": 1,
      "name": "EVSE maximum current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Maximum current of the charging station."
    },
    {
      "address": 34,
      "count": 1,
      "name": "EVSE minimum current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Minimum current of the charging station."
    },
    {
      "address": 36,
      "count": 1,
      "name": "Cable maximum current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Maximum current of the charging cable."
    },
    {
      "address": 72,
      "count": 1,
      "name": "Energy of current session",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Real-time value while a charging session is running."
    },
    {
      "address": 78,
      "count": 2,
      "name": "Charging time of current session",
      "data_type": "UInt32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Real-time value while a charging session is running."
    },
    {
      "address": 87,
      "count": 1,
      "name": "Safe current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Current limit applied when communication is lost; not available on the PRO models."
    },
    {
      "address": 89,
      "count": 1,
      "name": "Communication timeout",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Timeout for communication loss, maximum 65535 s; not available on the PRO models."
    },
    {
      "address": 91,
      "count": 1,
      "name": "Current limit",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "RW",
      "description": "Charging current limit, effective immediately while charging. Changes are possible every 4 s; while not charging it is the start value of the next session."
    },
    {
      "address": 93,
      "count": 1,
      "name": "Charging mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = plug & charge, 1 = card/authentication."
    },
    {
      "address": 95,
      "count": 1,
      "name": "Charge command",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "1 = start, 2 = stop."
    },
    {
      "address": 109,
      "count": 1,
      "name": "Voltage L1",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 111,
      "count": 1,
      "name": "Voltage L2",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 113,
      "count": 1,
      "name": "Voltage L3",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 184,
      "count": 1,
      "name": "Phase status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "PRO series only. 1 = single phase, 3 = three phase."
    },
    {
      "address": 186,
      "count": 1,
      "name": "Phase switch command",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "PRO series only. 1 = switch to single phase, 3 = switch to three phase. Charging pauses for about two minutes during the switch."
    },
    {
      "address": 188,
      "count": 1,
      "name": "Phase switch status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "PRO series only. 0 = standby, 1 = switch active, 2 = switch completed."
    }
  ],
  "combined_registers": [],
  "notes": "Source: DaheimLaden GmbH, \"DaheimLader - Modbus/TCP-Spezifikation\" (models Smart V1+V2, Touch, Smart PRO, Touch PRO, Business PRO), revision dated 28.07.2026, the vendor document published with the \"Modbus API\" post on daheimladen.de (a byte-identical copy is mirrored at community.symcon.de/uploads/short-url/iE6B77ErUU3WADqwKNA8g0NN1Gk.pdf). The specification names port 502 and unit ID 255 and documents reading with function code 3 and writing with function code 16 on holding registers only, with all register numbers given in decimal -- exactly the layout this file uses (zero-based). Firmware floors from the same document: Smart/Touch AC_SCE_3.21DA and AC_DG3_1.24, PRO models AC_M3W_3.11STP, Business PRO AC_M3W_4.03PTB. The phase-switching rows (184-188) exist on the PRO series only, and registers 87/89 (safe current, communication timeout) do not exist on the PRO models. Registers 38 (station serial number) and 54 (RFID card ID) are left out: the table types them as uint16 with \"length 16\" bytes but does not say how those bytes map onto registers. evcc's implementation (charger/daheimladen.go) matches this specification register for register and is the cross-check for the scaling."
}
