{
  "spec_version": 1,
  "slug": "peblar-home",
  "manufacturer": "Peblar",
  "model": "Home / Home Plus / Business (also ChargeLine Home / Business)",
  "category": "EV charger",
  "supplier_url": "https://developer.peblar.com/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [
    {
      "address": 30008,
      "count": 2,
      "name": "Power phase 1",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Instantaneous power of phase 1."
    },
    {
      "address": 30010,
      "count": 2,
      "name": "Power phase 2",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Instantaneous power of phase 2."
    },
    {
      "address": 30012,
      "count": 2,
      "name": "Power phase 3",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Instantaneous power of phase 3."
    },
    {
      "address": 30014,
      "count": 2,
      "name": "Power total",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Instantaneous power of all phases combined."
    },
    {
      "address": 30016,
      "count": 2,
      "name": "Voltage phase 1",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Instantaneous voltage on phase 1."
    },
    {
      "address": 30018,
      "count": 2,
      "name": "Voltage phase 2",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Instantaneous voltage on phase 2."
    },
    {
      "address": 30020,
      "count": 2,
      "name": "Voltage phase 3",
      "data_type": "Int32",
      "units": "V",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Instantaneous voltage on phase 3."
    },
    {
      "address": 30022,
      "count": 2,
      "name": "Current phase 1",
      "data_type": "Int32",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Instantaneous current of phase 1."
    },
    {
      "address": 30024,
      "count": 2,
      "name": "Current phase 2",
      "data_type": "Int32",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Instantaneous current of phase 2."
    },
    {
      "address": 30026,
      "count": 2,
      "name": "Current phase 3",
      "data_type": "Int32",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Instantaneous current of phase 3."
    },
    {
      "address": 30050,
      "count": 12,
      "name": "Product serial number",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Serial number as a 24-byte string."
    },
    {
      "address": 30062,
      "count": 12,
      "name": "Product number",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Product number as a 24-byte string."
    },
    {
      "address": 30074,
      "count": 12,
      "name": "Firmware version",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Firmware identifier as a 24-byte string."
    },
    {
      "address": 30086,
      "count": 2,
      "name": "WLAN signal strength",
      "data_type": "Int32",
      "units": "dBm",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 30088,
      "count": 2,
      "name": "Cellular signal strength",
      "data_type": "Int32",
      "units": "dBm",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 30090,
      "count": 2,
      "name": "Uptime",
      "data_type": "UInt32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Time since the last boot."
    },
    {
      "address": 30092,
      "count": 1,
      "name": "Phase count",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Number of physically connected phases, either defined by the hardware or configured during installation."
    },
    {
      "address": 30093,
      "count": 1,
      "name": "Independent relays",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = L1/2/3 and N on a single relay, 1 = L1/N and L2/L3 on separate relays (L1 can then be used alone on a three-phase system)."
    },
    {
      "address": 30100,
      "count": 1,
      "name": "Active warning 1",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Warning number, 0 when inactive; several warnings can be active at once."
    },
    {
      "address": 30101,
      "count": 1,
      "name": "Active warning 2",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Warning number, 0 when inactive."
    },
    {
      "address": 30102,
      "count": 1,
      "name": "Active warning 3",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Warning number, 0 when inactive."
    },
    {
      "address": 30103,
      "count": 1,
      "name": "Active warning 4",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Warning number, 0 when inactive."
    },
    {
      "address": 30104,
      "count": 1,
      "name": "Active warning 5",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Warning number, 0 when inactive."
    },
    {
      "address": 30105,
      "count": 1,
      "name": "Active error 1",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Error number, 0 when inactive; several errors can be active at once."
    },
    {
      "address": 30106,
      "count": 1,
      "name": "Active error 2",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Error number, 0 when inactive."
    },
    {
      "address": 30107,
      "count": 1,
      "name": "Active error 3",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Error number, 0 when inactive."
    },
    {
      "address": 30108,
      "count": 1,
      "name": "Active error 4",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Error number, 0 when inactive."
    },
    {
      "address": 30109,
      "count": 1,
      "name": "Active error 5",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Error number, 0 when inactive."
    },
    {
      "address": 30110,
      "count": 1,
      "name": "CP state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Control-pilot level: A = no EV connected, B = EV connected but suspended, C = EV connected and charging, D = as C with ventilation requested, E = error (short to PE or powered off), F = fault, I = invalid CP level measured, U = unknown."
    },
    {
      "address": 30111,
      "count": 1,
      "name": "Lock state",
      "data_type": "Int16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = unlocked, 1 = locked. Stays 0 on fixed-cable systems."
    },
    {
      "address": 30112,
      "count": 1,
      "name": "Charge current limit source",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Active limiting source: 0 = unknown, 1 = fixed cable, 2 = thermal, 3 = configuration limit, 4 = dynamic load balancing, 5 = group load balancing, 6 = user cable, 7 = overcurrent protection, 8 = hardware limit, 9 = power factor, 10 = OCPP smart charging, 11 = phase imbalance monitoring, 12 = local scheduled charging, 13 = solar charging, 14 = current slider, 15 = local REST API, 16 = local Modbus API, 17 = power limit input, 18 = household power limit, 19 = reserved, 20 = internal power limiter."
    },
    {
      "address": 30113,
      "count": 2,
      "name": "Charge current limit actual",
      "data_type": "UInt32",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Current actually communicated to the vehicle: the lowest of all limiting sources."
    },
    {
      "address": 30122,
      "count": 1,
      "name": "Hardware identifier",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Reserved for future use, reads 0."
    },
    {
      "address": 30123,
      "count": 1,
      "name": "Modbus API version major",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Major API version, increased on breaking changes. This map follows major version 1."
    },
    {
      "address": 30124,
      "count": 1,
      "name": "Modbus API version minor",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Minor API version, increased when a register is added. This document describes minor version 0."
    }
  ],
  "holding_registers": [
    {
      "address": 40000,
      "count": 2,
      "name": "Charge current limit",
      "data_type": "UInt32",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Maximum current per phase signalled to the EV. 6000-16000 mA for 11 kW units, 6000-32000 mA for 22 kW units; 0 pauses charging, and values between 1 and 5999 mA are outside EN-IEC 61851-1 and also pause. Pausing should not happen more than three times in a rolling ten minutes."
    },
    {
      "address": 40002,
      "count": 1,
      "name": "Force one phase",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = do not force one phase, 1 = force single-phase charging if supported. An ongoing three-phase session switches over automatically."
    },
    {
      "address": 40050,
      "count": 2,
      "name": "Alive timeout",
      "data_type": "UInt32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Seconds after which the fallback current applies when no other holding register has been written; 0 disables the alive/fallback mechanism."
    },
    {
      "address": 40052,
      "count": 2,
      "name": "Fallback current",
      "data_type": "Int32",
      "units": "mA",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Fallback current while the alive timeout expires, default 6000 mA. It overrules the charge current limit even when it is higher. No effect while the alive timeout is 0."
    }
  ],
  "combined_registers": [],
  "notes": "Source: Peblar (Prodrive Technologies), \"Developer Information - Modbus API\", published on the vendor's own developer site at the supplier_url. That page is Peblar's developer information application: it renders client-side and the Modbus API reference, including the register tables used here, is part of the page's bundled content - the former deep link /modbus-api now answers 404 while the site root still serves the same document. The page fixes the transport: the Modbus TCP server uses port 502, word and byte order are big endian, the server is supported from firmware 1.6 onwards and has to be enabled in the charger's advanced web settings, either ReadOnly or ReadWrite (only ReadWrite allows control of the charge current and forcing single-phase charging). The register numbers of that page (40000 for holding registers, 30000 for input registers) are used unchanged as wire addresses here and declared zero_based; evcc's peblar driver confirms that reading, it addresses the same 30000/40000 numbers directly and cites this same page as its source. The vendor page documents no slave address: the unit ID 1 above is a placeholder taken from the evcc peblar template (secondary source), not a value from any document, and the user must set the charger's own address. Left out on purpose: EnergyTotal (30000) and SessionEnergy (30004), both int64 over four registers, because this schema has no 64-bit integer type. The 24-byte strings are 12 registers each. Charging caveats quoted from the page: pausing via a current limit below 6 A should not happen more than three times per rolling ten minutes because the on-board relays are stressed, and the fallback current of 40052 overrules the charge current limit after the alive timeout of 40050 expires."
}
