{
  "spec_version": 1,
  "slug": "marstek-venus-e-gen3",
  "manufacturer": "Marstek",
  "model": "Venus E Gen 3",
  "category": "Home battery",
  "supplier_url": "https://marstekenergy.com/collections/marstek-venus-series",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "None",
      "baud_rate": 115200,
      "data_bits": 8,
      "stop_bits": 1
    }
  },
  "coils": [],
  "discrete_inputs": [],
  "input_registers": [],
  "holding_registers": [
    {
      "address": 30001,
      "count": 1,
      "name": "Battery power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "AC-side battery charge/discharge power; per evcc, this register covers only the AC-side charge/discharge transaction. The cited sources do not document the sign convention."
    },
    {
      "address": 30006,
      "count": 1,
      "name": "AC power",
      "data_type": "Int16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "AC-side power; positive = discharging."
    },
    {
      "address": 30100,
      "count": 1,
      "name": "Battery voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 30101,
      "count": 1,
      "name": "Battery current",
      "data_type": "Int16",
      "units": "A",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 30200,
      "count": 1,
      "name": "EMS firmware version",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 30202,
      "count": 1,
      "name": "VMS firmware version",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 30204,
      "count": 1,
      "name": "BMS firmware version",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 31000,
      "count": 10,
      "name": "Device name",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "20-character device name."
    },
    {
      "address": 32105,
      "count": 1,
      "name": "Battery stored energy",
      "data_type": "UInt16",
      "units": "kWh",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 32200,
      "count": 1,
      "name": "AC voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 32204,
      "count": 1,
      "name": "AC frequency",
      "data_type": "Int16",
      "units": "Hz",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 33000,
      "count": 2,
      "name": "Total charging energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 33002,
      "count": 2,
      "name": "Total discharging energy",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 33004,
      "count": 2,
      "name": "Daily charging energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 33006,
      "count": 2,
      "name": "Daily discharging energy",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 33008,
      "count": 2,
      "name": "Monthly charging energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 33010,
      "count": 2,
      "name": "Monthly discharging energy",
      "data_type": "Int32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 34002,
      "count": 1,
      "name": "Battery state of charge",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 34003,
      "count": 1,
      "name": "Battery cycle count",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 35000,
      "count": 1,
      "name": "Internal temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 35001,
      "count": 1,
      "name": "MOS1 temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 35002,
      "count": 1,
      "name": "MOS2 temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 35010,
      "count": 1,
      "name": "Maximum cell temperature",
      "data_type": "Int16",
      "units": "°C",
      "scale_factor": 0.1,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 35100,
      "count": 1,
      "name": "Inverter state",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = sleep, 1 = standby, 2 = charge, 3 = discharge, 4 = backup mode, 5 = OTA upgrade, 6 = bypass."
    },
    {
      "address": 37007,
      "count": 1,
      "name": "Maximum cell voltage",
      "data_type": "Int16",
      "units": "V",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 37008,
      "count": 1,
      "name": "Minimum cell voltage",
      "data_type": "Int16",
      "units": "V",
      "scale_factor": 0.001,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 42000,
      "count": 1,
      "name": "RS-485 control mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Enables control over Modbus (write commands). 21930 = on, 21947 = off."
    },
    {
      "address": 42010,
      "count": 1,
      "name": "Force mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = none, 1 = charge, 2 = discharge."
    },
    {
      "address": 42011,
      "count": 1,
      "name": "Charge/discharge target SoC",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "SoC at which a forced charge or discharge stops."
    },
    {
      "address": 42020,
      "count": 1,
      "name": "Forced charge power setpoint",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 42021,
      "count": 1,
      "name": "Forced discharge power setpoint",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 43000,
      "count": 1,
      "name": "User work mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = manual, 1 = anti-feed (self-consumption), 2 = trade mode."
    },
    {
      "address": 44002,
      "count": 1,
      "name": "Maximum charge power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 44003,
      "count": 1,
      "name": "Maximum discharge power",
      "data_type": "UInt16",
      "units": "W",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    }
  ],
  "combined_registers": [],
  "notes": "Register map from the Marstek Venus Modbus integration for Home Assistant (ViperRNMC/marstek_venus_modbus, register definition custom_components/marstek_modbus/registers/e_v3.yaml plus the register table in its README, retrieved 2026-10-24). Its header states that the map is partially validated on real hardware and that \"some entries may still be incorrect, duplicated, or incomplete\", so treat it as partially validated rather than confirmed. The Venus E Gen 3 answers Modbus TCP on its own Ethernet port (default port 502, unit ID 1) and can also be reached over its RS-485 port at 115200 8N1 (the serial settings above); evcc's marstek-venus-a template documents the same 115200 8N1 serial default for the Venus family. The state of charge lives at 34002 with 0.1 % resolution on Gen 3 firmware; Gen 1/Gen 2 units of the same model report it at 32104 in whole percent, and the Venus A/D seed uses that address instead, which is why the models are separate files. Left out on purpose: the registers that only exist on E v1/v2 firmware, the alarm and fault bit fields (36000, 36100) whose bit meanings the source does not document, the grid standard and discharge-limit diagnostic registers, and the per-pack cell voltage block, which the source marks as unverified on this model."
}
