{
  "spec_version": 1,
  "slug": "compleo-solo",
  "manufacturer": "Compleo",
  "model": "Solo (AC wallbox)",
  "category": "EV charger",
  "supplier_url": "https://www.compleo-cs.com/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 255,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 8,
      "count": 1,
      "name": "Number of connectors",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Read once to check which connector index exists."
    },
    {
      "address": 257,
      "count": 1,
      "name": "Connector 1: status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit field: bit 0 set = state B (vehicle connected), bit 1 set = state C (charging)."
    },
    {
      "address": 258,
      "count": 1,
      "name": "Connector 1: active power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 100,
      "offset": 0,
      "access": "R",
      "description": "evcc multiplies the raw value by 100."
    },
    {
      "address": 259,
      "count": 1,
      "name": "Connector 1: current L1",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "evcc divides the raw value by 10."
    },
    {
      "address": 260,
      "count": 1,
      "name": "Connector 1: current L2",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "evcc divides the raw value by 10."
    },
    {
      "address": 261,
      "count": 1,
      "name": "Connector 1: current L3",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "evcc divides the raw value by 10."
    },
    {
      "address": 264,
      "count": 1,
      "name": "Connector 1: charged energy",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R",
      "description": "Raw value divided by 10, i.e. 0.1 kWh steps. evcc reads it as the charged-energy counter; its implementation does not state whether the counter is per session or lifetime."
    },
    {
      "address": 269,
      "count": 1,
      "name": "Connector 1: voltage L1",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 270,
      "count": 1,
      "name": "Connector 1: voltage L2",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 271,
      "count": 1,
      "name": "Connector 1: voltage L3",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 4096,
      "count": 10,
      "name": "Connector 1: identification tag",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "IdTag of the current or last session."
    }
  ],
  "holding_registers": [
    {
      "address": 5,
      "count": 1,
      "name": "Failsafe timeout",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Communication timeout in seconds. evcc reads it and polls at half that interval so the wallbox never falls back to the failsafe setting."
    },
    {
      "address": 256,
      "count": 1,
      "name": "Connector 1: maximum power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 100,
      "offset": 0,
      "access": "RW",
      "description": "Power limit written by the energy management system, in 100 W steps (evcc writes power/100). 0 disables charging."
    }
  ],
  "combined_registers": [],
  "notes": "Source: evcc's charger implementation for the Compleo AC wallbox (charger/compleo.go), used as a secondary source -- it records the register numbers, the per-connector offset of 0x10, the unit ID 255 and the scaling of each row (power x100 W, currents /10 A, charged energy /10 kWh, voltages unchanged). Compleo publishes product and installation documentation for the Solo, but no register document is reachable without a partner login, so the supplier URL points at the vendor site and the map itself is evcc's hardware-tested definition. The wallbox is the Modbus TCP server on port 502. The global instructions live at the start of the address space (register 5 failsafe timeout, register 8 number of connectors) and the per-connector block starts at 0x0100 + 0x10 x (connector-1) for input registers and holding register 0x0100 + 0x10 x (connector-1); this file lists connector 1, which is the stand-alone case. Left out on purpose: the 32-bit charge duration at 0x0106, because evcc decodes that pair with a byte order that contradicts the big-endian decode used for every other multi-register value in the same implementation, so neither the word order nor the byte order can be cited for that row."
}
