I have an ABB B21 Energy Meter on my mains supply. Can the Venus be configured to use this as the Grid meter and how?
Thanks
This site is now in read-only archive mode. Please move all discussion, and create a new account at the new Victron Community site.
I have an ABB B21 Energy Meter on my mains supply. Can the Venus be configured to use this as the Grid meter and how?
Thanks
ABB meters are supported as of 2.92:
2CMA100155R1000 | B21 312-100 | 65A Direct Connected Meter, 2 output, 2 input, RS-485 |
2CMA100169R1000 | B23 312-100 | 65A Direct Connected Meter, 2 output, 2 input, RS-485 |
2CMA100183R1000 | B24 352-100 | CT Connected Meter, 2 output, 2 input, RS-485 |
No, only the Carlo Gavazzi meters are supported in Venus.
Hi
The ABB B21 meter can also do RS 485 Modbus with all the registers as the ET 112.
I have a ET 112 installed on my PV inverter and it is working.
I can not find any information about the modbus registers on the ET 112 meter to see what the difference is between the two.
Or what is the default settings for the ET 112 to work with the Venus?
Can the Venus Firmware be updated to support the ABB meter?
Thanks
In general I don't think they will because e.g. the Eastron registers are not the same as the Carlo Gavazzi ones.
However some compatibiity has been achieved by @thomasw-1, see this thread https://community.victronenergy.com/idea/114716/power-meter-lib-for-modbus-rtu-based-meters-from-a.html.
Hello,
the ABB energy meter A4x uses the same Modbus Register as the supported B2x energy meter
the updated file abb.py from Cerbo GX firmware v3.30 which now also supports ABB energy meters of the A series. Is it possible to add this in the next firmware.
Tested on ABB A44 552-100, works perfectly.
File: /opt/victronenergy/dbus-modbus-client/abb.py
import struct import device import probe from register import Reg, Reg_s32b, Reg_u16, Reg_u32b, Reg_u64b, Reg_text class Reg_serial(Reg, str): """ ABB meters use a 32-bit integer as serial number. Make it a string because that is what dbus (and modbus-tcp) expects. """ def __init__(self, base, name): super().__init__(base, 2, name) def decode(self, values): v = struct.unpack('>i', struct.pack('>2H', *values)) return self.update(str(v[0])) class ABB_Meter(device.CustomName, device.EnergyMeter): productid = 0xb033 min_timeout = 0.5 def device_init(self): self.info_regs = [ Reg_serial(0x8900, '/Serial'), Reg_text(0x8908, 8, '/FirmwareVersion'), ] self.data_regs = [ Reg_s32b(0x5B14, '/Ac/Power', 100, '%.1f W'), Reg_u16( 0x5B2C, '/Ac/Frequency', 100, '%.1f Hz'), Reg_u64b(0x5000, '/Ac/Energy/Forward', 100, '%.1f kWh'), Reg_u64b(0x5004, '/Ac/Energy/Reverse', 100, '%.1f kWh', invalid=0xffffffffffffffff), # We always have L1 voltage and current Reg_u32b(0x5B00, '/Ac/L1/Voltage', 10, '%.1f V'), Reg_u32b(0x5B0C, '/Ac/L1/Current', 100, '%.1f A'), ] def get_ident(self): return 'abb_{}'.format(self.info['/Serial']) class ABB_Meter_1P(ABB_Meter): productname = 'ABB 1P Energy Meter' nr_phases = 1 def device_init(self): super().device_init() # Copies of overall values, because phase values show not-supported. self.data_regs += [ Reg_s32b(0x5B14, '/Ac/L1/Power', 100, '%.1f W'), Reg_u64b(0x5000, '/Ac/L1/Energy/Forward', 100, '%.1f kWh'), Reg_u64b(0x5004, '/Ac/L1/Energy/Reverse', 100, '%.1f kWh', invalid=0xffffffffffffffff), ] class ABB_Meter_3P(ABB_Meter): productname = 'ABB 3P Energy Meter' nr_phases = 3 def device_init(self): super().device_init() self.data_regs += [ Reg_u32b(0x5B02, '/Ac/L2/Voltage', 10, '%.1f V'), Reg_u32b(0x5B04, '/Ac/L3/Voltage', 10, '%.1f V'), Reg_u32b(0x5B0E, '/Ac/L2/Current', 100, '%.1f A'), Reg_u32b(0x5B10, '/Ac/L3/Current', 100, '%.1f A'), Reg_s32b(0x5B16, '/Ac/L1/Power', 100, '%.1f W'), Reg_s32b(0x5B18, '/Ac/L2/Power', 100, '%.1f W'), Reg_s32b(0x5B1A, '/Ac/L3/Power', 100, '%.1f W'), Reg_u64b(0x5460, '/Ac/L1/Energy/Forward', 100, '%.1f kWh'), Reg_u64b(0x5464, '/Ac/L2/Energy/Forward', 100, '%.1f kWh'), Reg_u64b(0x5468, '/Ac/L3/Energy/Forward', 100, '%.1f kWh'), Reg_u64b(0x546C, '/Ac/L1/Energy/Reverse', 100, '%.1f kWh', invalid=0xffffffffffffffff), Reg_u64b(0x5470, '/Ac/L2/Energy/Reverse', 100, '%.1f kWh', invalid=0xffffffffffffffff), Reg_u64b(0x5474, '/Ac/L3/Energy/Reverse', 100, '%.1f kWh', invalid=0xffffffffffffffff), ] class ABB_Meter_1P_B21(ABB_Meter_1P): productname = 'ABB B21 Energy Meter' class ABB_Meter_1P_A41(ABB_Meter_1P): productname = 'ABB A41 Energy Meter' class ABB_Meter_1P_A42(ABB_Meter_1P): productname = 'ABB A42 Energy Meter' class ABB_Meter_3P_B23(ABB_Meter_3P): productname = 'ABB B23 Energy Meter' class ABB_Meter_3P_B24(ABB_Meter_3P): productname = 'ABB B24 Energy Meter' class ABB_Meter_3P_A43(ABB_Meter_3P): productname = 'ABB A43 Energy Meter' class ABB_Meter_3P_A44(ABB_Meter_3P): productname = 'ABB A44 Energy Meter' models = { 0x42323120: { # B21 (space) 'model': 'B21', 'handler': ABB_Meter_1P_B21, }, 0x41343120: { # A41 (space) 'model': 'A41', 'handler': ABB_Meter_1P_A41, }, 0x41343220: { # A42 (space) 'model': 'A42', 'handler': ABB_Meter_1P_A42, }, 0x42323320: { # B23 (space) 'model': 'B23', 'handler': ABB_Meter_3P_B23, }, 0x42323420: { # B24 (space) 'model': 'B24', 'handler': ABB_Meter_3P_B24, }, 0x41343320: { # A43 (space) 'model': 'A43', 'handler': ABB_Meter_3P_A43, }, 0x41343420: { # A44 (space) 'model': 'A44', 'handler': ABB_Meter_3P_A44, } } probe.add_handler(probe.ModelRegister(Reg_u32b(0x8960), models, methods=['rtu', 'tcp'], units=[1, 2]))
ABB A44: Three-phase meter, uses Current Transformers, ABB A44 552-100, Product ID 2CMA170545R1000, Platin, Modbus RS485, 0A...10kA, indirect with 5A current transformer
9 People are following this question.