Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Bewegungsmelder Skript für Raum mit schaltbarem Licht

    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 Skript für Raum mit schaltbarem Licht

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

      Hi Leute,

      Ich habe folgendes im Sinn:

      Im Wohnzimmer befinden sich ein paar Hue Leuchten und ein Motion Sensor. Die Lichter können wie gewohnt geschaltet werden.
      Ab Sonnenuntergang soll folgendes passieren:

      Skript #1
      Anwendungsfall: Es ist dunkel, man betritt den Raum, schalte das Licht ein

      Der Bewegungssensor soll die Nachtlicht Szene schalten, sofern:

      • Bewegung erkannt
      • Keine Lampe an ist
      • Astro zwischen Untergang und Aufgang

      Nach 5 Minuten soll er das Licht wieder ausschalten, aber nur sofern man das Licht nicht zwischenzeitig schon angeschaltet hat

      Skript #2
      Anwendungsfall: Man befindet sich im Wohnzimmer und schaltet das Licht aus, nun soll automatisch und ohne Bewegunserkennung noch 5 Minuten das Nachtlicht an bleiben

      Schalte Nachtlicht Szene ein falls:

      • Astro zwischen Untergang und Aufgang
      • Licht wurde ausgeschaltet

      Dadurch dass Skript #1 ja am Ende das "Licht ausschaltet" würde hier erstmal Skript #2 gestartet werden (nachtlicht)

      Damit Skript #2 nur startet wenn händisch das Licht ausgeschaltet wird, habe ich einen Datenpunkt Wohnzimmer_Nachtlicht_aktiv angelegt. Sofern dieser true ist und das licht ausgeschaltet wird, soll nicht wieder das Nachtlicht aktiviert werden

      Erste Testversuche zeigen, dass das Script soweit funktioniert, allerdings hatte ich heute früh scheinbar einen infinite loop im iobroker, den ich nur durch iobroker del javascript deaktivieren konnte.

      Eine mögliche Fehlerquelle ist natürlich das Polling des Hue Adapters, welches ich derzeit auf 10 Sekunden gestellt habe.

      Daher meine Frage, seht ihr hier Optimierungsbedarf, kann man hier ggf. vereinfachen?
      Anbei mein derzeitiges Blockly Script.

      Vielen Dank für euren Input!

      Bildschirmfoto 2021-01-18 um 14.13.34.png
      Bildschirmfoto 2021-01-18 um 14.13.20.png

      Asgothian paul53 2 Replies Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @Benda last edited by

        @benda

        Optimierungsvorschläge:

        1. Skript
        • vor den "Ausführen lichtAusschalten2" Baustein noch ein stop lichtAusschalten2.
        • An Stelle von "pause 15 sek" beim "Steuere Wohnzimmer_Nachtlicht_aktiv" die Einstellungen "Mit Verzögerung 15 Sekunden" und "löschen falls läuft" aktivieren
        1. Skript:
        • Im Bereich "System" gibt es zwischen den "falls Objekt" Bausteinen einen der mit"Objekt ID" vordefiniert ist. Dieser Baustein kann auf "wert" umgestellt werden und innerhalb des Triggers den Baustein "wert vom Objekt ID Motion Sensor presence" ersetzen.
        • Alternativ dazu kann statt auf "wurde geändert" auf "ist grösser als vorher" getriggert werden, dann kann im Falls die Abfrage "wert vom Objekt ID Motion Sensor presence = wahr" entfallen. (in JS gilt: Wahr > Falsch)

        In beiden Skripten fragst Du mehrfach den "wert vom Objekt ID Wohnzimmer.level" ab. Ich würde das generell so lösen:

        • eine Variable "RaumHelligkeit" anlegen
        • ein "Falls Objekt ID Wohnzimmer.level" wurde geändert machen, darin ein "setze RaumHelligkeit auf wert" (den Baustein im 1. Vorschlag am 2. Skript) nutzen
        • In beiden Skriptteilen jedes auftreten von wert vom "Objekt ID Wohnzimmer.level" durch "RaumHelligkeit" ersetzen

        A.

        B 1 Reply Last reply Reply Quote 0
        • B
          Benda @Asgothian last edited by

          Hey Asgothian,
          danke für deine Anregungen.

          @asgothian said in Bewegungsmelder Skript für Raum mit schaltbarem Licht:

          An Stelle von "pause 15 sek" beim "Steuere Wohnzimmer_Nachtlicht_aktiv" die Einstellungen "Mit Verzögerung 15 Sekunden" und "löschen falls läuft" aktivieren

          Was bedeutet die Checkbox "löschen falls läuft"?

          eine Variable "RaumHelligkeit" anlegen
          ein "Falls Objekt ID Wohnzimmer.level" wurde geändert machen, darin ein "setze RaumHelligkeit auf wert" (den Baustein im 1. Vorschlag am 2. Skript) nutzen
          In beiden Skriptteilen jedes auftreten von wert vom "Objekt ID Wohnzimmer.level" durch "RaumHelligkeit" ersetzen

          Also ein separater Block mit einem trigger auf Wohnzimmer.level?
          Ich sehe hier eine race condition, dass das Skript 1 oder 2 durchläuft bevor der callback dieses event triggers die lokale variable angepasst hat, oder habe ich einen Verständnisfehler?

          Ich habe das Timeout fürs zurücksetzen der Wohnzimmer_Nachtlicht_aktiv variable nun auf 20 sekunden gesetzt.

          Irgendwo scheint noch ein Wurm im Skript zu sein, da ich eben wieder ein CPU 100% problem hatte..

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Benda last edited by

            @benda sagte: seht ihr hier Optimierungsbedarf, kann man hier ggf. vereinfachen?

            Gleiche Abfragen (nachts) und Abläufe packt man in eine Funktion. Dann benötigt man auch nur einen Ausschalt-Timeout.

            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @Benda last edited by paul53

              @benda sagte:

              wieder ein CPU 100% problem hatte..

              Der Trigger "Wohnzimmer.anyOn" mit "ist unwahr" wird anscheinend indirekt vom Script selbst ausgelöst und erzeugt so eine Endlosschleife. Ändere den Trigger auf "ist kleiner als letztes".

              Besser: Packe beides in ein Script, verwende anstelle des Datenpunktes "Wohnzimmer_Nachtlicht_aktiv" eine Variable und nimm für den gemeinsamen Teil eine Funktion.

              EDIT: Etwa so:

              Bild_2021-01-18_165211.png

              B 1 Reply Last reply Reply Quote 0
              • B
                Benda @paul53 last edited by

                Vielen Dank für eure Anregungen, hab einiges gelernt 🙂
                Das Script funktioniert nun auch super, ich werde meine finale Version nochmal zur Referenz posten.

                Tatsächlich kam die Endlosschleife durch ein anderes Script zu Stande, welches auf diverse Alexa Routinen triggert (mit ist wahr). Diese Trigger gingen aber scheinbar auch so los, da die Alexa Routinen auf True blieben..

                Ich denke ein Trigger mit > oder < oder wurde geändert gefolgt von einem falls mit Wertüberprüfung ist die sichere Variante

                R 1 Reply Last reply Reply Quote 0
                • R
                  rj45 @Benda last edited by

                  @benda und finale Version. thx

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  403
                  Online

                  31.9k
                  Users

                  80.2k
                  Topics

                  1.3m
                  Posts

                  4
                  7
                  682
                  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