{
  "spec_version": 1,
  "slug": "moxa-iologik-e1213",
  "manufacturer": "Moxa",
  "model": "ioLogik E1213",
  "category": "Remote I/O",
  "supplier_url": "https://www.moxa.com/en/products/industrial-edge-connectivity/controllers-and-ios/universal-controllers-and-i-os/iologik-e1200-series/iologik-e1213",
  "default_configuration": {
    "protocol": "modbus_tcp",
    "port": 502,
    "unit_id": 1,
    "addressing": "zero_based",
    "byte_order": "BigEndian",
    "word_order": "HighFirst"
  },
  "coils": [
    {
      "address": 0,
      "count": 1,
      "name": "Digital output 0 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 1,
      "count": 1,
      "name": "Digital output 1 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Digital output 2 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 3,
      "count": 1,
      "name": "Digital output 3 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 4,
      "count": 1,
      "name": "Digital output 4 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 5,
      "count": 1,
      "name": "Digital output 5 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 6,
      "count": 1,
      "name": "Digital output 6 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 7,
      "count": 1,
      "name": "Digital output 7 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "0 = off, 1 = on. Write through the coil with function code 05."
    },
    {
      "address": 16,
      "count": 1,
      "name": "Digital output 0 pulse output",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 17,
      "count": 1,
      "name": "Digital output 1 pulse output",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 18,
      "count": 1,
      "name": "Digital output 2 pulse output",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 19,
      "count": 1,
      "name": "Digital output 3 pulse output",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 20,
      "count": 1,
      "name": "Digital output 4 pulse output",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 21,
      "count": 1,
      "name": "Digital output 5 pulse output",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 22,
      "count": 1,
      "name": "Digital output 6 pulse output",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 23,
      "count": 1,
      "name": "Digital output 7 pulse output",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse output start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 256,
      "count": 1,
      "name": "Digital input counter 0 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 257,
      "count": 1,
      "name": "Digital input counter 1 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 258,
      "count": 1,
      "name": "Digital input counter 2 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 259,
      "count": 1,
      "name": "Digital input counter 3 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 260,
      "count": 1,
      "name": "Digital input counter 4 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 261,
      "count": 1,
      "name": "Digital input counter 5 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 262,
      "count": 1,
      "name": "Digital input counter 6 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 263,
      "count": 1,
      "name": "Digital input counter 7 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 264,
      "count": 1,
      "name": "Digital input counter 8 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 265,
      "count": 1,
      "name": "Digital input counter 9 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 266,
      "count": 1,
      "name": "Digital input counter 10 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 267,
      "count": 1,
      "name": "Digital input counter 11 status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Counter start/stop: 0 = stop, 1 = start."
    },
    {
      "address": 272,
      "count": 1,
      "name": "Digital input counter 0 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 273,
      "count": 1,
      "name": "Digital input counter 1 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 274,
      "count": 1,
      "name": "Digital input counter 2 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 275,
      "count": 1,
      "name": "Digital input counter 3 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 276,
      "count": 1,
      "name": "Digital input counter 4 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 277,
      "count": 1,
      "name": "Digital input counter 5 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 278,
      "count": 1,
      "name": "Digital input counter 6 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 279,
      "count": 1,
      "name": "Digital input counter 7 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 280,
      "count": 1,
      "name": "Digital input counter 8 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 281,
      "count": 1,
      "name": "Digital input counter 9 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 282,
      "count": 1,
      "name": "Digital input counter 10 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 283,
      "count": 1,
      "name": "Digital input counter 11 reset",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to reset the counter to its initial value."
    },
    {
      "address": 288,
      "count": 1,
      "name": "Digital input counter 0 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 289,
      "count": 1,
      "name": "Digital input counter 1 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 290,
      "count": 1,
      "name": "Digital input counter 2 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 291,
      "count": 1,
      "name": "Digital input counter 3 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 292,
      "count": 1,
      "name": "Digital input counter 4 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 293,
      "count": 1,
      "name": "Digital input counter 5 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 294,
      "count": 1,
      "name": "Digital input counter 6 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 295,
      "count": 1,
      "name": "Digital input counter 7 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 296,
      "count": 1,
      "name": "Digital input counter 8 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 297,
      "count": 1,
      "name": "Digital input counter 9 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 298,
      "count": 1,
      "name": "Digital input counter 10 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 299,
      "count": 1,
      "name": "Digital input counter 11 overflow flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the overflow flag."
    },
    {
      "address": 4128,
      "count": 1,
      "name": "Digital output 0 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4129,
      "count": 1,
      "name": "Digital output 1 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4130,
      "count": 1,
      "name": "Digital output 2 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4131,
      "count": 1,
      "name": "Digital output 3 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4132,
      "count": 1,
      "name": "Digital output 4 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4133,
      "count": 1,
      "name": "Digital output 5 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4134,
      "count": 1,
      "name": "Digital output 6 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4135,
      "count": 1,
      "name": "Digital output 7 peer-to-peer safe mode flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the safe mode flag."
    },
    {
      "address": 4144,
      "count": 1,
      "name": "Watchdog alarm flag clear",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Write 1 to clear the watchdog alarm."
    }
  ],
  "discrete_inputs": [
    {
      "address": 0,
      "count": 1,
      "name": "Digital input 0",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 1,
      "count": 1,
      "name": "Digital input 1",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 2,
      "count": 1,
      "name": "Digital input 2",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 3,
      "count": 1,
      "name": "Digital input 3",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 4,
      "count": 1,
      "name": "Digital input 4",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 5,
      "count": 1,
      "name": "Digital input 5",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 6,
      "count": 1,
      "name": "Digital input 6",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 7,
      "count": 1,
      "name": "Digital input 7",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 8,
      "count": 1,
      "name": "Digital input 8",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 9,
      "count": 1,
      "name": "Digital input 9",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 10,
      "count": 1,
      "name": "Digital input 10",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 11,
      "count": 1,
      "name": "Digital input 11",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on (function code 02)."
    },
    {
      "address": 1000,
      "count": 1,
      "name": "Digital input counter 0 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1001,
      "count": 1,
      "name": "Digital input counter 1 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1002,
      "count": 1,
      "name": "Digital input counter 2 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1003,
      "count": 1,
      "name": "Digital input counter 3 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1004,
      "count": 1,
      "name": "Digital input counter 4 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1005,
      "count": 1,
      "name": "Digital input counter 5 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1006,
      "count": 1,
      "name": "Digital input counter 6 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1007,
      "count": 1,
      "name": "Digital input counter 7 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1008,
      "count": 1,
      "name": "Digital input counter 8 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1009,
      "count": 1,
      "name": "Digital input counter 9 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1010,
      "count": 1,
      "name": "Digital input counter 10 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 1011,
      "count": 1,
      "name": "Digital input counter 11 overflow flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = normal, 1 = overflow."
    },
    {
      "address": 4096,
      "count": 1,
      "name": "Digital output 0 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4097,
      "count": 1,
      "name": "Digital output 1 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4098,
      "count": 1,
      "name": "Digital output 2 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4099,
      "count": 1,
      "name": "Digital output 3 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4100,
      "count": 1,
      "name": "Digital output 4 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4101,
      "count": 1,
      "name": "Digital output 5 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4102,
      "count": 1,
      "name": "Digital output 6 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4103,
      "count": 1,
      "name": "Digital output 7 peer-to-peer status",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4112,
      "count": 1,
      "name": "Digital output 0 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4113,
      "count": 1,
      "name": "Digital output 1 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4114,
      "count": 1,
      "name": "Digital output 2 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4115,
      "count": 1,
      "name": "Digital output 3 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4116,
      "count": 1,
      "name": "Digital output 4 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4117,
      "count": 1,
      "name": "Digital output 5 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4118,
      "count": 1,
      "name": "Digital output 6 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    },
    {
      "address": 4119,
      "count": 1,
      "name": "Digital output 7 peer-to-peer safe mode flag",
      "data_type": "Binary",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "0 = off, 1 = on."
    }
  ],
  "input_registers": [
    {
      "address": 16,
      "count": 2,
      "name": "Digital input 0 counter value",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 18,
      "count": 2,
      "name": "Digital input 1 counter value",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 20,
      "count": 2,
      "name": "Digital input 2 counter value",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 22,
      "count": 2,
      "name": "Digital input 3 counter value",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 24,
      "count": 2,
      "name": "Digital input 4 counter value",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 26,
      "count": 2,
      "name": "Digital input 5 counter value",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 28,
      "count": 2,
      "name": "Digital input 6 counter value",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 30,
      "count": 2,
      "name": "Digital input 7 counter value",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 32,
      "count": 2,
      "name": "Digital input 8 counter value",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 34,
      "count": 2,
      "name": "Digital input 9 counter value",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 36,
      "count": 2,
      "name": "Digital input 10 counter value",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 38,
      "count": 2,
      "name": "Digital input 11 counter value",
      "data_type": "UInt32",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "DI counter value, high word first (2 registers per channel)."
    },
    {
      "address": 48,
      "count": 1,
      "name": "All digital input states",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Bit field with the state of all 12 digital inputs in one word (DI-00 in bit 0)."
    },
    {
      "address": 5000,
      "count": 10,
      "name": "Model name",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Model name, one ASCII character per byte (10 registers)."
    },
    {
      "address": 5020,
      "count": 2,
      "name": "Device uptime",
      "data_type": "UInt32",
      "units": "s",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Device uptime in seconds, high word first."
    },
    {
      "address": 5024,
      "count": 3,
      "name": "LAN MAC address",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "MAC address, one byte per character (3 registers, 6 bytes)."
    },
    {
      "address": 5027,
      "count": 2,
      "name": "LAN IP address",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "IPv4 address, one byte per octet, first octet in the most significant byte (2 registers)."
    },
    {
      "address": 5029,
      "count": 2,
      "name": "Firmware version",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Firmware version, one ASCII character per byte (2 registers); the manual's example V1.2.3 uses one byte per version field."
    },
    {
      "address": 5031,
      "count": 2,
      "name": "Firmware build date",
      "data_type": "UInt32",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Firmware build date, e.g. 16051718 for Build 16.05.17 18 (2 registers)."
    },
    {
      "address": 5040,
      "count": 30,
      "name": "Device name",
      "data_type": "Ascii",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "R",
      "description": "Device name, one ASCII character per byte (30 registers)."
    }
  ],
  "holding_registers": [
    {
      "address": 32,
      "count": 1,
      "name": "All digital output states",
      "data_type": "UInt16",
      "units": "",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Bit field with the state of all 8 digital outputs in one word (DO-00 in bit 0)."
    },
    {
      "address": 36,
      "count": 1,
      "name": "Digital output 0 pulse count preset",
      "data_type": "UInt16",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, one register per channel."
    },
    {
      "address": 37,
      "count": 1,
      "name": "Digital output 1 pulse count preset",
      "data_type": "UInt16",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, one register per channel."
    },
    {
      "address": 38,
      "count": 1,
      "name": "Digital output 2 pulse count preset",
      "data_type": "UInt16",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, one register per channel."
    },
    {
      "address": 39,
      "count": 1,
      "name": "Digital output 3 pulse count preset",
      "data_type": "UInt16",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, one register per channel."
    },
    {
      "address": 40,
      "count": 1,
      "name": "Digital output 4 pulse count preset",
      "data_type": "UInt16",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, one register per channel."
    },
    {
      "address": 41,
      "count": 1,
      "name": "Digital output 5 pulse count preset",
      "data_type": "UInt16",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, one register per channel."
    },
    {
      "address": 42,
      "count": 1,
      "name": "Digital output 6 pulse count preset",
      "data_type": "UInt16",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, one register per channel."
    },
    {
      "address": 43,
      "count": 1,
      "name": "Digital output 7 pulse count preset",
      "data_type": "UInt16",
      "units": "pulses",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Preset pulse count, one register per channel."
    },
    {
      "address": 52,
      "count": 1,
      "name": "Digital output 0 pulse ON width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1 ms."
    },
    {
      "address": 53,
      "count": 1,
      "name": "Digital output 1 pulse ON width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1 ms."
    },
    {
      "address": 54,
      "count": 1,
      "name": "Digital output 2 pulse ON width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1 ms."
    },
    {
      "address": 55,
      "count": 1,
      "name": "Digital output 3 pulse ON width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1 ms."
    },
    {
      "address": 56,
      "count": 1,
      "name": "Digital output 4 pulse ON width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1 ms."
    },
    {
      "address": 57,
      "count": 1,
      "name": "Digital output 5 pulse ON width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1 ms."
    },
    {
      "address": 58,
      "count": 1,
      "name": "Digital output 6 pulse ON width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1 ms."
    },
    {
      "address": 59,
      "count": 1,
      "name": "Digital output 7 pulse ON width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse ON width in units of 1 ms."
    },
    {
      "address": 68,
      "count": 1,
      "name": "Digital output 0 pulse OFF width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1 ms."
    },
    {
      "address": 69,
      "count": 1,
      "name": "Digital output 1 pulse OFF width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1 ms."
    },
    {
      "address": 70,
      "count": 1,
      "name": "Digital output 2 pulse OFF width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1 ms."
    },
    {
      "address": 71,
      "count": 1,
      "name": "Digital output 3 pulse OFF width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1 ms."
    },
    {
      "address": 72,
      "count": 1,
      "name": "Digital output 4 pulse OFF width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1 ms."
    },
    {
      "address": 73,
      "count": 1,
      "name": "Digital output 5 pulse OFF width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1 ms."
    },
    {
      "address": 74,
      "count": 1,
      "name": "Digital output 6 pulse OFF width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1 ms."
    },
    {
      "address": 75,
      "count": 1,
      "name": "Digital output 7 pulse OFF width",
      "data_type": "UInt16",
      "units": "ms",
      "scale_factor": 1,
      "offset": 0,
      "access": "RW",
      "description": "Pulse OFF width in units of 1 ms."
    }
  ],
  "combined_registers": [],
  "notes": "Ethernet remote I/O with a built-in Modbus/TCP server; no gateway needed. Addresses are the manual's decimal start addresses, which are the zero-based wire addresses (the manual also prints the 1-based reference numbers). Each channel occupies one address in the start-address table, so this map lists channels separately. Source: Moxa ioLogik E1200 Series User Manual v16.2, appendix A, 'ioLogik E1213 Modbus Address and Register Map'. The module has 8 digital inputs, 4 source-type digital outputs and 4 configurable DIO channels, so the manual's DI map carries 12 DI points (8 DI + 4 DIO read as inputs) and the DO map 8 DO points (4 DO + 4 DIO driven as outputs); this seed follows those lengths. Unit identifier: the manual states that the Modbus/TCP ID of the ioLogik E1200 is set to 1 by default, so unit_id 1 is used."
}
