{
  "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json",
  "mbmap": 2,
  "model": "MoniTemp",
  "models": [
    "MoniTemp"
  ],
  "description": "Three-channel temperature monitor with alarm, shutdown and fan 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, MoniTemp, v1.2",
  "sources": [
    {
      "title": "Mapa de Registradores MODBUS RTU, MoniTemp",
      "version": "1.2",
      "url": "https://electron.com.br/api/downloads/file/mapa_de_registradores_modbus_rtu_monitemp_v1-2.pdf",
      "note": "linked in issue #136"
    }
  ],
  "notes": [
    "All registers are holding registers. The document numbers them 1 to 38 and calls the type 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 1200 to 57600 bps with automatic baud rate detection, 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 23.",
    "Temperatures are shown in the document with one decimal (for example -50.0 to 250.0) 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.",
    "Registers 17, 19, 32, 33, 34, 35 and 37 are bit fields, one entry per bit. The command bits are write-only. Registers 27, 28 and 36 are not in the document.",
    "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"},
    "analog_source": {"0": "Disabled", "1": "Sensor 1 temperature", "2": "Sensor 2 temperature", "3": "Sensor 3 temperature", "4": "Highest temperature"},
    "display_mode": {"0": "Scan", "1": "Sensor 1", "2": "Sensor 2", "3": "Sensor 3", "4": "Highest temperature"},
    "parity": {"0": "No parity", "1": "Even", "2": "Odd"},
    "protocol": {"0": "DNP 3.0", "1": "Modbus RTU"},
    "exercise": {"0": "Off", "1": "On"}
  },
  "registers": [
    {"name": "Alarm temperature sensor 1", "group": "Settings", "area": "holding", "address": 1, "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": "Alarm temperature sensor 2", "group": "Settings", "area": "holding", "address": 2, "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": "Alarm temperature sensor 3", "group": "Settings", "area": "holding", "address": 3, "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": "Shutdown temperature sensor 1", "group": "Settings", "area": "holding", "address": 4, "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": "Shutdown temperature sensor 2", "group": "Settings", "area": "holding", "address": 5, "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": "Shutdown temperature sensor 3", "group": "Settings", "area": "holding", "address": 6, "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": "Fan start temperature sensor 1", "group": "Settings", "area": "holding", "address": 7, "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": "Fan start temperature sensor 2", "group": "Settings", "area": "holding", "address": 8, "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": "Fan start temperature sensor 3", "group": "Settings", "area": "holding", "address": 9, "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": "Alarm reset hysteresis", "group": "Settings", "area": "holding", "address": 10, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 100, "description": "Range 0 to 100; the document gives no scale"},
    {"name": "Fan reset hysteresis", "group": "Settings", "area": "holding", "address": 11, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 300, "description": "Range 0 to 300; the document gives no scale"},
    {"name": "Shutdown delay", "group": "Settings", "area": "holding", "address": 12, "type": "uint16", "unit": "min", "access": "RW", "write_min": 0, "write_max": 20, "description": "Range 0 to 20; the scale column says 1:10, which does not fit minutes, so the value is raw"},
    {"name": "Analog output range", "group": "Analog output", "area": "holding", "address": 13, "type": "uint16", "access": "RW", "enum": "analog_range", "description": "The document labels every value \"when 0\"; the value is the index of the range"},
    {"name": "Analog output source", "group": "Analog output", "area": "holding", "address": 14, "type": "uint16", "access": "RW", "enum": "analog_source"},
    {"name": "Analog output minimum temperature", "group": "Analog output", "area": "holding", "address": 15, "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": "Analog output maximum temperature", "group": "Analog output", "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": "Forced cooling on", "group": "Commands", "area": "holding", "address": 17, "type": "bool", "bit": 0, "access": "W", "description": "The document lists value 0 for both automatic and manual (ON); 1 is taken to be ON"},
    {"name": "Reset maximum temperatures", "group": "Commands", "area": "holding", "address": 17, "type": "bool", "bit": 1, "access": "W", "description": "Write 1"},
    {"name": "Reset equipment", "group": "Commands", "area": "holding", "address": 17, "type": "bool", "bit": 2, "access": "W", "description": "Write 1"},
    {"name": "Display mode", "group": "Settings", "area": "holding", "address": 18, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 4, "enum": "display_mode"},
    {"name": "Sensor 1 enabled", "group": "Settings", "area": "holding", "address": 19, "type": "bool", "bit": 0, "access": "RW"},
    {"name": "Sensor 2 enabled", "group": "Settings", "area": "holding", "address": 19, "type": "bool", "bit": 1, "access": "RW"},
    {"name": "Sensor 3 enabled", "group": "Settings", "area": "holding", "address": 19, "type": "bool", "bit": 2, "access": "RW"},
    {"name": "Fan exercise", "group": "Settings", "area": "holding", "address": 20, "type": "uint16", "access": "RW", "enum": "exercise", "description": "The range is 0 to 2 in the document, but only 0 and 1 are described"},
    {"name": "Parity", "group": "Device", "area": "holding", "address": 21, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 2, "enum": "parity"},
    {"name": "Protocol", "group": "Device", "area": "holding", "address": 22, "type": "uint16", "access": "RW", "enum": "protocol", "description": "The range is 0 to 2 in the document, but only 0 and 1 are described"},
    {"name": "Serial network address", "group": "Device", "area": "holding", "address": 23, "type": "uint16", "access": "R", "description": "Range 1 to 254"},
    {"name": "Temperature sensor 1", "group": "Measurements", "area": "holding", "address": 24, "type": "int16", "access": "R", "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": "Temperature sensor 2", "group": "Measurements", "area": "holding", "address": 25, "type": "int16", "access": "R", "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": "Temperature sensor 3", "group": "Measurements", "area": "holding", "address": 26, "type": "int16", "access": "R", "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": "Maximum temperature sensor 1", "group": "Measurements", "area": "holding", "address": 29, "type": "int16", "access": "R", "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": "Maximum temperature sensor 2", "group": "Measurements", "area": "holding", "address": 30, "type": "int16", "access": "R", "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": "Maximum temperature sensor 3", "group": "Measurements", "area": "holding", "address": 31, "type": "int16", "access": "R", "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": "Alarm sensor 1", "group": "Status", "area": "holding", "address": 32, "type": "bool", "bit": 0, "access": "R"},
    {"name": "Alarm sensor 2", "group": "Status", "area": "holding", "address": 32, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Alarm sensor 3", "group": "Status", "area": "holding", "address": 32, "type": "bool", "bit": 2, "access": "R"},
    {"name": "Alarm relay on", "group": "Status", "area": "holding", "address": 32, "type": "bool", "bit": 3, "access": "R"},
    {"name": "Shutdown counting sensor 1", "group": "Status", "area": "holding", "address": 33, "type": "bool", "bit": 0, "access": "R"},
    {"name": "Shutdown counting sensor 2", "group": "Status", "area": "holding", "address": 33, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Shutdown counting sensor 3", "group": "Status", "area": "holding", "address": 33, "type": "bool", "bit": 2, "access": "R"},
    {"name": "Shutdown sensor 1", "group": "Status", "area": "holding", "address": 34, "type": "bool", "bit": 0, "access": "R"},
    {"name": "Shutdown sensor 2", "group": "Status", "area": "holding", "address": 34, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Shutdown sensor 3", "group": "Status", "area": "holding", "address": 34, "type": "bool", "bit": 2, "access": "R"},
    {"name": "Shutdown relay on", "group": "Status", "area": "holding", "address": 34, "type": "bool", "bit": 3, "access": "R"},
    {"name": "Fan sensor 1", "group": "Status", "area": "holding", "address": 35, "type": "bool", "bit": 0, "access": "R"},
    {"name": "Fan sensor 2", "group": "Status", "area": "holding", "address": 35, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Fan sensor 3", "group": "Status", "area": "holding", "address": 35, "type": "bool", "bit": 2, "access": "R"},
    {"name": "Fan relay on", "group": "Status", "area": "holding", "address": 35, "type": "bool", "bit": 3, "access": "R"},
    {"name": "Failure sensor 1", "group": "Status", "area": "holding", "address": 37, "type": "bool", "bit": 0, "access": "R"},
    {"name": "Failure sensor 2", "group": "Status", "area": "holding", "address": 37, "type": "bool", "bit": 1, "access": "R"},
    {"name": "Failure sensor 3", "group": "Status", "area": "holding", "address": 37, "type": "bool", "bit": 2, "access": "R"},
    {"name": "Failure relay on", "group": "Status", "area": "holding", "address": 37, "type": "bool", "bit": 3, "access": "R"},
    {"name": "Password reminder", "group": "Device", "area": "holding", "address": 38, "type": "uint16", "access": "R", "description": "Range 0 to 9999"}
  ]
}
