{
 "manufacturer": "SmartGen",
 "manufacturer_slug": "smartgen",
 "model": "HGM4010N / HGM4020N",
 "model_slug": "hgm4020n",
 "short_model": "HGM4020N",
 "aliases": [
  "HGM4010N",
  "HGM4000N"
 ],
 "equipment_type": "Generator controller",
 "applies_to": "HGM4010N (auto start) and HGM4020N (AMF) genset controllers, HGM4000N communication protocol v1.2.",
 "summary": "SmartGen's HGM4000N family are compact single-genset controllers: the HGM4010N starts and stops on a remote signal, the HGM4020N adds mains monitoring and automatic transfer (AMF). One RS485 port is a Modbus RTU slave with fixed tables: alarm and status bits as coils (FC01), measurements and counters as holding registers (FC03), and remote keys as single-coil writes (FC05). This map covers the status and alarm coils, mains and generator voltages, currents, powers, engine values, sequence states, counters and the remote start/stop/mode/breaker commands.",
 "transport": [
  "RTU"
 ],
 "defaults": {
  "unit_id": 1,
  "baud": 9600,
  "parity": "None",
  "data_bits": 8,
  "stop_bits": 1,
  "tcp_port": null
 },
 "addressing": {
  "convention": "0-based",
  "note": "Tables print a decimal 'Modbus Address' (used here as the wire address) next to a 1-based 'PLC Address' (coils 0001.., holding registers 40001..). The document's examples confirm the Modbus Address column is the PDU address: Accum. Fuel Consump. at 0068 is requested with start address 0x0044, and Remote Manual at 0004 is written to coil 0x0004."
 },
 "default_word_order": "CDAB",
 "firmware": null,
 "source": {
  "title": "HGM4000N Genset Controller Communication Protocol",
  "doc_number": null,
  "revision_date": "2023-04-20 (v1.2)",
  "url": "https://www.smartgen.cn/yun/data/download/HGM4000N_Protocol_en.pdf",
  "pages": "p. 4 (port settings), 5 (wiring), 6-8 (FC01 coils and example), 9-13 (FC03 data, notes, 32-bit example), 13-14 (FC05 remote coils and example), 14 (running status table), 15-16 (address setting, FAQ)"
 },
 "notes": [
  "Coil addresses 0-6 are shared: FC01 reads return status bits, while an FC05 write of FF00 to the same address issues a remote command (start, stop, test, auto, manual, breaker). Each entry names both meanings; the write meaning is in capitals.",
  "HGM4010N and HGM4020N differ at command coils 5 and 6: on the HGM4020N they are gen and mains close/open keys, on the HGM4010N gen open and gen close keys.",
  "The only 32-bit value (Accum. Fuel Consump., 0068-0069) is low word first: the document's example reads E240h at 0068 and 0001h at 0069 and combines them to 0001E240h (123456). Its result table labels the rows 0103/0104, but the request frame uses start address 0x0044 (68).",
  "Left out: mains and gen frequency (0006, 0013). The table prints ratio 0.1 Hz, but the note explaining ratios uses frequency with ratio 0.01 Hz as its worked example, so the scale is contradictory.",
  "Left out: oil pressure value (0019), fuel level value (0021), aux. sensor value and resistance (0030-0031) and coolant level (0058), because no ratio is printed for them; the delay values at 0037 and 0039 because neither ratio nor unit is printed; Load Output Percentage (0055) because its range is -100 to 100 but it is marked unsigned; HW version (0051) because no format is given.",
  "Run hours, start count and energy are each split into an MSB register (0-9000) and an LSB register (0-9999). The document does not say how the two parts combine, so they are listed separately.",
  "Water and ECU temperatures and the powers are documented as unsigned, so negative values cannot be represented as documented.",
  "A reading of 32766 means the sensor is open (controller shows ++++); 32767 means the ECU sent no data (####).",
  "The controller running status table stops at 14 (Stop Failure); no 'After Stop' state is listed in this document."
 ],
 "registers": [
  {
   "table": "coil",
   "address": 0,
   "documented": "0000",
   "name": "Common Alarm (read) / WRITE = REMOTE START",
   "description": "Read: 1 = common alarm. FC05 write FF00 = remote start; the engine will crank.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 1,
   "documented": "0001",
   "name": "Common Warning Alarm (read) / WRITE = REMOTE STOP",
   "description": "Read: 1 = common warning. FC05 write FF00 = remote stop command.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 2,
   "documented": "0002",
   "name": "Common Shutdown Alarm (read) / WRITE = REMOTE TEST MODE",
   "description": "Read: 1 = common shutdown. FC05 write FF00 = remote Test command.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 3,
   "documented": "0003",
   "name": "Remote Mode (read) / WRITE = REMOTE AUTO MODE",
   "description": "Read: 1 = remote mode. FC05 write FF00 = switch controller to Auto.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 4,
   "documented": "0004",
   "name": "Reserved (read) / WRITE = REMOTE MANUAL MODE",
   "description": "FC05 write FF00 = switch controller to Manual.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 5,
   "documented": "0005",
   "name": "Reserved (read) / WRITE = GEN BREAKER COMMAND",
   "description": "FC05 write FF00: HGM4020N gen close/open key; HGM4010N gen open key.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 6,
   "documented": "0006",
   "name": "Mains On-load (read) / WRITE = MAINS OR GEN BREAKER COMMAND",
   "description": "Read: 1 = mains on load. FC05 FF00: HGM4020N mains close/open; HGM4010N gen close.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 7,
   "documented": "0007",
   "name": "Gen On-load",
   "description": "1 = generator supplying the load.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 8,
   "documented": "0008",
   "name": "Emergency Stop",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 9,
   "documented": "0009",
   "name": "Overspeed Alarm Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 10,
   "documented": "0010",
   "name": "Underspeed Alarm Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 11,
   "documented": "0011",
   "name": "Speed Signal Loss Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 12,
   "documented": "0012",
   "name": "Overfrequency Alarm Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 13,
   "documented": "0013",
   "name": "Underfrequency Alarm Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 14,
   "documented": "0014",
   "name": "Overvoltage Alarm Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 15,
   "documented": "0015",
   "name": "Undervoltage Alarm Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 16,
   "documented": "0016",
   "name": "Gen Overcurrent Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 17,
   "documented": "0017",
   "name": "Crank Failure",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 18,
   "documented": "0018",
   "name": "High Water Temp. Alarm Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 19,
   "documented": "0019",
   "name": "Low Oil Pressure Alarm Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 20,
   "documented": "0020",
   "name": "Frequency Loss Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 21,
   "documented": "0021",
   "name": "Input Shutdown Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 22,
   "documented": "0022",
   "name": "Low Fuel Level Shutdown Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 23,
   "documented": "0023",
   "name": "Low Coolant Level Shutdown Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 24,
   "documented": "0024",
   "name": "High Water Temp. Warning Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 25,
   "documented": "0025",
   "name": "Low Oil Pressure Warning Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 26,
   "documented": "0026",
   "name": "Gen Overcurrent Warning Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 27,
   "documented": "0027",
   "name": "Stop Failure Warning Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 28,
   "documented": "0028",
   "name": "Low Fuel Level Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 29,
   "documented": "0029",
   "name": "Charging Failure Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 30,
   "documented": "0030",
   "name": "Battery Undervoltage Warning Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 31,
   "documented": "0031",
   "name": "Battery Overvoltage Warning Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 32,
   "documented": "0032",
   "name": "Input Warning Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 33,
   "documented": "0033",
   "name": "Speed Signal Loss Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 34,
   "documented": "0034",
   "name": "Low Coolant Level Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 35,
   "documented": "0035",
   "name": "Temp. Sensor Open Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 36,
   "documented": "0036",
   "name": "Oil Pressure Sensor Open Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 37,
   "documented": "0037",
   "name": "Fuel Level Sensor Open Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 38,
   "documented": "0038",
   "name": "Aux. Sensor Open Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 39,
   "documented": "0039",
   "name": "Aux. Sensor Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 40,
   "documented": "0040",
   "name": "Test Mode",
   "description": "1 = controller in Test mode.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 41,
   "documented": "0041",
   "name": "Auto Mode",
   "description": "1 = controller in Auto mode.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 42,
   "documented": "0042",
   "name": "Manual Mode",
   "description": "1 = controller in Manual mode.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 43,
   "documented": "0043",
   "name": "Stop Mode",
   "description": "1 = controller in Stop mode.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 44,
   "documented": "0044",
   "name": "Temp. Sensor Open Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 45,
   "documented": "0045",
   "name": "Oil Pressure Sensor Open Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 46,
   "documented": "0046",
   "name": "Fuel Level Sensor Open Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 47,
   "documented": "0047",
   "name": "Aux. Sensor Open Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 48,
   "documented": "0048",
   "name": "Emergency Stop Input",
   "description": "Physical emergency-stop input state.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 49,
   "documented": "0049",
   "name": "Aux. Input 1",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 50,
   "documented": "0050",
   "name": "Aux. Input 2",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 51,
   "documented": "0051",
   "name": "Aux. Input 3",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 52,
   "documented": "0052",
   "name": "Aux. Input 4",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 53,
   "documented": "0053",
   "name": "Aux. Input 5",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 56,
   "documented": "0056",
   "name": "Crank Relay Output",
   "description": "Physical crank relay state.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 57,
   "documented": "0057",
   "name": "Fuel Relay Output",
   "description": "Physical fuel relay state.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 58,
   "documented": "0058",
   "name": "Aux. Output 1",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 59,
   "documented": "0059",
   "name": "Aux. Output 2",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 60,
   "documented": "0060",
   "name": "Aux. Output 3",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 61,
   "documented": "0061",
   "name": "Aux. Output 4",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 62,
   "documented": "0062",
   "name": "Aux. Output 5",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 63,
   "documented": "0063",
   "name": "Maintenance Time Due Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 64,
   "documented": "0064",
   "name": "Mains Fault",
   "description": "1 = mains abnormal.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 65,
   "documented": "0065",
   "name": "Mains Normal",
   "description": "1 = mains within limits.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 66,
   "documented": "0066",
   "name": "Mains Overvoltage",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 67,
   "documented": "0067",
   "name": "Mains Undervoltage",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 68,
   "documented": "0068",
   "name": "Mains Loss Phase",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 69,
   "documented": "0069",
   "name": "Mains Blackout",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 70,
   "documented": "0070",
   "name": "Charger Fail to Charge Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 71,
   "documented": "0071",
   "name": "Overpower Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 72,
   "documented": "0072",
   "name": "Gen Normal",
   "description": "1 = generator output within limits.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 73,
   "documented": "0073",
   "name": "Gen Overvoltage Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 74,
   "documented": "0074",
   "name": "Gen Undervoltage Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 75,
   "documented": "0075",
   "name": "Gen Overfrequency Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 76,
   "documented": "0076",
   "name": "Gen Underfrequency Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 77,
   "documented": "0077",
   "name": "Gen Overcurrent Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 78,
   "documented": "0078",
   "name": "Scheduled Not Run",
   "description": "1 = a scheduled not-run period is active.",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 79,
   "documented": "0079",
   "name": "ECU Warning",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 80,
   "documented": "0080",
   "name": "Aux. Sensor Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 81,
   "documented": "0081",
   "name": "Maintenance Time Due Shutdown Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 82,
   "documented": "0082",
   "name": "Overpower Shutdown Alarm",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 83,
   "documented": "0083",
   "name": "ECU Alarm Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "coil",
   "address": 84,
   "documented": "0084",
   "name": "ECU Failure Shutdown",
   "description": "",
   "data_type": "BIT",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 0,
   "documented": "0000",
   "name": "Mains UA",
   "description": "Mains phase-to-neutral voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 1,
   "documented": "0001",
   "name": "Mains UB",
   "description": "Mains phase-to-neutral voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 2,
   "documented": "0002",
   "name": "Mains UC",
   "description": "Mains phase-to-neutral voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 3,
   "documented": "0003",
   "name": "Mains UAB",
   "description": "Mains line-to-line voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 4,
   "documented": "0004",
   "name": "Mains UBC",
   "description": "Mains line-to-line voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 5,
   "documented": "0005",
   "name": "Mains UCA",
   "description": "Mains line-to-line voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 7,
   "documented": "0007",
   "name": "Gen UA",
   "description": "Generator phase-to-neutral voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 8,
   "documented": "0008",
   "name": "Gen UB",
   "description": "Generator phase-to-neutral voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 9,
   "documented": "0009",
   "name": "Gen UC",
   "description": "Generator phase-to-neutral voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 10,
   "documented": "0010",
   "name": "Gen UAB",
   "description": "Generator line-to-line voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 11,
   "documented": "0011",
   "name": "Gen UBC",
   "description": "Generator line-to-line voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 12,
   "documented": "0012",
   "name": "Gen UCA",
   "description": "Generator line-to-line voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 14,
   "documented": "0014",
   "name": "A Phase Current",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 15,
   "documented": "0015",
   "name": "B Phase Current",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 16,
   "documented": "0016",
   "name": "C Phase Current",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 17,
   "documented": "0017",
   "name": "Water Temp. Value",
   "description": "Coolant temperature; 32766 = sensor open, 32767 = no ECU data.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 18,
   "documented": "0018",
   "name": "Water Temp. Resist. Value",
   "description": "Resistance measured on the temperature sensor input.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "Ω",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 20,
   "documented": "0020",
   "name": "OP Resist. Value",
   "description": "Resistance measured on the oil pressure sensor input.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "Ω",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 22,
   "documented": "0022",
   "name": "Level Resist. Value",
   "description": "Resistance measured on the fuel level sensor input.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "Ω",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 23,
   "documented": "0023",
   "name": "Speed",
   "description": "Engine speed.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "rpm",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 24,
   "documented": "0024",
   "name": "Battery Voltage",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 25,
   "documented": "0025",
   "name": "D+ Voltage",
   "description": "Charge alternator D+ terminal voltage.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 26,
   "documented": "0026",
   "name": "Active Power",
   "description": "Total generator active power (unsigned as documented).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kW",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 27,
   "documented": "0027",
   "name": "Reactive Power",
   "description": "Total reactive power (unsigned as documented).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kvar",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 28,
   "documented": "0028",
   "name": "Apparent Power",
   "description": "Total apparent power.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kVA",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 29,
   "documented": "0029",
   "name": "Power Factor",
   "description": "Unit printed as CosΦ; unsigned.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.01,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 32,
   "documented": "0032",
   "name": "Maintenance Countdown h",
   "description": "Hours left until maintenance is due (0-5000).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 33,
   "documented": "0033",
   "name": "Maintenance Countdown min",
   "description": "Minutes part of the maintenance countdown.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "min",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 34,
   "documented": "0034",
   "name": "Controller Running Status",
   "description": "Engine/genset sequence state.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Standby",
    "1": "Preheat",
    "2": "Fuel",
    "3": "Crank",
    "4": "Crank Rest",
    "5": "Safety Run",
    "6": "Start Idle",
    "7": "High Speed Warming Up",
    "8": "On-load",
    "9": "Normal Running",
    "10": "High Speed Cooling",
    "11": "Stop Idle",
    "12": "ETS",
    "13": "Wait for Stop",
    "14": "Stop Failure"
   },
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 35,
   "documented": "0035",
   "name": "Running Status Delay",
   "description": "Delay value for the current sequence state (0-3600).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "s",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 36,
   "documented": "0036",
   "name": "Auto Running Status",
   "description": "Automatic start/stop delay state.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Start",
    "1": "Stop",
    "2": "No Delay"
   },
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 38,
   "documented": "0038",
   "name": "ATS Running Status",
   "description": "Transfer state code.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "No Delay",
    "1": "Transfer Rest"
   },
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 40,
   "documented": "0040",
   "name": "Mains Status",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": {
    "0": "Normal",
    "1": "Abnormal",
    "2": "No Delay"
   },
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 41,
   "documented": "0041",
   "name": "Mains Status Delay",
   "description": "Delay value for the mains status (0-3600).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "s",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 42,
   "documented": "0042",
   "name": "Accum. Running Time (h) MSB",
   "description": "High part of total run hours (0-9000); combination rule not stated.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 43,
   "documented": "0043",
   "name": "Accum. Running Time (h) LSB",
   "description": "Low part of total run hours (0-9999).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 44,
   "documented": "0044",
   "name": "Accum. Running Time (min)",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "min",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 45,
   "documented": "0045",
   "name": "Accum. Running Time (s)",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "s",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 46,
   "documented": "0046",
   "name": "Accum. Start Times MSB",
   "description": "High part of the start counter (0-9000).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 47,
   "documented": "0047",
   "name": "Accum. Start Times LSB",
   "description": "Low part of the start counter (0-9999).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 48,
   "documented": "0048",
   "name": "Accum. Energy MSB",
   "description": "High part of the energy counter (0-9000).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 49,
   "documented": "0049",
   "name": "Accum. Energy LSB",
   "description": "Low part of the energy counter (0-9999).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 50,
   "documented": "0050",
   "name": "SW",
   "description": "Software version code; no scaling printed.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 52,
   "documented": "0052",
   "name": "A Phase Active Power",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kW",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 53,
   "documented": "0053",
   "name": "B Phase Active Power",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kW",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 54,
   "documented": "0054",
   "name": "C Phase Active Power",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kW",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 59,
   "documented": "0059",
   "name": "Oil Temp.",
   "description": "Engine value; ratio 1, unsigned.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 60,
   "documented": "0060",
   "name": "Coolant Pressure",
   "description": "Engine value; ratio 1, unsigned.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kPa",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 61,
   "documented": "0061",
   "name": "Fuel Pressure",
   "description": "Engine value; ratio 1, unsigned.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kPa",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 62,
   "documented": "0062",
   "name": "Fuel Temp.",
   "description": "Engine value; ratio 1, unsigned.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 63,
   "documented": "0063",
   "name": "Inlet Temp.",
   "description": "Engine value; ratio 1, unsigned.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 64,
   "documented": "0064",
   "name": "Exhaust Temp.",
   "description": "Engine value; ratio 1, unsigned.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 65,
   "documented": "0065",
   "name": "Turbo Pressure",
   "description": "Engine value; ratio 1, unsigned.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "kPa",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 66,
   "documented": "0066",
   "name": "Fuel Consump.",
   "description": "Fuel consumption value.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "L",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 68,
   "documented": "0068-0069",
   "name": "Accum. Fuel Consump.",
   "description": "Low word at 0068, high word at 0069.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "L",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 70,
   "documented": "0070",
   "name": "SCM Internal Temp.",
   "description": "Controller internal temperature.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "°C",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 71,
   "documented": "0071",
   "name": "Controller Model",
   "description": "Model code; values not listed.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 72,
   "documented": "0072",
   "name": "Controller Time: Year",
   "description": "Two-digit year (0-99).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "year",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 73,
   "documented": "0073",
   "name": "Controller Time: Month",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "month",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 74,
   "documented": "0074",
   "name": "Controller Time: Day",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "day",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 75,
   "documented": "0075",
   "name": "Controller Time: Week",
   "description": "Day of week (0-6).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "week",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 76,
   "documented": "0076",
   "name": "Controller Time: h",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 77,
   "documented": "0077",
   "name": "Controller Time: min",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "min",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 78,
   "documented": "0078",
   "name": "Controller Time: s",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "s",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 79,
   "documented": "0079",
   "name": "Release Year",
   "description": "Firmware release date.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "year",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 80,
   "documented": "0080",
   "name": "Release Month",
   "description": "Firmware release date.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "month",
   "access": "R",
   "values": null,
   "bits": null
  },
  {
   "table": "holding_register",
   "address": 81,
   "documented": "0081",
   "name": "Release Day",
   "description": "Firmware release date.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "offset": 0,
   "scale_factor_ref": null,
   "units": "day",
   "access": "R",
   "values": null,
   "bits": null
  }
 ],
 "integration": {
  "summary": "Wire to RS485 A/B, set the Controller Address, then poll holding registers 0000-0081 with FC03 and coils 0000-0084 with FC01. Remote commands are single FC05 writes of FF00 to coils 0000-0006, the same addresses that read back as status bits.",
  "minimum_registers": [
   {
    "table": "coil",
    "address": 0,
    "why": "Common alarm (read) / remote start (write)"
   },
   {
    "table": "coil",
    "address": 41,
    "why": "Auto mode active"
   },
   {
    "table": "holding_register",
    "address": 34,
    "why": "Genset running state"
   },
   {
    "table": "holding_register",
    "address": 7,
    "why": "Generator phase A voltage"
   },
   {
    "table": "holding_register",
    "address": 14,
    "why": "Phase A current"
   },
   {
    "table": "holding_register",
    "address": 26,
    "why": "Total active power"
   },
   {
    "table": "holding_register",
    "address": 23,
    "why": "Engine speed"
   },
   {
    "table": "holding_register",
    "address": 24,
    "why": "Battery voltage"
   }
  ],
  "enable": "Set a unique Controller Address (1-254, default 1) from the front panel: menu, Parameter Setting, password (default 0318), Controller Address. The setting applies once saved. Parity is none, odd or even (default none); the document gives 9600 bps as the only baud rate.",
  "watchdog": null,
  "quirks": [
   "Remote command coils are written with FF00 and each command is sent once only; they act as one-shot key presses, not latched states.",
   "Coils 0-6 mean different things for read (FC01) and write (FC05).",
   "Only FC01, FC03 and FC05 are supported (no FC06 or FC16); Modbus ASCII is not supported. Read at most 120 registers per request.",
   "The one 32-bit value (fuel total at 0068-0069) is low word first (CDAB)."
  ],
  "setup": [
   "Default: address 1, 9600 bps, 8 data bits, no parity, 1 stop bit; allow a response timeout of more than 200 ms.",
   "Use 120 Ω shielded twisted pair, shield grounded at one end (host side) only; fit 120 Ω terminators at the two ends of the bus.",
   "Up to 32 controllers per RS485 segment, about 1000 m at 9600 bps."
  ],
  "gotchas": [
   "This controller starts a real engine. Confirm the genset is safe to run and local staff are informed before writing coils 0-6; a write to coil 0 is a start command even though the same address reads as Common Alarm.",
   "HGM4020N coils 5/6 are close/open keys and the document does not say how the controller chooses between closing and opening; a write while the breaker is closed may open it and drop the load. Read Gen On-load (coil 7) and Mains On-load (coil 6) first.",
   "After a remote stop, check the mode coils 40-43 and send Remote Auto (coil 3) if the set must stay ready for automatic operation."
  ]
 },
 "page": "https://easymodbus.com/modbus-register-maps/smartgen/hgm4020n",
 "address_note": "address = 0-based Modbus wire (PDU) address; documented = as printed in the source.",
 "note": "Re-typed from the manufacturer's public documentation (see source) and verified against it. Registers vary by firmware and options; verify against the live device before writing."
}
