NEWS
[Gelöst] Hilfe bei Blockly-Skript Bewegungssensor
-
Erstens schon mal vielen Dank für euere Empfehlungen. Ich könnte natürlich so euere Einstellungen übernehmen, aber ich möchte es auch verstehen.
Habe ich gut verstanden, dass euer Skript folgendes auslöst?
Wenn Bewegung ist wahr, dann wird die Lampe gesteuert -> was bedeutet hier der 'Stop Timeout', ist das der Timout von 30 Sekunden der unten steht?
Wenn Bewegung ist unwahr, dann Lampe aus -> ich verstehe aber nicht was die Funktion von 'Wert Lampe /= 0' ist.
Übrigens @dslraser steht beim Bewegungsmelder in ioBroker - no motion - last motion - state - 1800 Sekunden, ist das was du meinst?
@J Riemann
Wenn Bewegung ist unwahr, dann folgt ein Timeout von 60 Sekunden und wenn das Licht dann schon eingeschaltet ist, geht sie nach 60 Sekunden aus.
Dieser Timeout wird gestoppt, wenn es eine Bewegung gibt. Dann wird das Licht eingeschaltet, wenn es aus ist. Auch hier verstehe ich den Teil 'Wert Bad <70' nicht. Welche Funktion hat diesen Trigger?
Schon im Voraus Dank fürs Mitdenken!
Gruß
Johan
-
Die HUE Lampen kanst Du auf verschiedene Arten schalten. Level ist die Helligkeit, 0 ist aus. Es gibt auch on mit true und false. (den ich in diesem Fall nicht nutze)
Du kannst auch Werte wie die Helligkeit mit einbeziehen. Z.B. nur wenn Helligkeit kleiner 70 dann schalte überhaupt irgendwas.(Habe ich draussen am Haus so)
Zu den BWM Einstellungen meine ich das Gerät selbst. Bei mir Homematic IP.
Ich habe beim posten auch gemerkt das ich mein Blockly schon längst verbessern wollte, und zwar beim einschalten noch zusätzlich zu prüfen ob das Licht schon an ist, oder noch aus. Sonst wird ein unnötiger einschalten Befehl gesendet.
Das sind die Einstellungen meines BWM.
![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201901 ... 186471.jpg">https://uploads.tapatalk-cdn.com/20190116/d2fb9fd80ad1cb43c06eba21c8186471.jpg</link_text>" /> -
@J Riemann
Wenn Bewegung ist unwahr, dann folgt ein Timeout von 60 Sekunden und wenn das Licht dann schon eingeschaltet ist, geht sie nach 60 Sekunden aus.
Dieser Timeout wird gestoppt, wenn es eine Bewegung gibt. Dann wird das Licht eingeschaltet, wenn es aus ist. Auch hier verstehe ich den Teil 'Wert Bad <70' nicht. Welche Funktion hat diesen Trigger? `
In meinem Beispiel wird der Homematic Präsenzmelder und ein Homematic Schaltaktor gesteuert.
Der Trigger ist nur der Datenpunkt „Presence“ (Motion/Bewegung) des Bewegungsmelder, also der rote Block. Wenn der Status von keine Bewegung auf Bewegung oder umgekehrt wechselt startet das Skript. Alle anderen Zeilen sind Bedingungen (falls) oder Aktionen (mache). „Bad < 70“ prüft ob der Lichtwert im Raum unter dem Wert 70 liegt.
Szenario 1: Bewegung wird erkannt, Skript startet, das erste große „falls“ ist nicht erfüllt weil die Bedingung lautet „keine Bewegung erkannt“. „mache“ wird übersprungen, das 2. große „falls“ ist erfüllt und das dazugehörige „mache“ wird abgearbeitet. Hier wird als erstes ein evtl. bereits laufendes timeout (Ausschaltverzögerung) abgebrochen. Danach wird das Licht eingeschaltet wenn es aus ist. Allerdings nur wenn der Lichtwert unter 70 liegt.
Szenario 2: Keine Bewegung wird gemeldet, das Skript startet, das 1. große „falls“ ist erfüllt. Nun wird das dazugehörige „mache“ abgearbeitet. Hier wird eine Verzögerung gestartet nach der das Licht ausgeschaltet wird falls es eingeschaltet ist. Das 2. große „falls“ ist nicht erfüllt, das dazugehörige „mache“ wird übersprungen und das Skript beendet.
Szenario 3: Das Licht ist bereits durch Bewegung eingeschaltet, zwischenzeitlich wird „keine Bewegung“ gemeldet, timeout mit dem Ausschaltbefehl läuft an, vor Ende des Timers wird wieder Bewegung gemeldet, timeout wird abgebrochen, das Licht bleibt an.
Du verwendest den Aqara BWM, der setzt meines Wissens den Status Bewegung IMMER nach 1 Minute zurück, auch wenn zwischenzeitlich Bewegung stattgefunden hat. Erst nach diesem zurücksetzen kann er erneut Bewegung erkennen und melden.
Das bedeutet das Deine Einschaltdauer bzw. der Ausschalt-Timeout deutlich über 1 Minute liegen muss damit das Licht für die Dauer längerer Bewegung eingeschaltet bleibt. Die veranschlagten 3 Minuten sind ein guter Wert.
-
@J Riemann und @dslraser vielen Dank für die ausführlichen Erläuterungen! Wenn man keinen technischen Hintergrund hat, sind die Blockly-Skripte am Anfang ganz schön schwierig.
Anhand euerer Bemerkungen habe ich unterstehendes Skript (in der Anlage) zusammengebastelt. Die gute Nachricht ist, dass die Lampensteuerung in der Küche funktioniert!
Die schlechte Nachricht ist aber, dass ich das Skript auch auf diese Weise für den Flur umgebaut habe und dort klappt es nicht :roll: Das Licht wird eingeschaltet, aber nicht wieder ausgeschaltet…. Offenbar habe ich es noch nicht ganz verstanden.
Könnt ihr mir vielleicht sagen, ob ich da was übersehen habe? Ich wäre euch sehr dankbar für die Hilfe!
Gruß
-
Die Zeitprüfungen kannst Du auch stehen lassen, ich persönlich halte sie aber beim ausschalten für überflüssig. Im Flur-Skript muss der Trigger geändert werden weil sonst das Skript nur startet wenn Bewegung erkannt wird.
-
@J Riemann
Das war tatsächlich der Fehler! Jetzt funktioniert alles wunderbar! Nochmals vielen Dank!
-
@J Riemann
Wir sind jetzt ein Paar Tage weiter und das Skript funktioniert meistens, aber vielleicht gibt es im Skript doch noch ein Problem.
Manchmal (ein Paar Mal am Tag) wird Licht eingeschaltet, brennt ein Paar Minuten, geht dann aus und wenn man in diesem Moment vorbei geht, wird kein Licht eingeschaltet. Wenn man dann ein Paar Minuten wartet, läuft es wieder. Hat das mit dieser Rücksetzung des Status Bewegung zu tun? Und wenn ja, was kann im Skript ändern, damit es nicht mehr passiert, dass es im Flur dunkel bleibt?
Vielen Dank fürs Mitdenken!
Gruß
Johan
-
Hmm… um zu verhindern das doppelte „Timeout“ laufen weil beide BWM zeitnahe auslösen könntest Du direkt vor den „Timeout“ ein „stop Timeout“ einbauen.
Außerdem sind oben im „Falls“ beide „unwahr“ per oder verbunden, das würde ich auf und ändern. (Sorry, den Fehler hatte ich übersehen). Es macht nämlich Sinn das beide BWM „keine Bewegung“ melden müssen bevor der Timer fürs ausschalten anläuft.
Außerdem kannst Du mal überprüfen wie lange der BWM wartet bis der Status „Bewegung“ zurückgesetzt wird (ich meine es ist 1 Minute). Sollte die Rückstellzeit länger sein wäre es evtl. nötig den Timeout zu erhöhen.
-
@ J Riemann
@J Riemann:Hmm… um zu verhindern das doppelte „Timeout“ laufen weil beide BWM zeitnahe auslösen könntest Du direkt vor den „Timeout“ ein „stop Timeout“ einbauen. `
Habe ich den 'stop Timout' so richtig eingebaut? Ich habe ein Screenshot in de Anlage hinzugefügt. Könntest mir vielleicht noch erklären was ein 'stop Timeout' hier bringt?
> Außerdem sind oben im „Falls“ beide „unwahr“ per oder verbunden, das würde ich auf und ändern. (Sorry, den Fehler hatte ich übersehen). Es macht nämlich Sinn das beide BWM „keine Bewegung“ melden müssen bevor der Timer fürs ausschalten anläuft.
Danke! Das macht auch Sinn! Habe ich auch geändert.> Außerdem kannst Du mal überprüfen wie lange der BWM wartet bis der Status „Bewegung“ zurückgesetzt wird (ich meine es ist 1 Minute). Sollte die Rückstellzeit länger sein wäre es evtl. nötig den Timeout zu erhöhen.
Ich habe den Bewegungsmelder getimed bei einer einzigen Bewegung und folgendes herausgefunden:
Last motion -> die ersten 2 Minuten passiert nichts, dann erscheint '120 seconds'
-> nach 3 Minuten erscheint '180 seconds'
-> nach 5 Minuten erscheint '300 seconds'
Is motion -> nachdem Bewegung erkannt wurde auf 'true', nach 3 Minuten auf 'false'
Licht wird ausgeschalten nach 5 Minuten.
Stimmen die Einstellungen im Skript dann noch?
Vielen Dank!
Gruß
Johan
10042_anlage_8.png -
Habe ich den 'stop Timout' so richtig eingebaut?. Könntest mir vielleicht noch erklären was ein 'stop Timeout' hier bringt? `
Ja, so hatte ich das gemeint. Sobald einer der BWM "keine Bewegung" meldet wird ja bekanntlich ein Timeout gestartet. Ohne das vorherige "stop" könnte es passieren das beide BWM kurz nacheinander "keine Bewegung" melden und dadurch parallel mehrere Timeout laufen. Mit der Änderung können jetzt keine ungewollten doppelten Verzögerungen der selben Aktion laufen. In Deiner Umsetzung macht das fehlende zusätzlich "stop" keinen großen Unterschied, in komplexeren Skripten welche evtl. häufig getriggert werden kann es dadurch aber schnell zu Problemen kommen. Bei dem gesamte Thema Timeout und Intervall muß man genau aufpassen das man wie programmiert.Last motion -> die ersten 2 Minuten passiert nichts, dann erscheint '120 seconds'
-> nach 3 Minuten erscheint '180 seconds'
-> nach 5 Minuten erscheint '300 seconds' `
Last Motion (bei mir heißt der "no motion") zeigt in Sekunden an wie lange der letzte "Bewegung erkannt" Status her ist.Is Motion (bei mir heißt der "Occupancy") zeigt "true" = Bewegung erkannt und "false" = keine Bewegung.
Is Motion bleibt ca. 1 Minute fix auf "true" und wechselt nach dieser Zeit IMMER zumindest kurz auf "false", Bewegungen innerhalb dieser Zeit werden nicht verarbeitet.
Aus diesem Grund muss die Einschaltdauer bzw. die Ausschaltverzögerung (Timeout) der Lampe deutlich über einer Minute liegen weil der Statuswechsel des BWM sonst ungewollte Schaltungen auslösen würde.
Licht wird ausgeschalten nach 5 Minuten. Stimmen die Einstellungen im Skript dann noch? `
Grundsätzlich würde ich ja sagen. Allerdings ist das auch von Euren persönlichen Verhaltensweisen und Abläufen abhängig. Und natürlich auch davon wie gut die BWM die zu überwachenden Fläche abdecken. Der Praxistest wird es zeigen… Du kannst aber ja problemlos mit den Timeout-Zeiten variieren.Das Skript selbst sollte jetzt genau das tun was Du erwartest.
-
Super, dann werde ich mal weiter testen! Nochmals danke für die Erläuterungen!
Gruß
Johan