Das geht mit dem modbus writer von Sven ohne Probleme. Darum habe ich da nicht mehr weiter gemacht. Die alfen ist beim lesen aber little und beim schreiben bigendian. Das musst du beachten.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Last- / Lademanagement Wallbox mit PV Überschuss
Einklappen
X
-
Habe keine Modbus Vorkentnisse, entsprechend mühsam ernährt sich das Eichhörnchen.
Vielleicht kann jemand bisschen unterstützen.
Anbei die Debug Übersicht und meine 2 Logikblätter fürs Lesen und Schreiben.
Ich bin mir schon bei den Kommunikationsobjekten, grundlegend nicht sicher...
Hab zum teste einfach mal die Temperatur und die Stromstärke der Phase 1 auslesen wollen.
Wenn das geht müsste der Rest ja nach dem selben Schema folgen, aber es geht nicht
Beim Lesen wollte ich einfach händisch mal per QC die Stromstärke erhöhen. Habe dazu einen
Taster konfiguriert, der dann den fixen Wert in der Logik setzen soll. Fraglich ist hier ob ein Taster
dafür geeignet ist, der toggelt ja. Oder schreibt ihr den Wert, 6, 8, 10, etc. direkt? Wenn ja, wie?Zuletzt geändert von Marcus81; 04.11.2022, 13:44.
Kommentar
-
Da das Lesen bei dir noch nicht klappt, hier ein Beispiel mit dem Baustein von Sven zum lesen des aktuell eingestellten Ladestroms:
Alfen lesen.jpgDieser Beitrag enthält keine Spuren von Sarkasmus... ich bin einfach so?!
Kommentar
-
Zitat von Marcus81 Beitrag anzeigenDanke, wollte mkich gerade wieder dran machen, passt super. Werde berichten!Dieser Beitrag enthält keine Spuren von Sarkasmus... ich bin einfach so?!
Kommentar
-
Fehlermeldungen kommen keine mehr! Werde jetzt über die kalte Jahreszeit weiter basteln und testen.
Vielen Dank und Danke für die tollen Bausteine! SvenB Wunder dich nicht wenn am Montag bei dir
Bosch Professional 1x Expert Carbide Multi Wheel Trennscheiben (für Hartholz, Ø 76 mm, Zubehör Mini-Winkelschleifer)
von deiner Wunschliste ankommt
- Likes 1
Kommentar
-
Zitat von BadSmiley Beitrag anzeigen
Du brauchst nicht berichten, du brauchst einfach was von Svens Whisliste auf dem 1. Beitrag an Sven schicken. Das reicht uns vollkommen als Antwort.
Kommentar
-
Zitat von SvenB Beitrag anzeigen
0.8.1 ist nun auch im Download und dort ist "NoKeepAlive" Standard, Discrete Register gehen sowie Coil-Register hatten einen Bug und der ist weg. Nur falls benötigt.
Kommentar
-
Zitat von Raphael Huckert Beitrag anzeigenDu nutzt am Besten das Register 1210 dafür. Eine Unterschiedliche Ladeleistung pro Phase ist nicht möglich, bzw. das Fahrzeug kann damit nichts anfangen
[...]
Code:from pymodbus.client.sync import ModbusTcpClient [/COLOR] from pymodbus.payload import BinaryPayloadDecoder import pymodbus client = ModbusTcpClient('alfen-sued', port=502, timeout=10) # Product identification registers rr = client.read_holding_registers(100,count=79,unit=200) print(type(rr)) decoder = pymodbus.payload.BinaryPayloadDecoder.fromRegisters(rr.registers, byteorder=pymodbus.constants.Endian.Big, wordorder=pymodbus.constants.Endian.Big) # Usecase-1 decoded = { 'name': decoder.decode_string(34).decode(), 'manufacturer': decoder.decode_string(10).decode(), 'table_version': decoder.decode_16bit_uint(), 'firmware_version': decoder.decode_string(34).decode(), 'platform_type': decoder.decode_string(34).decode(), 'serial_number': decoder.decode_string(22).decode(), 'date_year': decoder.decode_16bit_int(), 'date_month': decoder.decode_16bit_int(), 'date_day': decoder.decode_16bit_int(), 'date_hour': decoder.decode_16bit_int(), 'date_min': decoder.decode_16bit_int(), 'date_sec': decoder.decode_16bit_int(), 'date_uptime': decoder.decode_64bit_uint(), 'tz': decoder.decode_16bit_int(), } print(decoded) print(decoded['name']) print(type(decoded)) # Energy measurements print("Energy measurements:") rr = client.read_holding_registers(300,count=8,unit=1) print(type(rr)) print(rr) print(rr.getRegister(0)) decoder = pymodbus.payload.BinaryPayloadDecoder.fromRegisters(rr.registers, byteorder=pymodbus.constants.Endian.Big, wordorder=pymodbus.constants.Endian.Big) energy_m = { 'meter_state': decoder.decode_16bit_uint(), 'meter_last_value_timestamp': decoder.decode_64bit_uint(), 'meter_type': decoder.decode_16bit_uint(), 'voltage_phase_V_L1N': decoder.decode_32bit_float(), } print(energy_m) # Read status and transactions print("Status and Transactions:") rr = client.read_holding_registers(1200,count=16,unit=1) print(type(rr)) print(rr) print(rr.getRegister(0)) decoder = pymodbus.payload.BinaryPayloadDecoder.fromRegisters(rr.registers, byteorder=pymodbus.constants.Endian.Big, wordorder=pymodbus.constants.Endian.Big) status_and_transaction = { 'availability': decoder.decode_16bit_uint(), 'mode3_state': decoder.decode_string(10).decode(), 'actual_applied_max_current': decoder.decode_32bit_float(), 'modbus_slave_max_current_valid_time': decoder.decode_32bit_uint(), 'modbus_slave_max_current': decoder.decode_32bit_float(), 'active_load_balancing_safe_current': decoder.decode_32bit_float(), 'modbus_receive_setpoint_accounted_for': decoder.decode_16bit_uint(), 'charge_using_1_or_3_phases': decoder.decode_16bit_uint(), } print(status_and_transaction) # Limit current to 5A and 1 phase builder = pymodbus.payload.BinaryPayloadBuilder(byteorder=pymodbus.constants.Endian.Big) builder.add_32bit_float(5.0) max_current=builder.to_registers() phases=1 print(max_current) rq = client.write_registers(1210,max_current,unit=0x01) rq = client.write_register(1215,phases,unit=0x01) # Read status and transactions print("Status and Transactions:") rr = client.read_holding_registers(1200,count=16,unit=1) print(type(rr)) print(rr) print(rr.getRegister(0)) decoder = pymodbus.payload.BinaryPayloadDecoder.fromRegisters(rr.registers, byteorder=pymodbus.constants.Endian.Big, wordorder=pymodbus.constants.Endian.Big) status_and_transaction = { 'availability': decoder.decode_16bit_uint(), 'mode3_state': decoder.decode_string(10).decode(), 'actual_applied_max_current': decoder.decode_32bit_float(), 'modbus_slave_max_current_valid_time': decoder.decode_32bit_uint(), 'modbus_slave_max_current': decoder.decode_32bit_float(), 'active_load_balancing_safe_current': decoder.decode_32bit_float(), 'modbus_receive_setpoint_accounted_for': decoder.decode_16bit_uint(), 'charge_using_1_or_3_phases': decoder.decode_16bit_uint(), } print(status_and_transaction)
Code:<class 'pymodbus.register_read_message.ReadHoldingRegistersResponse'> [/COLOR] {'name': 'Sued\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'manufacturer': 'Alfen NV\x00\x00', 'table_version': 1, 'firmware_version': '6.1.0-4159\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00', 'platform_type': 'NG910\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'serial_number': 'ace0097525\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'date_year': 2022, 'date_month': 4, 'dat e_day': 4, 'date_hour': 1, 'date_min': 25, 'date_sec': 55, 'date_uptime': 17899462, 'tz': 60} Sued <class 'dict'> Energy measurements: <class 'pymodbus.register_read_message.ReadHoldingRegistersResponse'> ReadRegisterResponse (8) 3 {'meter_state': 3, 'meter_last_value_timestamp': 991, 'meter_type': 0, 'voltage_phase_V_L1N': 231.47000122070312} Status and Transactions: <class 'pymodbus.register_read_message.ReadHoldingRegistersResponse'> ReadRegisterResponse (16) 1 {'availability': 1, 'mode3_state': 'A\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'actual_applied_max_current': 16.0, 'modbus_slave_max_current_valid_time': 856, 'modbus_slave_max_current': 16.0, 'active_load_balancing_safe_current': 16.0, 'modbus_receive_setpoint_accounted_for': 1, 'charge_using_ 1_or_3_phases': 3} [16544, 0] Status and Transactions: <class 'pymodbus.register_read_message.ReadHoldingRegistersResponse'> ReadRegisterResponse (16) 1 {'availability': 1, 'mode3_state': 'A\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'actual_applied_max_current': 5.0, 'modbus_slave_max_current_valid_time': 899, 'modbus_slave_max_current': 5.0, 'active_load_balancing_safe_current': 16.0, 'modbus_receive_setpoint_accounted_for': 1, 'charge_using_1_ or_3_phases': 1}
Gruß
RainerZuletzt geändert von rdorsch; 20.03.2023, 23:05.
Kommentar
-
Hallo,
anscheinend hat die OpenWB ein Limit für die Umschaltung zw. 1 und 3-phasigem Laden (1x alle n Minuten) um die HW (Relais?) zu schonen. Würde hier nicht auch helfen, den Strom vor dem Umschalten auf Null zu fahren und dann umzuschalten? Oder machen das die WBen bereits automatisch? Mich würde insbesondere interessieren, ob jemand sagen kann, ob das die Alfen Eve bereits macht.
Danke und Gruß
Rainer
Kommentar
Kommentar