SENEC Modul

Anfragen zum Erstellen von Modulen, Fragen zu Modulen
LadY
Beiträge: 6
Registriert: Sa Sep 02, 2023 2:44 pm

Re: SENEC Modul

Beitrag von LadY »

Hallo Heinz-Jörg,
Ich denke, dass es funktionieren sollte. Du musst nur zusätzlich in der Open-WB-Oberfläche in allen Modulen, wo die _senec Variablen übergeben werden, „none“ (kleingeschrieben) an allen Stellen eingeben, wo Wh verlangt werden, Beispiel ist angehängt.
IMG_2364.jpeg
Das kommt je 2x im Speicher und EVU-Modul vor und 1x im PV-Modul.
Ich hoffe sogar, dass damit auch der Hausverbrauch automatisch berechnet wird und Solarladen vollständig funktioniert. Mein Update auf https ist aber noch nicht da, daher kann ich es selbst nicht testen, allerdings habe ich die „none“ schon eingegeben und beobachte, dass die errechneten Werte nur wenig mit den bei mir noch vorhandenen Statistic-Werten des Senec auseinanderlaufen.
Viele Grüße
Yvonne
solarjunkie
Beiträge: 61
Registriert: So Jun 07, 2020 5:43 pm

Re: SENEC Modul

Beitrag von solarjunkie »

Also bei mir funktioniert der Hausverbrauch und das PV Laden nach der Umstellung auf HTTPS auch ohne die Werte aus der Statistik-Sektion.

VG
cjungde
Beiträge: 117
Registriert: Mo Jan 27, 2020 9:48 pm

Re: SENEC Modul

Beitrag von cjungde »

Hallo zusammen,

ich habe auch meine aktuelle 1.9 auf der OpenWB angepasst und folgende Werte auf 'none' gestellt:

EVU:
Vollständige URL für den Wh Bezug
Vollständige URL für die Wh Einspeisung

Bat:
Import Wh URL
Export Wh URL

PV:
habe ich direkt auf Fronius geändert.

Das Ergebnis sieht sehr gut aus !!
Ich habe einen Hausverbrauch und einen SENEC Batteriestatus.
Danke für die Rückmeldungen
Christoph
Heckert 9,9 kWp PV
Fronius Symo 10.0-3-M WR
SENEC Speicher 5 kWh
openWB series2 standard+
Auto: Zoe R110
Restliche Hausautomation: FHEM
matzeeg3
Beiträge: 40
Registriert: Fr Mai 07, 2021 6:33 am

Re: SENEC Modul

Beitrag von matzeeg3 »

Für alle deren Senec Speicher schon auf HTTPS Umgestellt wurde, hier das Script mit HTTPS:
import struct
import json
import urllib2
import time
import ssl


ipaddress = "SENECIP"
debug = False

#ipaddress = str(sys.argv[1])


def myDecode(stringValue):
# Parameter:
# stringValue: String Wert, im Format Typ_Wert
#
# Rueckgabe:
# result: Floatzahl
splitValue = stringValue.split('_')

if splitValue[0] == 'fl':
#Hex >> Float
result = struct.unpack('f',struct.pack('I',int('0x'+splitValue[1],0)))[0]
elif splitValue[0] == 'u3':
pass #TBD
elif splitValue[0] == 'u8':
pass #TBD

return result

def writeVal(filePath,stringValue,multiplier,decimalpoints):

#Parameter
#filePath: Pfad und Dateiname in der ein Wert geschrieben wird
#stringValue: Wert der nach dem knonvertieren in die Datei geschrieben wird
#multiplier: Wert mit dem die Zahl vor der Rundung multipliziert wird
#decimalpoints: Anzahl Kommastellen
#
#Rueckgabe: nichts

val= myDecode(stringValue)

# Format anpassen
if multiplier != 0:
val = val * multiplier

#auf 2 Ziffern runden
if decimalpoints == 0:
val = int(val)
elif decimalpoints != 0:
val = round(val,decimalpoints)

if debug:
print(filePath + ' ' + str(val))
else:
f = open(filePath, 'w')
f.write(str(val))
f.close()

#EVU Daten
reqdata='{"PM1OBJ1":{"FREQ":"","U_AC":"","I_AC":"","P_AC":"","P_TOTAL":""}}'
response = urllib2.urlopen('https://'+ ipaddress +'/lala.cgi' ,data=reqdata, context=ssl._create_unverified_context())
jsondata = json.load(response)



#keine Werte gefunden
# echo $evupf1 > /var/www/html/openWB/ramdisk/evupf1
# echo $evupf2 > /var/www/html/openWB/ramdisk/evupf2
# echo $evupf3 > /var/www/html/openWB/ramdisk/evupf3

#SENEC: Gesamtleistung (W) Werte -3000 >> 3000
if not (jsondata['PM1OBJ1'] ['P_TOTAL'] is None):
writeVal('/var/www/html/openWB/ramdisk/wattbezug_senec', jsondata['PM1OBJ1'] ['P_TOTAL'],0,0)

#SENEC: Frequenz(Hz) Werte 49.00 >> 50.00
if not (jsondata['PM1OBJ1'] ['FREQ'] is None):
writeVal('/var/www/html/openWB/ramdisk/evuhz',jsondata['PM1OBJ1'] ['FREQ'],0,2)

#SENEC: Spannung (V) Werte 219.12 >> 223.43
if not (jsondata['PM1OBJ1'] ['U_AC'] [0] is None):
writeVal('/var/www/html/openWB/ramdisk/evuv1', jsondata['PM1OBJ1'] ['U_AC'] [0],0,2)
if not (jsondata['PM1OBJ1'] ['U_AC'] [1] is None):
writeVal('/var/www/html/openWB/ramdisk/evuv2', jsondata['PM1OBJ1'] ['U_AC'] [1],0,2)
if not (jsondata['PM1OBJ1'] ['U_AC'] [2] is None):
writeVal('/var/www/html/openWB/ramdisk/evuv3', jsondata['PM1OBJ1'] ['U_AC'] [2],0,2)

#SENEC: Leistung (W) Werte -2345 >> 3000
if not (jsondata['PM1OBJ1'] ['P_AC'] [0] is None):
writeVal('/var/www/html/openWB/ramdisk/bezugw1', jsondata['PM1OBJ1'] ['P_AC'] [0],0,0)
if not (jsondata['PM1OBJ1'] ['P_AC'] [1] is None):
writeVal('/var/www/html/openWB/ramdisk/bezugw2', jsondata['PM1OBJ1'] ['P_AC'] [1],0,0)
if not (jsondata['PM1OBJ1'] ['P_AC'] [2] is None):
writeVal('/var/www/html/openWB/ramdisk/bezugw3', jsondata['PM1OBJ1'] ['P_AC'] [2],0,0)

#SENEC: Strom (A) Werte 0.88 >> 1.67
if not (jsondata['PM1OBJ1'] ['I_AC'] [0] is None):
writeVal('/var/www/html/openWB/ramdisk/bezuga1_senec', jsondata['PM1OBJ1'] ['I_AC'] [0],0,2)
if not (jsondata['PM1OBJ1'] ['I_AC'] [1] is None):
writeVal('/var/www/html/openWB/ramdisk/bezuga2_senec', jsondata['PM1OBJ1'] ['I_AC'] [1],0,2)
if not (jsondata['PM1OBJ1'] ['I_AC'] [2] is None):
writeVal('/var/www/html/openWB/ramdisk/bezuga3_senec', jsondata['PM1OBJ1'] ['I_AC'] [2],0,2)

#Batteriedaten:
reqdata='{"ENERGY":{"GUI_BAT_DATA_FUEL_CHARGE":"","GUI_BAT_DATA_POWER":"","GUI_BAT_DATA_VOLTAGE":"","GUI_BAT_DATA_OA_CHARGING":"","GUI_INVERTER_POWER":""}}'
response = urllib2.urlopen('https://'+ ipaddress +'/lala.cgi' ,data=reqdata, context=ssl._create_unverified_context())
jsondata = json.load(response)

#SENEC: Batterieleistung (W) Werte -345 (Entladen) >> 1200 (laden)
if not (jsondata['ENERGY'] ['GUI_BAT_DATA_POWER'] is None):
writeVal('/var/www/html/openWB/ramdisk/speicherleistung_senec', jsondata['ENERGY'] ['GUI_BAT_DATA_POWER'],0,0)

#SENEC: Fuellmenge in Prozent Werte 10 >> 55 >> 100
if not (jsondata['ENERGY'] ['GUI_BAT_DATA_FUEL_CHARGE'] is None):
writeVal('/var/www/html/openWB/ramdisk/speichersoc_senec', jsondata['ENERGY'] ['GUI_BAT_DATA_FUEL_CHARGE'],0,0)

#SENEC: Leistung Wechselrichter in (W) Werte
if not (jsondata['ENERGY'] ['GUI_INVERTER_POWER'] is None):
writeVal('/var/www/html/openWB/ramdisk/pvwatt_senec', jsondata['ENERGY'] ['GUI_INVERTER_POWER'],0,0)
Hefer
Beiträge: 87
Registriert: So Nov 27, 2022 8:53 am

Re: SENEC Modul

Beitrag von Hefer »

Hier mal noch eine interessante Betrachtungsweise

https://solectrus.de/blog/2023-09-06-er ... ec-update/

Grüße
Heinz-Jörg
openWB Series 2+ custom mit 11kw, Addon Platine als LP1 und Steuerungsbox
openwb Series 2+ custom mit 11kw, Addon Platine als LP2 (Client)
Senec V3 Speicher
PV Anlage mit Süd und Westausrichtung
matzeeg3
Beiträge: 40
Registriert: Fr Mai 07, 2021 6:33 am

Re: SENEC Modul

Beitrag von matzeeg3 »

Für alle die auf openWB 1.9 sind ich habe mal das script etwas umgeschrieben.
Danke an cjungde:

Code: Alles auswählen

import struct
import json
import urllib.request
import time
import ssl
import paho.mqtt.client as mqtt

ipaddress = "senecip"
broker_address = "openwbip or localhost"
broker_port = 1883
debug = False

#ipaddress = str(sys.argv[1])

client = mqtt.Client()
# Verbinden mit dem Broker
client.connect(broker_address, broker_port)

def myDecode(stringValue):
# Parameter:
# stringValue:  String Wert, im Format Typ_Wert
#
# Rueckgabe:
# result:               Floatzahl
    splitValue = stringValue.split('_')

    if splitValue[0] == 'fl':
        #Hex >> Float
        result = struct.unpack('f',struct.pack('I',int('0x'+splitValue[1],0)))[0]
    elif splitValue[0] == 'u3':
        pass #TBD
    elif splitValue[0] == 'u8':
        pass #TBD

    return result

def writeVal(stringValue, multiplier, decimalpoints):

#Parameter
#filePath:              Pfad und Dateiname in der der ein Wert geschrieben wird
#stringValue:   Wert der nach dem knonvertieren in die Datei geschrieben wird
#multiplier:    Wert mit dem die Zahl vor der Rundung multipliziert wird
#decimalpoints: Anzahl Kommastellen
#
#Rueckgabe: nichts


    val= myDecode(stringValue)

        # Format anpassen
    if multiplier != 0:
        val = val * multiplier

    #auf 2 Ziffern runden
    if decimalpoints == 0:
        val = int(val)
    elif decimalpoints != 0:
        val = round(val,decimalpoints)

    if val is None:
        val = 0

    return val

#EVU Daten
reqdata = '{"PM1OBJ1":{"FREQ":"","U_AC":"","I_AC":"","P_AC":"","P_TOTAL":""}}'
reqdata = bytes(reqdata, 'utf-8')
response = urllib.request.urlopen('https://' + ipaddress + '/lala.cgi', data=reqdata, context=ssl._create_unverified_context())
jsondata = json.load(response)



#SENEC: Gesamtleistung (W) Werte -3000  >> 3000
if not (jsondata['PM1OBJ1'] ['P_TOTAL'] is None):
    topic = "openWB/set/evu/W"
    client.publish(topic, writeVal(jsondata['PM1OBJ1'] ['P_TOTAL'],0,0))


#SENEC: Frequenz(Hz) Werte 49.00 >> 50.00
if not (jsondata['PM1OBJ1'] ['FREQ'] is None):
    topic = "openWB/set/evu/HzFrequenz"
    client.publish(topic, writeVal(jsondata['PM1OBJ1'] ['FREQ'],0,2))

#SENEC: Spannung (V) Werte 219.12 >> 223.43
if not (jsondata['PM1OBJ1'] ['U_AC'] [0] is None):
    topic = "openWB/set/evu/VPhase1"
    client.publish(topic, writeVal(jsondata['PM1OBJ1'] ['U_AC'] [0],0,2))
if not (jsondata['PM1OBJ1'] ['U_AC'] [1] is None):
    topic = "openWB/set/evu/VPhase2"
    client.publish(topic, writeVal(jsondata['PM1OBJ1'] ['U_AC'] [1],0,2))
if not (jsondata['PM1OBJ1'] ['U_AC'] [2] is None):
    topic = "openWB/set/evu/VPhase3"
    client.publish(topic, writeVal(jsondata['PM1OBJ1'] ['U_AC'] [2],0,2))

#SENEC: Leistung (W) Werte -2345 >> 3000
if not (jsondata['PM1OBJ1'] ['P_AC'] [0] is None):
    topic = "openWB/set/evu/WPhase1"
    client.publish(topic, writeVal(jsondata['PM1OBJ1'] ['P_AC'] [0],0,0))
if not (jsondata['PM1OBJ1'] ['P_AC'] [1] is None):
    topic = "openWB/set/evu/WPhase2"
    client.publish(topic, writeVal(jsondata['PM1OBJ1'] ['P_AC'] [1],0,0))
if not (jsondata['PM1OBJ1'] ['P_AC'] [2] is None):
    topic = "openWB/set/evu/WPhase3"
    client.publish(topic, writeVal(jsondata['PM1OBJ1'] ['P_AC'] [2],0,0))


#SENEC: Strom (A) Werte 0.88 >> 1.67
if not (jsondata['PM1OBJ1'] ['I_AC'] [0] is None):
    topic = "openWB/set/evu/APhase1"
    client.publish(topic, writeVal(jsondata['PM1OBJ1'] ['I_AC'] [0],0,2))
if not (jsondata['PM1OBJ1'] ['I_AC'] [1] is None):
    topic = "openWB/set/evu/APhase2"
    client.publish(topic, writeVal(jsondata['PM1OBJ1'] ['I_AC'] [1],0,2))
if not (jsondata['PM1OBJ1'] ['I_AC'] [2] is None):
    topic = "openWB/set/evu/APhase3"
    client.publish(topic, writeVal(jsondata['PM1OBJ1'] ['I_AC'] [2],0,2))

#Batteriedaten:
reqdata='{"ENERGY":{"GUI_BAT_DATA_FUEL_CHARGE":"","GUI_BAT_DATA_POWER":"","GUI_BAT_DATA_VOLTAGE":"","GUI_BAT_DATA_OA_CHARGING":"","GUI_INVERTER_POWER":""}}'
reqdata = bytes(reqdata, 'utf-8')
response = urllib.request.urlopen('https://' + ipaddress + '/lala.cgi', data=reqdata, context=ssl._create_unverified_context())
jsondata = json.load(response)

#SENEC: Batterieleistung (W) Werte -345 (Entladen) >> 1200 (laden)
if not (jsondata['ENERGY'] ['GUI_BAT_DATA_POWER'] is None):
    topic = "openWB/set/houseBattery/W"
    client.publish(topic, writeVal(jsondata['ENERGY'] ['GUI_BAT_DATA_POWER'],0,0))

#SENEC: Fuellmenge in Prozent Werte 10 >> 55 >> 100
if not (jsondata['ENERGY'] ['GUI_BAT_DATA_FUEL_CHARGE'] is None):
    topic = "openWB/set/houseBattery/%Soc"
    client.publish(topic, writeVal(jsondata['ENERGY'] ['GUI_BAT_DATA_FUEL_CHARGE'],0,0))

#SENEC: Leistung Wechselrichter in (W) Werte
if not (jsondata['ENERGY'] ['GUI_INVERTER_POWER'] is None):
    topic = "openWB/set/pv/1/W"
    client.publish(topic, writeVal(jsondata['ENERGY'] ['GUI_INVERTER_POWER'],0,0))

# Client beenden
client.disconnect()
so müssen keine daten mehr auf http abfrage gestellt werden sondern das script egal ob auf der openwb ausgeführt oder wo anders sendet die daten via mqtt direkt an die openwb. Damit ist auch keine RAMdisk mehr nötig.
Im nächsten Step werde ich noch die Berechnung der kWh mit einbauen, das dauert aber leide noch ein paar Tage.
Zuletzt geändert von matzeeg3 am Fr Sep 08, 2023 7:34 am, insgesamt 1-mal geändert.
solarjunkie
Beiträge: 61
Registriert: So Jun 07, 2020 5:43 pm

Re: SENEC Modul

Beitrag von solarjunkie »

Hefer hat geschrieben: Mi Sep 06, 2023 3:25 pm Hier mal noch eine interessante Betrachtungsweise

https://solectrus.de/blog/2023-09-06-er ... ec-update/

Grüße
Heinz-Jörg
Danke für den Link! Sehr aufschlussreich.
TorstenFranz
Beiträge: 46
Registriert: Do Sep 03, 2020 12:24 pm

Re: SENEC Modul

Beitrag von TorstenFranz »

Hallöchen!! - Ich weis nicht ob ich hier richtig bin:

Ich habe den Senec V2 (FW 825 / GUI 966)
Als PV eine SolarEdge-5000
und steuere mit der OpemWB die EVSE-Wifi an.
Das Ganze nutze ich jetzt schon etwa 3 Jahre ohne größere Probleme.

Seit gestern Mittag geht nichts mehr. Die OpenWB scheint regelrecht stehen geblieben zu sein. Es werden keinerlei Werte aktualisiert. Uhrzeit und Datum sind ebenfalls stehen geblieben.
Der RasperryPi3 läuft aber normal. Die Systemdaten werden richtig angezeigt und er aktualisiert auch die Belastungsdaten im Sekundentakt.

Ich vermute es liegt am Senec, da bisher alle Schwierigkeiten von da kamen. Ich weis es aber nicht.
Ich bräuchte echt Hilfe, da ich auch Schwierigkeiten mit der Programierung habe und eigentlich nur nachmachen kann was hier beschrieben wird.
Damals bei der Ersteinrichtung 2020 hat das gut geklappt und seither lief es fast Fehlerfrei.

Die SD-Karte habe ich mit einem Backup neu bespielt. - keine Änderung des Problems.
Was auch auffällt, er macht das UpDate nicht auf 1.9.303.0 , obwohl ich es angeschoben habe. Er scheint zu Updaten, danach wird aber wieder die Version 1.9.244 angezeigt.

Kann mir jemand Helfen? Liegt das Überhaupt am Senec - es soll ja bei Senec ein UpDat gegeben haben.
Es kann auch sein ich bin hier falsch.

Danke
Torsten
matzeeg3
Beiträge: 40
Registriert: Fr Mai 07, 2021 6:33 am

Re: SENEC Modul

Beitrag von matzeeg3 »

Moin Torsten,
Ich glaube nicht das es am senec liegt. Als bei mir das Seneca Update kam, hatte ich zwar keine Power Werte vom Seneca mehr in openwb aber meine 2te PV lief einwandfrei auch Sofortladen und die Uhrzeit ist nicht stehen geblieben. Ehrlich gesagt klingt das nach etwas anderem. Kannst du denn sofort laden? Weil diese Werte müssten auf jeden Fall auftauchen. Kannst du das Senec Script im cron mal deaktivieren nicht das dies durch den Fehler zu viele resourcen verbraucht (nur ein Strohhalm was es sein könnte)
LadY
Beiträge: 6
Registriert: Sa Sep 02, 2023 2:44 pm

Re: SENEC Modul

Beitrag von LadY »

Guten Morgen,
Mein Update kam gestern und führte zum gleichen Fehlerbild, also dass Uhrzeit etc eingefroren war und sich gar nichts mehr aktualisiert hat in der OpenWB-Anzeige…
Ich habe dann die Änderungen im Code und der Modulkonfiguration nachgezogen, wie ein paar Einträge vorher auch beschrieben (SSL/https/Statistic+“none“). Damit funktionierte die Wiederbelebung.
Viele Grüße
Yvonne
Antworten