Shelly Pro EM-50 Modbus register map
Two-channel energy meter with a relay output and Modbus TCP
- Official
- 41 registers
- Modbus TCP
- Revision 1 · 2026-10-18
- Identity: model
Official: Written from the manufacturer's documentation, but not tested on a device yet. Check the map against the manufacturer's documentation before you write to a live device. Tested it? Report a test.
Communication
- Protocol
- Modbus TCP
- Unit ID
- 1default
- TCP port
- 502
- Byte / word order
- CDAB · bytes big-endian, words low first (word swap)
- Addresses
- 0-based
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 40 input registers, 1 coil
- Groups
- 6
- Revision
- 1 · 2026-10-18
- Added
- ()
- File
- maps/shelly/pro-em-50.mbmap.json · 7 KB · history
- SHA-256
- 1e159b9678757809e626ee9952c3ad9c968a22fa622f0f1d8f4d539ec961b234
- Manufacturer
- shelly.com
Device identity
What a tool can read to check that this map fits the connected device (SPEC.md section 4.7). Registers with a role are read like any other register.
| Role | Register | Address | Type | Values |
|---|---|---|---|---|
| Model | Model | input 6 | string[10] |
Sources and notes
- Shelly Gen2 API: Modbus
- Shelly Gen2 API: EM1 Modbus registers table
- Shelly Gen2 API: EM1Data Modbus registers table
- Shelly Gen2 API: Switch Modbus registers table
Source: Shelly Gen2 API documentation: Modbus and component pages
- 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).
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| IR | 0 | string[6] | R | ||||
| IR | 6 | string[10] | R | ||||
| IR | 16 | string[32] | R | ||||
| CO | 100 | bool | RW | 1 = on, 0 = off | |||
| IR | 3000 | bool bit 0 | R | ||||
| IR | 2000 | uint32 CDAB | R | s | Unix timestamp | ||
| IR | 2002 | bool bit 0 | R | ||||
| IR | 2003 | float32 CDAB | R | V | |||
| IR | 2005 | float32 CDAB | R | A | |||
| IR | 2007 | float32 CDAB | R | W | |||
| IR | 2009 | float32 CDAB | R | VA | |||
| IR | 2011 | float32 CDAB | R | ||||
| IR | 2013 | bool bit 0 | R | ||||
| IR | 2014 | bool bit 0 | R | ||||
| IR | 2015 | bool bit 0 | R | ||||
| IR | 2016 | float32 CDAB | R | Hz | |||
| IR | 2020 | uint32 CDAB | R | s | Unix timestamp | ||
| IR | 2022 | bool bit 0 | R | ||||
| IR | 2023 | float32 CDAB | R | V | |||
| IR | 2025 | float32 CDAB | R | A | |||
| IR | 2027 | float32 CDAB | R | W | |||
| IR | 2029 | float32 CDAB | R | VA | |||
| IR | 2031 | float32 CDAB | R | ||||
| IR | 2033 | bool bit 0 | R | ||||
| IR | 2034 | bool bit 0 | R | ||||
| IR | 2035 | bool bit 0 | R | ||||
| IR | 2036 | float32 CDAB | R | Hz | |||
| IR | 2300 | uint32 CDAB | R | s | Unix timestamp | ||
| IR | 2302 | float32 CDAB | R | Wh | |||
| IR | 2304 | float32 CDAB | R | Wh | |||
| IR | 2306 | float32 CDAB | R | varh | |||
| IR | 2308 | float32 CDAB | R | varh | |||
| IR | 2310 | float32 CDAB | R | Wh | Never reset | ||
| IR | 2312 | float32 CDAB | R | Wh | Never reset | ||
| IR | 2320 | uint32 CDAB | R | s | Unix timestamp | ||
| IR | 2322 | float32 CDAB | R | Wh | |||
| IR | 2324 | float32 CDAB | R | Wh | |||
| IR | 2326 | float32 CDAB | R | varh | |||
| IR | 2328 | float32 CDAB | R | varh | |||
| IR | 2330 | float32 CDAB | R | Wh | Never reset | ||
| IR | 2332 | float32 CDAB | R | Wh | Never reset |
No registers match
Try part of the name, an address (decimal or 0x hex) or clear the filters.
Help improve this map
- I tested it on a deviceReport whether it worked, even if you did not write the map.
- Suggest a correctionEdit the file on GitHub; it opens a pull request.
- Report a problemA wrong address, type, scale or byte order.
- Read the formatWhat each key of the file means (SPEC.md).