{
  "spec_version": 1,
  "slug": "fox-ess-avocado",
  "manufacturer": "FoxESS",
  "model": "Avocado / MQ2200 (also Solakon ONE, Tepto Avocado Pro)",
  "category": "Home battery",
  "supplier_url": "https://www.foxess.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": [],
  "holding_registers": [
    {
      "address": 39118,
      "count": 2,
      "name": "Total PV power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 39123,
      "count": 1,
      "name": "Grid phase A voltage",
      "data_type": "Int16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 39124,
      "count": 1,
      "name": "Grid phase B voltage",
      "data_type": "Int16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 39125,
      "count": 1,
      "name": "Grid phase C voltage",
      "data_type": "Int16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 39126,
      "count": 2,
      "name": "Grid phase A current",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 39128,
      "count": 2,
      "name": "Grid phase B current",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 39130,
      "count": 2,
      "name": "Grid phase C current",
      "data_type": "Int32",
      "units": "A",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 39149,
      "count": 2,
      "name": "Cumulative PV generation",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 39168,
      "count": 2,
      "name": "Grid active power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": -1,
      "offset": 0,
      "access": "R",
      "description": "Signed. The cited template negates it and notes that a positive register value means feeding power to the grid, a negative one means taking power from the grid."
    },
    {
      "address": 39237,
      "count": 2,
      "name": "Battery combined power",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": -1,
      "offset": 0,
      "access": "R",
      "description": "Signed; the cited template negates it to reach its charging-positive convention."
    },
    {
      "address": 39424,
      "count": 1,
      "name": "Battery state of charge",
      "data_type": "Int16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 39609,
      "count": 2,
      "name": "Battery total discharge energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "The template labels this row total discharge power but reads it as an energy counter with a 0.01 kWh scale."
    },
    {
      "address": 39625,
      "count": 2,
      "name": "Grid total feed-in energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 46001,
      "count": 1,
      "name": "Remote control mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "The cited template writes 0 (disabled), 5 (battery discharge) and 7 (battery charging)."
    },
    {
      "address": 46002,
      "count": 1,
      "name": "Remote control timeout",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "The cited template writes 60."
    },
    {
      "address": 46003,
      "count": 2,
      "name": "Remote active power setpoint",
      "data_type": "Int32",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "The template writes a positive value for discharge and a negative value for charge."
    },
    {
      "address": 46609,
      "count": 1,
      "name": "Minimum state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 46610,
      "count": 1,
      "name": "Maximum state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    }
  ],
  "combined_registers": [],
  "notes": "FoxESS Avocado and its rebadges MQ2200, Solakon ONE and Tepto Avocado Pro are a PV-coupled balcony/home storage unit. Source: the evcc meter template https://raw.githubusercontent.com/evcc-io/evcc/master/templates/definition/meter/fox-ess-avocado.yaml, used as a secondary source; no FoxESS register document was retrieved. The template offers RS-485 and TCP access with unit ID 1 and states 9600 baud for the serial path; this seed records the TCP path (port 502, unit ID 1), which is the one that does not need the RS-485 framing the template leaves unstated. All values are holding registers, the meter block 39123-39131 is read in one request, and the 46xxx block is the battery's remote-control interface the template writes for battery control. FoxESS sells a separate H3 hybrid line with a completely different map (see the fox-ess-h3 and fox-ess-h3-pro-smart seeds); this file is not a rebadge of those. The template does not publish battery voltage/current, temperatures or per-MPPT PV values for this product, so they are absent rather than guessed."
}
