{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Novus", "model": "LogBox Wi-Fi", "models": [ "LogBox Wi-Fi" ], "vendor_website": "novus.com.br", "description": "Wi-Fi data logger with analog and digital channels, buzzer and digital output, readable over Modbus TCP: channel values and status, min/max, pulse counter, battery and supply, logging status, alarm setpoints, clock and network status", "revision": 1, "revised": "2026-10-31", "firmware": "Instruction manual V3.3x C", "source": "Novus LogBox Wi-Fi instruction manual V3.3x C (Portuguese), chapter 9", "sources": [ { "title": "LogBox Wi-Fi - Manual de Instruções", "version": "V3.3x C", "url": "https://github.com/user-attachments/files/34218860/Manual_LogBox_Wi-Fi_PT.pdf", "note": "linked in issue #88; chapter 9, tables 9-11" } ], "notes": [ "Modbus TCP server over Wi-Fi, up to 4 clients at once. Enable it and set the TCP port in NXperience; the map assumes port 502. Any unit id from 0 to 255 is answered.", "Functions 03, 06 and 16. Only the buzzer (68) and the clock (1044-1049) can be written with 06 or 16; the alarm setpoints (211-230) only with 16. Writes must also be allowed in the device's write permissions.", "32-bit values are high word first. The alarm setpoints have one fixed decimal.", "Analog channel values have 1 decimal for temperature sensors; for linear inputs the decimals are those configured for the channel, so the map gives them unscaled.", "Written from the manufacturer's manual; not tested on a device." ], "protocol": "tcp", "unit_id": 1, "port": 502, "byte_order": "big", "word_order": "big", "address_base": 0, "x_status": "official", "enums": { "channel_status": { "1": "OK", "2": "Underflow", "3": "Overflow", "4": "Cold junction error", "5": "Open sensor" } }, "registers": [ {"name": "Serial number", "group": "Identity", "area": "holding", "address": 0, "type": "uint32", "access": "R", "role": "serial"}, {"name": "Product code", "group": "Identity", "area": "holding", "address": 2, "type": "uint16", "access": "R"}, {"name": "Firmware version", "group": "Identity", "area": "holding", "address": 3, "type": "uint16", "scale": 0.01, "access": "R", "role": "firmware"}, {"name": "Wi-Fi MAC address bytes 1-2", "group": "Identity", "area": "holding", "address": 5, "type": "uint16", "access": "R"}, {"name": "Wi-Fi MAC address bytes 3-4", "group": "Identity", "area": "holding", "address": 6, "type": "uint16", "access": "R"}, {"name": "Wi-Fi MAC address bytes 5-6", "group": "Identity", "area": "holding", "address": 7, "type": "uint16", "access": "R"}, {"name": "Power supply", "group": "Status", "area": "holding", "address": 15, "type": "uint16", "access": "R", "enum": {"1": "Battery", "2": "USB", "3": "External supply"}}, {"name": "USB status", "group": "Status", "area": "holding", "address": 21, "type": "uint16", "access": "R", "enum": {"1": "USB voltage present", "2": "USB voltage absent", "3": "COM port closed", "4": "COM port open"}}, {"name": "Active channels", "group": "Status", "area": "holding", "address": 32, "type": "uint16", "access": "R"}, {"name": "Buzzer", "group": "Status", "area": "holding", "address": 68, "type": "uint16", "access": "RW", "enum": {"0": "Off", "1": "On"}, "write_min": 0, "write_max": 1}, {"name": "Digital output", "group": "Status", "area": "holding", "address": 70, "type": "uint16", "access": "R", "enum": {"0": "Off", "1": "On"}}, {"name": "Channel 1 status", "group": "Analog channel 1", "area": "holding", "address": 81, "type": "uint16", "access": "R", "enum": "channel_status"}, {"name": "Channel 1 value", "group": "Analog channel 1", "area": "holding", "address": 82, "type": "int16", "access": "R", "description": "1 decimal for temperature sensors; for linear inputs the decimals are those configured for the channel"}, {"name": "Channel 1 minimum", "group": "Analog channel 1", "area": "holding", "address": 83, "type": "int16", "access": "R", "description": "1 decimal for temperature sensors; for linear inputs the decimals are those configured for the channel"}, {"name": "Channel 1 maximum", "group": "Analog channel 1", "area": "holding", "address": 84, "type": "int16", "access": "R", "description": "1 decimal for temperature sensors; for linear inputs the decimals are those configured for the channel"}, {"name": "Channel 2 status", "group": "Analog channel 2", "area": "holding", "address": 89, "type": "uint16", "access": "R", "enum": "channel_status"}, {"name": "Channel 2 value", "group": "Analog channel 2", "area": "holding", "address": 90, "type": "int16", "access": "R", "description": "1 decimal for temperature sensors; for linear inputs the decimals are those configured for the channel"}, {"name": "Channel 2 minimum", "group": "Analog channel 2", "area": "holding", "address": 91, "type": "int16", "access": "R", "description": "1 decimal for temperature sensors; for linear inputs the decimals are those configured for the channel"}, {"name": "Channel 2 maximum", "group": "Analog channel 2", "area": "holding", "address": 92, "type": "int16", "access": "R", "description": "1 decimal for temperature sensors; for linear inputs the decimals are those configured for the channel"}, {"name": "Channel 3 status", "group": "Analog channel 3", "area": "holding", "address": 97, "type": "uint16", "access": "R", "enum": "channel_status"}, {"name": "Channel 3 value", "group": "Analog channel 3", "area": "holding", "address": 98, "type": "int16", "access": "R", "description": "1 decimal for temperature sensors; for linear inputs the decimals are those configured for the channel"}, {"name": "Channel 3 minimum", "group": "Analog channel 3", "area": "holding", "address": 99, "type": "int16", "access": "R", "description": "1 decimal for temperature sensors; for linear inputs the decimals are those configured for the channel"}, {"name": "Channel 3 maximum", "group": "Analog channel 3", "area": "holding", "address": 100, "type": "int16", "access": "R", "description": "1 decimal for temperature sensors; for linear inputs the decimals are those configured for the channel"}, {"name": "Digital channel status", "group": "Digital channel", "area": "holding", "address": 73, "type": "uint16", "access": "R", "enum": {"1": "OK", "2": "Underflow", "3": "Overflow"}}, {"name": "Digital channel value", "group": "Digital channel", "area": "holding", "address": 74, "type": "uint16", "access": "R", "description": "Pulse count in pulse count mode, 1 or 0 in event or record control mode"}, {"name": "Digital channel value (user unit)", "group": "Digital channel", "area": "holding", "address": 75, "type": "float32", "access": "R"}, {"name": "Digital channel minimum", "group": "Digital channel", "area": "holding", "address": 77, "type": "uint16", "access": "R"}, {"name": "Digital channel maximum", "group": "Digital channel", "area": "holding", "address": 78, "type": "uint16", "access": "R"}, {"name": "Digital channel last event edge", "group": "Digital channel", "area": "holding", "address": 71, "type": "uint16", "access": "R", "enum": {"0": "Falling", "1": "Rising"}}, {"name": "Pulse accumulator", "group": "Digital channel", "area": "holding", "address": 237, "type": "uint32", "access": "R", "description": "Raw count"}, {"name": "Pulse accumulator (user unit)", "group": "Digital channel", "area": "holding", "address": 239, "type": "float32", "access": "R"}, {"name": "Digital channel last event year", "group": "Digital channel", "area": "holding", "address": 61, "type": "uint16", "access": "R"}, {"name": "Digital channel last event month", "group": "Digital channel", "area": "holding", "address": 62, "type": "uint16", "access": "R"}, {"name": "Digital channel last event day", "group": "Digital channel", "area": "holding", "address": 63, "type": "uint16", "access": "R"}, {"name": "Digital channel last event hour", "group": "Digital channel", "area": "holding", "address": 64, "type": "uint16", "access": "R"}, {"name": "Digital channel last event minute", "group": "Digital channel", "area": "holding", "address": 65, "type": "uint16", "access": "R"}, {"name": "Digital channel last event second", "group": "Digital channel", "area": "holding", "address": 66, "type": "uint16", "access": "R"}, {"name": "Battery voltage", "group": "Power", "area": "holding", "address": 106, "type": "uint16", "scale": 0.01, "unit": "V", "access": "R"}, {"name": "Battery voltage minimum", "group": "Power", "area": "holding", "address": 107, "type": "uint16", "scale": 0.01, "unit": "V", "access": "R"}, {"name": "Battery voltage maximum", "group": "Power", "area": "holding", "address": 108, "type": "uint16", "scale": 0.01, "unit": "V", "access": "R"}, {"name": "Battery life", "group": "Power", "area": "holding", "address": 109, "type": "uint16", "scale": 0.1, "unit": "%", "access": "R"}, {"name": "External supply voltage", "group": "Power", "area": "holding", "address": 113, "type": "uint16", "scale": 0.01, "unit": "V", "access": "R"}, {"name": "External supply voltage minimum", "group": "Power", "area": "holding", "address": 114, "type": "uint16", "scale": 0.01, "unit": "V", "access": "R"}, {"name": "External supply voltage maximum", "group": "Power", "area": "holding", "address": 115, "type": "uint16", "scale": 0.01, "unit": "V", "access": "R"}, {"name": "Logging status", "group": "Logging", "area": "holding", "address": 36, "type": "uint16", "access": "R", "enum": {"1": "Stopped", "2": "Logging"}}, {"name": "Logging started by", "group": "Logging", "area": "holding", "address": 34, "type": "uint16", "access": "R", "enum": {"1": "Immediate start", "2": "Date and time", "3": "Keypad", "4": "Digital input", "5": "Daily", "6": "Software"}}, {"name": "Logging stopped by", "group": "Logging", "area": "holding", "address": 35, "type": "uint16", "access": "R", "enum": {"2": "Date and time", "3": "Keypad", "4": "Digital input", "5": "Daily", "6": "Software"}}, {"name": "Records in memory", "group": "Logging", "area": "holding", "address": 37, "type": "uint32", "access": "R"}, {"name": "Free records", "group": "Logging", "area": "holding", "address": 39, "type": "uint32", "access": "R"}, {"name": "First record year", "group": "Logging", "area": "holding", "address": 43, "type": "uint16", "access": "R"}, {"name": "First record month", "group": "Logging", "area": "holding", "address": 44, "type": "uint16", "access": "R"}, {"name": "First record day", "group": "Logging", "area": "holding", "address": 45, "type": "uint16", "access": "R"}, {"name": "First record hour", "group": "Logging", "area": "holding", "address": 46, "type": "uint16", "access": "R"}, {"name": "First record minute", "group": "Logging", "area": "holding", "address": 47, "type": "uint16", "access": "R"}, {"name": "First record second", "group": "Logging", "area": "holding", "address": 48, "type": "uint16", "access": "R"}, {"name": "Last record year", "group": "Logging", "area": "holding", "address": 51, "type": "uint16", "access": "R"}, {"name": "Last record month", "group": "Logging", "area": "holding", "address": 52, "type": "uint16", "access": "R"}, {"name": "Last record day", "group": "Logging", "area": "holding", "address": 53, "type": "uint16", "access": "R"}, {"name": "Last record hour", "group": "Logging", "area": "holding", "address": 54, "type": "uint16", "access": "R"}, {"name": "Last record minute", "group": "Logging", "area": "holding", "address": 55, "type": "uint16", "access": "R"}, {"name": "Last record second", "group": "Logging", "area": "holding", "address": 56, "type": "uint16", "access": "R"}, {"name": "Alarm 1 setpoint", "group": "Alarms", "area": "holding", "address": 211, "type": "int32", "scale": 0.1, "access": "W", "description": "Write multiple registers (16) only; one fixed decimal"}, {"name": "Alarm 2 setpoint", "group": "Alarms", "area": "holding", "address": 213, "type": "int32", "scale": 0.1, "access": "W", "description": "Write multiple registers (16) only; one fixed decimal"}, {"name": "Alarm 3 setpoint", "group": "Alarms", "area": "holding", "address": 215, "type": "int32", "scale": 0.1, "access": "W", "description": "Write multiple registers (16) only; one fixed decimal"}, {"name": "Alarm 4 setpoint", "group": "Alarms", "area": "holding", "address": 217, "type": "int32", "scale": 0.1, "access": "W", "description": "Write multiple registers (16) only; one fixed decimal"}, {"name": "Alarm 5 setpoint", "group": "Alarms", "area": "holding", "address": 219, "type": "int32", "scale": 0.1, "access": "W", "description": "Write multiple registers (16) only; one fixed decimal"}, {"name": "Alarm 6 setpoint", "group": "Alarms", "area": "holding", "address": 221, "type": "int32", "scale": 0.1, "access": "W", "description": "Write multiple registers (16) only; one fixed decimal"}, {"name": "Alarm 7 setpoint", "group": "Alarms", "area": "holding", "address": 223, "type": "int32", "scale": 0.1, "access": "W", "description": "Write multiple registers (16) only; one fixed decimal"}, {"name": "Alarm 8 setpoint", "group": "Alarms", "area": "holding", "address": 225, "type": "int32", "scale": 0.1, "access": "W", "description": "Write multiple registers (16) only; one fixed decimal"}, {"name": "Alarm 9 setpoint", "group": "Alarms", "area": "holding", "address": 227, "type": "int32", "scale": 0.1, "access": "W", "description": "Write multiple registers (16) only; one fixed decimal"}, {"name": "Alarm 10 setpoint", "group": "Alarms", "area": "holding", "address": 229, "type": "int32", "scale": 0.1, "access": "W", "description": "Write multiple registers (16) only; one fixed decimal"}, {"name": "Clock year setting", "group": "Clock", "area": "holding", "address": 1044, "type": "uint16", "access": "W", "description": "UTC"}, {"name": "Clock month setting", "group": "Clock", "area": "holding", "address": 1045, "type": "uint16", "access": "W", "description": "UTC"}, {"name": "Clock day setting", "group": "Clock", "area": "holding", "address": 1046, "type": "uint16", "access": "W", "description": "UTC"}, {"name": "Clock hour setting", "group": "Clock", "area": "holding", "address": 1047, "type": "uint16", "access": "W", "description": "UTC"}, {"name": "Clock minute setting", "group": "Clock", "area": "holding", "address": 1048, "type": "uint16", "access": "W", "description": "UTC"}, {"name": "Clock second setting", "group": "Clock", "area": "holding", "address": 1049, "type": "uint16", "access": "W", "description": "UTC"}, {"name": "Wi-Fi signal", "group": "Network", "area": "holding", "address": 136, "type": "int16", "scale": 0.01, "unit": "dB", "access": "R"}, {"name": "Wi-Fi status", "group": "Network", "area": "holding", "address": 137, "type": "uint16", "access": "R", "enum": {"0": "Disconnected", "1": "Connected", "2": "Wrong password", "3": "Access point not found", "4": "DHCP error", "5": "Static IP authentication error"}}, {"name": "MQTT status", "group": "Network", "area": "holding", "address": 138, "type": "uint16", "access": "R", "enum": {"0": "Disconnected", "1": "Connected", "2": "DNS error", "3": "Publish error", "4": "Subscribe error"}}, {"name": "IP address", "group": "Network", "area": "holding", "address": 140, "type": "uint32", "access": "R", "description": "One byte per octet, first octet in the high byte"}, {"name": "Network mask", "group": "Network", "area": "holding", "address": 142, "type": "uint32", "access": "R", "description": "One byte per octet, first octet in the high byte"}, {"name": "Gateway address", "group": "Network", "area": "holding", "address": 144, "type": "uint32", "access": "R", "description": "One byte per octet, first octet in the high byte"}, {"name": "Last MQTT publish year", "group": "Network", "area": "holding", "address": 121, "type": "uint16", "access": "R"}, {"name": "Last MQTT publish month", "group": "Network", "area": "holding", "address": 122, "type": "uint16", "access": "R"}, {"name": "Last MQTT publish day", "group": "Network", "area": "holding", "address": 123, "type": "uint16", "access": "R"}, {"name": "Last MQTT publish hour", "group": "Network", "area": "holding", "address": 124, "type": "uint16", "access": "R"}, {"name": "Last MQTT publish minute", "group": "Network", "area": "holding", "address": 125, "type": "uint16", "access": "R"}, {"name": "Last MQTT publish second", "group": "Network", "area": "holding", "address": 126, "type": "uint16", "access": "R"} ] }