Closed emse1981 closed 1 year ago
Das sollte kein Problem sein. Dazu muss die productGroups.json entsprechend erweitert werden. Die nötigen Werte bekommt man mithilfe der Entwicklertools im Browser (F12). Hier kurz die Schritte erklärt:
Jeder Heizungstyp hat seine eigenen Datenpunkte diese bekommt durch auslesen der Seitenelemente.
Die Daten kannst du dann in die productGroups.json eintragen so wie die bereits vorhandenen beiden Produkttypen dachsII und dachs08.
PS: Falls du dich mit den Entwicklertools nicht so gut auskennst, ich bin auch gerade dabei eine Funktion im py-senertec Packet zu implementieren, was das hinzufügen bzw. das einmalige auslesen der Werte bei neuen Heizungstypen etwas erleichtert. Ich denke ein neues Release dazu kommt in den nächsten 3-5 Tagen.
Vielen Dank für die Hilfe, soweit klar, kann den Dachs Inngogen auch unter productGroup: "innogen" finden. Kann die label auch finden die aber nahezu identisch zum "dachs 0.8" sind. Somit habe ich in meiner productGroup.json nur den Namen von "dachs 0.8" auf "innogen" geändert. Bekomme aber trotzdem folgenden Fehler und keine Werte:
Sieht so aus als wenn deiner callback function output() ein übergabe Parameter fehlt.
Hier mal ein komplettes Beispiel Script, vielleicht hilft das:
from senertec.lang import lang
from senertec.client import senertec
from senertec.canipValue import canipValue
import json
from time import sleep
import os
def start():
#make sure the file is in the current directory!
file = open(os.getcwd() + "\\productGroups.json")
supportedItems = json.load(file)
file.close()
global senertec
# replace your username and password here
senertec = senertec(supportedItems,
os.environ['SENERTECUSER'], os.environ['SENERTECPW'], lang.German)
senertec.messagecallback = output
if senertec.login() is False:
return
if senertec.init() is False:
return
serial = senertec.getUnits()
#connect to first unit
if senertec.connectUnit(serial[0].serial) is False:
return
errors = senertec.getErrors()
for points in senertec.boards:
ids = points.getFullDataPointIds()
senertec.request(ids)
sleep(3)
senertec.logout()
print("\n-----Device errors-----")
for e in errors:
if(e.code != ""):
print(
f"\nError: {e.code} in Board: {e.boardName} \nCategorie: {e.errorCategory} \nMessage: {e.errorTranslation}")
def output(value: canipValue):
print("Source: " + value.sourceDatapoint + "\nName: " + value.friendlyDataName + "\nValue: " +
value.dataValue.__str__() + value.dataUnit + "\n")
start()
Bekomm einfach immer einen Error:
root@debian:~# python3 Innogen.py Traceback (most recent call last): File "/root/Innogen.py", line 89, in <module> start() File "/root/Innogen.py", line 33, in start os.environ['xxxxxxx'], os.environ['xxxxxxx'], lang.German) File "/usr/lib/python3.9/os.py", line 679, in __getitem__ raise KeyError(key) from None KeyError: 'xxxxxxx' root@debian:~#
Der Error kommt durch eine nicht vorhandene Umgebungsvariable. Du kannst auch direkt Username und Passwort nutzen, statt diese in eine Umgebungsvariable zu speichern und dann im Script auszulesen.
Alt:
senertec = senertec(supportedItems,
os.environ['SENERTECUSER'], os.environ['SENERTECPW'], lang.German)
Neu
senertec = senertec(supportedItems,"username", "password", lang.German)
Ich habe jetzt auch ein neues Release gemacht (Version 0.3.0) wo der json string im Konstruktor optional ist. Gibt man dort "None" an, werden alle Datenpunkte einbezogen. Aber sei gewarnt, das können über 400 sein.
senertec = senertec(None,"username", "password", lang.German)
Werte kommen jetzt an. Dankeschön Wo genau muss das "None" eingetragen werden?
Wenn du alle Werte ohne Filter haben willst, kannst du None als ersten Parameter im Konstruktor setzen, vor dem Username und Passwort wie oben bereits geschrieben.
Als Folge muss dann auch die sleep() Dauer ggf. erhöht werden, da die Rückgabe von so vielen Werten deutlich länger dauert und länger gewartet werden muss bis alle Daten zurückgekommen sind.
Alle Werte kommen jetzt sauber an. Ein großes Dankeschön für alles. Eine Frage hab ich noch: Ist es möglich auf bestimmte Werte auch Schreibzugriff zu haben? Möchte den Pufferspeicher manuell schalten können (smart-Home) Momentan ja nur über App oder Internet möglich. Das wär Spitze?
Freut mich, das ich helfen konnte :) Werte zu schreiben wird wahrscheinlich auch möglich sein. Damit habe ich mich bis jetzt aber noch nicht beschäftigt. Ich schaue mir das mal an und eventuell wird in Zukunft auch Schreibzugriff möglich sein.
Hallo, Ich besitze den Vorgänger von Senertec Dachs 0.8 das ist der Dachs InnoGen. Kann die Daten aber genauso übers Dachsportal 2 auslesen. Bekomm hier aber das Python-Script nur teilweise zum laufen. Es gibt mir keine Werte aus. Kann das angepasst werden? Vielen Dank