{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Shelly", "model": "Pro 4PM", "models": [ "Pro 4PM" ], "vendor_website": "shelly.com", "description": "Four-channel smart relay with power metering and Modbus TCP", "revision": 1, "revised": "2026-10-18", "source": "Shelly Gen2 API documentation: Modbus and component pages", "sources": [ { "title": "Shelly Gen2 API: Modbus", "url": "https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Modbus" }, { "title": "Shelly Gen2 API: Switch", "url": "https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Switch", "note": "Modbus registers table" } ], "notes": [ "Modbus TCP must be enabled first (Modbus.SetConfig enable=true, or in the web interface).", "The documentation lists input registers in 3xxxx notation: 33000 is input register 3000.", "Floats and 32-bit values are sent low word first, as in the documentation's modbus_cli examples (-B mixed).", "Each Switch component has a block of 20 input registers starting at 33000 + 20 x its id, and a coil at 100 + 10 x its id." ], "protocol": "tcp", "port": 502, "byte_order": "big", "word_order": "little", "address_base": 0, "x_status": "official", "registers": [ {"name": "MAC address", "group": "Device", "area": "input", "address": 0, "type": "string", "length": 6}, {"name": "Model", "group": "Device", "area": "input", "address": 6, "type": "string", "length": 10, "role": "model"}, {"name": "Device name", "group": "Device", "area": "input", "address": 16, "type": "string", "length": 32}, {"name": "Output 1", "group": "Channel 1", "area": "coil", "address": 100, "type": "bool", "access": "RW", "description": "1 = on, 0 = off"}, {"name": "Output 1 state", "group": "Channel 1", "area": "input", "address": 3000, "type": "bool", "bit": 0}, {"name": "Voltage 1", "group": "Channel 1", "area": "input", "address": 3001, "type": "float32", "unit": "V"}, {"name": "Current 1", "group": "Channel 1", "area": "input", "address": 3003, "type": "float32", "unit": "A"}, {"name": "Active power 1", "group": "Channel 1", "area": "input", "address": 3005, "type": "float32", "unit": "W"}, {"name": "Frequency 1", "group": "Channel 1", "area": "input", "address": 3007, "type": "float32", "unit": "Hz"}, {"name": "Power factor 1", "group": "Channel 1", "area": "input", "address": 3009, "type": "float32"}, {"name": "Active energy 1", "group": "Channel 1", "area": "input", "address": 3011, "type": "float32", "unit": "Wh"}, {"name": "Returned active energy 1", "group": "Channel 1", "area": "input", "address": 3013, "type": "float32", "unit": "Wh"}, {"name": "Undervoltage error 1", "group": "Channel 1", "area": "input", "address": 3015, "type": "bool", "bit": 0}, {"name": "Overvoltage error 1", "group": "Channel 1", "area": "input", "address": 3016, "type": "bool", "bit": 0}, {"name": "Overcurrent error 1", "group": "Channel 1", "area": "input", "address": 3017, "type": "bool", "bit": 0}, {"name": "Overpower error 1", "group": "Channel 1", "area": "input", "address": 3018, "type": "bool", "bit": 0}, {"name": "Output 2", "group": "Channel 2", "area": "coil", "address": 110, "type": "bool", "access": "RW", "description": "1 = on, 0 = off"}, {"name": "Output 2 state", "group": "Channel 2", "area": "input", "address": 3020, "type": "bool", "bit": 0}, {"name": "Voltage 2", "group": "Channel 2", "area": "input", "address": 3021, "type": "float32", "unit": "V"}, {"name": "Current 2", "group": "Channel 2", "area": "input", "address": 3023, "type": "float32", "unit": "A"}, {"name": "Active power 2", "group": "Channel 2", "area": "input", "address": 3025, "type": "float32", "unit": "W"}, {"name": "Frequency 2", "group": "Channel 2", "area": "input", "address": 3027, "type": "float32", "unit": "Hz"}, {"name": "Power factor 2", "group": "Channel 2", "area": "input", "address": 3029, "type": "float32"}, {"name": "Active energy 2", "group": "Channel 2", "area": "input", "address": 3031, "type": "float32", "unit": "Wh"}, {"name": "Returned active energy 2", "group": "Channel 2", "area": "input", "address": 3033, "type": "float32", "unit": "Wh"}, {"name": "Undervoltage error 2", "group": "Channel 2", "area": "input", "address": 3035, "type": "bool", "bit": 0}, {"name": "Overvoltage error 2", "group": "Channel 2", "area": "input", "address": 3036, "type": "bool", "bit": 0}, {"name": "Overcurrent error 2", "group": "Channel 2", "area": "input", "address": 3037, "type": "bool", "bit": 0}, {"name": "Overpower error 2", "group": "Channel 2", "area": "input", "address": 3038, "type": "bool", "bit": 0}, {"name": "Output 3", "group": "Channel 3", "area": "coil", "address": 120, "type": "bool", "access": "RW", "description": "1 = on, 0 = off"}, {"name": "Output 3 state", "group": "Channel 3", "area": "input", "address": 3040, "type": "bool", "bit": 0}, {"name": "Voltage 3", "group": "Channel 3", "area": "input", "address": 3041, "type": "float32", "unit": "V"}, {"name": "Current 3", "group": "Channel 3", "area": "input", "address": 3043, "type": "float32", "unit": "A"}, {"name": "Active power 3", "group": "Channel 3", "area": "input", "address": 3045, "type": "float32", "unit": "W"}, {"name": "Frequency 3", "group": "Channel 3", "area": "input", "address": 3047, "type": "float32", "unit": "Hz"}, {"name": "Power factor 3", "group": "Channel 3", "area": "input", "address": 3049, "type": "float32"}, {"name": "Active energy 3", "group": "Channel 3", "area": "input", "address": 3051, "type": "float32", "unit": "Wh"}, {"name": "Returned active energy 3", "group": "Channel 3", "area": "input", "address": 3053, "type": "float32", "unit": "Wh"}, {"name": "Undervoltage error 3", "group": "Channel 3", "area": "input", "address": 3055, "type": "bool", "bit": 0}, {"name": "Overvoltage error 3", "group": "Channel 3", "area": "input", "address": 3056, "type": "bool", "bit": 0}, {"name": "Overcurrent error 3", "group": "Channel 3", "area": "input", "address": 3057, "type": "bool", "bit": 0}, {"name": "Overpower error 3", "group": "Channel 3", "area": "input", "address": 3058, "type": "bool", "bit": 0}, {"name": "Output 4", "group": "Channel 4", "area": "coil", "address": 130, "type": "bool", "access": "RW", "description": "1 = on, 0 = off"}, {"name": "Output 4 state", "group": "Channel 4", "area": "input", "address": 3060, "type": "bool", "bit": 0}, {"name": "Voltage 4", "group": "Channel 4", "area": "input", "address": 3061, "type": "float32", "unit": "V"}, {"name": "Current 4", "group": "Channel 4", "area": "input", "address": 3063, "type": "float32", "unit": "A"}, {"name": "Active power 4", "group": "Channel 4", "area": "input", "address": 3065, "type": "float32", "unit": "W"}, {"name": "Frequency 4", "group": "Channel 4", "area": "input", "address": 3067, "type": "float32", "unit": "Hz"}, {"name": "Power factor 4", "group": "Channel 4", "area": "input", "address": 3069, "type": "float32"}, {"name": "Active energy 4", "group": "Channel 4", "area": "input", "address": 3071, "type": "float32", "unit": "Wh"}, {"name": "Returned active energy 4", "group": "Channel 4", "area": "input", "address": 3073, "type": "float32", "unit": "Wh"}, {"name": "Undervoltage error 4", "group": "Channel 4", "area": "input", "address": 3075, "type": "bool", "bit": 0}, {"name": "Overvoltage error 4", "group": "Channel 4", "area": "input", "address": 3076, "type": "bool", "bit": 0}, {"name": "Overcurrent error 4", "group": "Channel 4", "area": "input", "address": 3077, "type": "bool", "bit": 0}, {"name": "Overpower error 4", "group": "Channel 4", "area": "input", "address": 3078, "type": "bool", "bit": 0} ] }