Seite 1 von 9

Einbindung Senec Speicher möglich

Verfasst: Mi 13. Nov 2019, 14:49
von willi9974
Hallo zusammen,

ich würde mir gerne auch so eine schöne Anzeige bauen. Hätte da aber die Frage ob man dann auch seinen Speicher (Senec Home 2.1) einbinden könnte?

Viele Grüße
Willi

Re: Einbindung Senec Speicher möglich

Verfasst: Mi 13. Nov 2019, 15:19
von Ulrich
Wenn der Speicher eine Kommunikationsschnittstelle hat und Du die Protokollbeschreibung besorgen kannst, dann ja. Gerade wurden die sonnenBatterien mit eingebunden.



sonnenBatterie Speicher der sonnen GmbH
sonnenBatterie Speicher der sonnen GmbH

Re: Einbindung Senec Speicher möglich

Verfasst: Di 14. Jul 2020, 20:21
von willi9974
Hallo Ulrich,

ich habe einen python Code gefunden über den der Senec Speicher ausgelesen werden kann.
Der Code erstellt im Unterverzeichnis "ausgabe" einzelne Dateien mit den benötigten werden des Speichers.

Wäre doch cool wenn du den Speicher einbinden könntest. Ich würde mich als Testobjekt zur Verfügung stellen :-)

Code: Alles auswählen


#!/usr/bin/python

import struct
import json
import urllib2
import time

ipaddress = "192.168.0.136"
debug = False

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 konvertieren 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(str(val))
        print filePath
    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('http://'+ ipaddress +'/lala.cgi' ,data=reqdata)
jsondata = json.load(response)

#SENEC: Gesamtleistung (W) Werte -3000  >> 3000
writeVal('ausgabe/wattbezug_senec', jsondata['PM1OBJ1'] ['P_TOTAL'],0,0)

#SENEC: Frequenz(Hz) Werte 49.12 >> 50.34
writeVal ('ausgabe/evuhz',jsondata['PM1OBJ1'] ['FREQ'],0,2)

#SENEC: Spannung (V) Werte 219.12 >> 223.43
writeVal('ausgabe/evuv1', jsondata['PM1OBJ1'] ['U_AC'] [0],0,2)
writeVal('ausgabe/evuv2', jsondata['PM1OBJ1'] ['U_AC'] [1],0,2)
writeVal('ausgabe/evuv3', jsondata['PM1OBJ1'] ['U_AC'] [2],0,2)

#SENEC: Leistung (W) Werte -2345 >> 3000
writeVal('ausgabe/bezugw1', jsondata['PM1OBJ1'] ['P_AC'] [0],0,0)
writeVal('ausgabe/bezugw2', jsondata['PM1OBJ1'] ['P_AC'] [1],0,0)
writeVal('ausgabe/bezugw3', jsondata['PM1OBJ1'] ['P_AC'] [2],0,0)

#SENEC: Strom (A) Werte 0.88 >> 1.67 
writeVal('ausgabe/bezuga1_senec', jsondata['PM1OBJ1'] ['I_AC'] [0],0,2)
writeVal('ausgabe/bezuga2_senec', jsondata['PM1OBJ1'] ['I_AC'] [1],0,2)
writeVal('ausgabe/bezug33_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":""}}'
response = urllib2.urlopen('http://'+ ipaddress +'/lala.cgi' ,data=reqdata)
jsondata = json.load(response)


#SENEC: Batterieleistung (W) Werte -345 (Entladen) >> 1200 (laden)
writeVal('ausgabe/speicherleistung_senec', jsondata['ENERGY'] ['GUI_BAT_DATA_POWER'],0,0)

#SENEC: Fuellmenge in Prozent Werte 10 >> 55 >> 100
writeVal('ausgabe/speichersoc_senec', jsondata['ENERGY'] ['GUI_BAT_DATA_FUEL_CHARGE'],0,0)

#Statistik
reqdata='{"STATISTIC":{"STAT_BAT_CHARGE":"","STAT_BAT_DISCHARGE":"","STAT_GRID_EXPORT":"","STAT_GRID_IMPORT":"","STAT_HOUSE_CONSUMPTION":"","STAT_PV_GENERATION":""}}'
response = urllib2.urlopen('http://'+ ipaddress +'/lala.cgi' ,data=reqdata)
jsondata = json.load(response)

#SENEC: Gesamtlademenge (Wh) Werte 1692
writeVal('ausgabe/speicherikwh_senec', jsondata['STATISTIC'] ['STAT_BAT_CHARGE'],1000,0)

#SENEC: Gesamtentlademenge (Wh) Werte 1590
writeVal('ausgabe/speicherekwh_senec', jsondata['STATISTIC'] ['STAT_BAT_DISCHARGE'],1000,0)

#SENEC: Gesamtimport (Wh) Werte 1809000
writeVal('ausgabe/bezugkwh_senec', jsondata['STATISTIC'] ['STAT_GRID_IMPORT'],1000,0)

#SENEC: Gesamteinspeisung Werte (Wh) 7085000
writeVal('ausgabe/einspeisungkwh_senec', jsondata['STATISTIC'] ['STAT_GRID_EXPORT'],1000,0)

Re: Einbindung Senec Speicher möglich

Verfasst: Mi 15. Jul 2020, 08:32
von Ulrich
Hallo willi9974,

ich habe den Hersteller wegen der Protokollbeschreibung angeschrieben. Mal sehen was der dazu sagt.

Re: Einbindung Senec Speicher möglich

Verfasst: Mi 15. Jul 2020, 08:48
von willi9974
Das wird nix Ulrich, die waren da schon immer sehr unkooperativ wenn es darum geht Informationen raus zu geben.
Alle Daten die man braucht wären da und kann man über die lala.cgi abfragen und dann in die Datenbank der Solaranzeige schreiben :mrgreen:

Re: Einbindung Senec Speicher möglich

Verfasst: Do 30. Jul 2020, 14:40
von TeamO
Hallo Ulrich,

ich habe heute auch meinen Speicher angeschlossen bekommen und ein wenig gesucht.
Es gibt wohl ein bereits paar inoffizielle Wege um an die Daten der Senec zu kommen.
- Auslesen über IP-Adresse/lala.cgi
https://openwb.de/forum/viewtopic.php?f ... 5&start=30

- Auslesen über Python-Script????
https://pypi.org/project/pysenec/

leider habe ich Programiertechnisch zu wenig Erfahrung um die Daten mit diesen Informationen in die Datenbank zu bekommen.

Re: Einbindung Senec Speicher möglich

Verfasst: Mi 12. Aug 2020, 08:42
von TeamO
Hallo Ulrich,

konntest Du Dir das schonmal anschauen?
Wenn Du mir Hilfe dabei gibst, wie ich die Daten in influxdb bekomme, kann ich auch selber mal schauen ob ich es hinbekomme.

Re: Einbindung Senec Speicher möglich

Verfasst: Mi 12. Aug 2020, 09:02
von willi9974
Soweit ich informiert bin wartet er noch auf die Antwort von Senec. Er würde den Speicher über eine API / Protokollbeschreibung einbinden und kein Reverse Engineering machen wollen, was er möglicherweise bei jedem Firmware Update von Senec wieder anpassen müsste.

Da sehe ich leider schwarz das Senec das rausrückt, denn sie verkaufen sowas lieber selbst als es offen zu legen.

Re: Einbindung Senec Speicher möglich

Verfasst: Mo 12. Okt 2020, 08:00
von willi9974
Gibts da schon etwas neues von Senec?
Kann man den Speicher jetzt schon einbinden?

Re: Einbindung Senec Speicher möglich

Verfasst: Mo 12. Okt 2020, 08:22
von willi9974
Sehe gerade in der 4.6.7 ist der Senec Speicher drin, super cool.
Gleich mal ein Update gemacht.

Code: Alles auswählen

login as: pi
pi@192.168.0.140's password:
Linux solaranzeige 4.19.118-v7+ #1311 SMP Mon Apr 27 14:21:24 BST 2020 armv7l
Software Version 4.6.4                April  2020 (BUSTER)
Software Version 4.6.4   update       April  2020
Software Version 4.6.6a  update       August 2020
Software Version 4.6.7c  update       August 2020
Last login: Mon Oct 12 08:08:29 2020 from 192.168.0.122
pi@solaranzeige:~ $
Update ist durch und wie bekomme ich jetzt den Regler 43 in die user.config.php?