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

2022-02-10 09-20 openWB Startseite.jpg
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. :lol:
Also nochmal updaten bitte.

Re: Einbindung vom SolaX Wechselrichter

Verfasst: Do Feb 10, 2022 11:10 am
von arauhut
Keine Rede. Mach ich. :P

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.....
2022-02-10 21-00 openWB Startseite.jpg
2022-02-10 21-00 openWB Status.jpg
2022-02-10 21-00 openWB Tageslog.jpg
2022-02-10 21-00 openWB Langzeitansicht.jpg

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
LutzB hat geschrieben: Do Jan 27, 2022 8:37 am Wenn die Beschreibung dort viewtopic.php?p=52181#p52181 noch aktuell ist, bitte einen Blick auf den PR #1969 werfen.

https://github.com/snaptec/openWB/pull/1969

Das ist alles ungetestet! Ich bitte um Rückmeldung, ob das so passt.
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ß