Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Bewegungsmelder Script Blockly

    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

    Bewegungsmelder Script Blockly

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

      Hallo Community,

      ich habe zwar schon die Suche bemüht aber so richtig weis ich nicht, wonach ich eigentlich suchen muss. 😐

      Folgendes habe ich vor:

      Wenn Bewegung –-> Licht einschalten für X Minuten.

      Nach X Minuten --> Licht auf 50% dimmen

      Nach weiteren Y Minuten, Licht auf 10% dimmen

      nach weiteren z Minuten, Licht aus.

      Und so sieht mein Blockly- Script dazu aus:

      13941_bildschirmfoto_2018-12-29_um_17.12.16.png

      Das funktioniert soweit auch einwandfrei, doch es gibt ein Problem:

      Sobald Bewegungsmelder presence von true auf false geht, dimmt das Licht richtig runter. Wenn jetzt eine neue Bewegung kommt, dann dimmt er das Licht auch wieder richtig hoch aber im Hintergrund läuft der falls- Trigger vom ersten false- Ereignis einfach weiter und schaltet das Licht dann aus, anstatt, dass das erneute Triggern einer Bewegung das ganze script einfach resettet.

      Ich habe diesen Reset versucht mit dem timeout zu erzwingen aber das funktioniert auch nicht.

      Wie bekomme ich es hin, dass er die "Shutdown- Phase" sofort abbricht, sobald Bewegungsmelder presence erneut auf true springt?

      Vielen Dank im Voraus für eure Zeit!

      1 Reply Last reply Reply Quote 0
      • J
        J Riemann last edited by

        Du arbeitest innerhalb des Timeout mit Verzögerungen, diese verursachen das Problem. Ist Timeout abgelaufen werden die enthaltenen Aktionen abgearbeitet, dann hilft das „stop timeout“ nicht mehr.

        Setze bei der Verzögerung der Geräteaktion den Haken bei „Lösche wenn läuft“ und zusätzlich musst Du oben im „falls“ auch bei jedem Aktor minimale Verzögerungen (z.B. 100 ms) und den Haken setzen.

        Alternativ müsstest Du im „sonst falls“ für jeden Aktor ein eigenes Timeout statt der normalen Verzögerung verwenden.

        1 Reply Last reply Reply Quote 0
        • B
          Basti131 last edited by

          Okay, das funktioniert, vielen Dank! 😉

          Aber leider verstehe ich noch nicht so ganz die Logik dahinter. Sind die Verzögerungen dasselbe wie timeouts? also werden diese auch durch den Befehl stop timeout gestoppt? Und warum braucht es die Verzögerungen beim Einschalten des Lichts, damit es funktioniert?

          1 Reply Last reply Reply Quote 0
          • J
            J Riemann last edited by

            @Basti131:

            Sind die Verzögerungen dasselbe wie timeouts? also werden diese auch durch den Befehl stop timeout gestoppt? Und warum braucht es die Verzögerungen beim Einschalten des Lichts, damit es funktioniert? `
            Timeout pausiert praktisch die Abarbeitung der darin enthaltenen Aktionen.

            Die „Verzögerung“ gilt jeweils nur für diese eine Aktion bei der sie gesetzt wurde.

            Es läuft pratisch sofort ein interner Timer und nach Ablauf wird die Aktion ausgeführt.

            Wenn der Haken bei „löschen wenn läuft“ gesetzt ist kann diese Verzögerung durch einen neuen Befehl für dieses Objekt abgebrochen werden.

            Du brichst also die Ausschaltverzögerung durch den Einschaltbefehl ab.

            Bei einschalten wäre normal keine Verzögerung nötig, aber um den Haken setzen zu können muss zumindest eine winzige Verzögerung gesetzt werden.

            Bei Deiner Umsetzung sind die Haken beim einschalten entscheidend, beim ausschalten sind sie unwichtig weil das einschalten „sofort“ passiert und nicht abgebrochen werden muss.

            1 Reply Last reply Reply Quote 0
            • dslraser
              dslraser Forum Testing Most Active last edited by

              Wenn Du langsam runter dimmen möchtest könnte auch dieser Befehl für Dich interessant sein.

              Je größer die Zahl, desto langsamer wird gedimmt, geht auch beim einschalten. Leider weiß ich den Umrechnungsfaktor dafür nicht mehr aus dem Kopf. Das dimmen führt dann die Bridge selbst aus und nicht mehr das Script.

              runter dimmen

              {"on":false,"transitiontime":70}

              hoch dimmen

              {"on":true,"transitiontime":70}

              ![](</s><URL url=)<link_text text="https://uploads.tapatalk-cdn.com/201812 ... 8f4ad2.jpg">https://uploads.tapatalk-cdn.com/20181230/f47643e65455a87d80148787678f4ad2.jpg</link_text>" />

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

                Hi,

                ich möchte gerne das Thema auch noch einmal aufgreifen.
                Mein Bewegungsmelder im Flur arbeitet auch noch nicht so, wie ich es möchte.

                Der Melder von Homematic ist so in der CCU2 eingestellt, dass er alle 2 Minuten eine potentielle Bewegung meldet.
                Das Licht soll bei Bewegung mindestens 5min an bleiben. Erkennt der Bewegungsmelder innerhalb dieser Zeit wieder eine Bewegung, soll das Licht nicht ausgeschaltet werden.

                Aktuell ist es aber so, dass nach 5min. das Licht immer ausgeschaltet wird, obwohl Bewegung im Flur ist.
                Ich vermute ebenfalls ein Problem mit der Nutzung des Timeouts.

                Habt ihr eine Vermutung an welcher Stelle bei Blockly nicht korrekt aufgesetzt ist?

                Anmerkung 2019-02-25 080957.jpg

                ```
                var timeout;

                on({id: 'hm-rpc.2.00091709ABFF5D.1.MOTION', change: "any"}, function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                // Hier nog den wert Bewegung rein
                // Hier nog den wert Bewegung rein
                if (getState("hm-rpc.2.00091709ABFF5D.1.MOTION").val == true && getState("hm-rpc.2.00091709ABFF5D.1.ILLUMINATION").val < 3) {
                (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
                setStateDelayed("hm-rpc.2.000858A9AB5F2F.4.STATE"/HmIP-BSM 000858A9AB5F2F:4.STATE/, true, 100, true);
                } else if (getState("hm-rpc.2.00091709ABFF5D.1.MOTION").val == false) {
                (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
                timeout = setTimeout(function () {
                setStateDelayed("hm-rpc.2.000858A9AB5F2F.4.STATE"/HmIP-BSM 000858A9AB5F2F:4.STATE/, false, 100, true);
                }, 300000);
                }
                });

                Asgothian 1 Reply Last reply Reply Quote 0
                • Asgothian
                  Asgothian Developer @ahfreezer last edited by

                  @ahfreezer

                  Ich denke der Fehler ist das du den timeout nur dann löscht wenn eine Bewegung erkannt wird UND es dunkel ist. Wenn das Licht an ist ist es aber wahrscheinlich nicht dunkel

                  Setz doch den stop timeout mal global vor den falls Block - dann müsste es gehen.

                  A.

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

                    Unfassbar....es kann so einfach sein....aber wie immer...man sieht den Wald vor lauter Bäumen nicht. 😬
                    Danke dir für die schnelle Rückmeldung.

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    675
                    Online

                    31.8k
                    Users

                    79.9k
                    Topics

                    1.3m
                    Posts

                    5
                    8
                    3455
                    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