{
  "spec_version": 1,
  "slug": "epever-tracer-b-a-charge-controllers",
  "manufacturer": "EPEver (Beijing Epsolar Technology)",
  "model": "Tracer-B / Tracer-A series, iTracer and eTracer (also LS-B / VS-B) MPPT charge controllers",
  "category": "Charge controller",
  "supplier_url": "https://www.epever.com/all-downloads/",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "LowFirst",
    "native_interface": "rs485",
    "serial": {
      "parity": "None",
      "baud_rate": 115200,
      "data_bits": 8,
      "stop_bits": 1
    }
  },
  "coils": [],
  "discrete_inputs": [
    {
      "address": 8192,
      "count": 1,
      "name": "Over-temperature inside the device",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Read with function code 02: 1 = the temperature inside the controller is above the over-temperature protection point, 0 = normal."
    },
    {
      "address": 8204,
      "count": 1,
      "name": "Day / night",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Read with function code 02: 1 = night, 0 = day."
    }
  ],
  "input_registers": [
    {
      "address": 12288,
      "count": 1,
      "name": "PV array rated voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12289,
      "count": 1,
      "name": "PV array rated current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12290,
      "count": 2,
      "name": "PV array rated power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Low word at 3002, high word at 3003."
    },
    {
      "address": 12292,
      "count": 1,
      "name": "Battery rated voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12293,
      "count": 1,
      "name": "Battery rated current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12294,
      "count": 2,
      "name": "Battery rated power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Low word at 3006, high word at 3007."
    },
    {
      "address": 12301,
      "count": 1,
      "name": "Rated load voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12302,
      "count": 1,
      "name": "Rated load current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12303,
      "count": 2,
      "name": "Rated load power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Low word at 300F, high word at 3010."
    },
    {
      "address": 12544,
      "count": 1,
      "name": "PV array input voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12545,
      "count": 1,
      "name": "PV array input current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12546,
      "count": 2,
      "name": "PV array input power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Low word at 3102, high word at 3103."
    },
    {
      "address": 12556,
      "count": 1,
      "name": "Load voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12557,
      "count": 1,
      "name": "Load current",
      "data_type": "UInt16",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12558,
      "count": 2,
      "name": "Load power",
      "data_type": "UInt32",
      "units": "W",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Low word at 310E, high word at 310F."
    },
    {
      "address": 12560,
      "count": 1,
      "name": "Battery temperature",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12561,
      "count": 1,
      "name": "Device temperature",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 12570,
      "count": 1,
      "name": "Battery SOC",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Percentage of the battery's remaining capacity."
    },
    {
      "address": 12573,
      "count": 1,
      "name": "Battery real rated voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Current system rated voltage: 1200, 2400, 3600 and 4800 represent 12 V, 24 V, 36 V and 48 V."
    },
    {
      "address": 12800,
      "count": 1,
      "name": "Battery status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bitfield: D15 = wrong rated-voltage identification; D8 = battery internal resistance abnormal (1) or normal (0); D7-D4 = 00H normal, 01H over temperature, 02H low temperature; D3-D0 = 00H normal, 01H over voltage, 02H under voltage, 03H over discharge, 04H fault."
    },
    {
      "address": 12801,
      "count": 1,
      "name": "Charging equipment status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bitfield: D15-D14 = input voltage status (00H normal, 01H no input power, 02H input voltage higher than rated, 03H input voltage error); D13 = charging MOSFET short circuit; D12 = charging or anti-reverse MOSFET open circuit; D11 = anti-reverse MOSFET short circuit; D10 = input over current; D9 = load over current; D8 = load short circuit; D7 = load MOSFET short circuit; D6 = disequilibrium in three circuits."
    },
    {
      "address": 12802,
      "count": 1,
      "name": "Discharging equipment status",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bitfield: D15-D14 = input voltage status (00H normal, 01H low, 02H high, 03H no access); D13-D12 = output power (00H light load, 01H moderate, 02H rated, 03H overload); D11 = short circuit; D10 = unable to discharge; D9 = unable to stop discharging; D8 = output voltage abnormal; D7 = input over voltage; D6 = short circuit on the high-voltage side; D5 = boost over voltage; D4 = output over voltage; D1 = 1 fault / 0 normal; D0 = 1 running / 0 standby."
    },
    {
      "address": 13058,
      "count": 1,
      "name": "Maximum battery voltage today",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Refreshed at 00:00 every day."
    },
    {
      "address": 13059,
      "count": 1,
      "name": "Minimum battery voltage today",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Refreshed at 00:00 every day."
    },
    {
      "address": 13060,
      "count": 2,
      "name": "Consumed energy today",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Cleared at 00:00 every day. Low word at 3304, high word at 3305."
    },
    {
      "address": 13062,
      "count": 2,
      "name": "Consumed energy this month",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Cleared at 00:00 on the first day of the month. Low word at 3306, high word at 3307."
    },
    {
      "address": 13064,
      "count": 2,
      "name": "Consumed energy this year",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Cleared at 00:00 on 1 January. Low word at 3308, high word at 3309."
    },
    {
      "address": 13066,
      "count": 2,
      "name": "Total consumed energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Low word at 330A, high word at 330B."
    },
    {
      "address": 13068,
      "count": 2,
      "name": "Generated energy today",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Cleared at 00:00 every day. Low word at 330C, high word at 330D."
    },
    {
      "address": 13070,
      "count": 2,
      "name": "Generated energy this month",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Cleared at 00:00 on the first day of the month. Low word at 330E, high word at 330F."
    },
    {
      "address": 13072,
      "count": 2,
      "name": "Generated energy this year",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Cleared at 00:00 on 1 January. Low word at 3310, high word at 3311."
    },
    {
      "address": 13074,
      "count": 2,
      "name": "Total generated energy",
      "data_type": "UInt32",
      "units": "kWh",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Low word at 3312, high word at 3313."
    },
    {
      "address": 13082,
      "count": 1,
      "name": "Battery voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R"
    },
    {
      "address": 13083,
      "count": 2,
      "name": "Battery current",
      "data_type": "UInt32",
      "units": "A",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "R",
      "description": "Low word at 331B, high word at 331C. Negative while the battery discharges, which an unsigned read shows as a value above 32767."
    }
  ],
  "holding_registers": [
    {
      "address": 36864,
      "count": 1,
      "name": "Battery type",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0000H = user defined, 0001H = sealed, 0002H = gel, 0003H = flooded."
    },
    {
      "address": 36865,
      "count": 1,
      "name": "Battery capacity",
      "data_type": "UInt16",
      "units": "Ah",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Rated capacity of the battery."
    },
    {
      "address": 36866,
      "count": 1,
      "name": "Temperature compensation coefficient",
      "data_type": "UInt16",
      "units": "mV/°C/2V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Range 0-9."
    },
    {
      "address": 36867,
      "count": 1,
      "name": "Over-voltage disconnect voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36868,
      "count": 1,
      "name": "Charging limit voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36869,
      "count": 1,
      "name": "Over-voltage reconnect voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36870,
      "count": 1,
      "name": "Equalize charging voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36871,
      "count": 1,
      "name": "Boost charging voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36872,
      "count": 1,
      "name": "Float charging voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36873,
      "count": 1,
      "name": "Boost reconnect charging voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36874,
      "count": 1,
      "name": "Low-voltage reconnect voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36875,
      "count": 1,
      "name": "Under-voltage warning recover voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36876,
      "count": 1,
      "name": "Under-voltage warning voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36877,
      "count": 1,
      "name": "Low-voltage disconnect voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36878,
      "count": 1,
      "name": "Discharging limit voltage",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36883,
      "count": 1,
      "name": "Real-time clock, seconds and minutes",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "D7-D0 = seconds, D15-D8 = minutes. Year, month, day, hour, minute and second should be written together (registers 9013-9015)."
    },
    {
      "address": 36884,
      "count": 1,
      "name": "Real-time clock, hour and day",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "D7-D0 = hour, D15-D8 = day."
    },
    {
      "address": 36885,
      "count": 1,
      "name": "Real-time clock, month and year",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "D7-D0 = month, D15-D8 = year."
    },
    {
      "address": 36887,
      "count": 1,
      "name": "Battery upper temperature limit",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36888,
      "count": 1,
      "name": "Battery lower temperature limit",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36889,
      "count": 1,
      "name": "Device over-temperature threshold",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36890,
      "count": 1,
      "name": "Device temperature recovery threshold",
      "data_type": "UInt16",
      "units": "°C",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36894,
      "count": 1,
      "name": "Night time threshold voltage (NTTV)",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "When the PV voltage is lower than this value the controller treats it as sundown."
    },
    {
      "address": 36895,
      "count": 1,
      "name": "Light signal startup (night) delay time",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "The PV voltage must stay below the NTTV for longer than this delay before the controller detects night."
    },
    {
      "address": 36896,
      "count": 1,
      "name": "Day time threshold voltage (DTTV)",
      "data_type": "UInt16",
      "units": "V",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "When the PV voltage is higher than this value the controller treats it as sunrise."
    },
    {
      "address": 36897,
      "count": 1,
      "name": "Light signal close (day) delay time",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "The PV voltage must stay above the DTTV for longer than this delay before the controller detects day."
    },
    {
      "address": 36925,
      "count": 1,
      "name": "Load control mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0000H = manual control, 0001H = light on/off, 0002H = light on + timer, 0003H = timing control."
    },
    {
      "address": 36926,
      "count": 1,
      "name": "Light on + time (time1)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Length of load output timer 1: D15-D8 = hours, D7-D0 = minutes."
    },
    {
      "address": 36927,
      "count": 1,
      "name": "Light on + time (time2)",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Length of load output timer 2: D15-D8 = hours, D7-D0 = minutes."
    },
    {
      "address": 36930,
      "count": 1,
      "name": "Timing control, turn-on time 1, seconds",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36931,
      "count": 1,
      "name": "Timing control, turn-on time 1, minutes",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36932,
      "count": 1,
      "name": "Timing control, turn-on time 1, hours",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36933,
      "count": 1,
      "name": "Timing control, turn-off time 1, seconds",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36934,
      "count": 1,
      "name": "Timing control, turn-off time 1, minutes",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36935,
      "count": 1,
      "name": "Timing control, turn-off time 1, hours",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36936,
      "count": 1,
      "name": "Timing control, turn-on time 2, seconds",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36937,
      "count": 1,
      "name": "Timing control, turn-on time 2, minutes",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36938,
      "count": 1,
      "name": "Timing control, turn-on time 2, hours",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36939,
      "count": 1,
      "name": "Timing control, turn-off time 2, seconds",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36940,
      "count": 1,
      "name": "Timing control, turn-off time 2, minutes",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36941,
      "count": 1,
      "name": "Timing control, turn-off time 2, hours",
      "data_type": "UInt16",
      "units": "h",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW"
    },
    {
      "address": 36963,
      "count": 1,
      "name": "Backlight time",
      "data_type": "UInt16",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "The LCD backlight is switched off after this many seconds."
    },
    {
      "address": 36965,
      "count": 1,
      "name": "Night time length",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Default value for the whole night length: D15-D8 = hours, D7-D0 = minutes."
    },
    {
      "address": 36967,
      "count": 1,
      "name": "Battery rated voltage level",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = auto recognise, 1 = 12 V, 2 = 24 V, 3 = 36 V, 4 = 48 V, 5 = 60 V, 6 = 110 V, 7 = 120 V, 8 = 220 V, 9 = 240 V."
    },
    {
      "address": 36969,
      "count": 1,
      "name": "Timing control, time choose",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Records the time of load: 0 uses one time, 1 uses two times, and so on."
    },
    {
      "address": 36970,
      "count": 1,
      "name": "Default load on/off in manual mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 36971,
      "count": 1,
      "name": "Equalize duration",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Usually 60-120 minutes."
    },
    {
      "address": 36972,
      "count": 1,
      "name": "Boost duration",
      "data_type": "UInt16",
      "units": "min",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Usually 60-120 minutes."
    },
    {
      "address": 36973,
      "count": 1,
      "name": "Battery stop-charging SOC",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Percentage of the battery's remaining capacity at which charging stops; usually 20-80%."
    },
    {
      "address": 36974,
      "count": 1,
      "name": "Battery charge (depth of charge)",
      "data_type": "UInt16",
      "units": "%",
      "scale_factor": 0.01,
      "offset": 0,
      "access": "RW",
      "description": "Depth of charge, 100%."
    },
    {
      "address": 36976,
      "count": 1,
      "name": "Charging mode",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Management mode of battery charge and discharge: 0 = voltage compensation, 1 = SOC."
    }
  ],
  "combined_registers": [],
  "notes": "MIRROR-SOURCED. EPEver does not publish this protocol document on its own site (its download area carries manuals and datasheets only), so this seed is built from a widely mirrored copy of EPEver's own 'B-Series MODBUS Specification' — the PDF the DIY-solar community circulates as 'MODBUS-Protocol-v25.pdf' (20 pages, created 2018-09-27; SHA-256 d0f9f08be06b5125134c3be24d9acc1430dcd4e9e82478df68d451489aaa77fb), read from https://raw.githubusercontent.com/softwarecrash/EPEver2MQTT/main/Protocol/MODBUS-Protocol-v25.pdf. It covers LS-B, VS-B, Tracer-B, Tracer-A, iTracer and eTracer; EPEver's newer XTRA and Triron families are not named. Its framing rules apply: Modbus RTU, default controller ID 1 (changeable with the PC software or MT50 meter), 115200 8N1, and hexadecimal addresses with base offset 0x00, used unchanged as zero-based wire addresses. Parity is not printed in that revision; EPEver's earlier revision of the same B-Series specification (ControllerProtocolV2.3.pdf, V2.3, 2015-06-12, SHA-256 a3fccf914928118def85223482e3091956d046810a01c20152006e6f68c61b70, same mirror folder) prints BPS 115200, parity None, 8 data bits, 1 stop bit, no flow control, and that its addresses are request-PDU addresses. All 32-bit values are two registers with the low word at the lower address (the document's worked example puts 0x93E0 at 0x3002 and 0x0004 at 0x3003), hence word order low-first. The 'Times' column is the divisor, so values are scaled 0.01 where it says 100. It publishes no data-type column: single measurements are UInt16, L/H pairs UInt32 as its notation implies; battery current (0x331B) goes negative on discharge, which an unsigned read shows above 32767. The write-only coil block 0000-000E (charging on/off, load control, load test, restore defaults, clear statistics) is not seeded because this format's coil area has no write-only access. The 8-pin RJ45 pinout (3/4 = RS-485-B, 5/6 = RS-485-A, 7/8 = ground) is in the same document."
}
