{
  "spec_version": 1,
  "slug": "alpha-ess-smile",
  "manufacturer": "AlphaESS",
  "model": "Storion SMILE 5 / SMILE T10",
  "category": "Home battery",
  "supplier_url": "https://www.alphaess.com/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 85,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 16,
      "count": 2,
      "name": "Total energy fed to grid",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 18,
      "count": 2,
      "name": "Total energy consumed from grid",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 23,
      "count": 1,
      "name": "Grid current A",
      "data_type": "Int16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 24,
      "count": 1,
      "name": "Grid current B",
      "data_type": "Int16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 25,
      "count": 1,
      "name": "Grid current C",
      "data_type": "Int16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 33,
      "count": 2,
      "name": "Total active power (grid meter)",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Signed; positive means import from the grid."
    },
    {
      "address": 161,
      "count": 2,
      "name": "Total active power (PV meter)",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 258,
      "count": 1,
      "name": "Battery state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 288,
      "count": 2,
      "name": "Battery charge energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 290,
      "count": 2,
      "name": "Battery discharge energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 294,
      "count": 1,
      "name": "Battery power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Signed; positive means discharging."
    },
    {
      "address": 1055,
      "count": 2,
      "name": "PV1 power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1059,
      "count": 2,
      "name": "PV2 power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1063,
      "count": 2,
      "name": "PV3 power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1067,
      "count": 2,
      "name": "PV4 power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1071,
      "count": 2,
      "name": "PV5 power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1075,
      "count": 2,
      "name": "PV6 power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 1086,
      "count": 2,
      "name": "Inverter total PV energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 2127,
      "count": 1,
      "name": "Time period control flag",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = normal schedule, 1 = follow the charge cut SoC. evcc's battery control writes this register."
    },
    {
      "address": 2133,
      "count": 1,
      "name": "Charge cut SoC",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Target SoC used while the time period control flag is 1. evcc's battery control writes this register."
    }
  ],
  "combined_registers": [],
  "notes": "Register map from the evcc template https://raw.githubusercontent.com/evcc-io/evcc/master/templates/definition/meter/alpha-ess-smile.yaml, cross-checked against wills106/homeassistant-solax-modbus (custom_components/solax_modbus/plugin_alphaess.py). Modbus TCP on port 502 with unit ID 85; the same map is served over RS-485 at 9600 8N1. All entries are holding registers. For active battery control the time-period control flag (2127) and the charge cut SoC (2133) are the two registers evcc uses: set 2127 = 1 and 2133 to the target SoC to force grid charging, 2127 = 0 to return to the normal schedule. Battery control also needs grid-charging time windows to exist in the unit's own settings. Only 2127 and 2133 are write registers in this map - every other row is read-only, which is why they are the only RW entries. Category changed from Solar inverter to Home battery (storage-centred)."
}
