Ich lasse smarthome.py (develop) und Visu auf meiner Synology laufen. Das ist gefühl ca. 1000 mal schneller, ich habe aber das Problem, dass smarthome.py sich regelmäßig (ca. 1-2 mal pro Tag aufhängt). Ich erhalte dann einen Websocket error, erst wenn ich Smarthome.py über die Konsole gestoppt und neu gestartet habe läuft es wieder bis zum nächsten Absturz.
Bis jetzt habe ich in den Logs nichts verdächtiges finden können, Ephem läuft nicht (kriege ich auf der Synology nicht installiert), ich habe auch probiert Stück für Stück verschiedene Plugins zu deaktivieren - das hat aber keinen Erfolg gebracht.
Im Log war bis jetzt einfach irgendwann kein Eintrag mehr, ohne dass es eine besondere Fehlermeldung gab. nun habe ich aber folgenden Eintrag genau vor dem Abstürz geloggt:
dieses steht in zusammenhang mit diesem Item:
diese eval Funktion nutze ich auch bei anderen Zähleritems.
die gesamte Restberechnung sieht so aus:
Bis jetzt habe ich in den Logs nichts verdächtiges finden können, Ephem läuft nicht (kriege ich auf der Synology nicht installiert), ich habe auch probiert Stück für Stück verschiedene Plugins zu deaktivieren - das hat aber keinen Erfolg gebracht.
Im Log war bis jetzt einfach irgendwann kein Eintrag mehr, ohne dass es eine besondere Fehlermeldung gab. nun habe ich aber folgenden Eintrag genau vor dem Abstürz geloggt:
PHP-Code:
2014-12-20 14:16:15 ERROR strom.rest.kwh1h Method strom.rest.kwh1h exception: deque mutated during iteration
Traceback (most recent call last):
File "/usr/local/smarthome/lib/scheduler.py", line 346, in _task
obj(**value)
File "/usr/local/smarthome/lib/item.py", line 336, in __run_eval
self.__update(value, caller, source, dest)
File "/usr/local/smarthome/lib/item.py", line 383, in __update
self._sh.trigger(name=item.id(), obj=item.__run_eval, value=args, by=caller, source=source, dest=dest)
File "/usr/local/smarthome/lib/scheduler.py", line 165, in trigger
self._runc.notify()
File "/volume1/@appstore/py3k/usr/local/lib/python3.4/threading.py", line 341, in notify
waiters_to_notify = _deque(_islice(all_waiters, n))
RuntimeError: deque mutated during iteration
PHP-Code:
[[[kwh1h]]]
name = rest_kwh_1h
cache = on
type = num
sqlite = yes
eval = sh.strom.rest.Zaehlerstand()- sh.strom.rest.Zaehlerstand.db('min', '1h',)
eval_trigger = strom.rest.Zaehlerstand
enforce_updates=yes
visu = yes
die gesamte Restberechnung sieht so aus:
PHP-Code:
[[rest]]
[[[Zaehlerstand]]]
name = rest_Zaehlerstand
type = num
cache = on
sqlite = yes
eval = sh.strom.rest.WmRest() + sh.strom.rest.Zaehlerstand()
eval_trigger = strom.rest.WmRest
enforce_updates = yes
[[[WmRest]]]
name = Wattsekunden_Rest
type = num
sqlite = yes
eval = sh.strom.rest.Momentanleistung_freq_temp.prev_value()/1000)/(3600/sh.strom.rest.Momentanleistung_freq_temp.prev_age()
eval_trigger = strom.rest.Momentanleistung_freq_temp
enforce_updates = yes
[[[Momentanleistung_freq_temp]]]
name = rest_Momentanleistung_freq_temp
type = num
sqlite = yes
eval = 0 if int(value) == 0 else sh.strom.gesamt.Momentanleistung_freq() - sh.strom.herd.Momentanleistung_freq() - sh.strom.kuehlschrank.Momentanleistung_freq() - sh.strom.waschmaschine.Momentanleistung_freq()-sh.strom.knxstrom.Momentanleistung_freq() - sh.strom.Buero.Momentanleistung_freq() - (sh.Wohnzimmer.VerbrauchBeamerAmpere()*230)
eval_trigger = strom.gesamt.Momentanleistung_freq
autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
enforce_updates=yes
[[[Momentanleistung_freq]]]
name = rest_Momentanleistung_freq
type = num
sqlite = yes
eval = 0 if int(value) == 0 else sh.strom.rest.Momentanleistung_freq_temp.db('avg','1i')
eval_trigger = strom.rest.Momentanleistung_freq_temp
autotimer = 1m = 0 # Reset to zero if no impulse comes within a minute (< 0.6kW)
enforce_updates=yes
[[[kwh7d]]]
name = rest_kwh7d
type = num
cache = on
sqlite = yes
eval = (sh.strom.rest.Zaehlerstand()- sh.strom.rest.Zaehlerstand.db('min','7d') )
eval_trigger = strom.rest.kwh24h
visu = yes
[[[kwh24h]]]
name = rest_kwh_24h
type = num
cache = on
sqlite = yes
eval = sh.strom.rest.Zaehlerstand() - sh.strom.rest.Zaehlerstand.db('min', '1d',) # returns the kwh used in 24h
eval_trigger= strom.rest.kwh1h
enforce_updates=yes
visu=yes
[[[kwh1h]]]
name = rest_kwh_1h
cache = on
type = num
sqlite = yes
eval = sh.strom.rest.Zaehlerstand()- sh.strom.rest.Zaehlerstand.db('min', '1h',)
eval_trigger = strom.rest.Zaehlerstand
enforce_updates=yes
visu = yes
Kommentar