{
  "spec_version": 1,
  "slug": "ecoflow-powerocean",
  "manufacturer": "EcoFlow",
  "model": "PowerOcean",
  "category": "Home battery",
  "supplier_url": "https://www.ecoflow.com/eu/collections/home-battery",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "LowFirst"
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 40521,
      "count": 2,
      "name": "Grid power",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Grid-side active power reported by the PowerOcean."
    },
    {
      "address": 40523,
      "count": 2,
      "name": "Solar power",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 40525,
      "count": 2,
      "name": "Battery power",
      "data_type": "Float32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Positive when discharging, negative when charging; evcc inverts the sign for its own convention."
    },
    {
      "address": 40527,
      "count": 1,
      "name": "Battery state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 42161,
      "count": 2,
      "name": "Grid import energy, total",
      "data_type": "Float32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 42241,
      "count": 2,
      "name": "Battery discharged energy, total",
      "data_type": "Float32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 42257,
      "count": 2,
      "name": "Solar yield energy, total",
      "data_type": "Float32",
      "units": "kWh",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    }
  ],
  "combined_registers": [],
  "notes": "Register map from the evcc template https://raw.githubusercontent.com/evcc-io/evcc/master/templates/definition/meter/ecoflow-powerocean-modbus.yaml (retrieved 2026-10-24), which is the only public definition of this interface found in this pass - EcoFlow does not publish a PowerOcean Modbus register document, so vendor-documentation-grade verification was not possible. Local Modbus TCP must be enabled on the PowerOcean by the installer; port 502, unit ID 1, holding registers, IEEE-754 floats with big-endian byte order and the low word first (evcc decodes all of them as 'float32s', its low-word-first float encoding, so the default here is LowFirst). evcc's template covers exactly these seven channels and nothing more, so this seed is deliberately short: it is the subset needed to meter grid, PV and battery (state of charge, battery power, grid power plus the three lifetime counters). Anything else, including the charge-energy counterpart, stays out rather than being guessed. If EcoFlow publishes the full map later the file should be extended from that document."
}
