Hallo, ist es möglich die verbleibende Zeit von einem laufenden Timer zurückzugeben? Habe heute angefangen mit dem Text2Speech Modul zu experimentieren und möchte gerne die verbleibende Zeit eines laufenden Timers wiedergeben. Leider hab ich keinen Plan, wie ich an die Zeit komme die der Timer noch läuft.
Wenn jemand weiterhelfen kann, ich bin über jeden Tip dankbar.
VG
Frank
Ich fürchte, dass nur Rudi dir sagen kann in welcher Variable die Laufzeit eines Timers gespeichert ist.
Ansonsten kann ich dir nur nen Workaround vorschlagen, ohne dir eine Lösung bieten zu können:
Ich nehme an, du hast einen bestimmten Timer im Auge?
Lass ihn ein Reading erzeugen wenn er losläuft. Also irgend einen Dummy auf irgend etwas setzen.
Wenn du die Laufzeit wissen willst,
lies dem TimeStamp vom Dummy aus,
sichere ihn in einer Variable,
setze den Dummy neu
lies den Zeitstempel vom Dummy neu aus
in einer anderen Variable sichern
Differenz der beiden Zeitstemoel vergleichen
Aussage glätten (na ja, Punkt durch Komma ersetzen)
Sprachausgabe
Wobei ich nicht weiß, ob es nicht einen deutlich eleganteren Weg gäbe.
Aber dieser scheint zumindest gehbar.
Willst du das regelmäßig machen? Also wie runterzählen, oder nur wenn du etwas auslöst. Z.b taste drückst?
Hallo, habe über 2 notifys 2 dummys den relevanten Timstamp zugewiesen, bis dahin alles schick. Jetzt möchte ich daraus gerne die verstrichene Zeit gewinnen aber irgendwie habe ich ein Brett vor dem Kopf. Ich weis, es ist eine einfache Substraktion aber irgendwie habe ich mich wahrscheinlich völlig in die falsche Richtung verrannt.
Die defines sind erstmal nur zum testen:
(Nicht lachen, ist nur zum testen und auslesen der Zeit)
define Tuer_dummy dummy
define Tuer_timer notify Schalter_Wohnungstuer:open {fhem "set Tuer_dummy ".time}
define Tuer_dummy1 dummy
define Tuer_notify1 notify Licht_Wohnungstuer:off {fhem "set Tuer_dummy1 ".time}
Wie kann ich nun {"Tuer_dummy1" - "Tuer_dummy"} machen ????
VG
Frank
Hm...
Schau doch mal in Loredos home Status Modul, da werden Zeiten behandelt und die Anwesenheit der Residents wird hochgezählt - vielleicht hilft dir der quelltext...
Stumpf subtrahieren wird wohl nicht funktionieren da zeit ja nicht auf Basis 100 läuft...
Welchen Wert hat den dein Dummy?
Schau doch bitte mal nach. Das sollte einfach im Moment eine ziemlich große Zahl sein.
Die Funktion time() in Perl liefert dir nämlich eigentlich die Sekunden zurück, die seit dem 1.1.1970 vergangen sind.
(Wenn das also so ist, dann scheint dein Konstrukt oben schon mal zu funktionieren)
Und damit (also mit diesen 2 Zahlen die die verstrichenen Sekunden präsentieren) kannst du die beiden Werte einfach subtrahieren, dann erhältst du halt als Differenz Sekunden.
@Rince
funktionieren tut das soweit, siehe Readings:
dummy
Tuer_dummy
1392801834.91185
Tuer_dummy1
1392801899.09209
Irgendwie fehlt mir ein Lösungsansatz für die Subtraktion
VG
Frank
War die Türe etwa 1 Minute auf?
Das erste Reading wird beim öffnen der Tür erzeugt und triggert ein notify auf einen on-for-timer 60, dieser schaltet für eine Minute das Flurlicht ein, das zweite Reading stammt vom Timer, habe das gestern zum experimentieren so eingerichtet, desshalb ist jetzt die Differenz natürlich immer 60 Secunden. Wenn ich das für die Substraktion in den Griff bekommen habe, soll das ganze auf den Timer für das Badlicht angewendet werden. Hintergrund ist, das das Badlicht über einen IR- Motion sensor gesteuert wird und bei Bewegung im Bad alle 20 Sec. nachtriggert. Wird kein motion Event mehr ausgelöst (Bad, keine Person mehr oder Person im Bad bewegt sich nicht :-) laüft der Timer für das Licht bis zum Ende und das Licht geht aus. Über Text2Speech soll dann sowas wie eine Warnung ausgegeben werden, dass das Licht in X-Sekunden ausgeht.
Das mit dem Badlicht funktioniert schon seit 6 Monaten problemlos und soll jetzt durch die "Warnausgabe" ergänzt werden.
VG
Frank
Ach so,
ich löse das mit dem Badlicht etwas anders, nämlich mit 2 Watchdogs.
Die werden getriggert wenn das Badlicht an geht.
Einer von beiden macht nach 16 Minuten das Badlicht aus
Der andere gibt nach 14 Minuten eine Warnung aus, dass das Badlicht in 2 Minuten ausgeht :)
Hilft dir das weiter?
Ich sag´s doch, ich hab viel zu kompliziert gedacht, werde mir den "Wachhund" mal vornehmen.
Das Problem ist dann aber, das der Timer über motion nachgetriggert wird, das Ende des Timers also nicht bekannt ist.
VG
Frank
Deswegen ja watchdog - der triggert einfach bei jedem Motion wieder auf Null...
Bei jedem Motion fangen also die 14 Minuten neu an. Alle 20 Sekunden triggert bedeutet aber auch eine Menge funkelst - ist es ein HM Bewegungsmelder?
Habe es jetzt, zu meiner Zufriedenheit so gelöst:
#Badlicht schalten
#
#---- Lichtsensor
define Lichtsensor1 dummy
attr Lichtsensor1 fp_Grundriss 200,485,0,
attr Lichtsensor1 fp_Grundriss2 105,545,0,
attr Lichtsensor1 room Bad
define Daemmerung notify IR_Sensor.*brightness.* {\
if(ReadingsVal("IR_Sensor","brightness","999")<=33){\
fhem "set Lichtsensor1 dunkel"};;\
if(ReadingsVal("IR_Sensor","brightness","999")>33){\
fhem "set Lichtsensor1 hell"};;\
}
#---- Badlicht steuern
define Bewegung_Bad notify IR_Sensor:motion:.on.* {\
if (Value("Lichtsensor1") eq "dunkel") {\
fhem "set Badlicht on-for-timer 600";;\
\
}}
define Badlicht_dog watchdog Badlicht:on 00:09:45 Badlicht:on set MyTTS tts "Das Badlicht geht in 10 Sekunden aus!"
Macht was es soll, 15 sec. vor Licht aus quackt MyTTS los und wenn der Text durch ist und keine motion vom MDIR mehr erkannt wird, geht das Badlicht aus.
VG
Frank
Dass dir 15 Sekunden ausreichen?
Ich hab 120 und komm schon ins schwitzen ;)
Das war eine Fehlinterpretation ;)
Der Timer läuft 600 sec. also 10 Minuten, nach 9min 45sec kommt über watchdog das noch 10 sekunden bleiben bis das Licht ausgeht. Wenn der "Bad-Benutzer" sich dann bewegt, so das motion ausgelöst wird, triggert der Timer wieder 10 Minuten nach. Ausschalten kann man das Licht, beim verlassen auch ganz normal über den Lichtschalter.
P.S. Ist schon ein lustiges Gimick und erfreut meine Familie
Ja ja, das war mir schon klar :)
Aber stimmt, ich muss rauslaufen um den Lichtschalter wieder zu drücken, du brauchst nur das Zappeln anfangen ;)
Das man den Lichtschalter händisch ausschalten kann ist richtig.
Wenn du meine Erfahrung wissen willst:
Früher (vor dem Eingriff mit fhem) dachte ich immer, meine Kinder lassen dauernd das Licht an.
Als es dann per fhem abgedreht wurde, ertappte ich mich manchmal dabei, das auch ich den Schalter nicht betätigte
Mittlerweile macht es keiner mehr von Hand aus. ::)
Und hier wurde vom Jungen bemängelt, dass wenn er stundenlang auf der Keramik sitzt, das Licht plötzlich ausgeht ;D
Desshalb jetzt mit Warnung ???
Hm,
ob der Tipp, dass er sich mehr bewegen soll auf der Schüssel, pädagogisch wertvoll ist, kann ich nicht sagen. 8)
Aber wenn es dich tröstet:
Was meinst was meine Mädels in der Wanne dann für ein G'schrei machen, wenn das Licht ausgeht :)