{
  "spec_version": 1,
  "slug": "fenecon-home",
  "manufacturer": "FENECON",
  "model": "Home 6 / 10 / 15 / 20 / 30 (FEMS)",
  "category": "Home battery",
  "supplier_url": "https://www.fenecon.de/fenecon-home-6-10-15",
  "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": 222,
      "count": 1,
      "name": "System state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = ok, 1 = info, 2 = warning, 3 = fault."
    },
    {
      "address": 302,
      "count": 1,
      "name": "Battery state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "EssSoc, 0-100 %."
    },
    {
      "address": 303,
      "count": 2,
      "name": "Battery active power (AC side)",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "EssActivePower: AC-side active power of the storage, including surplus DC generation on a hybrid inverter."
    },
    {
      "address": 309,
      "count": 2,
      "name": "Battery reactive power",
      "data_type": "Float32",
      "units": "var",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "EssReactivePower."
    },
    {
      "address": 315,
      "count": 2,
      "name": "Grid active power",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "GridActivePower at the grid connection point."
    },
    {
      "address": 317,
      "count": 2,
      "name": "Grid active power, minimum measured",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "GridMinActivePower."
    },
    {
      "address": 319,
      "count": 2,
      "name": "Grid active power, maximum measured",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "GridMaxActivePower."
    },
    {
      "address": 327,
      "count": 2,
      "name": "PV production power",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "ProductionActivePower: PV yield plus external inverters."
    },
    {
      "address": 329,
      "count": 2,
      "name": "PV production power, maximum measured",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "ProductionMaxActivePower."
    },
    {
      "address": 331,
      "count": 2,
      "name": "PV production power of external AC inverters",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "ProductionAcActivePower."
    },
    {
      "address": 339,
      "count": 2,
      "name": "DC production power of the hybrid inverter",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "ProductionDcActualPower."
    },
    {
      "address": 343,
      "count": 2,
      "name": "Consumption power",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "ConsumptionActivePower."
    },
    {
      "address": 345,
      "count": 2,
      "name": "Consumption power, maximum measured",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "ConsumptionMaxActivePower."
    },
    {
      "address": 351,
      "count": 4,
      "name": "Battery charge energy (AC side, lifetime)",
      "data_type": "Float64",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "EssActiveChargeEnergy, published in Wh."
    },
    {
      "address": 355,
      "count": 4,
      "name": "Battery discharge energy (AC side, lifetime)",
      "data_type": "Float64",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "EssActiveDischargeEnergy, published in Wh."
    },
    {
      "address": 359,
      "count": 4,
      "name": "Grid import energy (lifetime)",
      "data_type": "Float64",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "GridBuyActiveEnergy, published in Wh."
    },
    {
      "address": 363,
      "count": 4,
      "name": "Grid export energy (lifetime)",
      "data_type": "Float64",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "GridSellActiveEnergy, published in Wh."
    },
    {
      "address": 367,
      "count": 4,
      "name": "PV production energy (lifetime)",
      "data_type": "Float64",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "ProductionActiveEnergy, published in Wh."
    },
    {
      "address": 371,
      "count": 4,
      "name": "PV production energy of external AC inverters (lifetime)",
      "data_type": "Float64",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "ProductionAcActiveEnergy, published in Wh."
    },
    {
      "address": 375,
      "count": 4,
      "name": "DC production energy of the hybrid inverter (lifetime)",
      "data_type": "Float64",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "ProductionDcActiveEnergy, published in Wh."
    },
    {
      "address": 379,
      "count": 4,
      "name": "Consumption energy (lifetime)",
      "data_type": "Float64",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "ConsumptionActiveEnergy, published in Wh."
    },
    {
      "address": 383,
      "count": 4,
      "name": "Battery charge energy (DC side, lifetime)",
      "data_type": "Float64",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "EssDcChargeEnergy, published in Wh."
    },
    {
      "address": 387,
      "count": 4,
      "name": "Battery discharge energy (DC side, lifetime)",
      "data_type": "Float64",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R",
      "description": "EssDcDischargeEnergy, published in Wh."
    },
    {
      "address": 415,
      "count": 2,
      "name": "Battery discharge power",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "EssDischargePower: actual AC-side active power of the storage."
    },
    {
      "address": 417,
      "count": 1,
      "name": "Grid mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "1 = on-grid, 2 = off-grid."
    }
  ],
  "combined_registers": [],
  "notes": "Register map from FENECON's own documentation \"FEMS App Modbus/TCP lesend\" (docs.fenecon.de/de/fems/fems-app/App_ModbusTCP_read_access.html, retrieved 2026-10-24), table \"Modbus-Tabelle Komponente Sum\". The FEMS energy manager of a FENECON Home 6/10/15/20/30 serves the aggregate (_sum) channels on port 502 with unit ID 1 and answers with function code 03 (holding) and 04 (input); this file lists the table once, as holding registers. Addresses are the numbers FENECON prints in its table, used unchanged as wire addresses. Power values are IEEE-754 single precision and the lifetime counters are IEEE-754 double precision, both big-endian with the high word first; evcc's openems-modbus template (which targets OpenEMS/FENECON) decodes the same registers without a word swap. The counters are published in Wh, so the scale factor converts them to kWh. The component identification row (address 200, \"string16\") is left out because the document does not define its register count. This map is read-only: writing (battery control) needs the separately licensed FEMS app \"Modbus/TCP schreibend\" and is not part of it."
}
