NEWS
Trigger "Mittagsschlaf fertig" (keine Bewegung für X Min)
-
Hallo.
Ich wollte ein Skript bauen, dass mir eine Nachricht gibt, sobald mein Sohn 60 Minuten geschlafen hat.
(Außerdem habe ich noch ein "Falls Aktuelle Zeit zwischen 0:00 und 00:01 - mache - Setze Timer auf 0" als seperates Blockly, damit der Timer Mittags immer bei 0 startet)
Leider klappt das gar nicht. Ich bekomme:- auch nach 15:00 Uhr noch Nachrichten (die zweite blaue Falls Bedingung ist zwischen 12:00 und 15:00 Uhr) und
- Bekomme ich alle 4-5 Minuten die Meldung, dass mein Sohn 60 Minuten geschlafen hat.
Zu meiner Idee:
Falls der Wert "motion" sich geändert hat (von "keine Bewegung zu Bewegung" oder andersrum) soll das Skript starten. Hiermit gehe ich sicher, dass ich nicht dauernd Nachrichten bekomme, wenn keiner da ist.
Falls "motion/stop" bedeudet, dass (nachdem sich ja was bewegt hatte - siehe erste Schleife) jetzt keine Bewegung mehr da ist (mein Sohn also schläft). Außerdem Falls 12:00-15:00, weil es nur um die Zeit des Mittagsschlafs geht.
Dann kommt der Timer (Intervall alle 1 Minute) -> Timer plus 1 bis Timer = 60.
Ich verstehe nicht, wie ich überhaupt so schnell Meldungen bekommen kann, da der Timer doch auf 0 gesetzt wird, sobald ich eine Nachricht bekommen habe.
Bin dankbar für alle Tipps:)EDIT: Ich hatte vorher um alles die Falls-Abfrage der Zeit (Falls 12-15 Uhr) mache Skript. Dann eine Variable auf wahr gesetzt (Mittagszeit = wahr) und diese Variable auf falsch gesetzt sobald die Nachricht über Telegram raus geht. Leider habe ich dann GAR KEINE Nachricht bekommen...
-
@M-A-X sagte:
Leider klappt das gar nicht.
Es fehlt der sonst-Zweig der Prüfung mit stop zyklische Ausführung Intervall und setze Timer1 auf 0 (ist dort völlig ausreichend).
Wert findet man unter "Trigger".
-
@paul53
Hey. Bin leider nicht zuhause und kann es nicht testen. Ist bei deiner Lösung nicht ein Problem, wenn sich mein Sohn im Schlaf bewegt?
Dann wird der timer auf 0 gesetzt und startet neu.
Ich wollte bei meinem Skript 'einfach' jede Minute anfragen und wenn motion=stop dann timer plus 1, wenn motion=Start fragt er ne Minute später nochmal. (mir kommt es ja nicht drauf an ob er 60 oder 70 minuten schläft) -
@M-A-X sagte:
Ist bei deiner Lösung nicht ein Problem, wenn sich mein Sohn im Schlaf bewegt?
Ja. Wenn das Intervall trotz Bewegung zwischendurch nur einmal laufen soll, muss man es mit dem Zähler anders lösen. stop zyklische Ausführung Intervall ist aber erforderlich.
-
@paul53
Sonst sollte es funktionieren?
Dann kann ich bei dem 'sonst' Abschnitt doch ein 'falls aktuelle Zeit nach 15 Uhr ODER Variable "Nachricht ging raus" ' noch einbinden und es geht dann?
Die Variable 'Nachricht ging raus' setze ich einfach auf wahr nach dem Telegramm Block -
@M-A-X sagte:
Variable "Nachricht ging raus"
Diese Information enthält auch die Variable Timer1.
Oder man setzt Timer1 um 12:00 auf 0.
-
@paul53 ich glaube wir reden an einander vorbei.
Ich meine: 'sonst falls xxxx: stoppe zyklische Ausführung'
und nicht 'sonst stoppe zyklische Ausführung - falls A tue B' -
@M-A-X sagte:
'sonst falls xxxx: stoppe zyklische Ausführung'
Nein, das Intervall muss immer bei sonst gestoppt werden, da andernfalls mehrere Intervalle gleichzeitig laufen.
Wenn nach dem Stoppen die mache-Bedingung wieder erfüllt ist, wird das Intervall wieder gestartet und es wird weiter gezählt. Du musst kein Minuten-Intervall verwenden: 6 Sekunden Intervall und zählen bis 600 funktioniert auch. -
@paul53 ok. Danke.
Da hab ich wieder mal was gelernt. Ich probiere es heute nacht oder morgen früh aus und berichte
Dir einen schönen Sonntag noch -
@paul53
Hey,
ich bin jetzt wieder zuhause und habe dein Skript übernommen.
Leider scheint die Schleife gar nicht los zu laufen. Ich habe mir ein DEBUG eingebaut, um die minütlichen Infos des Timers im Log zu sehen, aber es passiert nichts.- Dieses Feld "Wert" aus dem Bereich "Trigger", woher nimmt das Skript die Info, welcher Wert?
Ich konnte zwar "Object" in "Wert" ändern, aber nirgendwo auswählen, dass er den Wert vom Objekt "yitom" nehmen soll. (Zu Testzwecken habe ich außerdem die Zeit auf 10 Minuten gekürzt). - Wie kann ich die UND Verknüpfung schön übersichtlich in 2 Zeilen bauen und nicht hinter einander?
- Dieses Feld "Wert" aus dem Bereich "Trigger", woher nimmt das Skript die Info, welcher Wert?
-
@M-A-X sagte:
Leider scheint die Schleife gar nicht los zu laufen.
Stimmt denn der Vergleichswert "motion_stop" ? Füge mal vor dem Vergleich ein "debug output Wert" ein.
@M-A-X sagte in Trigger "Mittagsschlaf fertig" (keine Bewegung für X Min):
woher nimmt das Skript die Info, welcher Wert?
Dieser Block liefert die Attribute (u.a. den Wert) des Trigger-Datenpunktes.
@M-A-X sagte in Trigger "Mittagsschlaf fertig" (keine Bewegung für X Min):
Wie kann ich die UND Verknüpfung schön übersichtlich in 2 Zeilen bauen
Mit dem Maus-Zeiger über "und", rechte Maustaste und "externe Eingänge" auswählen.
@M-A-X sagte in Trigger "Mittagsschlaf fertig" (keine Bewegung für X Min):
Ich habe mir ein DEBUG eingebaut
Stelle besser "info" als Log-Level ein.
-
@paul53 said in Trigger "Mittagsschlaf fertig" (keine Bewegung für X Min):
Stimmt denn der Vergleichswert "motion_stop" ? Füge mal vor dem Vergleich ein "debug output Wert" ein.
Habe es mal eingefügt. Es schien daran zu liegen, dass Timer1 noch "hoch" war. Ich habe einfach einen Block "setze Timer1 = 0" eingefügt und das script einmal gestartet.
Dieser Block liefert die Attribute (u.a. den Wert) des Trigger-Datenpunktes.
Ah. Ok. Das heißt "Wert" "Object" etc. bezieht sich immer auf den übergeordneten Bedingungsblock?
Mit dem Maus-Zeiger über "und", rechte Maustaste und "externe Eingänge" auswählen.
Danke
Stelle besser "info" als Log-Level ein.
Habe ich jetzt. Ist das entscheidend? Ich wollte es auf anhieb "sehen" können
Wie gesagt. Das script scheint jetzt zu funktionieren. Das einzige, was ich nicht testen konnte ist, was passiert wenn er sich bewegt während der Timer läuft (hat er nämlich nicht^^) und ob der Timer resetted wirdIch berichte dann morgen
Vielen Dank nochmals -
@M-A-X sagte:
"Wert" "Object" etc. bezieht sich immer auf den übergeordneten Bedingungsblock?
Ja, auf den Trigger-Block.
-
@M-A-X
Hi Max, ich bin kein Super Experte in Sachen Programmierung, aber dieses ganze Timer Gedöns habe ich schon in diversen Waschmaschinen / Spülmaschinen Skripten gesehen und ist meiner Meinung überflüssig. Kann gute Gründe dafür geben, die ich nicht sehe, aber in Deinem recht einfachen Fall sollte ein Timeout auch gut funktionieren bzw. exakt gleich nur ohne timer Variable. Sähe dann so aus:
-
@buggybeast sagte:
Kann gute Gründe dafür geben, die ich nicht sehe
@M-A-X sagte in Trigger "Mittagsschlaf fertig" (keine Bewegung für X Min):
Problem, wenn sich mein Sohn im Schlaf bewegt?
-
@paul53 Ja schon klar, der kleine Tom kann sich bewegen. Aber wie soll ein Bewegungssensor das unterscheiden? Ob er sich nur im Schlaf bewegt oder wach ist. Er ändert in beiden Fällen den Status. Dann müsste man ja irgendwie skripten, wenn er sich nur 10 Sekunden bewegt, ist er nicht wach, sondern bewegt sich nur im Schlaf, was echt sehr geraten wäre. Das sehe ich aber in dem zuletzt gezeigten Skript nicht.
Vielleicht liegt's auch am Bier -
@buggybeast
Hey, ich bin leider vor allem mit schleifen etc nicht firm.
Was passiert bei deinem Skript wenn motion_stop sich in motion_start ändert?
Stoppt es und die Zeit läuft neu los sobald es wieder motion_stop ist? Oder läuft die Zeit WEITER sobald es sich auf motion_stop zurück ändert?
Mir scheint (aber da bin ich auch nicht sicher), dass es bei 'meinem' Skript dann WEITER läuft.
Grüße
Max -
@M-A-X sagte:
Stoppt es und die Zeit läuft neu los sobald es wieder motion_stop ist?
Ja.
@M-A-X sagte in Trigger "Mittagsschlaf fertig" (keine Bewegung für X Min):
Mir scheint (aber da bin ich auch nicht sicher), dass es bei 'meinem' Skript dann WEITER läuft.
Ja, das Intervall wird neu gestartet und die Zähl-Variable zählt weiter, da sie nicht zurück gesetzt wurde.
-
@paul53
Also ist 'mein' Skript - eigentlich ja deins— besser für den Anwendungsfall.
Wenn ich jetzt noch von 1 Minute - wie schon von Dir angeregt - auf 10 Sekunden Intervalle Wechsel, komme ich echten 60 Minuten Schlaf noch näher
Wobei ich da mal checken muss, wie oft die Kamera den Status überhaupt ändern kann -
@M-A-X sagte in Trigger "Mittagsschlaf fertig" (keine Bewegung für X Min):
Was passiert bei deinem Skript wenn motion_stop sich in motion_start ändert?
Stoppt es und die Zeit läuft neu los sobald es wieder motion_stop ist? Oder läuft die Zeit WEITER sobald es sich auf motion_stopKorrekt, die Zeit stoppt, wie @paul53 bereits geantwortet hat.
Kann es sein, dass Du quasi wissen möchtest, ob Dein Sohn zwischen 12 und 15 Uhr in Summe 60 Minuten geschlafen hat, egal ob am Stück oder mit Unterbrechungen?
Dann hätte ich das falsch verstanden ...