{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "vendor": "Unipi Technology",
  "model": "UniPi Lite",
  "models": ["Unipi Lite", "UniPi Lite"],
  "vendor_website": "www.unipi.technology",
  "description": "Unipi Lite controller: 6 digital inputs, 6 relay outputs",
  "revision": 3,
  "revised": "2026-11-10",
  "source": "unipi-lite-modbus-map.xlsx, Unipi knowledge base page https://kb.unipi.technology/en:hw:04-extensions:downloads",
  "sources": [
    {"title": "Unipi Lite Modbus map (unipi-lite-modbus-map.xlsx)", "url": "https://kb.unipi.technology/_media/files:products:unipi1:unipi-lite-modbus-map.xlsx", "note": "Sheets Registers, Coils and Description; listed on https://kb.unipi.technology/en:hw:04-extensions:downloads"}
  ],
  "notes": [
    "Configuration is not permanently saved: the Description sheet states it is set on each power-on. Defaults: counters 0, debounce 0 ms, outputs OFF.",
    "Multi-register values (counters, floats) are taken as big-endian (most significant register first), as in the other Unipi maps; the spreadsheet only says bit 0 is the LSB and bit 15 the MSB.",
    "The spreadsheet does not state the transport or default unit id, so the format defaults (tcp+rtu, unit 1) are kept.",
    "Coils repeat the relay outputs that also appear as bits of holding register 1."
  ],
  "byte_order": "big",
  "word_order": "big",
  "address_base": 0,
  "x_status": "official",
  "registers": [
    {"name": "Digital Input 1", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 0},
    {"name": "Digital Input 2", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 1},
    {"name": "Digital Input 3", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 2},
    {"name": "Digital Input 4", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 3},
    {"name": "Digital Input 5", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 4},
    {"name": "Digital Input 6", "group": "Digital inputs", "area": "holding", "address": 0, "type": "bool", "bit": 5},
    {"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": "Relay Output 6", "group": "Relay outputs", "area": "holding", "address": 1, "type": "bool", "bit": 5, "access": "RW"},
    {"name": "Counter of Digital Input 1", "group": "Counters", "area": "holding", "address": 2, "type": "uint32", "access": "RW"},
    {"name": "Counter of Digital Input 2", "group": "Counters", "area": "holding", "address": 4, "type": "uint32", "access": "RW"},
    {"name": "Counter of Digital Input 3", "group": "Counters", "area": "holding", "address": 6, "type": "uint32", "access": "RW"},
    {"name": "Counter of Digital Input 4", "group": "Counters", "area": "holding", "address": 8, "type": "uint32", "access": "RW"},
    {"name": "Counter of Digital Input 5", "group": "Counters", "area": "holding", "address": 10, "type": "uint32", "access": "RW"},
    {"name": "Counter of Digital Input 6", "group": "Counters", "area": "holding", "address": 12, "type": "uint32", "access": "RW"},
    {"name": "Debounce time (in 100us) for DI 1", "group": "Debounce", "area": "holding", "address": 1010, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs"},
    {"name": "Debounce time (in 100us) for DI 2", "group": "Debounce", "area": "holding", "address": 1011, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs"},
    {"name": "Debounce time (in 100us) for DI 3", "group": "Debounce", "area": "holding", "address": 1012, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs"},
    {"name": "Debounce time (in 100us) for DI 4", "group": "Debounce", "area": "holding", "address": 1013, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs"},
    {"name": "Debounce time (in 100us) for DI 5", "group": "Debounce", "area": "holding", "address": 1014, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs"},
    {"name": "Debounce time (in 100us) for DI 6", "group": "Debounce", "area": "holding", "address": 1015, "type": "uint16", "access": "RW", "scale": 100, "unit": "µs"},
    {"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": "Relay Output 6 (coil)", "group": "Relay outputs", "area": "coil", "address": 5, "type": "bool", "access": "RW"}
  ]
}
