Hallo Yvonne,
willkommen im Forum und vielen Dank für Deine Anregungen.
Ich habe den code für die 1.9 analog zu Deinen Vorschlägen angepasst. Dann läuft die OpenWB V1 erstmal wieder. Aber eine Lösung für den Hausverbrauch geht dann erst über die sim.counter in den neuen modulen. Im Prinzip sind die Module der V2 auch in der V1 nutzbar, das muss man nur erstmal testen, weil der ganze Aufruf anders abläuft.
Code: Alles auswählen
#!/usr/bin/python
import struct
import json
import urllib2
import ssl
import time
ipaddress = "192.168.XXX.YYY"
debug = False
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
#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:
print(filePath + ' ' + str(val))
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=ctx)
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,0)
#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,0)
if not (jsondata['PM1OBJ1'] ['U_AC'] [1] is None):
writeVal('/var/www/html/openWB/ramdisk/evuv2', jsondata['PM1OBJ1'] ['U_AC'] [1],0,0)
if not (jsondata['PM1OBJ1'] ['U_AC'] [2] is None):
writeVal('/var/www/html/openWB/ramdisk/evuv3', jsondata['PM1OBJ1'] ['U_AC'] [2],0,0)
#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 >> 1
if not (jsondata['PM1OBJ1'] ['I_AC'] [0] is None):
writeVal('/var/www/html/openWB/ramdisk/bezuga1_senec', jsondata['PM1OBJ1'] ['I_AC'] [0],0,0)
if not (jsondata['PM1OBJ1'] ['I_AC'] [1] is None):
writeVal('/var/www/html/openWB/ramdisk/bezuga2_senec', jsondata['PM1OBJ1'] ['I_AC'] [1],0,0)
if not (jsondata['PM1OBJ1'] ['I_AC'] [2] is None):
writeVal('/var/www/html/openWB/ramdisk/bezuga3_senec', jsondata['PM1OBJ1'] ['I_AC'] [2],0,0)
#Batteriedaten:
reqdata='{"ENERGY":{"GUI_BAT_DATA_FUEL_CHARGE":"","GUI_BAT_DATA_POWER":"","GUI_BAT_DATA_VOLTAGE":"","GUI_INVERTER_POWER":""}}'
response = urllib2.urlopen('https://'+ ipaddress +'/lala.cgi' ,data=reqdata, context=ctx)
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)