Requirements

Currently only Abb B2x and Schneider iEM3xxx devices are supported. Manuals for these devices were analyzed to determine the interfacing strategy.

The final solution involves using an on-premise Raspberry PI Model 4B to read measurement data from devices or gateways called a messenger. For now, a single messenger is planned to be used for each location, but this can be expanded to multiple devices for a location if needed for redundancy.

The messenger reads data from the devices using Modbus TCP/IP and sends the data to the server via a simple REST API. The server is a cloud-based server that is hosted on Azure.

The Modbus registers that are read from each device type were determined from their manuals as well as registers needed to configure current device tariff.

For Abb B2x devices, the following registers are read:

AddressKindName
0x5B00u32 (Multiplied by 0.1)Voltage L1 (Volts)
0x5B02u32 (Multiplied by 0.1)Voltage L2 (Volts)
0x5B04u32 (Multiplied by 0.1)Voltage L3 (Volts)
0x5B0Cu32 (Multiplied by 0.01)Current L1 (Amps)
0x5B0Eu32 (Multiplied by 0.01)Current L2 (Amps)
0x5B10u32 (Multiplied by 0.01)Current L3 (Amps)
0x5B16s32 (Multiplied by 0.01)Active Power L1 (Watts)
0x5B18s32 (Multiplied by 0.01)Active Power L2 (Watts)
0x5B1As32 (Multiplied by 0.01)Active Power L3 (Watts)
0x5B1Es32 (Multiplied by 0.01)Reactive Power L1 (VAr)
0x5B20s32 (Multiplied by 0.01)Reactive Power L2 (VAr)
0x5B22s32 (Multiplied by 0.01)Reactive Power L3 (VAr)
0x5460u64 (Multiplied by 10)Active Power Import L1 (Wh)
0x5464u64 (Multiplied by 10)Active Power Import L2 (Wh)
0x5468u64 (Multiplied by 10)Active Power Import L3 (Wh)
0x546Cu64 (Multiplied by 10)Active Power Export L1 (Wh)
0x5470u64 (Multiplied by 10)Active Power Export L2 (Wh)
0x5474u64 (Multiplied by 10)Active Power Export L3 (Wh)
0x5484u64 (Multiplied by 10)Reactive Power Import L1 (VARh)
0x5488u64 (Multiplied by 10)Reactive Power Import L2 (VARh)
0x548Cu64 (Multiplied by 10)Reactive Power Import L3 (VARh)
0x5490u64 (Multiplied by 10)Reactive Power Export L1 (VARh)
0x5494u64 (Multiplied by 10)Reactive Power Export L2 (VARh)
0x5498u64 (Multiplied by 10)Reactive Power Export L3 (VARh)
0x5000u64 (Multiplied by 10)Active Energy Import Total (Wh)
0x5004u64 (Multiplied by 10)Active Energy Export Total (Wh)
0x500Cu64 (Multiplied by 10)Reactive Energy Import Total (VARh)
0x5010u64 (Multiplied by 10)Reactive Energy Export Total (VARh)
0x5170u64 (Multiplied by 10)Active Energy Import Total T1 (Wh)
0x5174u64 (Multiplied by 10)Active Energy Import Total T2 (Wh)

For Schneider iEM3xxx devices, the following registers are used:

AddressKindName
0x0BD3f32 (Multiplied by 1)Voltage L1 (Volts)
0x0BD5f32 (Multiplied by 1)Voltage L2 (Volts)
0x0BD7f32 (Multiplied by 1)Voltage L3 (Volts)
0x0BB7f32 (Multiplied by 1)Current L1 (Amps)
0x0BB9f32 (Multiplied by 1)Current L2 (Amps)
0x0BBBf32 (Multiplied by 1)Current L3 (Amps)
0x0BEDf32 (Multiplied by 1000)Active Power L1 (Watts)
0x0BEFf32 (Multiplied by 1000)Active Power L2 (Watts)
0x0BF1f32 (Multiplied by 1000)Active Power L3 (Watts)
0x0BFBf32 (Multiplied by 1000)Reactive Power Total (VAR)
0x0C03f32 (Multiplied by 1000)Apparent Power Total (VA)
0x0DBDu64 (Multiplied by 1)Active Energy Import L1 (Wh)
0x0DC1u64 (Multiplied by 1)Active Energy Import L2 (Wh)
0x0DC5u64 (Multiplied by 1)Active Energy Import L3 (Wh)
0x0C83u64 (Multiplied by 1)Active Energy Import Total (Wh)
0x0C87u64 (Multiplied by 1)Active Energy Export Total (Wh)
0x0C93u64 (Multiplied by 1)Reactive Energy Import Total (VARh)
0x0C97u64 (Multiplied by 1)Reactive Energy Export Total (VARh)
0x1063u64 (Multiplied by 1)Active Energy Import Total T1 (Wh)
0x1067u64 (Multiplied by 1)Active Energy Import Total T2 (Wh)

Types used in tables:

  • u32 - unsigned 32-bit integer
  • s32 - signed 32-bit integer
  • u64 - unsigned 64-bit integer
  • f32 - 32-bit floating point number

Active and reactive energy registers are used to calculate billing data. Active power peaks are calculated via active energy. The other registers are measured for monitoring and diagnostic purposes.