{
  "spec_version": 1,
  "slug": "enovates-eno-one",
  "manufacturer": "Enovates",
  "model": "ENO one / SingleWallBox (also Shell Recharge Home Advanced, NewMotion Lolo)",
  "category": "EV charger",
  "supplier_url": "https://www.enovates.com/products/singlewallbox",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 0,
      "count": 1,
      "name": "Modbus API version, major",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Major version of the Enovates Modbus API; a version of 1.2 or higher is required by the vendor library."
    },
    {
      "address": 1,
      "count": 1,
      "name": "Modbus API version, minor",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Minor version of the Enovates Modbus API."
    },
    {
      "address": 50,
      "count": 1,
      "name": "Number of phases",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Number of phases the station currently uses."
    },
    {
      "address": 51,
      "count": 1,
      "name": "Max amp per phase",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Maximum current per phase."
    },
    {
      "address": 52,
      "count": 1,
      "name": "OCPP state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = false, 1 = true."
    },
    {
      "address": 53,
      "count": 1,
      "name": "Load shedding state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = false, 1 = true."
    },
    {
      "address": 54,
      "count": 1,
      "name": "Lock state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = unlocked, 1 = locked, 2 = no lock present."
    },
    {
      "address": 55,
      "count": 1,
      "name": "Contactor state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = open, 1 = closed."
    },
    {
      "address": 56,
      "count": 1,
      "name": "LED color",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = red, 2 = green, 3 = blue, 4 = cyan, 5 = yellow, 6 = pink, 7 = white, 8 = orange, 9 = purple."
    },
    {
      "address": 200,
      "count": 1,
      "name": "Current L1",
      "data_type": "UInt16",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 201,
      "count": 1,
      "name": "Current L2",
      "data_type": "UInt16",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 202,
      "count": 1,
      "name": "Current L3",
      "data_type": "UInt16",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 203,
      "count": 1,
      "name": "Voltage L1",
      "data_type": "Int16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 204,
      "count": 1,
      "name": "Voltage L2",
      "data_type": "Int16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 205,
      "count": 1,
      "name": "Voltage L3",
      "data_type": "Int16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 206,
      "count": 1,
      "name": "Charger active power total",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 207,
      "count": 1,
      "name": "Charger active power L1",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 208,
      "count": 1,
      "name": "Charger active power L2",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 209,
      "count": 1,
      "name": "Charger active power L3",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 210,
      "count": 2,
      "name": "Installation current L1",
      "data_type": "Int32",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Configured installation current of phase 1."
    },
    {
      "address": 212,
      "count": 2,
      "name": "Installation current L2",
      "data_type": "Int32",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Configured installation current of phase 2."
    },
    {
      "address": 214,
      "count": 2,
      "name": "Installation current L3",
      "data_type": "Int32",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Configured installation current of phase 3."
    },
    {
      "address": 216,
      "count": 2,
      "name": "Active energy import total",
      "data_type": "Int32",
      "units": "Wh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Lifetime imported energy."
    },
    {
      "address": 300,
      "count": 1,
      "name": "Mode 3 state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = A1, 1 = A2, 2 = B1, 3 = B2, 4 = C1, 5 = C2, 6 = D1, 7 = D2, 8 = E, 9 = F."
    },
    {
      "address": 301,
      "count": 2,
      "name": "Mode 3 state, text",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "The Mode 3 state as a two-register ASCII string."
    },
    {
      "address": 303,
      "count": 1,
      "name": "PWM current",
      "data_type": "Int16",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current encoded in the PWM signal."
    },
    {
      "address": 304,
      "count": 1,
      "name": "PWM duty",
      "data_type": "Int16",
      "units": "‰",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "PWM duty cycle in per mille."
    },
    {
      "address": 305,
      "count": 1,
      "name": "PP",
      "data_type": "Int16",
      "units": "A",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Maximum cable current from the proximity pilot, on socketed units."
    },
    {
      "address": 306,
      "count": 1,
      "name": "CP positive",
      "data_type": "Int16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Positive control-pilot voltage."
    },
    {
      "address": 307,
      "count": 1,
      "name": "CP negative",
      "data_type": "Int16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Negative control-pilot voltage."
    },
    {
      "address": 400,
      "count": 1,
      "name": "EMS current limit",
      "data_type": "Int16",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Current limit requested by the energy management system; -1 means no limit. Writable only when EMS-over-Modbus is in full-control mode, always readable (in monitoring-only mode writes are ignored)."
    },
    {
      "address": 401,
      "count": 16,
      "name": "Transaction token",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Transaction token as a 32-byte string; readable only when EMS-over-Modbus is enabled, reading it errors otherwise."
    },
    {
      "address": 417,
      "count": 1,
      "name": "Active current offered",
      "data_type": "UInt16",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current actually offered to the car; recommended register for power management together with 400."
    },
    {
      "address": 5000,
      "count": 16,
      "name": "Manufacturer",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Manufacturer string, 32 bytes."
    },
    {
      "address": 5016,
      "count": 16,
      "name": "Vendor ID",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Vendor ID string, 32 bytes."
    },
    {
      "address": 5032,
      "count": 16,
      "name": "Serial number",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Serial number string, 32 bytes."
    },
    {
      "address": 5048,
      "count": 16,
      "name": "Model ID",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Model ID string, 32 bytes."
    },
    {
      "address": 5064,
      "count": 16,
      "name": "Firmware version",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Firmware version string, 32 bytes."
    }
  ],
  "combined_registers": [],
  "notes": "Source: Enovates' own published register map for the ENO one - the register definitions in the vendor's enovates-modbus library (https://github.com/enovates/enovates-modbus, src/enovates_modbus/eno_one.py: every block carries its base address and every field its data type) together with the field list and semantics in that repository's README. This is the vendor's own code rather than a PDF register document, and it is named here so the source can be checked line by line; evcc's enovates driver reads the same block addresses. The transport facts: Modbus TCP on port 502, holding registers only (the library reads with FC3 and writes with FC6/FC16), big-endian, device id 1 as the library's default (evcc's template also uses id 1 - a secondary source, since the vendor code ships the id as a constructor default rather than documenting it). EMS-over-Modbus has to be enabled on the station by the installer or via OCPP (the setting is called \"EMS mode\" and has the states off / monitoring only / full control); the vendor library requires Modbus API 1.2, i.e. firmware 2.13 or later. In monitoring-only mode the EMS limit (400) may accept writes but ignores them and the transaction token (401) cannot be read; only full-control mode makes 400 genuinely writable. Booleans are single registers returning 0 or 1, and the vendor README warns that the Mode 3 details (300-307) can give a false impression of a car's behaviour on ISO 15118 vehicles, so the offered current (417) and the measurement block (200-217) are the recommended rows for power management. The same map is sold as Shell Recharge Home Advanced and NewMotion Lolo; both are rebadges of this station and are covered here, not seeded separately."
}
