Der Fehler ist im folgend PR korrigiert.
https://github.com/snaptec/openWB/pull/2252
Es ist tatsächlich so, dass der Überschuss nicht als String übergeben wurde.
Alt:
Code: Alles auswählen
argumentList = ['python3', self._prefixpy + 'http' + pname,
str(self.device_nummer), '0',
self.devuberschuss, url]
try:
self.proc = subprocess.Popen(argumentList)
self.proc.communicate()
Neu
Code: Alles auswählen
argumentList = ['python3', self._prefixpy + 'http' + pname,
str(self.device_nummer), '0',
str(self.devuberschuss), url]
try:
self.proc = subprocess.Popen(argumentList)
self.proc.communicate()
Zur Fehlersuche im Smartmq:
Wichtigstes Instrument ist das Smarthome.log. Bei jeder relevanten Entscheidung sollte etwas gelogt werden. In der Regel reicht es dann, die entsprechende Stelle im Programm zu finden um den Fehler einzugrenzen.
Code: Alles auswählen
def turndevicerelais(self, zustand, ueberschussberechnung, updatecnt):
self.preturn(zustand, ueberschussberechnung, updatecnt)
if (zustand == 1):
pname = "/on.py"
url = self._device_einschalturl
else:
pname = "/off.py"
url = self._device_ausschalturl
argumentList = ['python3', self._prefixpy + 'http' + pname,
str(self.device_nummer), '0',
str(self.devuberschuss), url]
try:
self.proc = subprocess.Popen(argumentList)
self.proc.communicate()
except Exception as e1:
self.logClass(2, "(" + str(self.device_nummer) +
") on / off %s %d %s Fehlermeldung: %s "
% ('Shttp', self.device_nummer,
str(self._device_ip), str(e1)))
Die letzte Fehlermeldung hast du mit self.LogClass im Smarthome log. Die hast du ja gefunden.
Was auch noch manchmal hilft: Einige Devices machen je nach Typ noch ein separates logging auf der Ramdisk. Diese fangen in der regel mit ...ramdisk/deviceN oder ...ramdisk/smarthome_device_...N an.
(wobei N dann 1 bis 9 ist).
Struktur vom smartmq ist einfach:
openWB/runs/smartmq -> Main programm
openWB/runs/usmarthome/smart....py -> classendefinition
smartbase0.py-> Basisclasse (0) für alles
smartbase.py -> zentrale Basisclasse mit Regellogik für alle Typen
smartbut.py -> Smartbutton class
smartmeas.py -> alle Classen für separate Leistungsmessung (SDM630, shelly, tasmota...)
smartxxxx.py -> z.b. ...IDM.py , ...shelly.py separate Classen für jeden Typ
Die Classen werden pro Device instanziiert und rufen dann die unteren Module zur direkten Ansteuerung auf.
openWB/modules/smarthome/shelly/on.py, off.py, watt.py
Diese Module machen dann ggf zusätzliches logging auf der ramdisk.
Gruss Oliver