SMA Energy Meter als Verbraucher

ALDI-Tuete
Beiträge: 233
Registriert: Di Apr 16, 2019 5:57 pm
Wohnort: Rockenberg

Re: SMA Energy Meter als Verbraucher

Beitrag von ALDI-Tuete »

Hallo Oliver,

der Stand ist schon recht alt, da ist die Unterscheidung der verschiedenen Konstellationen nicht enthalten.
Das war auch mein erster Versuch mit Github.

Die generelle Struktur mit der Endlosschleife (while True:) ist allerdings noch drin, das habe ich mir von den anderen Modulen abgeschaut.
Das kann ich aber natürlich problemlos rausnehmen.

Auf jeden Fall funktioniert das Modul soweit zuverlässig, ich schaue regelmäßig mal auf die ret-Datei und das passt.
Bei mir senden halt 3 EnergyMeter, dementsprechend ist schon ab und an auch mal kurz eine ret-Datei mit power=0 drin.

Ich bin aktuell nicht zu Hause und mein VPN läuft gerade nicht :-/ Spätestens am Dienstag bin ich wieder zu Hause und poste mal meinen aktuellen Code.
Oder ich bekomme mein VPN noch auf die Beine... :-)
2 x openWB Standard+ + SMA HM 2.0 + PV 8,8 kWp Aurora WR + PV 5,3 kWp SMA WR + BYD HV 10.2 mit SMA SBS 3.7
1 x Tesla Model 3 LR, 1 x Tesla Model Y LR
okaegi
Beiträge: 2185
Registriert: Fr Mär 08, 2019 1:57 pm

Re: SMA Energy Meter als Verbraucher

Beitrag von okaegi »

Was du vielleicht auch hinkriegst das du solange wartest, bist das du wieder einen Wert empfängst ? Ich würde dann zur sicherheit ein Abbruchkriterium einbauen (z.b c
Counter =0
Power = 0
While true
Counter = counter + 1
If counter > 5000 then:
Break
if Meldung recieved then
Break
Entwickler- openWB (ehrenamtlich) / Feedback zu Funktionen immer erwünscht..
Smarthomeprobleme siehe hier (update :!: ): viewtopic.php?f=14&t=5923
ALDI-Tuete
Beiträge: 233
Registriert: Di Apr 16, 2019 5:57 pm
Wohnort: Rockenberg

Re: SMA Energy Meter als Verbraucher

Beitrag von ALDI-Tuete »

Ich warte bereits :-) Ich nutze hierzu das letzte Änderungsdatum der ret-Datei und schreibe nur eine power=0 ret-Datei wenn das letzte Änderungsdatum (ich glaube) mindestens 60 Sekunden in der Vergangenheit liegt.
Ich habe bei mir ja das Szenario das der EnergyMeter meiner Wärmepumpe stundenlang auch mal nichts schickt und dann aber auch 3 EMs parallel senden können.
Ein Himmelreich für ein funktionierendes VPN... :-D
2 x openWB Standard+ + SMA HM 2.0 + PV 8,8 kWp Aurora WR + PV 5,3 kWp SMA WR + BYD HV 10.2 mit SMA SBS 3.7
1 x Tesla Model 3 LR, 1 x Tesla Model Y LR
ALDI-Tuete
Beiträge: 233
Registriert: Di Apr 16, 2019 5:57 pm
Wohnort: Rockenberg

Re: SMA Energy Meter als Verbraucher

Beitrag von ALDI-Tuete »

So, hier ist mein aktueller Code:
Ich loope ewig mit dem "while True:" - das habe ich vom Bezugsmodul übernommen.
Ich kann natürlich auch nur einmal je Aufruf von watt.py die Werte ermitteln.
Was ist denn der korrekte Weg für ein Smarthome-Modul?

Danke!

Gruß
Markus

#!/usr/bin/python3
# coding=utf-8
import sys
import os
import time
import getopt
import binascii
import json
import signal
import sys
import socket
import struct
from speedwiredecoder import *

# clean exit
def abortprogram(signal,frame):
# Housekeeping -> nothing to cleanup
print('STRG + C = end program')
sys.exit(0)

# abort-signal
signal.signal(signal.SIGINT, abortprogram)

#read configuration
#default values
devicenumber = str(sys.argv[1]) # SmartHomeDevice-Nummer
smaserial = sys.argv[2] # SMA EnergyMeter Serial number
ipbind = '0.0.0.0'
MCAST_GRP = '239.12.255.254'
MCAST_PORT = 9522

returnfile = '/var/www/html/openWB/ramdisk/smarthome_device_ret' + str(devicenumber)

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
try:
mreq = struct.pack("4s4s", socket.inet_aton(MCAST_GRP), socket.inet_aton(ipbind))
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
except BaseException:
print('Could not connect to multicast group or bind to given interface')
sys.exit(1)

if os.path.isfile(returnfile):
lastmodificationtime=os.path.getmtime(returnfile)
else:
lastmodificationtime=time.time()

# Processing received messages
# The SMA EnergyMeter does not send any data package if there is no Power Consumption / no data to send
# Therefore we have to do a special processing for this scenario.
# We also have to take care if there are more than one EnergyMeter in the network sending, that's why we check the modification time in scenario 2.
# Without this check we would generate a ret-file everytime we receive data from a not desired EnergyMeter.
while True:
emparts={}
emparts=decode_speedwire(sock.recv(608))

if smaserial is None or smaserial == 'none' or str(emparts['serial']) == smaserial: # Scenario 1: Our EnergyMeter is sending, so we put the current values in our output variables
watt=str(int(emparts.get("pconsume")))
wattc=str("{:.3f}".format(emparts.get('pconsumecounter')))
elif (os.path.isfile(returnfile)) and ((time.time()-lastmodificationtime) > 60): # Scenario 2: Our EnergyMeter is not sending but do we have a returnfile which is older than 60 seconds?
# We have a ret-file which is older than 60 seconds so we create a "fake" ret-file.
# We set "0" as current Power Consume (pconsume) and (from the existing ret-file) the last value for the Power Consume Counter (pconsumecounter)
# Yes, returnfile exists
watt='0'
ret=open(returnfile, 'r')
lastvalues = ret.read()
ret.close()
wattc = lastvalues[int(lastvalues.rfind('powerc')) + 8:lastvalues.find('}')]
else:
# Our EnergyMeter is not sending right now and it didn't send any data since boottime
# In this case we do nothing and we don't create a "fake" returnfile
sys.exit("Module SMAEM: No data received and no historical data since boottime")
# general output section
answer = '{"power":' + watt + ',"powerc":' + wattc + '}'
f = open(returnfile, 'w')
f.write(answer)
f.close
2 x openWB Standard+ + SMA HM 2.0 + PV 8,8 kWp Aurora WR + PV 5,3 kWp SMA WR + BYD HV 10.2 mit SMA SBS 3.7
1 x Tesla Model 3 LR, 1 x Tesla Model Y LR
Poellph
Beiträge: 33
Registriert: Do Dez 10, 2020 1:35 pm

Re: SMA Energy Meter als Verbraucher

Beitrag von Poellph »

wäre es für euch ein großer Aufwand, die Funktion auch in „Smart Home“ und nicht nur in „Smart Home 2.0“ zu implementieren?!

Wäre euch super dankbar.
openWB series2 + 2 SMA EM + PV 27,5 kWp SMA Tripower6.0 + Tripower6.0 + Tripower10.0 + SMA SB1.5 + Varta Element 9 + Viessmann Vitocal 200-s + VW E-Golf + Skoda Enyaq iv 80
ALDI-Tuete
Beiträge: 233
Registriert: Di Apr 16, 2019 5:57 pm
Wohnort: Rockenberg

Re: SMA Energy Meter als Verbraucher

Beitrag von ALDI-Tuete »

Ich habe mit dem Smarthome-Bereich noch nichts gemacht. Ist nicht Smarthome 2.0 die Zukunft bzw. welchen Grund gibt es denn Smarthome 2.0 nicht zu verwenden?
2 x openWB Standard+ + SMA HM 2.0 + PV 8,8 kWp Aurora WR + PV 5,3 kWp SMA WR + BYD HV 10.2 mit SMA SBS 3.7
1 x Tesla Model 3 LR, 1 x Tesla Model Y LR
ALDI-Tuete
Beiträge: 233
Registriert: Di Apr 16, 2019 5:57 pm
Wohnort: Rockenberg

Re: SMA Energy Meter als Verbraucher

Beitrag von ALDI-Tuete »

Nebenbei: Hat sich im Smarthome 2.0 etwas geändert?
Ich habe ein Update auf die beta 1.9.235 gemacht und seitdem erhalte ich im smarthome.log bis dato unbekannte Fehlermeldungen (ich habe mich ja in we514 reingehängt):
2021-05-28 08:54:54: Leistungsmessung we514 1 TestSMAEM Fehlermeldung: the JSON object must be str, bytes or bytearray, not dict
2021-05-28 08:54:54: Device none1TestSMAEM Fehlermeldung: error in sepwatt

Die smarthome_device_ret1 hat -wie vorher- diesen Inhalt: {"power":5,"powerc":6822.069}
2 x openWB Standard+ + SMA HM 2.0 + PV 8,8 kWp Aurora WR + PV 5,3 kWp SMA WR + BYD HV 10.2 mit SMA SBS 3.7
1 x Tesla Model 3 LR, 1 x Tesla Model Y LR
okaegi
Beiträge: 2185
Registriert: Fr Mär 08, 2019 1:57 pm

Re: SMA Energy Meter als Verbraucher

Beitrag von okaegi »

ALDI-Tuete hat geschrieben: Mi Mai 26, 2021 4:48 am So, hier ist mein aktueller Code:
Ich loope ewig mit dem "while True:" - das habe ich vom Bezugsmodul übernommen.
Ich kann natürlich auch nur einmal je Aufruf von watt.py die Werte ermitteln.
Was ist denn der korrekte Weg für ein Smarthome-Modul?



Gruß
Markus
Lass mich mal sehen:
Du brauchst als Parameter nur die Serial number, das war ich glaub ein Textstring, oder ?
devicenumber = str(sys.argv[1]) # SmartHomeDevice-Nummer
smaserial = sys.argv[2] # SMA EnergyMeter Serial number
Bitte nur einmal pro watt.py aufruf Werte ermitteln, und das Programm dann verlassen.
Kannst du mir das dann nach test als watt.py emailen.
Gruss Oluver
Entwickler- openWB (ehrenamtlich) / Feedback zu Funktionen immer erwünscht..
Smarthomeprobleme siehe hier (update :!: ): viewtopic.php?f=14&t=5923
okaegi
Beiträge: 2185
Registriert: Fr Mär 08, 2019 1:57 pm

Re: SMA Energy Meter als Verbraucher

Beitrag von okaegi »

ALDI-Tuete hat geschrieben: Fr Mai 28, 2021 7:01 am Nebenbei: Hat sich im Smarthome 2.0 etwas geändert?
Ich habe ein Update auf die beta 1.9.235 gemacht und seitdem erhalte ich im smarthome.log bis dato unbekannte Fehlermeldungen (ich habe mich ja in we514 reingehängt):
2021-05-28 08:54:54: Leistungsmessung we514 1 TestSMAEM Fehlermeldung: the JSON object must be str, bytes or bytearray, not dict
2021-05-28 08:54:54: Device none1TestSMAEM Fehlermeldung: error in sepwatt

Die smarthome_device_ret1 hat -wie vorher- diesen Inhalt: {"power":5,"powerc":6822.069}
Sollte als json geschrieben werden:
aktpower = 0
powerc = 0
answer = '{"power":' + str(aktpower) + ',"powerc":' + str(powerc) + ',"on":' + str(pvmodus) + '} '
f1 = open('/var/www/html/openWB/ramdisk/smarthome_device_ret' + str(devicenumber), 'w')
json.dump(answer,f1)
f1.close()
Entwickler- openWB (ehrenamtlich) / Feedback zu Funktionen immer erwünscht..
Smarthomeprobleme siehe hier (update :!: ): viewtopic.php?f=14&t=5923
okaegi
Beiträge: 2185
Registriert: Fr Mär 08, 2019 1:57 pm

Re: SMA Energy Meter als Verbraucher

Beitrag von okaegi »

ALDI-Tuete hat geschrieben: Fr Mai 28, 2021 6:57 am Ich habe mit dem Smarthome-Bereich noch nichts gemacht. Ist nicht Smarthome 2.0 die Zukunft bzw. welchen Grund gibt es denn Smarthome 2.0 nicht zu verwenden?
smarthome 2.0 ist die Zukunft.
Gruss Oliver
Entwickler- openWB (ehrenamtlich) / Feedback zu Funktionen immer erwünscht..
Smarthomeprobleme siehe hier (update :!: ): viewtopic.php?f=14&t=5923
Antworten