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