Ich habe einen neuen Aktor, der leider nicht die Möglichkeit hat die Zeit der Treppenlichtfunktion über den Bus zu senden. Für die Gartenbewässerung wäre das aber sinnvoll. Da aber die ganze Steuerung ohnehion mit SmartHomeNG läuft, möchte ich auch die Treppenlichtfunktion umsetzen. Ich kriegs aber nicht so hin, wie ich mir das vorstelle. Das heißt:
- es gibt ein Item schalten
- es gibt ein Item Dauer
- Dauer soll in Minuten sein
- wenn Dauer > 0, dann soll das Item schalten eingeschaltet werden und bei 0 abgeschaltet werden
- Dauer soll gleichzeitig die Restzeit beinhalten, wenn per Dauer eingeschaltet wurde
- wenn das Item schalten manuell eingeschaltet wird, dann wird Dauer ignoriert (oder mit einen Standardwert vorbelegt)
Im Prinzip funktioniert alles, bis auf die letzten beiden Punkte. Da weiß ich nicht mal ansatzweise, wie ich das lösen kann. Den Rest kann ich zwar berechnen, aber nicht im Item, welches die Dauer beinhaltet.
- es gibt ein Item schalten
- es gibt ein Item Dauer
- Dauer soll in Minuten sein
- wenn Dauer > 0, dann soll das Item schalten eingeschaltet werden und bei 0 abgeschaltet werden
- Dauer soll gleichzeitig die Restzeit beinhalten, wenn per Dauer eingeschaltet wurde
- wenn das Item schalten manuell eingeschaltet wird, dann wird Dauer ignoriert (oder mit einen Standardwert vorbelegt)
Im Prinzip funktioniert alles, bis auf die letzten beiden Punkte. Da weiß ich nicht mal ansatzweise, wie ich das lösen kann. Den Rest kann ich zwar berechnen, aber nicht im Item, welches die Dauer beinhaltet.
Code:
schalten:
type: bool
autotimer: sh..Dauer.Sekunden() = 0
visu_acl: rw
database: yes
on_update:
- .wannAktiv = sh.now() if value else None
# Beregnungsdauer in Minuten
Dauer:
type: num
visu_acl: rw
on_change:
- .Sekunden = value * 60
- .Rest = value
- ..self = True if value > 0 else False
Sekunden:
type: num
enforce_updates: yes
Rest:
type: num
cycle: 60
enforce_updates: yes
visu_acl: rw
eval: sh...self() - round(sh...self.update_age() / 60, 0) if sh...self() > 0 else 0




Kommentar