Seite 27 von 35
Re: Einbindung vom SolaX Wechselrichter
Verfasst: Mi Feb 09, 2022 8:38 pm
von LutzB
Die Summen sind automatisch ab dem nächsten Tageswechsel richtig. Hatte HSC ja schon geschrieben.
Schauen wir morgen nochmal nach.
Re: Einbindung vom SolaX Wechselrichter
Verfasst: Mi Feb 09, 2022 8:40 pm
von arauhut
Machen wir. Vielen Dank
Re: Einbindung vom SolaX Wechselrichter
Verfasst: Mi Feb 09, 2022 8:59 pm
von HSC
Hallo Lutz,
bei EVU fehlt wirklich auch noch der Faktor 1000 an irgendeiner Stelle zur Berechnung, um auf der Startseite die Tagessumme für Import & Export richtig zu bilden.
Die EVU- Zählerstände im Status sind seit Tagen in openWB i.O. und stammen direkt aus dem SDM630 des 1. Solax-WR.
Die sichtbaren 0,01 kWh sind in Wirklichkeit die abgeschnittenen 19 kWh Tagesdifferenz aus dem Log (csv), lt. Klammerwert aber nur 10 (bzw. 19, da abgeschnitten??) Wh.
Das Gleiche passiert unterm Tagesgraph als Tagessumme Bezug = 0,02 kWh = 20 Wh (scheinbar gerundet oder zetl. Differenz), müssten aber ca. 20 kWh heute sein, da der EVU- Zähler auch vor Update richtig anzeigte und richtig in csv geschrieben wurde.
Es setzt sich sichtbar weiterhin im Tagesgraph fort, da dort der "minimale" Bezug (um Faktor 1000 kleiner) auch nicht abgebildet werden kann.
Analog wird der Faktor auch im EVU- Export fehlen.
Schau bitte nochmal in das Modul oder die Übergaben der EVU- Werte zur TagesSummenberechnung.
Speicher passte schon immer, PV ist seit update heute auch komplett, nur EVU spinnt noch etwas.
@arauhut wird morgen dennoch nochmal eine Zusammenfassung der EVU- Summen, Tageslog- Summe Bezug sowie csv liefern.
VG
Re: Einbindung vom SolaX Wechselrichter
Verfasst: Do Feb 10, 2022 9:11 am
von arauhut
Vorweg ein Screenshot vom Laden nach einspielen der aktuellen Nightly.
Nach einem schönen Sonnenaufgang, hat diese sogar etwas beigesteuert
PV & Speicher sind nun i.O.
EVU Tagessumme fehlt noch, bzw. steht nur auf 0,01kWh, obwohl 8,1 kWh geladen wurden.
Die Tagesdaten kommen später
Re: Einbindung vom SolaX Wechselrichter
Verfasst: Do Feb 10, 2022 9:30 am
von LutzB
Meinst Du die 1.9.255? Hatte dort noch den Zähler korrigiert.
Re: Einbindung vom SolaX Wechselrichter
Verfasst: Do Feb 10, 2022 9:37 am
von arauhut
Ja, installierte Version ist: 1.9.255 (2022-02-10 07:49:31 +0100 [6ba478ee] )
Wie kann ich helfen?
Re: Einbindung vom SolaX Wechselrichter
Verfasst: Do Feb 10, 2022 11:01 am
von LutzB
Mein Fehler. Der PR war noch nicht drin.
Also nochmal updaten bitte.
Re: Einbindung vom SolaX Wechselrichter
Verfasst: Do Feb 10, 2022 11:10 am
von arauhut
Keine Rede. Mach ich.
Re: Einbindung vom SolaX Wechselrichter
Verfasst: Do Feb 10, 2022 8:22 pm
von arauhut
So, nun denke ich, dass das SolaX-Modul für 3-phasige Wechselrichter mit Batterie zu gebrauchen ist.
Kleinigkeiten werden sicher noch gefunden werden aber alles in Allem können die Daten und Diagramme gut genutzt werden.
Zur abschließenden Kontrolle hier noch einmal ein paar Screenshots, vielleicht sieht der eine oder andere noch ein paar Ungereimtheiten.....
PS: vielen Dank an alle, die sich intensiv mit meinem Problem auseinandergesetzt haben und es so schnell zu einem tollen Ergebnis gebracht haben.
HSC erinnert mich gerade, dass es genau 3 Monate her ist, dass ich damit ins Forum gegangen bin.
Ich bleib weiter dran, werde jetzt aber erst mal das System nutzen.
Re: Einbindung vom SolaX Wechselrichter
Verfasst: Mo Feb 14, 2022 10:07 am
von Peete
Das ist der letzte Stand, der bei mir seit Dezember funktioniert:
bezug_solax -> solax.py
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
from pymodbus.factory import ClientDecoder
def unsigned32(result, addr):
low = result.registers[addr]
high = result.registers[addr + 1]
val = low +( high << 16)
return val
def unsigned16 (result, addr):
return result.registers[addr]
def signed16(result, addr):
val = result.registers[addr]
if val > 32767:
val -= 65535
return val
def signed32(result, addr):
val = unsigned32(result, addr)
if val > 2147483647:
val -= 4294967295
return val
ipaddress = str(sys.argv[1])
client = ModbusTcpClient(ipaddress, port=502)
resp=client.read_input_registers(0, 114)
value = signed32(resp, 70)
# for SolaX negative means get power from grid
value = -value
f = open('/var/www/html/openWB/ramdisk/wattbezug', 'w')
f.write(str(value))
f.close()
einspeisung = unsigned32(resp, 72) * 10
f = open('/var/www/html/openWB/ramdisk/einspeisungkwh', 'w')
f.write(str(einspeisung))
f.close()
consumed = unsigned32(resp, 74) * 10
f = open('/var/www/html/openWB/ramdisk/bezugkwh', 'w')
f.write(str(consumed))
f.close()
resp=client.read_input_registers(130, 6)
value2 = signed32(resp, 0)
value2 = -value2
f = open('/var/www/html/openWB/ramdisk/bezugw1', 'w')
f.write(str(value2))
f.close()
value3 = signed32(resp, 2)
value3 = -value3
f = open('/var/www/html/openWB/ramdisk/bezugw2', 'w')
f.write(str(value3))
f.close()
value4 = signed32(resp, 4)
value4 = -value4
f = open('/var/www/html/openWB/ramdisk/bezugw3', 'w')
f.write(str(value4))
f.close()
resp=client.read_input_registers(109, 2)
frequenz = unsigned16(resp,0) / 100
f = open('/var/www/html/openWB/ramdisk/evuhz', 'w')
f.write(str(frequenz))
f.close()
speicher_solax -> solax.py
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
valuep = signed16(resp, 22)
f = open('/var/www/html/openWB/ramdisk/speicherleistung', 'w')
f.write(str(valuep))
f.close()
# Batterieladezustand
valuesoc = unsigned16(resp, 28 )
f = open('/var/www/html/openWB/ramdisk/speichersoc', 'w')
f.write(str(valuesoc))
f.close()
# Batterie entladen LSB 29 MSB 30
valuei29 = unsigned16(resp, 29)
valuei30 = unsigned16(resp, 30)
f = open('/var/www/html/openWB/ramdisk/speicherekwh', 'w')
f.write(str((valuei29 + (valuei30 * 65536)) * 100 ) )
f.close()
# Batterie geladen LSB 33 MSB 34
valuei33 = unsigned16(resp, 33)
valuei34 = unsigned16(resp, 34)
f = open('/var/www/html/openWB/ramdisk/speicherikwh', 'w')
f.write(str((valuei33 + (valuei34 * 65536)) * 100 ) )
f.close()
wr_solax -> solax.py
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
from pymodbus.factory import ClientDecoder
ipaddress = str(sys.argv[1])
def unsigned32(result, addr):
low = result.registers[addr]
high = result.registers[addr + 1]
val = low +( high << 16)
return val
def unsigned16 (result, addr):
return result.registers[addr]
def signed16(result, addr):
val = addr
if val > 32767:
val -= 65535
return val
client = ModbusTcpClient(ipaddress, port=502)
resp=client.read_input_registers(10, 2)
pv1 = unsigned16(resp, 0)
pv2 = unsigned16(resp, 1)
f = open('/var/www/html/openWB/ramdisk/pvwatt', 'w')
f.write(str( (pv1 + pv2) * -1 ) ) # Erzeugung negativ
f.close()
resp=client.read_input_registers(80, 4)
client.close()
loadvars Zeile 1085 (bei mir)
Code: Alles auswählen
if [[ $pvwattmodul == "wr_kostalpiko" ]] || [[ $pvwattmodul == "wr_siemens" ]] || [[ $pvwattmodul == "wr_rct" ]]|| [[ $pvwattmodul == "wr_solarwatt" ]] || [[ $pvwattmodul == "wr_shelly" ]] || [[ $pvwattmodul == "wr_sungrow" ]] || [[ $pvwattmodul == "wr_huawei" ]] || [[ $pvwattmodul == "wr_powerdog" ]] || [[ $pvwattmodul == "wr_lgessv1" ]]|| [[ $pvwattmodul == "wr_kostalpikovar2" ]] || [[ $pvwattmodul == "wr_solax" ]]; then
usesimpv=1
Gruß