{
 "manufacturer": "Carlo Gavazzi",
 "manufacturer_slug": "carlo-gavazzi",
 "model": "EM24-DIN Ethernet (E1)",
 "model_slug": "em24-din-e1",
 "short_model": "EM24 E1",
 "aliases": [
  "EM24 E1",
  "EM24_E1",
  "EM24DINAV23XE1X",
  "EM24DINAV23XE1PFA",
  "EM24DINAV23XE1PFB",
  "EM24DINAV53XE1X",
  "EM24DINAV53XE1PFA",
  "EM24DINAV53XE1PFB"
 ],
 "equipment_type": "Energy meter (energy analyzer)",
 "applies_to": "EM24-DIN energy analyzers with the E1 Ethernet (RJ45) Modbus TCP port, AV2 and AV5 inputs, X/PFA/PFB, protocol version 0 revision 1.3 (FW 1.0).",
 "summary": "The EM24 E1 is the Ethernet version of Carlo Gavazzi's EM24-DIN three-phase energy analyzer, with Modbus TCP on an RJ45 port. Measurements are 32-bit integers sent low word first with fixed weights and can be read with function 03 or 04, up to 125 registers per request. This map covers voltages, currents, powers, PF, frequency, demand, total/partial/phase/tariff energy, hour meter, identification, measurement setup, tariff, TCP/IP settings and reset commands.",
 "transport": [
  "TCP"
 ],
 "defaults": {
  "unit_id": null,
  "baud": null,
  "parity": null,
  "data_bits": null,
  "stop_bits": null,
  "tcp_port": 502
 },
 "addressing": {
  "convention": "Modicon",
  "note": "Registers are printed as a 6-digit Modicon number for function 04 (3xxxxx; 4xxxxx for function 03) beside the hex physical address placed in the request. Wire address = physical address (300001 / 0000h is address 0). Setup rows are written with function 06 and are listed as holding registers."
 },
 "default_word_order": "CDAB",
 "firmware": "1.0",
 "source": {
  "title": "EM24_E1 (Ethernet) Communication Protocol",
  "doc_number": "Version 0 Revision 1.3",
  "revision_date": null,
  "url": "https://www.gavazziautomation.com/fileadmin/images/PIM/OTHERSTUFF/COMPRO/EM24_E1_CP.pdf",
  "pages": "Data format p. 4; tables pp. 5-12"
 },
 "notes": [
  "Word order: the document states INT32/UINT32/UINT64 values are LSW first with bytes MSB first, so 32-bit values are CDAB; CT and VT rows also say 'LSW:MSW'.",
  "This map is not the same as the RS485 EM24-DIN map: tariff kvarh, DMD VA and DMD A max sit at different addresses, and frequency is UINT16 here.",
  "The by-phase duplicate table (00FEh-017Fh) is not repeated here.",
  "Left out: display page selectors (A001h-A004h), user ID codes (A005h-A007h), MAC address, actual subnet/gateway (2124h-212Bh), measurement firmware CRC (0350h) and the ASCII serial-number letters.",
  "Tariff write format here is high byte 5Ah, low byte tariff (0-4); the RS485 EM24 protocol documents the bytes the other way round, so do not reuse code between the two.",
  "Changing the active tariff resets all demand values."
 ],
 "integration": {
  "summary": "Connect with Modbus TCP on port 502 (default IP 192.168.1.10, DHCP off) and read input registers 0000h-007Bh with function 04 or 03. Decode INT32 values low word first and apply the fixed weights.",
  "minimum_registers": [
   {
    "table": "input_register",
    "address": 0,
    "why": "V L1-N"
   },
   {
    "table": "input_register",
    "address": 12,
    "why": "A L1"
   },
   {
    "table": "input_register",
    "address": 40,
    "why": "W system"
   },
   {
    "table": "input_register",
    "address": 49,
    "why": "PF system"
   },
   {
    "table": "input_register",
    "address": 51,
    "why": "Frequency"
   },
   {
    "table": "input_register",
    "address": 52,
    "why": "kWh(+) total"
   },
   {
    "table": "input_register",
    "address": 78,
    "why": "kWh(-) total"
   }
  ],
  "enable": "The E1 versions answer Modbus TCP on the RJ45 port. To change IP settings, write the stored IP/mask/gateway/port/DHCP registers (2100h-210Dh) and then write 1 to 210Eh to apply them.",
  "watchdog": null,
  "quirks": [
   "INT32 values are low word first (CDAB).",
   "The identification code at 000Bh must be read with a length of 1.",
   "New TCP/IP settings do nothing until 210Eh is written.",
   "With DHCP on, the stored IP settings are ignored; read 2120h-2123h for the address actually in use."
  ],
  "setup": [
   "Default IP 192.168.1.10, mask 255.255.255.0, gateway 192.168.1.1, port 502, DHCP off.",
   "Only functions 03, 04 and 06 are supported."
  ],
  "gotchas": [
   "Measuring system, CT/VT and total/all resets are refused while the front selector is in LOCK.",
   "If CT x VT exceeds the limit, the write is rejected; lower one before raising the other."
  ]
 },
 "registers": [
  {
   "table": "input_register",
   "address": 0,
   "documented": "300001 / 0000h",
   "name": "V L1-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 2,
   "documented": "300003 / 0002h",
   "name": "V L2-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 4,
   "documented": "300005 / 0004h",
   "name": "V L3-N",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 6,
   "documented": "300007 / 0006h",
   "name": "V L1-L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 8,
   "documented": "300009 / 0008h",
   "name": "V L2-L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 10,
   "documented": "300011 / 000Ah",
   "name": "V L3-L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 11,
   "documented": "300012 / 000Bh",
   "name": "Carlo Gavazzi identification code",
   "description": "Read with length 1 only; longer reads return the V L3-L1 data.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "1648": "EM24DINAV23XE1X",
    "1649": "EM24DINAV23XE1PFA",
    "1650": "EM24DINAV23XE1PFB",
    "1651": "EM24DINAV53XE1X",
    "1652": "EM24DINAV53XE1PFA",
    "1653": "EM24DINAV53XE1PFB"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 12,
   "documented": "300013 / 000Ch",
   "name": "A L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 14,
   "documented": "300015 / 000Eh",
   "name": "A L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 16,
   "documented": "300017 / 0010h",
   "name": "A L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 18,
   "documented": "300019 / 0012h",
   "name": "W L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 20,
   "documented": "300021 / 0014h",
   "name": "W L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 22,
   "documented": "300023 / 0016h",
   "name": "W L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 24,
   "documented": "300025 / 0018h",
   "name": "VA L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 26,
   "documented": "300027 / 001Ah",
   "name": "VA L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 28,
   "documented": "300029 / 001Ch",
   "name": "VA L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 30,
   "documented": "300031 / 001Eh",
   "name": "var L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 32,
   "documented": "300033 / 0020h",
   "name": "var L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 34,
   "documented": "300035 / 0022h",
   "name": "var L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 36,
   "documented": "300037 / 0024h",
   "name": "V L-N system",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 38,
   "documented": "300039 / 0026h",
   "name": "V L-L system",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "V",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 40,
   "documented": "300041 / 0028h",
   "name": "W system",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 42,
   "documented": "300043 / 002Ah",
   "name": "VA system",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 44,
   "documented": "300045 / 002Ch",
   "name": "var system",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "var",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 46,
   "documented": "300047 / 002Eh",
   "name": "PF L1",
   "description": "Negative = capacitive (lead), positive = inductive (lag).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 47,
   "documented": "300048 / 002Fh",
   "name": "PF L2",
   "description": "Negative = capacitive (lead), positive = inductive (lag).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 48,
   "documented": "300049 / 0030h",
   "name": "PF L3",
   "description": "Negative = capacitive (lead), positive = inductive (lag).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 49,
   "documented": "300050 / 0031h",
   "name": "PF system",
   "description": "Negative = capacitive (lead), positive = inductive (lag).",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 0.001,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 50,
   "documented": "300051 / 0032h",
   "name": "Phase sequence",
   "description": "Meaningful on 3-phase systems only.",
   "data_type": "INT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "-1": "L1-L3-L2",
    "0": "L1-L2-L3"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 51,
   "documented": "300052 / 0033h",
   "name": "Frequency",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 0.1,
   "units": "Hz",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 52,
   "documented": "300053 / 0034h",
   "name": "kWh(+) total",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 54,
   "documented": "300055 / 0036h",
   "name": "kvarh(+) total",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 56,
   "documented": "300057 / 0038h",
   "name": "DMD W",
   "description": "Demand active power.",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 58,
   "documented": "300059 / 003Ah",
   "name": "DMD W max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "W",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 60,
   "documented": "300061 / 003Ch",
   "name": "kWh(+) partial",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 62,
   "documented": "300063 / 003Eh",
   "name": "kvarh(+) partial",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 64,
   "documented": "300065 / 0040h",
   "name": "kWh(+) L1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 66,
   "documented": "300067 / 0042h",
   "name": "kWh(+) L2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 68,
   "documented": "300069 / 0044h",
   "name": "kWh(+) L3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 70,
   "documented": "300071 / 0046h",
   "name": "kWh(+) tariff 1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 72,
   "documented": "300073 / 0048h",
   "name": "kWh(+) tariff 2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 74,
   "documented": "300075 / 004Ah",
   "name": "kWh(+) tariff 3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 76,
   "documented": "300077 / 004Ch",
   "name": "kWh(+) tariff 4",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 78,
   "documented": "300079 / 004Eh",
   "name": "kWh(-) total",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kWh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 80,
   "documented": "300081 / 0050h",
   "name": "kvarh(-) total",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 90,
   "documented": "300091 / 005Ah",
   "name": "Hour meter",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.01,
   "units": "h",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 110,
   "documented": "300111 / 006Eh",
   "name": "kvarh(+) tariff 1",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 112,
   "documented": "300113 / 0070h",
   "name": "kvarh(+) tariff 2",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 114,
   "documented": "300115 / 0072h",
   "name": "kvarh(+) tariff 3",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 116,
   "documented": "300117 / 0074h",
   "name": "kvarh(+) tariff 4",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "kvarh",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 118,
   "documented": "300119 / 0076h",
   "name": "DMD VA",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 120,
   "documented": "300121 / 0078h",
   "name": "DMD VA max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "VA",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 122,
   "documented": "300123 / 007Ah",
   "name": "DMD A max",
   "description": "",
   "data_type": "INT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.001,
   "units": "A",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 770,
   "documented": "300771 / 0302h",
   "name": "Measurement module version",
   "description": "High byte: bits 4-7 major, 0-3 minor; low byte revision.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 772,
   "documented": "300773 / 0304h",
   "name": "Communication module version",
   "description": "Same encoding as 0302h.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "input_register",
   "address": 41216,
   "documented": "341217 / A100h",
   "name": "Front selector status",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": {
    "0": "Unlocked (kvarh position)",
    "1": "Unlocked (2 position)",
    "2": "Unlocked (1 position)",
    "3": "Locked (LOCK position)"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4096,
   "documented": "304097 / 1000h",
   "name": "Password",
   "description": "0-9999.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4098,
   "documented": "304099 / 1002h",
   "name": "Measuring system",
   "description": "Writable only with selector not in LOCK; PFA/PFB: 3P.n only.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "3P.n (default)",
    "1": "3P.1",
    "2": "2P",
    "3": "1P",
    "4": "3P"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4099,
   "documented": "304100 / 1003h",
   "name": "CT ratio",
   "description": "Raw 10 = 1.0; max 2615.0 (MID) or 6975.0. Read-only on AV2.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4101,
   "documented": "304102 / 1005h",
   "name": "VT ratio",
   "description": "Raw 10 = 1.0; read-only on AV2 and MID.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 0.1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4112,
   "documented": "304113 / 1010h",
   "name": "DMD interval time",
   "description": "1-30, default 15.",
   "data_type": "UINT32",
   "length": 2,
   "word_order": "CDAB",
   "scale": 1,
   "units": "min",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4360,
   "documented": "304361 / 1108h",
   "name": "Filter span parameter",
   "description": "0-100, default 2.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4361,
   "documented": "304362 / 1109h",
   "name": "Filter coefficient",
   "description": "1-32, default 2.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 4609,
   "documented": "304610 / 1201h",
   "name": "Current tariff",
   "description": "To set: write 5Ah in high byte, tariff in low byte (5A03h = tariff 3).",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Tariff disabled",
    "1": "Tariff 1",
    "2": "Tariff 2",
    "3": "Tariff 3",
    "4": "Tariff 4"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8448,
   "documented": "308449 / 2100h",
   "name": "Stored IP address octet A",
   "description": "0-255; default 192.168.1.10. Used when DHCP is off.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8449,
   "documented": "308450 / 2101h",
   "name": "Stored IP address octet B",
   "description": "0-255; default 192.168.1.10. Used when DHCP is off.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8450,
   "documented": "308451 / 2102h",
   "name": "Stored IP address octet C",
   "description": "0-255; default 192.168.1.10. Used when DHCP is off.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8451,
   "documented": "308452 / 2103h",
   "name": "Stored IP address octet D",
   "description": "0-255; default 192.168.1.10. Used when DHCP is off.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8452,
   "documented": "308453 / 2104h",
   "name": "Stored subnet mask octet A",
   "description": "0-255; default 255.255.255.0.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8453,
   "documented": "308454 / 2105h",
   "name": "Stored subnet mask octet B",
   "description": "0-255; default 255.255.255.0.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8454,
   "documented": "308455 / 2106h",
   "name": "Stored subnet mask octet C",
   "description": "0-255; default 255.255.255.0.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8455,
   "documented": "308456 / 2107h",
   "name": "Stored subnet mask octet D",
   "description": "0-255; default 255.255.255.0.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8456,
   "documented": "308457 / 2108h",
   "name": "Stored gateway octet A",
   "description": "0-255; default 192.168.1.1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8457,
   "documented": "308458 / 2109h",
   "name": "Stored gateway octet B",
   "description": "0-255; default 192.168.1.1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8458,
   "documented": "308459 / 210Ah",
   "name": "Stored gateway octet C",
   "description": "0-255; default 192.168.1.1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8459,
   "documented": "308460 / 210Bh",
   "name": "Stored gateway octet D",
   "description": "0-255; default 192.168.1.1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8460,
   "documented": "308461 / 210Ch",
   "name": "Modbus TCP port",
   "description": "1-9999, default 502.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8461,
   "documented": "308462 / 210Dh",
   "name": "DHCP",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Off (default)",
    "1": "On"
   },
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8462,
   "documented": "308463 / 210Eh",
   "name": "Apply TCP/IP changes",
   "description": "Write 1 to activate stored IP, mask, gateway, port, DHCP.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8480,
   "documented": "308481 / 2120h",
   "name": "Actual IP address octet A",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8481,
   "documented": "308482 / 2121h",
   "name": "Actual IP address octet B",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8482,
   "documented": "308483 / 2122h",
   "name": "Actual IP address octet C",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 8483,
   "documented": "308484 / 2123h",
   "name": "Actual IP address octet D",
   "description": "",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "R",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16385,
   "documented": "316386 / 4001h",
   "name": "Reset total meters",
   "description": "Write 1; hour counter excluded; selector not in LOCK.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16386,
   "documented": "316387 / 4002h",
   "name": "Reset hour counter",
   "description": "Write 1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16387,
   "documented": "316388 / 4003h",
   "name": "Reset all meters",
   "description": "Write 1; hour counter excluded; selector not in LOCK.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16388,
   "documented": "316389 / 4004h",
   "name": "Reset partial meters",
   "description": "Write 1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 16389,
   "documented": "316390 / 4005h",
   "name": "Reset DMD max",
   "description": "Write 1.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": null,
   "bits": null,
   "offset": 0
  },
  {
   "table": "holding_register",
   "address": 40960,
   "documented": "340961 / A000h",
   "name": "Type of application",
   "description": "PFA: A, B, C, G only; PFB: E, F, H only; X: all.",
   "data_type": "UINT16",
   "length": 1,
   "word_order": null,
   "scale": 1,
   "units": "",
   "access": "RW",
   "values": {
    "0": "Application A",
    "1": "Application B",
    "2": "Application C",
    "3": "Application D",
    "4": "Application E",
    "5": "Application F",
    "6": "Application G",
    "7": "Application H"
   },
   "bits": null,
   "offset": 0
  }
 ],
 "page": "https://easymodbus.com/modbus-register-maps/carlo-gavazzi/em24-din-e1",
 "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."
}
