Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] [Blockly]Lampen aus, wenn 15 Minuten keine Bewegung

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] [Blockly]Lampen aus, wenn 15 Minuten keine Bewegung

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Modjo last edited by

      Hallo liebe Community,

      ich stehe derzeit vor einer Herausforderung, womit ich mich sehr schwer tue und hoffe, dass ihr mir helfen könnt.

      Ich habe mir von Philips Hue den Motion Sensor gekauft, welchen ich per Node-Red auslese und in Objekte in den ioBroker schreibe.

      Speziell geht es hier um das Objekt "Anwesenheit_WZ_BM", welcher bei Bewegung auf "true" springt, ansonsten auf "false".

      Soweit, so gut!

      Nun habe ich ein Blockly Script erstellt, welches wie folgt funktionieren soll:

      Wenn Astro-Nacht = wahr & Anwesenheit_WZ_BM = wahr

      Schalte Lampen = wahr

      Wenn Anwesenheit_WZ_BM = 15 Minuten lang unwahr & Astro-Nacht = unwahr

      Schalte Lampen = unwahr

      on({id: new RegExp('javascript\\.0\\.Astro_Nacht' + "|" + 'hue\\.0\\.Anwesenheit_WZ_BM'), change: "ne"}, function (obj) {
          if (getState("javascript.0.Astro_Nacht").val == true && getState("hue.0.Anwesenheit_WZ_BM").val == true) {
          setState("broadlink.0.learnedSignals.CODE_b20734000c23230c230c230c0c23230c0c23230c0c23230c240c230c0d23230c0c230c230c230c230c230c23230c230c0c230c230c00016400000000"/*Wohnzimmer Kugel ein*/, true);
          setState("hue.0.Bridge.Wohnzimmer.on"/*Bridge.Wohnzimmer.on*/, true);
          setState("hue.0.Bridge.Küche.on"/*Bridge.Küche.on*/, true);
        } else if (getState("hue.0.Anwesenheit_WZ_BM").lc == (new Date().getTime()) - getState("hue.0.Anwesenheit_WZ_BM").lc >= 900000 || getState("javascript.0.Astro_Nacht").val == false) {
          setState("broadlink.0.learnedSignals.CODE_b2001e01220c0b220c220c220c220c220c220b220c22230b230b0c0001630c22220c220b230b0c22230b0c22230b0b23220c220c220b0c22230b0c220c220b230b220c220c220c220c22220c220c0b0001630c22230b220c220c0b23220b0c22230b0c22230b220c220c0b23220b0c220c220c220c220b220c220c220c22230b220c0b0001630c22230b230b220b0c22230b0c22230b0c22220c220c220c0b22230b0c220c220b230b230b220c220c220b23220c220b0c0001630b23220c220b230b0c22230b0b23220b0c22230b230b230b0c22220c0b220c220c220c220b230b230b220c22230b230b0b0001630c22220c220c220c0b22230b0c22230b0b22230b0b22220c0b22230b0c210c220b220c220b220c220b220c220b220c220b0005dc00000000000000000000"/*Wohnzimmer Kugel aus*/, true);
          setState("hue.0.Bridge.Wohnzimmer.on"/*Bridge.Wohnzimmer.on*/, false);
          setState("hue.0.Bridge.Küche.on"/*Bridge.Küche.on*/, false);
        }
      });
      

      Knackpunkt bei mir sind die 15 Minuten Inaktivität des Bewegungsmelders. Hierfür möchte ich "Aktuelles Datum Objekt" - "Letzte Änderung" >= 15 Minuten.

      Könnt ihr mich hierbei unterstützen?

      Vielen Dank & Grüße

      Modjo
      4811_ambient.jpg
      4811_ambient2.jpg

      1 Reply Last reply Reply Quote 0
      • K
        Kueppert last edited by

        Hi, wieso arbeitest du nicht mit einem Timer von 15 Minuten? So habe ich das bei mir umgesetzt: wenn Bewegungen, dann Timer 15 Minuten starten. Bei erneuter Bewegung Timer beenden und neu starten…

        VG Thorsten

        Gesendet von meinem HUAWEI RIO-L01 mit Tapatalk

        1 Reply Last reply Reply Quote 0
        • A
          Arnulf last edited by

          Leider kann ich vom Büro aus nicht auf mein Blockly zugreifen. Aber ich habe Folgendes gemacht:

          Wenn Der Befehl "Lampen an" (für alle Lampen) oder "Spiegel an" ( nur diese eine Lampe) kommt, wird ein Flag auf true gesetzt.

          Wenn der Bewegungsmelder nun eine Bewegung feststellt, wir ein Timer gesetzt und die Lampe an geschaltet.

          Wenn der Bewegungsmelder innerhalb des Timerzeitraums wieder feuert, weird der Timer einfach neu gesetzt.

          Läuft der Timer aus und das Lampenflag wurde vorher oder zwischenzeitlich nicht auf true gesetzt, geht die Lampe aus.

          Wird die Lampe explizit mit Kommando aus geschaltet, dann setze ich das Flag auf false.

          Damit geht die Spiegellampe nicht aus, wenn ich die Lampe explit per Kommando an geschaltet hatte.

          1 Reply Last reply Reply Quote 0
          • AlCalzone
            AlCalzone Developer last edited by

            Das dürfte folgendermaßen gehen

            Trigger...
            | Setze State "abc" auf true
            | Setze State "abc" auf false, Zeitverzögert 15 Minuten, löschen wenn läuft
            | (Beide Blöcke wiederholen je State)
            |__
            
            

            Als Resultat werden die Lampen bei jedem Trigger angeschaltet und nach 15 Minuten wieder ausgeschaltet. "löschen wenn läuft" sorgt dafür, dass die Verzögerung jedes Mal verlängert wird, wenn ein Trigger kommt.

            1 Reply Last reply Reply Quote 0
            • A
              Arnulf last edited by

              oh, sorry.

              Hatte das mit dem Spiegel gar nicht mit Blockly gemacht, sondern mit node red. Wenn du daran Interesse hast, sag Bescheid

              1 Reply Last reply Reply Quote 0
              • M
                Modjo last edited by

                Hi Zusammen,

                vielen Dank für eure Antworten.

                Ich stehe gerade total auf dem Schlauch. Kann mir einer anhand meines / eines Blocklys zeigen, wie ich das mit Timer / Zeitverzögerung mit Wiederholung umsetze?

                Danke & Gruß

                Modjo

                1 Reply Last reply Reply Quote 0
                • AlCalzone
                  AlCalzone Developer last edited by

                  Der Block ist in der Doku zwar auf englisch, sieht aber prinzipiell so aus:

                  https://github.com/ioBroker/ioBroker.ja … uere-state
                  1097_unbenannt.png

                  1 Reply Last reply Reply Quote 0
                  • M
                    Modjo last edited by

                    Hi,

                    da ich das mit dem Timeout nicht so ganz gerafft habe, habe ich es nun wie folgt gemacht (möglicherweise viel zu kompliziert :lol: )

                    var Zeit;
                    
                    on({id: "hue.0.Anwesenheit_WZ_BM"/*Anwesenheit_WZ_BM*/, change: "ne"}, function (obj) {
                      var value = obj.state.val;
                      var oldValue = obj.oldState.val;
                      if (getState("javascript.0.Astro_Nacht").val == true) {
                        Zeit = true;
                        while (Zeit) {
                          setState("broadlink.0.learnedSignals.CODE_b20734000c23230c230c230c0c23230c0c23230c0c23230c240c230c0d23230c0c230c230c230c230c230c23230c230c0c230c230c00016400000000"/*Wohnzimmer Kugel ein*/, true);
                          setState("hue.0.Bridge.Wohnzimmer.on"/*Bridge.Wohnzimmer.on*/, true);
                          setState("hue.0.Bridge.Küche.on"/*Bridge.Küche.on*/, true);
                          if ((new Date().getTime()) - getState("hue.0.Anwesenheit_WZ_BM").lc >= 900000) {
                            Zeit = false;
                          } else {
                            Zeit = true;
                          }
                        }
                        setState("broadlink.0.learnedSignals.CODE_b2001e01220c0b220c220c220c220c220c220b220c22230b230b0c0001630c22220c220b230b0c22230b0c22230b0b23220c220c220b0c22230b0c220c220b230b220c220c220c220c22220c220c0b0001630c22230b220c220c0b23220b0c22230b0c22230b220c220c0b23220b0c220c220c220c220b220c220c220c22230b220c0b0001630c22230b230b220b0c22230b0c22230b0c22220c220c220c0b22230b0c220c220b230b230b220c220c220b23220c220b0c0001630b23220c220b230b0c22230b0b23220b0c22230b230b230b0c22220c0b220c220c220c220b230b230b220c22230b230b0b0001630c22220c220c220c0b22230b0c22230b0b22230b0b22220c0b22230b0c210c220b220c220b220c220b220c220b220c220b0005dc00000000000000000000"/*Wohnzimmer Kugel aus*/, true);
                        setState("hue.0.Bridge.Wohnzimmer.on"/*Bridge.Wohnzimmer.on*/, false);
                        setState("hue.0.Bridge.Küche.on"/*Bridge.Küche.on*/, false);
                      }
                    });
                    

                    Mal sehen, ob das klappt.

                    VG

                    Modjo
                    4811_ambilight.jpg

                    1 Reply Last reply Reply Quote 0
                    • K
                      Kueppert last edited by

                      Ho Modjo,

                      okay, ist vielleicht auch niht so einfachzu verstehen ohne Blockly Beispiel…kenne ich von mir ^^ Hab dir daher mal mein Blockly angehangen:
                      2700_k_che_15min.png

                      Viele Grüße, Thorsten

                      1 Reply Last reply Reply Quote 0
                      • AlCalzone
                        AlCalzone Developer last edited by

                        @Modjo:

                        da ich das mit dem Timeout nicht so ganz gerafft habe, habe ich es nun wie folgt gemacht (möglicherweise viel zu kompliziert :lol: ) `

                        Mangels Blockly habe ich mich mal mit Powerpoint an deinem Skript versucht:
                        1097_bild1.png

                        Tödlich ist ernst gemeint. So eine Schleife kann dir dein ganzes System aufhängen.

                        1 Reply Last reply Reply Quote 0
                        • M
                          Modjo last edited by

                          Hallo an alle Helfenden,

                          vielen Dank für eure Lösungsansätze und Vorschläge.

                          @Kueppert: Dein Vorschlag hatte ich zunächst umgesetzt, welcher auch funktioniert-> Vielen Dank!

                          @AlCalzone: Vielen Dank für deine "Künstlerische Anpassung". Tatsächlich hat mir mein Script mein RPI3 zum Absturz gebracht.

                          Nun habe ich das Script so umgebaut und es scheint zu funktionieren, ich werde es jetzt mal ausgiebig testen.
                          4811_script.jpg

                          1 Reply Last reply Reply Quote 0
                          • AlCalzone
                            AlCalzone Developer last edited by

                            @Modjo:

                            Tatsächlich hat mir mein Script mein RPI3 zum Absturz gebracht. `

                            Zur Erklärung: Die Befehle zum Setzen von States dauern nur wenige Mikro bis Millisekunden - wie eigentlich fast jeder Befehl. In deiner "solange"-Schleife erzeugst du daher im Millisekundentakt neue Timeouts und Schreibbefehle, solange bis der Host sich aufhängt. Oder bis die 15 Minuten um sind, aber das erstere wird deutlich schneller eintreten.

                            1 Reply Last reply Reply Quote 0
                            • M
                              Modjo last edited by

                              Vielen Dank noch einmal an alle Beteiligten. Das oben geschriebene Script funktioniert.

                              VG

                              1 Reply Last reply Reply Quote 0
                              • M
                                Modjo last edited by

                                Hallo zusammen,

                                eine Frage habe ich noch.

                                Wie baue ich es ein, dass der 15 Minuten Timeout nicht zwischen Golden-Hour Anfang & 23:00 Uhr läuft?

                                Hintergrund ist der: Wir liegen abends teilweise auf der Couch und da erkennt der Hue Motion Sensor minimalste Bewegungen nicht, sodass er meist nach 15 Minuten ausgeht, trotz dass wir auf der Couch sitzen.

                                Danke & Gruß

                                1 Reply Last reply Reply Quote 0
                                • M
                                  Modjo last edited by

                                  Ich hab es nun einen anderen Ansatz. Ich möchte, dass bei Bewegung der "Timer" von 15 Minuten herunterzählt und bei erneutem Trigger dann aus geht. Das funktioniert ja schon mit dem oberen Blockly. Nun möchte ich zusätzlich einbauen, dass wenn der Receiver ("Power") an ist, dass er aus dem 15 Minuten Timer heraus geht und die Lampen an bleiben. Wenn der Reveiver wieder aus ist, dann halt wieder in den 15 Minuten Timer.

                                  Der Grund hierfür ist der Selbe, wie im vorherigen Post: Wenn ich TV & Reveiver an habe, liege ich auf der Couch und bewege mich wenig, sodass der Motion Sensor nicht auslöst. Licht soll aber dann dennoch anbleiben.

                                  Ich habe es nun folgendermaßen probiert, was aber nicht funktioniert. Selbst wenn ich den Receiver anhabe, geht er nach 15 Minuten aus (1.jpg).

                                  on({id: "hue.0.Anwesenheit_WZ_BM"/*Anwesenheit_WZ_BM*/, val: true}, function (obj) {
                                    var value = obj.state.val;
                                    var oldValue = obj.oldState.val;
                                    if (getState("javascript.0.Astro_Nacht").val == true) {
                                      setState("broadlink.0.learnedSignals.CODE_b20734000c23230c230c230c0c23230c0c23230c0c23230c240c230c0d23230c0c230c230c230c230c230c23230c230c0c230c230c00016400000000"/*Wohnzimmer Kugel ein*/, true);
                                      setState("hue.0.Bridge.Wohnzimmer.on"/*Bridge.Wohnzimmer.on*/, true);
                                      setState("hue.0.Bridge.Küche.on"/*Bridge.Küche.on*/, true);
                                      if (getState("yamaha.0.power").val == true) {
                                        setState("broadlink.0.learnedSignals.CODE_b20734000c23230c230c230c0c23230c0c23230c0c23230c240c230c0d23230c0c230c230c230c230c230c23230c230c0c230c230c00016400000000"/*Wohnzimmer Kugel ein*/, true);
                                        setState("hue.0.Bridge.Wohnzimmer.on"/*Bridge.Wohnzimmer.on*/, true);
                                        setState("hue.0.Bridge.Küche.on"/*Bridge.Küche.on*/, true);
                                      }
                                      setStateDelayed("broadlink.0.learnedSignals.CODE_b2001e01220c0b220c220c220c220c220c220b220c22230b230b0c0001630c22220c220b230b0c22230b0c22230b0b23220c220c220b0c22230b0c220c220b230b220c220c220c220c22220c220c0b0001630c22230b220c220c0b23220b0c22230b0c22230b220c220c0b23220b0c220c220c220c220b220c220c220c22230b220c0b0001630c22230b230b220b0c22230b0c22230b0c22220c220c220c0b22230b0c220c220b230b230b220c220c220b23220c220b0c0001630b23220c220b230b0c22230b0b23220b0c22230b230b230b0c22220c0b220c220c220c220b230b230b220c22230b230b0b0001630c22220c220c220c0b22230b0c22230b0b22230b0b22220c0b22230b0c210c220b220c220b220c220b220c220b220c220b0005dc00000000000000000000"/*Wohnzimmer Kugel aus*/, true, 900000, true);
                                      setStateDelayed("hue.0.Bridge.Wohnzimmer.on"/*Bridge.Wohnzimmer.on*/, false, 900000, true);
                                      setStateDelayed("hue.0.Bridge.Küche.on"/*Bridge.Küche.on*/, false, 900000, true);
                                    }
                                  });
                                  

                                  Vielleicht könnt ihr mir hier meinen Fehler aufzeigen!?

                                  Vielen Dank & Gruß
                                  4811_1.jpg

                                  1 Reply Last reply Reply Quote 0
                                  • M
                                    Modjo last edited by

                                    Oder ist das richtiger?
                                    4811_2.jpg

                                    1 Reply Last reply Reply Quote 0
                                    • AlCalzone
                                      AlCalzone Developer last edited by

                                      So ist es richtiger, aber noch nicht komplett. Die ersten 3 Befehle oberhalb des markierten Blocks sind jetzt redundant und können entfallen.

                                      Das Entfernen des Timers beim Fernsehen wirst du so leider nicht hinbekommen, jedenfalls ist mir kein Weg bekannt.

                                      Stattdessen wirst du dich selbst um das Starten und Löschen des Timers kümmern müssen. Ich kann dir jetzt leider kein Beispiel geben, vielleicht kommt ja wer anders dazu.

                                      1 Reply Last reply Reply Quote 0
                                      • M
                                        Modjo last edited by

                                        @AlCalzone:

                                        So ist es richtiger, aber noch nicht komplett. Die ersten 3 Befehle oberhalb des markierten Blocks sind jetzt redundant und können entfallen.

                                        Das Entfernen des Timers beim Fernsehen wirst du so leider nicht hinbekommen, jedenfalls ist mir kein Weg bekannt.

                                        Stattdessen wirst du dich selbst um das Starten und Löschen des Timers kümmern müssen. Ich kann dir jetzt leider kein Beispiel geben, vielleicht kommt ja wer anders dazu. `

                                        Danke für deine Antwort.

                                        Ich vermute, dass diese nicht "redundant" sind, da die Lampen ja auch angehen sollen, wenn ich kein TV schaue und der Receiver Power = false hat.

                                        VG

                                        1 Reply Last reply Reply Quote 0
                                        • AlCalzone
                                          AlCalzone Developer last edited by

                                          Dann ist der erste Abschnitt deiner Falls-Bedingung redundant.

                                          ... drei An-Befehle ...
                                          Falls Power ist unwahr
                                          | ...drei verzögerte Aus-Befehle
                                          |__
                                          
                                          

                                          Aber wie gesagt behebt das dein Problem nicht, dass ein bereits laufender Timer am besten gestoppt werden sollte, wenn der Fernseher läuft.

                                          1 Reply Last reply Reply Quote 0
                                          • M
                                            Modjo last edited by

                                            @AlCalzone:

                                            Dann ist der erste Abschnitt deiner Falls-Bedingung redundant.

                                            ... drei An-Befehle ...
                                            Falls Power ist unwahr
                                            | ...drei verzögerte Aus-Befehle
                                            |__
                                            
                                            

                                            Aber wie gesagt behebt das dein Problem nicht, dass ein bereits laufender Timer am besten gestoppt werden sollte, wenn der Fernseher läuft. `

                                            Da hast du Recht. Dafür fällt mir derzeit auch keine Lösung ein.

                                            Hat noch Jemand eine Idee?

                                            Derzeitiger Stand:

                                            on({id: "hue.0.Anwesenheit_WZ_BM"/*Anwesenheit_WZ_BM*/, val: true}, function (obj) {
                                              var value = obj.state.val;
                                              var oldValue = obj.oldState.val;
                                              if (getState("javascript.0.Astro_Nacht").val == true) {
                                                setState("broadlink.0.learnedSignals.CODE_b20734000c23230c230c230c0c23230c0c23230c0c23230c240c230c0d23230c0c230c230c230c230c230c23230c230c0c230c230c00016400000000"/*Wohnzimmer Kugel ein*/, true);
                                                setState("hue.0.Bridge.Wohnzimmer.on"/*Bridge.Wohnzimmer.on*/, true);
                                                setState("hue.0.Bridge.Küche.on"/*Bridge.Küche.on*/, true);
                                                if (getState("yamaha.0.power").val == false) {
                                                  setStateDelayed("broadlink.0.learnedSignals.CODE_b2001e01220c0b220c220c220c220c220c220b220c22230b230b0c0001630c22220c220b230b0c22230b0c22230b0b23220c220c220b0c22230b0c220c220b230b220c220c220c220c22220c220c0b0001630c22230b220c220c0b23220b0c22230b0c22230b220c220c0b23220b0c220c220c220c220b220c220c220c22230b220c0b0001630c22230b230b220b0c22230b0c22230b0c22220c220c220c0b22230b0c220c220b230b230b220c220c220b23220c220b0c0001630b23220c220b230b0c22230b0b23220b0c22230b230b230b0c22220c0b220c220c220c220b230b230b220c22230b230b0b0001630c22220c220c220c0b22230b0c22230b0b22230b0b22220c0b22230b0c210c220b220c220b220c220b220c220b220c220b0005dc00000000000000000000"/*Wohnzimmer Kugel aus*/, true, 900000, true);
                                                  setStateDelayed("hue.0.Bridge.Wohnzimmer.on"/*Bridge.Wohnzimmer.on*/, false, 900000, true);
                                                  setStateDelayed("hue.0.Bridge.Küche.on"/*Bridge.Küche.on*/, false, 900000, true);
                                                }
                                              }
                                            });
                                            

                                            4811_3.jpg

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            508
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            24
                                            3688
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo