{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Unipi Technology",
  "model": "Extension xS53",
  "models": [
    "Extension xS53"
  ],
  "vendor_website": "www.unipi.technology",
  "description": "Modbus RTU extension with 4 digital inputs, 5 relay outputs and 8 voltage / current analog inputs",
  "x_status": "official",
  "revision": 3,
  "revised": "2026-11-10",
  "source": "Extension xS53 Modbus map v2.0, Unipi technology",
  "sources": [
    {
      "title": "Extension xS53 Modbus map",
      "version": "2.0",
      "url": "https://kb.unipi.technology/_media/files:products:extensions:unipi-extension-xs53-modbus-map-v2.0.pdf",
      "note": "Holding registers, Coils and Description sheets"
    }
  ],
  "notes": [
    "Registers are 0-based. 32-bit values use word order CDAB (low word first). Defaults: slave address 15, 19200 bps, 8N1.",
    "Registers marked Reserved in the manual are left out."
  ],
  "protocol": "rtu",
  "unit_id": 15,
  "baudrate": 19200,
  "parity": "N",
  "databits": 8,
  "stopbits": 1,
  "byte_order": "big",
  "word_order": "little",
  "address_base": 0,
  "enums": {
    "baud_rate": {"11": "2400", "12": "4800", "13": "9600", "14": "19200", "15": "38400", "4097": "57600", "4098": "115200"},
    "parity": {"0": "Even", "1": "Odd"},
    "ai_mode": {"0": "Off", "1": "Voltage 0-10 V", "2": "Voltage 0-2 V", "3": "Current 0-20 mA"}
  },
  "registers": [
    {"name": "Digital Input 1", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 0, "access": "R"},
    {"name": "Digital Input 2", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Digital Input 3", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 2, "access": "R"},
    {"name": "Digital Input 4", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 3, "access": "R"},
    {"name": "Relay Output 1", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 0, "access": "RW"},
    {"name": "Relay Output 2", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 1, "access": "RW"},
    {"name": "Relay Output 3", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 2, "access": "RW"},
    {"name": "Relay Output 4", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 3, "access": "RW"},
    {"name": "Relay Output 5", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 4, "access": "RW"},
    {"name": "Analog Input 1", "group": "Analog inputs", "area": "holding", "address": 2, "type": "float32", "access": "R", "description": "Value in the unit of the selected input mode (V, mA or ohm)"},
    {"name": "Analog Input 2", "group": "Analog inputs", "area": "holding", "address": 4, "type": "float32", "access": "R", "description": "Value in the unit of the selected input mode (V, mA or ohm)"},
    {"name": "Analog Input 3", "group": "Analog inputs", "area": "holding", "address": 6, "type": "float32", "access": "R", "description": "Value in the unit of the selected input mode (V, mA or ohm)"},
    {"name": "Analog Input 4", "group": "Analog inputs", "area": "holding", "address": 8, "type": "float32", "access": "R", "description": "Value in the unit of the selected input mode (V, mA or ohm)"},
    {"name": "Analog Input 5", "group": "Analog inputs", "area": "holding", "address": 10, "type": "float32", "access": "R", "description": "Value in the unit of the selected input mode (V, mA or ohm)"},
    {"name": "Analog Input 6", "group": "Analog inputs", "area": "holding", "address": 12, "type": "float32", "access": "R", "description": "Value in the unit of the selected input mode (V, mA or ohm)"},
    {"name": "Analog Input 7", "group": "Analog inputs", "area": "holding", "address": 14, "type": "float32", "access": "R", "description": "Value in the unit of the selected input mode (V, mA or ohm)"},
    {"name": "Analog Input 8", "group": "Analog inputs", "area": "holding", "address": 16, "type": "float32", "access": "R", "description": "Value in the unit of the selected input mode (V, mA or ohm)"},
    {"name": "MWD enable", "group": "Watchdog", "area": "holding", "address": 18, "type": "bool", "bit": 0, "access": "RW"},
    {"name": "MWD reboot detected", "group": "Watchdog", "area": "holding", "address": 18, "type": "bool", "bit": 1, "access": "RW"},
    {"name": "Digital Input 1 counter", "group": "Counters", "area": "holding", "address": 19, "type": "uint32", "access": "RW", "description": "Pulse counter; writable to reset"},
    {"name": "Digital Input 2 counter", "group": "Counters", "area": "holding", "address": 21, "type": "uint32", "access": "RW", "description": "Pulse counter; writable to reset"},
    {"name": "Digital Input 3 counter", "group": "Counters", "area": "holding", "address": 23, "type": "uint32", "access": "RW", "description": "Pulse counter; writable to reset"},
    {"name": "Digital Input 4 counter", "group": "Counters", "area": "holding", "address": 25, "type": "uint32", "access": "RW", "description": "Pulse counter; writable to reset"},
    {"name": "User LED 1", "group": "LEDs", "area": "holding", "address": 27, "type": "bool", "bit": 0, "access": "RW"},
    {"name": "User LED 2", "group": "LEDs", "area": "holding", "address": 27, "type": "bool", "bit": 1, "access": "RW"},
    {"name": "User LED 3", "group": "LEDs", "area": "holding", "address": 27, "type": "bool", "bit": 2, "access": "RW"},
    {"name": "Synchronised relay output 1", "group": "Synchronised outputs", "area": "holding", "address": 28, "type": "bool", "bit": 0, "access": "RW"},
    {"name": "Synchronised relay output 2", "group": "Synchronised outputs", "area": "holding", "address": 28, "type": "bool", "bit": 1, "access": "RW"},
    {"name": "Synchronised relay output 3", "group": "Synchronised outputs", "area": "holding", "address": 28, "type": "bool", "bit": 2, "access": "RW"},
    {"name": "Synchronised relay output 4", "group": "Synchronised outputs", "area": "holding", "address": 28, "type": "bool", "bit": 3, "access": "RW"},
    {"name": "Synchronised relay output 5", "group": "Synchronised outputs", "area": "holding", "address": 28, "type": "bool", "bit": 4, "access": "RW"},
    {"name": "Synchronised relay output lock 1", "group": "Synchronised outputs", "area": "holding", "address": 29, "type": "bool", "bit": 0, "access": "RW"},
    {"name": "Synchronised relay output lock 2", "group": "Synchronised outputs", "area": "holding", "address": 29, "type": "bool", "bit": 1, "access": "RW"},
    {"name": "Synchronised relay output lock 3", "group": "Synchronised outputs", "area": "holding", "address": 29, "type": "bool", "bit": 2, "access": "RW"},
    {"name": "Synchronised relay output lock 4", "group": "Synchronised outputs", "area": "holding", "address": 29, "type": "bool", "bit": 3, "access": "RW"},
    {"name": "Synchronised relay output lock 5", "group": "Synchronised outputs", "area": "holding", "address": 29, "type": "bool", "bit": 4, "access": "RW"},
    {"name": "Firmware version", "group": "Info", "area": "holding", "address": 1000, "type": "uint16", "access": "R", "role": "firmware", "description": "Firmware version of the extension (raw number)"},
    {"name": "Number of digital outputs", "group": "Info", "area": "holding", "address": 1001, "type": "uint16", "bit": 0, "bits": 8, "access": "R"},
    {"name": "Number of digital inputs", "group": "Info", "area": "holding", "address": 1001, "type": "uint16", "bit": 8, "bits": 8, "access": "R"},
    {"name": "Number of internal RS485 lines", "group": "Info", "area": "holding", "address": 1002, "type": "uint16", "bit": 0, "bits": 4, "access": "R"},
    {"name": "Number of analog outputs", "group": "Info", "area": "holding", "address": 1002, "type": "uint16", "bit": 4, "bits": 4, "access": "R"},
    {"name": "Number of analog inputs", "group": "Info", "area": "holding", "address": 1002, "type": "uint16", "bit": 8, "bits": 8, "access": "R"},
    {"name": "Firmware ID", "group": "Info", "area": "holding", "address": 1003, "type": "uint16", "access": "R"},
    {"name": "Hardware ID", "group": "Info", "area": "holding", "address": 1004, "type": "uint16", "access": "R"},
    {"name": "PCB serial number", "group": "Info", "area": "holding", "address": 1005, "type": "uint32", "access": "R", "role": "serial"},
    {"name": "MWD timeout", "group": "Settings", "area": "holding", "address": 1008, "type": "uint16", "unit": "ms", "access": "RW", "description": "MasterWatchDog timeout; default 5000 ms"},
    {"name": "MCU VRef", "group": "Info", "area": "holding", "address": 1009, "type": "uint16", "access": "R", "description": "Reference voltage of the MCU (raw)"},
    {"name": "Debounce time DI 1", "group": "Settings", "area": "holding", "address": 1010, "type": "uint16", "scale": 0.1, "unit": "ms", "access": "RW", "description": "Raw unit is 100 us; default 50 (5 ms)"},
    {"name": "Debounce time DI 2", "group": "Settings", "area": "holding", "address": 1011, "type": "uint16", "scale": 0.1, "unit": "ms", "access": "RW", "description": "Raw unit is 100 us; default 50 (5 ms)"},
    {"name": "Debounce time DI 3", "group": "Settings", "area": "holding", "address": 1012, "type": "uint16", "scale": 0.1, "unit": "ms", "access": "RW", "description": "Raw unit is 100 us; default 50 (5 ms)"},
    {"name": "Debounce time DI 4", "group": "Settings", "area": "holding", "address": 1013, "type": "uint16", "scale": 0.1, "unit": "ms", "access": "RW", "description": "Raw unit is 100 us; default 50 (5 ms)"},
    {"name": "DirectSwitch enable DI 1", "group": "DirectSwitch", "area": "holding", "address": 1014, "type": "bool", "bit": 0, "access": "RW"},
    {"name": "DirectSwitch enable DI 2", "group": "DirectSwitch", "area": "holding", "address": 1014, "type": "bool", "bit": 1, "access": "RW"},
    {"name": "DirectSwitch enable DI 3", "group": "DirectSwitch", "area": "holding", "address": 1014, "type": "bool", "bit": 2, "access": "RW"},
    {"name": "DirectSwitch enable DI 4", "group": "DirectSwitch", "area": "holding", "address": 1014, "type": "bool", "bit": 3, "access": "RW"},
    {"name": "DirectSwitch invert polarity DI 1", "group": "DirectSwitch", "area": "holding", "address": 1015, "type": "bool", "bit": 0, "access": "RW"},
    {"name": "DirectSwitch invert polarity DI 2", "group": "DirectSwitch", "area": "holding", "address": 1015, "type": "bool", "bit": 1, "access": "RW"},
    {"name": "DirectSwitch invert polarity DI 3", "group": "DirectSwitch", "area": "holding", "address": 1015, "type": "bool", "bit": 2, "access": "RW"},
    {"name": "DirectSwitch invert polarity DI 4", "group": "DirectSwitch", "area": "holding", "address": 1015, "type": "bool", "bit": 3, "access": "RW"},
    {"name": "DirectSwitch toggle DI 1", "group": "DirectSwitch", "area": "holding", "address": 1016, "type": "bool", "bit": 0, "access": "RW"},
    {"name": "DirectSwitch toggle DI 2", "group": "DirectSwitch", "area": "holding", "address": 1016, "type": "bool", "bit": 1, "access": "RW"},
    {"name": "DirectSwitch toggle DI 3", "group": "DirectSwitch", "area": "holding", "address": 1016, "type": "bool", "bit": 2, "access": "RW"},
    {"name": "DirectSwitch toggle DI 4", "group": "DirectSwitch", "area": "holding", "address": 1016, "type": "bool", "bit": 3, "access": "RW"},
    {"name": "Analog Input 1 mode", "group": "Settings", "area": "holding", "address": 1017, "type": "uint16", "access": "RW", "enum": "ai_mode", "description": "Measurement type of the input; default 1"},
    {"name": "Analog Input 2 mode", "group": "Settings", "area": "holding", "address": 1018, "type": "uint16", "access": "RW", "enum": "ai_mode", "description": "Measurement type of the input; default 1"},
    {"name": "Analog Input 3 mode", "group": "Settings", "area": "holding", "address": 1019, "type": "uint16", "access": "RW", "enum": "ai_mode", "description": "Measurement type of the input; default 1"},
    {"name": "Analog Input 4 mode", "group": "Settings", "area": "holding", "address": 1020, "type": "uint16", "access": "RW", "enum": "ai_mode", "description": "Measurement type of the input; default 1"},
    {"name": "Analog Input 5 mode", "group": "Settings", "area": "holding", "address": 1021, "type": "uint16", "access": "RW", "enum": "ai_mode", "description": "Measurement type of the input; default 1"},
    {"name": "Analog Input 6 mode", "group": "Settings", "area": "holding", "address": 1022, "type": "uint16", "access": "RW", "enum": "ai_mode", "description": "Measurement type of the input; default 1"},
    {"name": "Analog Input 7 mode", "group": "Settings", "area": "holding", "address": 1023, "type": "uint16", "access": "RW", "enum": "ai_mode", "description": "Measurement type of the input; default 1"},
    {"name": "Analog Input 8 mode", "group": "Settings", "area": "holding", "address": 1024, "type": "uint16", "access": "RW", "enum": "ai_mode", "description": "Measurement type of the input; default 1"},
    {"name": "RS485 baud rate", "group": "Settings", "area": "holding", "address": 1025, "type": "uint16", "bit": 0, "bits": 13, "access": "RW", "enum": "baud_rate", "description": "Applied after saving the configuration and restarting"},
    {"name": "RS485 parity enable", "group": "Settings", "area": "holding", "address": 1025, "type": "bool", "bit": 13, "access": "RW"},
    {"name": "RS485 parity", "group": "Settings", "area": "holding", "address": 1025, "type": "bool", "bit": 14, "access": "RW", "enum": "parity"},
    {"name": "Modbus address", "group": "Settings", "area": "holding", "address": 1026, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 254, "description": "Slave address, 1-254; default 15"},
    {"name": "Relay Output 1 (coil)", "group": "Relay outputs", "area": "coil", "address": 0, "type": "bool", "access": "RW"},
    {"name": "Relay Output 2 (coil)", "group": "Relay outputs", "area": "coil", "address": 1, "type": "bool", "access": "RW"},
    {"name": "Relay Output 3 (coil)", "group": "Relay outputs", "area": "coil", "address": 2, "type": "bool", "access": "RW"},
    {"name": "Relay Output 4 (coil)", "group": "Relay outputs", "area": "coil", "address": 3, "type": "bool", "access": "RW"},
    {"name": "Relay Output 5 (coil)", "group": "Relay outputs", "area": "coil", "address": 4, "type": "bool", "access": "RW"},
    {"name": "Digital Input 1 (coil)", "group": "Digital inputs", "area": "coil", "address": 5, "type": "bool", "access": "R"},
    {"name": "Digital Input 2 (coil)", "group": "Digital inputs", "area": "coil", "address": 6, "type": "bool", "access": "R"},
    {"name": "Digital Input 3 (coil)", "group": "Digital inputs", "area": "coil", "address": 7, "type": "bool", "access": "R"},
    {"name": "Digital Input 4 (coil)", "group": "Digital inputs", "area": "coil", "address": 8, "type": "bool", "access": "R"},
    {"name": "User LED 1 (coil)", "group": "LEDs", "area": "coil", "address": 9, "type": "bool", "access": "RW"},
    {"name": "User LED 2 (coil)", "group": "LEDs", "area": "coil", "address": 10, "type": "bool", "access": "RW"},
    {"name": "User LED 3 (coil)", "group": "LEDs", "area": "coil", "address": 11, "type": "bool", "access": "RW"},
    {"name": "MWD reset indication", "group": "Commands", "area": "coil", "address": 1000, "type": "bool", "access": "RW", "description": "Clears the MWD reboot indication"},
    {"name": "Reset MCU group", "group": "Commands", "area": "coil", "address": 1002, "type": "bool", "access": "W"},
    {"name": "Save configuration", "group": "Commands", "area": "coil", "address": 1003, "type": "bool", "access": "W", "description": "Stores the current configuration so it is used at startup"}
  ]
}
