{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Electron do Brasil", "model": "MoniTemp Plus", "models": [ "MoniTemp Plus" ], "vendor_website": "electron.com.br", "description": "Digital temperature monitor for transformers (ANSI 49I / 49): oil and two winding sensors, thermal image, two fan groups, alarm, shutdown and fault relays, analog output and Modbus RTU", "revision": 1, "revised": "2026-11-10", "source": "Electron do Brasil, Mapa de Registradores Modbus RTU, MoniTemp Plus, v3.2", "sources": [ { "title": "Mapa de Registradores Modbus RTU, MoniTemp Plus", "version": "3.2", "url": "https://electron.com.br/api/downloads/file/mapa_de_registradores_modbus_rtu_monitemp_plus_pt-br_v3-2.pdf", "note": "linked in issue #137" } ], "notes": [ "All registers are holding registers. The document numbers them 2 to 89 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 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 78.", "Temperatures 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. Registers with a scale of 1:10, 1:100 or 1:1000 are scaled as written.", "Registers 17, 19, 23, 30, 48, 66, 67, 68 and 71 are bit fields, one entry per bit. The command bits 3 to 5 of register 19 are write-only. Registers 1, 44, 45, 49, 53, 54, 72, 73 and the fan state registers 69 and 70 (their labels repeat the shutdown labels) are not mapped.", "The document has several copy-and-paste slips; where a label is clearly wrong the register description says how it was read (winding 2 alarm bit, oil shutdown bit, the fan drive bits).", "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"}, "display_mode": {"0": "Scan", "1": "Oil sensor", "2": "Winding 1 sensor", "3": "Winding 2 sensor", "4": "Highest temperature"}, "return_logic": {"0": "Automatic", "1": "Manual"}, "relay_logic": {"0": "Normal", "1": "Inverse"}, "protection": {"0": "Disabled", "1": "Enabled"}, "baudrate": {"0": "Automatic", "1": "1200", "2": "2400", "3": "4800", "4": "9600", "5": "19200", "6": "38400", "7": "57600"}, "parity": {"0": "No parity", "1": "Even", "2": "Odd"}, "protocol": {"0": "DNP 3", "1": "Modbus RTU"}, "fan_drive": {"1": "Temperature", "3": "Temperature and loading"}, "exercise": {"0": "Disabled", "1": "Enabled"} }, "registers": [ {"name": "Alarm temperature oil sensor", "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 winding 1 sensor", "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": "Alarm temperature winding 2 sensor", "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 by loading", "group": "Settings", "area": "holding", "address": 5, "type": "int16", "access": "RW", "description": "The document calls it \"desligamento por carregamento habitado\" with a temperature range; its meaning is not clear. 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 oil sensor", "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": "Shutdown temperature winding 1 sensor", "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": "Shutdown temperature winding 2 sensor", "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 group 1 start temperature, oil sensor", "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": "Fan group 1 start temperature, winding 1 sensor", "group": "Settings", "area": "holding", "address": 10, "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 group 1 start temperature, winding 2 sensor", "group": "Settings", "area": "holding", "address": 11, "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 group 2 start temperature, oil sensor", "group": "Settings", "area": "holding", "address": 12, "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 group 2 start temperature, winding 1 sensor", "group": "Settings", "area": "holding", "address": 13, "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": 14, "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 reset hysteresis", "group": "Settings", "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": "Shutdown delay", "group": "Settings", "area": "holding", "address": 16, "type": "int16", "unit": "min", "access": "RW", "description": "The document gives a temperature range and scale for it"}, {"name": "Automatic fan group inversion", "group": "Settings", "area": "holding", "address": 17, "type": "bool", "bit": 0, "access": "RW"}, {"name": "Fan group drive", "group": "Settings", "area": "holding", "address": 17, "type": "bool", "bit": 1, "access": "RW", "description": "Bit 1 set: fan group drive activated"}, {"name": "Analog output type", "group": "Analog output", "area": "holding", "address": 18, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 4, "enum": "analog_range"}, {"name": "Forced ventilation group 1 on", "group": "Commands", "area": "holding", "address": 19, "type": "bool", "bit": 0, "access": "RW", "description": "0 = automatic, 1 = forced on"}, {"name": "Forced ventilation group 2 on", "group": "Commands", "area": "holding", "address": 19, "type": "bool", "bit": 1, "access": "RW", "description": "0 = automatic, 1 = forced on; the document writes \"when 3\" for the on state"}, {"name": "Reset maximum oil temperature", "group": "Commands", "area": "holding", "address": 19, "type": "bool", "bit": 2, "access": "RW", "description": "Write 1"}, {"name": "Reset maximum winding 1 temperature", "group": "Commands", "area": "holding", "address": 19, "type": "bool", "bit": 3, "access": "W", "description": "Write 1"}, {"name": "Reset maximum winding 2 temperature", "group": "Commands", "area": "holding", "address": 19, "type": "bool", "bit": 4, "access": "W", "description": "Write 1"}, {"name": "Reset equipment", "group": "Commands", "area": "holding", "address": 19, "type": "bool", "bit": 5, "access": "W", "description": "Write 1"}, {"name": "Display mode", "group": "Settings", "area": "holding", "address": 20, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 4, "enum": "display_mode"}, {"name": "Oil alarm return", "group": "Settings", "area": "holding", "address": 23, "type": "bool", "bit": 0, "access": "RW", "enum": "return_logic"}, {"name": "Winding 1 alarm return", "group": "Settings", "area": "holding", "address": 23, "type": "bool", "bit": 1, "access": "RW", "enum": "return_logic"}, {"name": "Oil shutdown return", "group": "Settings", "area": "holding", "address": 23, "type": "bool", "bit": 2, "access": "RW", "enum": "return_logic", "description": "The document describes both states as automatic"}, {"name": "Winding shutdown return", "group": "Settings", "area": "holding", "address": 23, "type": "bool", "bit": 3, "access": "RW", "enum": "return_logic"}, {"name": "Fault relay return", "group": "Settings", "area": "holding", "address": 23, "type": "bool", "bit": 4, "access": "RW", "enum": "return_logic"}, {"name": "Winding 2 alarm return", "group": "Settings", "area": "holding", "address": 23, "type": "bool", "bit": 5, "access": "RW", "enum": "return_logic"}, {"name": "Oil current output minimum temperature", "group": "Analog output", "area": "holding", "address": 24, "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": "Oil current output maximum temperature", "group": "Analog output", "area": "holding", "address": 25, "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": "Winding 1 current output minimum temperature", "group": "Analog output", "area": "holding", "address": 26, "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": "Winding 1 current output maximum temperature", "group": "Analog output", "area": "holding", "address": 27, "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": "Winding 2 current output minimum temperature", "group": "Analog output", "area": "holding", "address": 28, "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": "Winding 2 current output maximum temperature", "group": "Analog output", "area": "holding", "address": 29, "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": "Sensor 1 enabled", "group": "Status", "area": "holding", "address": 30, "type": "bool", "bit": 0, "access": "R", "description": "Read only in the document"}, {"name": "Oil sensor enabled", "group": "Settings", "area": "holding", "address": 30, "type": "bool", "bit": 1, "access": "RW"}, {"name": "Winding sensor enabled", "group": "Settings", "area": "holding", "address": 30, "type": "bool", "bit": 2, "access": "RW"}, {"name": "Ventilation exercise", "group": "Status", "area": "holding", "address": 31, "type": "uint16", "access": "R", "enum": "exercise"}, {"name": "Hot-spot factor HS+", "group": "Thermal image", "area": "holding", "address": 32, "type": "uint16", "scale": 0.1, "access": "RW", "write_min": 0, "write_max": 200}, {"name": "Hot-spot factor HS*", "group": "Thermal image", "area": "holding", "address": 33, "type": "uint16", "scale": 0.1, "access": "RW", "write_min": 1, "write_max": 1.5}, {"name": "Winding exponent 2M", "group": "Thermal image", "area": "holding", "address": 34, "type": "uint16", "scale": 0.1, "access": "RW", "write_min": 1, "write_max": 2}, {"name": "Winding 1 temperature gradient", "group": "Thermal image", "area": "holding", "address": 35, "type": "uint16", "scale": 0.1, "access": "RW", "write_min": 0, "write_max": 30}, {"name": "Winding 2 temperature gradient", "group": "Thermal image", "area": "holding", "address": 36, "type": "uint16", "scale": 0.1, "access": "RW", "write_min": 0, "write_max": 30}, {"name": "Winding 1 thermal inertia time constant", "group": "Thermal image", "area": "holding", "address": 37, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 500}, {"name": "Winding 2 thermal inertia time constant", "group": "Thermal image", "area": "holding", "address": 38, "type": "uint16", "access": "RW", "write_min": 0, "write_max": 500}, {"name": "Winding 1 rated current", "group": "Thermal image", "area": "holding", "address": 39, "type": "uint16", "scale": 0.001, "access": "RW", "write_min": 0.001, "write_max": 9.999, "description": "Range 1 to 9999, scale 1:1000"}, {"name": "Winding 2 rated current", "group": "Thermal image", "area": "holding", "address": 40, "type": "uint16", "scale": 0.001, "access": "RW", "write_min": 0.001, "write_max": 9.999, "description": "Range 1 to 9999, scale 1:1000"}, {"name": "Winding 1 current transformer ratio", "group": "Thermal image", "area": "holding", "address": 41, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 9999}, {"name": "Winding 2 current transformer ratio", "group": "Thermal image", "area": "holding", "address": 42, "type": "uint16", "access": "RW", "write_min": 1, "write_max": 9999}, {"name": "Oil temperature offset correction", "group": "Settings", "area": "holding", "address": 43, "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": "Winding 1 current offset correction", "group": "Settings", "area": "holding", "address": 46, "type": "int16", "access": "RW", "description": "Range -1.00 to 1.00; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"}, {"name": "Winding 2 current offset correction", "group": "Settings", "area": "holding", "address": 47, "type": "int16", "access": "RW", "description": "Range -1.00 to 1.00; the document's scale column (-1000:10) is not explained, so the value is raw (check against the display)"}, {"name": "Fan group 1 relay logic", "group": "Settings", "area": "holding", "address": 48, "type": "bool", "bit": 0, "access": "RW", "enum": "relay_logic"}, {"name": "Fan group 2 relay logic", "group": "Settings", "area": "holding", "address": 48, "type": "bool", "bit": 1, "access": "RW", "enum": "relay_logic"}, {"name": "Oil alarm relay logic", "group": "Settings", "area": "holding", "address": 48, "type": "bool", "bit": 2, "access": "RW", "enum": "relay_logic"}, {"name": "Winding 1 alarm relay logic", "group": "Settings", "area": "holding", "address": 48, "type": "bool", "bit": 3, "access": "RW", "enum": "relay_logic"}, {"name": "Winding 2 alarm relay logic", "group": "Settings", "area": "holding", "address": 48, "type": "bool", "bit": 4, "access": "RW", "enum": "relay_logic"}, {"name": "Fault relay logic", "group": "Settings", "area": "holding", "address": 48, "type": "bool", "bit": 5, "access": "RW", "enum": "relay_logic"}, {"name": "Oil shutdown relay logic", "group": "Settings", "area": "holding", "address": 48, "type": "bool", "bit": 6, "access": "RW", "enum": "relay_logic"}, {"name": "Winding shutdown relay logic", "group": "Settings", "area": "holding", "address": 48, "type": "bool", "bit": 7, "access": "RW", "enum": "relay_logic"}, {"name": "Oil temperature", "group": "Measurements", "area": "holding", "address": 50, "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": "Winding 1 temperature", "group": "Measurements", "area": "holding", "address": 51, "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": "Winding 2 temperature", "group": "Measurements", "area": "holding", "address": 52, "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 oil temperature", "group": "Measurements", "area": "holding", "address": 55, "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": "Maximum winding 1 temperature", "group": "Measurements", "area": "holding", "address": 56, "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": "Maximum winding 2 temperature", "group": "Measurements", "area": "holding", "address": 57, "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": "Winding 1 final temperature gradient", "group": "Thermal image", "area": "holding", "address": 58, "type": "uint16", "scale": 0.1, "access": "R", "description": "Range 0 to 2000, scale 1:10"}, {"name": "Winding 2 final temperature gradient", "group": "Thermal image", "area": "holding", "address": 59, "type": "uint16", "scale": 0.1, "access": "R", "description": "Range 0 to 2000, scale 1:10"}, {"name": "Winding 1 percentage loading", "group": "Thermal image", "area": "holding", "address": 60, "type": "uint16", "scale": 0.1, "access": "R", "description": "Range 0 to 9999, scale 1:10"}, {"name": "Winding 2 percentage loading", "group": "Thermal image", "area": "holding", "address": 61, "type": "uint16", "scale": 0.01, "access": "R", "description": "Range 0 to 9999, scale 1:100 (as printed; register 60 is 1:10)"}, {"name": "Current transformer 1 secondary current (thermal image)", "group": "Thermal image", "area": "holding", "address": 62, "type": "uint16", "scale": 0.01, "access": "R", "description": "Range 0 to 9999, scale 1:100"}, {"name": "Current transformer 2 secondary current (thermal image)", "group": "Thermal image", "area": "holding", "address": 63, "type": "uint16", "scale": 0.01, "access": "R", "description": "Range 0 to 9999, scale 1:100"}, {"name": "Current transformer 1 primary current (thermal image)", "group": "Thermal image", "area": "holding", "address": 64, "type": "uint16", "scale": 0.01, "access": "R", "description": "Range 0 to 9999, scale 1:100"}, {"name": "Current transformer 2 primary current (thermal image)", "group": "Thermal image", "area": "holding", "address": 65, "type": "uint16", "scale": 0.01, "access": "R", "description": "Range 0 to 9999, scale 1:100"}, {"name": "Oil alarm active", "group": "Status", "area": "holding", "address": 66, "type": "bool", "bit": 0, "access": "R"}, {"name": "Winding 1 alarm active", "group": "Status", "area": "holding", "address": 66, "type": "bool", "bit": 1, "access": "R"}, {"name": "Winding 2 alarm active", "group": "Status", "area": "holding", "address": 66, "type": "bool", "bit": 2, "access": "R", "description": "The document labels this bit winding 1, like bit 1; taken to be winding 2"}, {"name": "Oil shutdown counting", "group": "Status", "area": "holding", "address": 67, "type": "bool", "bit": 0, "access": "R"}, {"name": "Winding 1 shutdown counting", "group": "Status", "area": "holding", "address": 67, "type": "bool", "bit": 1, "access": "R"}, {"name": "Winding 2 shutdown counting", "group": "Status", "area": "holding", "address": 67, "type": "bool", "bit": 2, "access": "R"}, {"name": "Oil shutdown active", "group": "Status", "area": "holding", "address": 68, "type": "bool", "bit": 0, "access": "R", "description": "The document labels this bit fan/pump of the oil; taken to be the oil shutdown"}, {"name": "Winding 1 shutdown active", "group": "Status", "area": "holding", "address": 68, "type": "bool", "bit": 1, "access": "R"}, {"name": "Winding 2 shutdown active", "group": "Status", "area": "holding", "address": 68, "type": "bool", "bit": 2, "access": "R"}, {"name": "Oil sensor failure", "group": "Status", "area": "holding", "address": 71, "type": "bool", "bit": 0, "access": "R"}, {"name": "Winding 1 sensor failure", "group": "Status", "area": "holding", "address": 71, "type": "bool", "bit": 1, "access": "R"}, {"name": "Winding 2 sensor failure", "group": "Status", "area": "holding", "address": 71, "type": "bool", "bit": 2, "access": "R"}, {"name": "Parameter protection", "group": "Device", "area": "holding", "address": 74, "type": "uint16", "access": "R", "enum": "protection"}, {"name": "Baud rate", "group": "Device", "area": "holding", "address": 75, "type": "uint16", "access": "R", "enum": "baudrate"}, {"name": "Parity", "group": "Device", "area": "holding", "address": 76, "type": "uint16", "access": "R", "enum": "parity"}, {"name": "Protocol", "group": "Device", "area": "holding", "address": 77, "type": "uint16", "access": "R", "enum": "protocol"}, {"name": "Serial network address", "group": "Device", "area": "holding", "address": 78, "type": "uint16", "access": "R", "description": "Range 1 to 254"}, {"name": "Password reminder", "group": "Device", "area": "holding", "address": 79, "type": "uint16", "access": "R", "description": "Range 0 to 9999"}, {"name": "Manufacturing day", "group": "Device", "area": "holding", "address": 80, "type": "uint16", "access": "R"}, {"name": "Manufacturing month", "group": "Device", "area": "holding", "address": 81, "type": "uint16", "access": "R"}, {"name": "Manufacturing year", "group": "Device", "area": "holding", "address": 82, "type": "uint16", "access": "R", "description": "Range 2017 to 2099"}, {"name": "Serial number", "group": "Device", "area": "holding", "address": 83, "type": "uint32", "access": "R", "role": "serial", "description": "Registers 83 (LSB) and 84 (MSB), up to 0xFFFFFF", "word_order": "little"}, {"name": "Fan drive type", "group": "Settings", "area": "holding", "address": 85, "type": "uint16", "access": "RW", "enum": "fan_drive"}, {"name": "Fan group 1 load start, winding 1", "group": "Settings", "area": "holding", "address": 86, "type": "uint16", "scale": 0.1, "access": "RW", "write_min": 0.1, "write_max": 200, "description": "Percentage load; range 1 to 2000, scale 1:10"}, {"name": "Fan group 1 load start, winding 2", "group": "Settings", "area": "holding", "address": 87, "type": "uint16", "scale": 0.1, "access": "RW", "write_min": 0.1, "write_max": 200, "description": "Percentage load; range 1 to 2000, scale 1:10"}, {"name": "Fan group 2 load start, winding 1", "group": "Settings", "area": "holding", "address": 88, "type": "uint16", "scale": 0.1, "access": "RW", "write_min": 0.1, "write_max": 200, "description": "Percentage load; range 1 to 2000, scale 1:10"}, {"name": "Fan group 2 load start, winding 2", "group": "Settings", "area": "holding", "address": 89, "type": "uint16", "scale": 0.1, "access": "RW", "write_min": 0.1, "write_max": 200, "description": "Percentage load; range 1 to 2000, scale 1:10"} ] }