{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "model": "MNO",
  "models": [
    "MNO"
  ],
  "description": "Oil level monitor (Monitor de Nível de Óleo): float level, alarm and shutdown thresholds, four relays, analog output and Modbus RTU",
  "vendor": "Electron do Brasil",
  "vendor_website": "electron.com.br",
  "revision": 1,
  "revised": "2026-11-10",
  "source": "Electron do Brasil, Mapa de Registradores Modbus RTU, MNO – Monitor de Nível de Óleo, v3.0.2",
  "sources": [
    {
      "title": "Mapa de Registradores Modbus RTU, MNO – Monitor de Nível de Óleo",
      "version": "3.0.2",
      "url": "https://electron.com.br/api/downloads/file/mapa_de_registradores_modbus_rtu_mno_v3-0-2.pdf",
      "note": "linked in issue #135"
    }
  ],
  "notes": [
    "All registers are holding registers. The document numbers them 1 to 38 and calls the type Read Holding Register (40.000), so the addresses are 1-based (address on the wire = number minus 1). The document does not say so explicitly: if a read fails, try address_base 0.",
    "The document allows 2400 to 57600 bps, 8 data bits, 1 stop bit and no, even or odd parity. It gives no default baud rate or slave address: 9600 N and 1 are placeholders; the slave address is in register 25.",
    "Levels are shown in the document with one decimal and a scale of -1000:10, which it does not explain. They are given as raw values: check against the display before applying a scale. The shutdown delay has no unit in the document.",
    "Registers 7, 9, 12, 18, 19 and 20 are bit fields, one entry per bit. The command bits are write-only. The baud rate, parity and protocol registers (22 to 24) are read-only in this document. Registers 26, 29 and 33 to 34 are not in the document.",
    "The serial number is 48 bits in registers 35 to 37; it is given as a 16-bit register and a 32-bit one, so it has no serial role.",
    "Written from the manufacturer's document; not tested on a device."
  ],
  "protocol": "rtu",
  "unit_id": 1,
  "baudrate": 9600,
  "parity": "N",
  "databits": 8,
  "stopbits": 1,
  "address_base": 1,
  "byte_order": "big",
  "word_order": "big",
  "x_status": "official",
  "enums": {
    "analog_range": {"0": "0 to 1 mA", "1": "0 to 5 mA", "2": "0 to 10 mA", "3": "0 to 20 mA", "4": "4 to 20 mA"},
    "relay_logic": {"0": "Normal", "1": "Inverse"},
    "signal": {"0": "Resistive", "1": "4 to 20 mA"},
    "rs485_write": {"0": "Enabled", "1": "Disabled"},
    "baudrate": {"0": "Automatic", "1": "2400", "2": "4800", "3": "9600", "4": "19200", "5": "38400", "6": "57600"},
    "parity": {"0": "No parity", "1": "Even", "2": "Odd"},
    "protocol": {"0": "DNP 3 L1", "1": "Modbus RTU"}
  },
  "registers": [
    {"name": "High level alarm", "group": "Settings", "area": "holding", "address": 1, "type": "uint16", "access": "RW", "description": "Range 0.1 to 100.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"},
    {"name": "Low level alarm", "group": "Settings", "area": "holding", "address": 2, "type": "uint16", "access": "RW", "description": "Range 0.1 to 100.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"},
    {"name": "High level shutdown", "group": "Settings", "area": "holding", "address": 3, "type": "uint16", "access": "RW", "description": "Range 0.1 to 100.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"},
    {"name": "Low level shutdown", "group": "Settings", "area": "holding", "address": 4, "type": "uint16", "access": "RW", "description": "Range 0.1 to 100.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"},
    {"name": "Alarm reset hysteresis", "group": "Settings", "area": "holding", "address": 5, "type": "uint16", "scale": 0.1, "access": "RW", "write_min": 0.1, "write_max": 30, "description": "Range 0.1 to 30.0"},
    {"name": "Shutdown delay", "group": "Settings", "area": "holding", "address": 6, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 20, "description": "Range 0 to 20; the unit is not stated"},
    {"name": "Low level shutdown enabled", "group": "Settings", "area": "holding", "address": 7, "type": "bool", "bit": 0, "access": "RW"},
    {"name": "High level shutdown enabled", "group": "Settings", "area": "holding", "address": 7, "type": "bool", "bit": 1, "access": "RW"},
    {"name": "Analog output range", "group": "Analog output", "area": "holding", "address": 8, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 4, "enum": "analog_range"},
    {"name": "Reset minimum level reached", "group": "Commands", "area": "holding", "address": 9, "type": "bool", "bit": 1, "access": "W", "description": "Write 1"},
    {"name": "Reset maximum level reached", "group": "Commands", "area": "holding", "address": 9, "type": "bool", "bit": 2, "access": "W", "description": "Write 1"},
    {"name": "Reset equipment", "group": "Commands", "area": "holding", "address": 9, "type": "bool", "bit": 3, "access": "W", "description": "Write 1"},
    {"name": "Float initial resistance", "group": "Settings", "area": "holding", "address": 10, "type": "uint16", "access": "RW", "description": "Range 0.0 to 999.9; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"},
    {"name": "Float final resistance", "group": "Settings", "area": "holding", "address": 11, "type": "uint16", "access": "RW", "description": "Range 0.0 to 1000.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"},
    {"name": "Relay 1 logic", "group": "Settings", "area": "holding", "address": 12, "type": "bool", "bit": 0, "access": "RW", "enum": "relay_logic"},
    {"name": "Relay 2 logic", "group": "Settings", "area": "holding", "address": 12, "type": "bool", "bit": 1, "access": "RW", "enum": "relay_logic"},
    {"name": "Relay 3 logic", "group": "Settings", "area": "holding", "address": 12, "type": "bool", "bit": 2, "access": "RW", "enum": "relay_logic"},
    {"name": "Relay 4 logic", "group": "Settings", "area": "holding", "address": 12, "type": "bool", "bit": 3, "access": "RW", "enum": "relay_logic"},
    {"name": "Level reading offset", "group": "Settings", "area": "holding", "address": 13, "type": "int16", "access": "RW", "description": "Range -10.0 to 10.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"},
    {"name": "Reading signal type", "group": "Settings", "area": "holding", "address": 14, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 1, "enum": "signal"},
    {"name": "Float level", "group": "Measurements", "area": "holding", "address": 15, "type": "int16", "access": "RW", "description": "Range -10.0 to 10.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"},
    {"name": "Maximum level reached", "group": "Measurements", "area": "holding", "address": 16, "type": "int16", "access": "RW", "description": "Range -50.0 to 250.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"},
    {"name": "Minimum level reached", "group": "Measurements", "area": "holding", "address": 17, "type": "int16", "access": "RW", "description": "Range -50.0 to 250.0; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"},
    {"name": "Minimum level alarm", "group": "Status", "area": "holding", "address": 18, "type": "bool", "bit": 0, "access": "R"},
    {"name": "Maximum level alarm", "group": "Status", "area": "holding", "address": 18, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Alarm active", "group": "Status", "area": "holding", "address": 18, "type": "bool", "bit": 2, "access": "R"},
    {"name": "Counting to shutdown, minimum level", "group": "Status", "area": "holding", "address": 19, "type": "bool", "bit": 0, "access": "R"},
    {"name": "Counting to shutdown, maximum level", "group": "Status", "area": "holding", "address": 19, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Shutdown by minimum level", "group": "Status", "area": "holding", "address": 19, "type": "bool", "bit": 2, "access": "R"},
    {"name": "Shutdown by maximum level", "group": "Status", "area": "holding", "address": 19, "type": "bool", "bit": 3, "access": "R"},
    {"name": "Shutdown active", "group": "Status", "area": "holding", "address": 19, "type": "bool", "bit": 4, "access": "R"},
    {"name": "Sensor reading failure", "group": "Status", "area": "holding", "address": 20, "type": "bool", "bit": 0, "access": "R"},
    {"name": "RS-485 write protection", "group": "Settings", "area": "holding", "address": 21, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 1, "enum": "rs485_write"},
    {"name": "Baud rate", "group": "Device", "area": "holding", "address": 22, "type": "uint16", "access": "R", "enum": "baudrate"},
    {"name": "Parity", "group": "Device", "area": "holding", "address": 23, "type": "uint16", "access": "R", "enum": "parity"},
    {"name": "Protocol", "group": "Device", "area": "holding", "address": 24, "type": "uint16", "access": "R", "enum": "protocol"},
    {"name": "Serial network address", "group": "Device", "area": "holding", "address": 25, "type": "uint16", "access": "R", "description": "Range 1 to 254"},
    {"name": "Current output offset correction", "group": "Settings", "area": "holding", "address": 27, "type": "int16", "access": "RW", "description": "Range -1.00 to 1.00; the document's scale column (-1000:100) is not explained, so the value is raw (check against the display)"},
    {"name": "Current resistance reading", "group": "Measurements", "area": "holding", "address": 28, "type": "uint16", "scale": 0.1, "unit": "Ω", "access": "R", "description": "Range 0.0 to 1000.0"},
    {"name": "Calibration day", "group": "Device", "area": "holding", "address": 30, "type": "uint16", "access": "R", "description": "Range 1 to 31"},
    {"name": "Calibration month", "group": "Device", "area": "holding", "address": 31, "type": "uint16", "access": "R", "description": "Range 1 to 12"},
    {"name": "Calibration year", "group": "Device", "area": "holding", "address": 32, "type": "uint16", "access": "R", "description": "Range 0 to 99"},
    {"name": "Serial number (high word)", "group": "Device", "area": "holding", "address": 35, "type": "uint16", "access": "R", "description": "Bits 32 to 47 of the 48-bit serial number"},
    {"name": "Serial number (low part)", "group": "Device", "area": "holding", "address": 36, "type": "uint32", "access": "R", "description": "Registers 36 (bits 16 to 31) and 37 (bits 0 to 15)"},
    {"name": "Password reminder", "group": "Device", "area": "holding", "address": 38, "type": "uint16", "access": "R", "description": "Range 0 to 9999"}
  ]
}
