{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Shelly", "model": "Pro EM-50", "models": [ "Pro EM-50" ], "vendor_website": "shelly.com", "description": "Two-channel energy meter with a relay output 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: EM1", "url": "https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/EM1", "note": "Modbus registers table" }, { "title": "Shelly Gen2 API: EM1Data", "url": "https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/EM1Data", "note": "Modbus registers table" }, { "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).", "The two channels are the EM1 components 0 and 1; each next component's block starts 20 registers after the previous one (EM1 at 32000, EM1Data at 32300)." ], "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", "group": "Output", "area": "coil", "address": 100, "type": "bool", "access": "RW", "description": "1 = on, 0 = off"}, {"name": "Output state", "group": "Output", "area": "input", "address": 3000, "type": "bool", "bit": 0}, {"name": "Last update 1", "group": "Channel 1", "area": "input", "address": 2000, "type": "uint32", "unit": "s", "description": "Unix timestamp"}, {"name": "Meter error 1", "group": "Channel 1", "area": "input", "address": 2002, "type": "bool", "bit": 0}, {"name": "Voltage 1", "group": "Channel 1", "area": "input", "address": 2003, "type": "float32", "unit": "V"}, {"name": "Current 1", "group": "Channel 1", "area": "input", "address": 2005, "type": "float32", "unit": "A"}, {"name": "Active power 1", "group": "Channel 1", "area": "input", "address": 2007, "type": "float32", "unit": "W"}, {"name": "Apparent power 1", "group": "Channel 1", "area": "input", "address": 2009, "type": "float32", "unit": "VA"}, {"name": "Power factor 1", "group": "Channel 1", "area": "input", "address": 2011, "type": "float32"}, {"name": "Overpower error 1", "group": "Channel 1", "area": "input", "address": 2013, "type": "bool", "bit": 0}, {"name": "Overvoltage error 1", "group": "Channel 1", "area": "input", "address": 2014, "type": "bool", "bit": 0}, {"name": "Overcurrent error 1", "group": "Channel 1", "area": "input", "address": 2015, "type": "bool", "bit": 0}, {"name": "Frequency 1", "group": "Channel 1", "area": "input", "address": 2016, "type": "float32", "unit": "Hz"}, {"name": "Last update 2", "group": "Channel 2", "area": "input", "address": 2020, "type": "uint32", "unit": "s", "description": "Unix timestamp"}, {"name": "Meter error 2", "group": "Channel 2", "area": "input", "address": 2022, "type": "bool", "bit": 0}, {"name": "Voltage 2", "group": "Channel 2", "area": "input", "address": 2023, "type": "float32", "unit": "V"}, {"name": "Current 2", "group": "Channel 2", "area": "input", "address": 2025, "type": "float32", "unit": "A"}, {"name": "Active power 2", "group": "Channel 2", "area": "input", "address": 2027, "type": "float32", "unit": "W"}, {"name": "Apparent power 2", "group": "Channel 2", "area": "input", "address": 2029, "type": "float32", "unit": "VA"}, {"name": "Power factor 2", "group": "Channel 2", "area": "input", "address": 2031, "type": "float32"}, {"name": "Overpower error 2", "group": "Channel 2", "area": "input", "address": 2033, "type": "bool", "bit": 0}, {"name": "Overvoltage error 2", "group": "Channel 2", "area": "input", "address": 2034, "type": "bool", "bit": 0}, {"name": "Overcurrent error 2", "group": "Channel 2", "area": "input", "address": 2035, "type": "bool", "bit": 0}, {"name": "Frequency 2", "group": "Channel 2", "area": "input", "address": 2036, "type": "float32", "unit": "Hz"}, {"name": "Energy last update 1", "group": "Energy 1", "area": "input", "address": 2300, "type": "uint32", "unit": "s", "description": "Unix timestamp"}, {"name": "Total active energy 1", "group": "Energy 1", "area": "input", "address": 2302, "type": "float32", "unit": "Wh"}, {"name": "Total returned active energy 1", "group": "Energy 1", "area": "input", "address": 2304, "type": "float32", "unit": "Wh"}, {"name": "Lagging reactive energy 1", "group": "Energy 1", "area": "input", "address": 2306, "type": "float32", "unit": "varh"}, {"name": "Leading reactive energy 1", "group": "Energy 1", "area": "input", "address": 2308, "type": "float32", "unit": "varh"}, {"name": "Total active energy (perpetual) 1", "group": "Energy 1", "area": "input", "address": 2310, "type": "float32", "unit": "Wh", "description": "Never reset"}, {"name": "Total returned active energy (perpetual) 1", "group": "Energy 1", "area": "input", "address": 2312, "type": "float32", "unit": "Wh", "description": "Never reset"}, {"name": "Energy last update 2", "group": "Energy 2", "area": "input", "address": 2320, "type": "uint32", "unit": "s", "description": "Unix timestamp"}, {"name": "Total active energy 2", "group": "Energy 2", "area": "input", "address": 2322, "type": "float32", "unit": "Wh"}, {"name": "Total returned active energy 2", "group": "Energy 2", "area": "input", "address": 2324, "type": "float32", "unit": "Wh"}, {"name": "Lagging reactive energy 2", "group": "Energy 2", "area": "input", "address": 2326, "type": "float32", "unit": "varh"}, {"name": "Leading reactive energy 2", "group": "Energy 2", "area": "input", "address": 2328, "type": "float32", "unit": "varh"}, {"name": "Total active energy (perpetual) 2", "group": "Energy 2", "area": "input", "address": 2330, "type": "float32", "unit": "Wh", "description": "Never reset"}, {"name": "Total returned active energy (perpetual) 2", "group": "Energy 2", "area": "input", "address": 2332, "type": "float32", "unit": "Wh", "description": "Never reset"} ] }