{ "$schema": "https://raw.githubusercontent.com/nobrega8/mbmap-library/main/schema/mbmap-2.schema.json", "mbmap": 2, "vendor": "Shelly", "model": "Pro 3EM", "models": ["Pro 3EM"], "vendor_website": "shelly.com", "description": "Three-phase energy meter with Modbus TCP", "revision": 2, "revised": "2026-10-18", "source": "Shelly Gen2 API documentation: Modbus, EM and EMData components", "sources": [ { "title": "Shelly Gen2 API: Modbus", "url": "https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Modbus" }, { "title": "Shelly Gen2 API: EM", "url": "https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/EM", "note": "Modbus registers table" }, { "title": "Shelly Gen2 API: EMData", "url": "https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/EMData", "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: 31000 is input register 1000.", "32-bit values are sent low word first, as in the documentation's modbus_cli examples (-B mixed).", "A second EM or EMData component, when present, has its registers at +80 (EM) and +70 (EMData)." ], "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": "EM last update", "group": "Status", "area": "input", "address": 1000, "type": "uint32", "unit": "s", "description": "Unix timestamp"}, {"name": "Phase A meter error", "group": "Status", "area": "input", "address": 1002, "type": "bool", "bit": 0}, {"name": "Phase B meter error", "group": "Status", "area": "input", "address": 1003, "type": "bool", "bit": 0}, {"name": "Phase C meter error", "group": "Status", "area": "input", "address": 1004, "type": "bool", "bit": 0}, {"name": "Neutral meter error", "group": "Status", "area": "input", "address": 1005, "type": "bool", "bit": 0}, {"name": "Phase sequence error", "group": "Status", "area": "input", "address": 1006, "type": "bool", "bit": 0}, {"name": "Neutral current", "group": "Totals", "area": "input", "address": 1007, "type": "float32", "unit": "A"}, {"name": "Neutral current mismatch", "group": "Status", "area": "input", "address": 1009, "type": "bool", "bit": 0}, {"name": "Neutral overcurrent", "group": "Status", "area": "input", "address": 1010, "type": "bool", "bit": 0}, {"name": "Total current", "group": "Totals", "area": "input", "address": 1011, "type": "float32", "unit": "A", "description": "Sum of the phases"}, {"name": "Total active power", "group": "Totals", "area": "input", "address": 1013, "type": "float32", "unit": "W", "description": "Sum of the phases"}, {"name": "Total apparent power", "group": "Totals", "area": "input", "address": 1015, "type": "float32", "unit": "VA", "description": "Sum of the phases"}, {"name": "Voltage A", "group": "Phase A", "area": "input", "address": 1020, "type": "float32", "unit": "V"}, {"name": "Current A", "group": "Phase A", "area": "input", "address": 1022, "type": "float32", "unit": "A"}, {"name": "Active power A", "group": "Phase A", "area": "input", "address": 1024, "type": "float32", "unit": "W"}, {"name": "Apparent power A", "group": "Phase A", "area": "input", "address": 1026, "type": "float32", "unit": "VA"}, {"name": "Power factor A", "group": "Phase A", "area": "input", "address": 1028, "type": "float32"}, {"name": "Overpower A", "group": "Status", "area": "input", "address": 1030, "type": "bool", "bit": 0}, {"name": "Overvoltage A", "group": "Status", "area": "input", "address": 1031, "type": "bool", "bit": 0}, {"name": "Overcurrent A", "group": "Status", "area": "input", "address": 1032, "type": "bool", "bit": 0}, {"name": "Frequency A", "group": "Phase A", "area": "input", "address": 1033, "type": "float32", "unit": "Hz"}, {"name": "Voltage B", "group": "Phase B", "area": "input", "address": 1040, "type": "float32", "unit": "V"}, {"name": "Current B", "group": "Phase B", "area": "input", "address": 1042, "type": "float32", "unit": "A"}, {"name": "Active power B", "group": "Phase B", "area": "input", "address": 1044, "type": "float32", "unit": "W"}, {"name": "Apparent power B", "group": "Phase B", "area": "input", "address": 1046, "type": "float32", "unit": "VA"}, {"name": "Power factor B", "group": "Phase B", "area": "input", "address": 1048, "type": "float32"}, {"name": "Overpower B", "group": "Status", "area": "input", "address": 1050, "type": "bool", "bit": 0}, {"name": "Overvoltage B", "group": "Status", "area": "input", "address": 1051, "type": "bool", "bit": 0}, {"name": "Overcurrent B", "group": "Status", "area": "input", "address": 1052, "type": "bool", "bit": 0}, {"name": "Frequency B", "group": "Phase B", "area": "input", "address": 1053, "type": "float32", "unit": "Hz"}, {"name": "Voltage C", "group": "Phase C", "area": "input", "address": 1060, "type": "float32", "unit": "V"}, {"name": "Current C", "group": "Phase C", "area": "input", "address": 1062, "type": "float32", "unit": "A"}, {"name": "Active power C", "group": "Phase C", "area": "input", "address": 1064, "type": "float32", "unit": "W"}, {"name": "Apparent power C", "group": "Phase C", "area": "input", "address": 1066, "type": "float32", "unit": "VA"}, {"name": "Power factor C", "group": "Phase C", "area": "input", "address": 1068, "type": "float32"}, {"name": "Overpower C", "group": "Status", "area": "input", "address": 1070, "type": "bool", "bit": 0}, {"name": "Overvoltage C", "group": "Status", "area": "input", "address": 1071, "type": "bool", "bit": 0}, {"name": "Overcurrent C", "group": "Status", "area": "input", "address": 1072, "type": "bool", "bit": 0}, {"name": "Frequency C", "group": "Phase C", "area": "input", "address": 1073, "type": "float32", "unit": "Hz"}, {"name": "Energy last update", "group": "Energy", "area": "input", "address": 1160, "type": "uint32", "unit": "s", "description": "Unix timestamp"}, {"name": "Total active energy", "group": "Energy", "area": "input", "address": 1162, "type": "float32", "unit": "Wh", "description": "All phases, never reset"}, {"name": "Total returned active energy", "group": "Energy", "area": "input", "address": 1164, "type": "float32", "unit": "Wh", "description": "All phases, never reset"}, {"name": "Active energy A", "group": "Energy", "area": "input", "address": 1170, "type": "float32", "unit": "Wh"}, {"name": "Fundamental active energy A", "group": "Energy", "area": "input", "address": 1172, "type": "float32", "unit": "Wh"}, {"name": "Returned active energy A", "group": "Energy", "area": "input", "address": 1174, "type": "float32", "unit": "Wh"}, {"name": "Fundamental returned active energy A", "group": "Energy", "area": "input", "address": 1176, "type": "float32", "unit": "Wh"}, {"name": "Lagging reactive energy A", "group": "Energy", "area": "input", "address": 1178, "type": "float32", "unit": "varh"}, {"name": "Leading reactive energy A", "group": "Energy", "area": "input", "address": 1180, "type": "float32", "unit": "varh"}, {"name": "Active energy A (perpetual)", "group": "Energy", "area": "input", "address": 1182, "type": "float32", "unit": "Wh", "description": "Never reset"}, {"name": "Returned active energy A (perpetual)", "group": "Energy", "area": "input", "address": 1184, "type": "float32", "unit": "Wh", "description": "Never reset"}, {"name": "Active energy B", "group": "Energy", "area": "input", "address": 1190, "type": "float32", "unit": "Wh"}, {"name": "Fundamental active energy B", "group": "Energy", "area": "input", "address": 1192, "type": "float32", "unit": "Wh"}, {"name": "Returned active energy B", "group": "Energy", "area": "input", "address": 1194, "type": "float32", "unit": "Wh"}, {"name": "Fundamental returned active energy B", "group": "Energy", "area": "input", "address": 1196, "type": "float32", "unit": "Wh"}, {"name": "Lagging reactive energy B", "group": "Energy", "area": "input", "address": 1198, "type": "float32", "unit": "varh"}, {"name": "Leading reactive energy B", "group": "Energy", "area": "input", "address": 1200, "type": "float32", "unit": "varh"}, {"name": "Active energy B (perpetual)", "group": "Energy", "area": "input", "address": 1202, "type": "float32", "unit": "Wh", "description": "Never reset"}, {"name": "Returned active energy B (perpetual)", "group": "Energy", "area": "input", "address": 1204, "type": "float32", "unit": "Wh", "description": "Never reset"}, {"name": "Active energy C", "group": "Energy", "area": "input", "address": 1210, "type": "float32", "unit": "Wh"}, {"name": "Fundamental active energy C", "group": "Energy", "area": "input", "address": 1212, "type": "float32", "unit": "Wh"}, {"name": "Returned active energy C", "group": "Energy", "area": "input", "address": 1214, "type": "float32", "unit": "Wh"}, {"name": "Fundamental returned active energy C", "group": "Energy", "area": "input", "address": 1216, "type": "float32", "unit": "Wh"}, {"name": "Lagging reactive energy C", "group": "Energy", "area": "input", "address": 1218, "type": "float32", "unit": "varh"}, {"name": "Leading reactive energy C", "group": "Energy", "area": "input", "address": 1220, "type": "float32", "unit": "varh"}, {"name": "Active energy C (perpetual)", "group": "Energy", "area": "input", "address": 1222, "type": "float32", "unit": "Wh", "description": "Never reset"}, {"name": "Returned active energy C (perpetual)", "group": "Energy", "area": "input", "address": 1224, "type": "float32", "unit": "Wh", "description": "Never reset"} ] }