Hello,
i am a little stuck here.
i try to add power meter from finder the 7M.24 and 7M.38
made a new file finder.py under /opt/victronenergy/dbus-modbus-client
included it in the dbus-modbus-client.py file and compiled both files.
but the venus os cant find my meter.
i have attached the modbus register declaration as pdfModbus-7M24-7M38_v2_30062021.pdf
this is my finder.py file:
import struct
import device
import probe
from register import Reg, Reg_s16, Reg_s32b, Reg_u16, Reg_u32b, Reg_u64b, Reg_text
class Reg_serial(Reg, str):
def __init__(self, base, name):
Reg.__init__(self, base, 2, name)
def decode(self, values):
v = struct.unpack('>i', struct.pack('>2H', *values))
return self.update(str(v[0]))
class Finder_Meter(device.EnergyMeter):
productid = 0xb017
min_timeout = 0.5
def __init__(self, *args):
super(Finder_Meter, self).__init__(*args)
self.info_regs = [
Reg_serial(9, '/Serial'),
Reg_text(13, '/FirmwareVersion'),
]
def device_init(self):
self.data_regs = [
Reg_u32b(2491, '/Ac/Power', 100, '%.1f W'),
Reg_u32b(2498, '/Ac/Frequency', 100, '%.1f Hz'),
Reg_u32b(2760, '/Ac/Energy/Forward', 100, '%.1f kWh'),
Reg_u32b(2768, '/Ac/Energy/Reverse', 100, '%.1f kWh', invalid=0xffffffffffffffff),
# We always have L1 voltage and current
Reg_u32b(2500, '/Ac/L1/Voltage', 10, '%.1f V'),
Reg_u32b(2516, '/Ac/L1/Current', 100, '%.1f A'),
]
def get_ident(self):
return 'finder_{}'.format(self.info['/Serial'])
class Finder_Meter_1P(Finder_Meter):
productname = 'Finder 7M.24 Energy Meter'
def device_init(self):
super(Finder_Meter_1P, self).device_init()
# Copies of overall values, because phase values show not-supported.
self.data_regs += [
Reg_u32b(2530, '/Ac/L1/Power', 100, '%.1f W'),
Reg_u32b(2762, '/Ac/L1/Energy/Forward', 100, '%.1f kWh'),
Reg_u32b(2770, '/Ac/L1/Energy/Reverse', 100, '%.1f kWh'),
]
class Finder_Meter_3P(Finder_Meter):
productname = 'Finder 7M.38 Energy Meter'
def device_init(self):
super(Finder_Meter_3P, self).device_init()
self.data_regs += [
Reg_u32b(2502, '/Ac/L2/Voltage', 10, '%.1f V'),
Reg_u32b(2504, '/Ac/L3/Voltage', 10, '%.1f V'),
Reg_u32b(2518, '/Ac/L2/Current', 100, '%.1f A'),
Reg_u32b(2520, '/Ac/L3/Current', 100, '%.1f A'),
Reg_u32b(2530, '/Ac/L1/Power', 100, '%.1f W'),
Reg_u32b(2532, '/Ac/L2/Power', 100, '%.1f W'),
Reg_u32b(2534, '/Ac/L3/Power', 100, '%.1f W'),
Reg_u32b(2762, '/Ac/L1/Energy/Forward', 100, '%.1f kWh'),
Reg_u32b(2764, '/Ac/L2/Energy/Forward', 100, '%.1f kWh'),
Reg_u32b(2766, '/Ac/L3/Energy/Forward', 100, '%.1f kWh'),
Reg_u32b(2770, '/Ac/L1/Energy/Reverse', 100, '%.1f kWh'),
Reg_u32b(2772, '/Ac/L2/Energy/Reverse', 100, '%.1f kWh'),
Reg_u32b(2774, '/Ac/L3/Energy/Reverse', 100, '%.1f kWh'),
]
models = {
927804978: { # 7M.24 (0x374d2e32)
'model': '7M.24',
'handler': Finder_Meter_1P,
},
927804979: { # 7M.38 (0x374d2e33)
'model': '7M.38',
'handler': Finder_Meter_3P,
},
}
probe.add_handler(probe.ModelRegister(Reg_u32b(1), models,
methods=['rtu', 'tcp'],
units=[1, 11],
rates=[115200]
