Gute Frage, die ich der Community schon hier stellte.
Habe mit @HSC per PN darüber diskutiert, ihm die Screenshots gesandt und genau das stellte er auch fest.
Gute Frage, die ich der Community schon hier stellte.
Code: Alles auswählen
alt: frequenz = unsigned16(resp,7) / 100
neu: frequenz = unsigned16(resp,189) / 100
print (frequenz)
f = open('/var/www/html/openWB/ramdisk/evuhz', 'w')
f.write(str(frequenz))
f.close()
Kannst Du das bitte anpassen. Ich habe es HSC bereits gezeigt.
Na ja - aktuell bekommt der wichtigste Messpunkt (EVU) keine Werte. Das versuchen die Kollegen über die Registeraufschlüsselungen hinzubekommen (Auslesung über WR). Ich blicke hier aber zugegebenermaßen hier nicht mehr ganz durch.
Code: Alles auswählen
frequenz = unsigned16(resp,7) / 100
Code: Alles auswählen
frequenz = unsigned16(resp,189) / 100
Der 2.WR wird AC- seitig über einen 2. SDM (ID 002) am Modbus des 1. WR bzw. 1. SDM für EVU mit in den 1. WR eingelesen. Darüber sollten dann (später, da 2.SDM noch nicht installiert) auch die PV- Daten vom 2. WR direkt kommen.aiole hat geschrieben: ↑Mo Dez 06, 2021 9:02 pm .....
Jetzt kommt aber noch ein 2. WR bei Dir hinzu, wo ich nicht weiß, wie der die Daten abgeben soll. Am besten wäre, wenn er sie an WR1 übergibt.
Vor allem blicke ich noch nicht, worum ein extra Zähler (SDM630) verwendet werden soll. Messen denn beide WR die PV-Werte nicht intern selbst?
....mit dem Korrektur- Faktor ×100 sollte das passen. Das hatte ich schon mehrmals in dieser Art gesehen....Peete hat geschrieben: ↑Mo Dez 06, 2021 7:36 pm Ich habe die modules/speicher_solax/solax.py erweitert.
Nun zeigt openWB auch an, wieviel kWh dem Speicher zugeführt und entnommen wurden.
Vondas kam noch hinzu:Code: Alles auswählen
#!/usr/bin/python import sys # import os # import time # import getopt # import socket # import struct # import binascii from pymodbus.client.sync import ModbusTcpClient def unsigned16(result, addr): return result.registers[addr] def signed16(result, addr): val = result.registers[addr] if val > 32767: val -= 65535 return val ipaddress = str(sys.argv[1]) client = ModbusTcpClient(ipaddress, port=502) resp=client.read_input_registers(0, 114) # Batterie Power value1 = signed16(resp, 22) f = open('/var/www/html/openWB/ramdisk/speicherleistung', 'w') f.write(str(value1)) f.close() # Batterieladezustand value2 = unsigned16(resp, 28 ) f = open('/var/www/html/openWB/ramdisk/speichersoc', 'w') f.write(str(value2)) f.close()
Ist das so richtig mit den * 100. Die Werte passen.Code: Alles auswählen
# Batterie entladen value3 = unsigned16(resp, 32 ) * 100 f = open('/var/www/html/openWB/ramdisk/speicherekwh', 'w') f.write(str(value3)) f.close() # Batterie geladen value4 = unsigned16(resp, 35 ) * 100 f = open('/var/www/html/openWB/ramdisk/speicherikwh', 'w') f.write(str(value4)) f.close()
Vorher stand es so da:
Speicher: -233 W (0,00 kWh I) (0,00 kWh E) - Ladestand: 20 %
Jetzt:
Speicher: -235 W (0,10 kWh I) (5,90 kWh E) - Ladestand: 20 %
In der Ramdisk sind die Werte wie folgt:
speicherekwh = 5900
speicherikwh = 100
GuMo,openWB hat geschrieben: ↑Di Dez 07, 2021 5:53 am Lasst zunächst den zweiten WR bitte mal Weg, ich glaube der verwirrt nur und ist für die Funktion unerheblich.
@peete
Wenn ich dich richtig verstanden hab brauchen wir schlicht 2 Varianten, die derzeitige Auselsung und die mit den anderen Registern, korrekt?
Wäre es auch damit getan wenn die extra Dongle nicht genutzt würden?