Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [gelöst] Blockly Verständnisfrage

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Blockly Verständnisfrage

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

      Hallo,

      da dies mein erster Beitrag ist, kurz zu mir. Mein Name ist Jörg, bin 57 Jahre alt und "bastle" mit Smart Home schon seit ein paar Jahren rum. Da ich aus verschiedenen Gründen gerne von FHEM weg möchte, habe ich nun soweit alles in den ioBroker portiert und viele Automatismen arbeiten auch schon wie gewünscht. Allerdings hänge ich an einer Sache fest. Und zwar geht es um die Steuerung unserer Leuchte an der Haustür. Ich tue mich noch ein bisschen schwer mit JavaScript, bzw. wie in diesem Fall mit Blockly.

      Folgendes Szenario: Zum Sonnenuntergang soll die Leuchte eingeschaltet werden und zwar mit 20%. Ab dem Zeitpunkt soll auch der Bewegungsmelder seine Arbeit aufnehmen. Bei einer erkannten Bewegung soll die Leuchte auf 100% Helligkeit gestellt werden und wenn keine Bewegung mehr erkannt wird, die Lampe wieder auf 20% dimmen.
      Ab 22:30 soll sich das Verhalten allerdings ändern. Die Lampe soll jetzt nicht mehr auf 20% leuchten sondern ausgehen. Und nur bei Bewegung auf 100% gehen, wenn keine Bewegung, dann wieder ausgehen (das Licht soll ja nicht die ganze Nacht leuchten...).

      Ich habe mir jetzt schon einige Beispiele, welche in diese Richtung gehen, angeschaut und ein Blockly gebaut. Aber irgendwie sagt mir meine Logik, dass kann nicht funktionieren - oder es liegt noch an meinem fehlenden Verständnis, wie Blockly genau funktioniert.

      79958a4e-5971-4486-971a-dd4e4c1a9af3-image.png

      Für mein Verständnis würde das Skript zwar zum Sonnenuntergang die Lampe einschalten, aber ich denke, dass der Bewegungsmelder dann nicht mehr zum Tragen kommt, weil das Licht ja an ist und nachdem die sonne untergegangen ist, wird ja der Trigger auch nicht mehr ausgelöst. Das gleiche mit der 22:30 Uhr Geschichte. Um 22:30 wird zwar die Leuchte ausgehen, aber weil ja 22:30 dann vorbei ist, wird auch der Bewegungsmelder keine Bewandtnis mehr haben - oder liege ich da falsch?

      Es wäre fein, wenn mich da jemand erleuchten würde. Und danke für das Lesen 🙂

      mickym 1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active @Der Goerch last edited by

        @der-goerch
        Für mein Verständnis würde das Skript zwar zum Sonnenuntergang die Lampe einschalten, aber ich denke, dass der Bewegungsmelder dann nicht mehr zum Tragen kommt, weil das Licht ja an ist und nachdem die sonne untergegangen ist, wird ja der Trigger auch nicht mehr ausgelöst.

        Genau. Du benötigst also 2 Trigger - einmal für die Tagesereignisse und einmal für den Bewegungsmelder. Damit der Trigger vom Bewegungsmelder was vom aktuellen Sonnenstand bzw. der Uhrzeit weiß, kannst Du dann dort bestimmte Variablen setzen, die dann der Trigger vom Bewegungsmelder auswerten kann.

        Der Goerch 1 Reply Last reply Reply Quote 0
        • Der Goerch
          Der Goerch @mickym last edited by

          @mickym sagte in Blockly Verständnisfrage:

          Genau. Du benötigst also 2 Trigger - einmal für die Tagesereignisse und einmal für den Bewegungsmelder. Damit der Trigger vom Bewegungsmelder was vom aktuellen Sonnenstand bzw. der Uhrzeit weiß, kannst Du dann dort bestimmte Variablen setzen, die dann der Trigger vom Bewegungsmelder auswerten kann.

          Ah, ich verstehe. Ich vereinfache das mal auf den Part Sonnenuntergang. Also einen Trigger der zum Sonnenuntergang die Lampe mit 20% einschaltet und einen weiteren, der dann auf den Bewegungsmelder reagiert, aber gleichzeitig erst prüft, ob Sonnenuntergang vorbei ist?

          A 1 Reply Last reply Reply Quote 0
          • A
            Ahnungsbefreit @Der Goerch last edited by Ahnungsbefreit

            @der-goerch Ich würde das etwas anders lösen:

            Du legst mit dem Script einen Datenpunkt unter 0_userdata.0 mit z.B. dem Namen "Lampenmodus" an und setzt den in Abhängigkeit von der Uhrzeit (zu der das Skript gestartet wird) auf 0,1 oder 2 (siehe unten)

            Dann ein Trigger für Sonnenuntergang, um die Lampe auf 20% zu schalten und den Lampenmodus z.B. auf 1 zu schalten

            Und noch einen Trigger für z.B. Sonnenaufgang + X Minuten, um den Lampenmodus wieder auf 0 zu setzen

            Dann ein Trigger für 22:30, der nur den Lampenmodus auf 2 stellt

            Dann einen Trigger für den Bewegungsmelder, in dem prüfst Du den Lampenmodus. Wenn der Lampenmodus >0 ist, Lampe anschalten. Dann Timeout löschen und im Timeout in Abhängigkeit vom Lampenmodus entweder aus oder eben auf 20% schalten.

            Ich hoffe, das war verständlich?

            EDIT: Kleiner Nebeneffekt: Wenn Du später noch mehr Lampen hast, können die auch den Lampenmodus nutzen

            Der Goerch 1 Reply Last reply Reply Quote 0
            • Der Goerch
              Der Goerch @Ahnungsbefreit last edited by Der Goerch

              @ahnungsbefreit sagte in Blockly Verständnisfrage:

              @der-goerch Ich würde das etwas anders lösen:

              Du legst mit dem Script einen Datenpunkt unter 0_userdata.0 mit z.B. dem Namen "Lampenmodus" an und setzt den in Abhängigkeit von der Uhrzeit (zu der das Skript gestartet wird) auf 0,1 oder 2 (siehe unten)

              Dann ein Trigger für Sonnenuntergang, um die Lampe auf 20% zu schalten und den Lampenmodus z.B. auf 1 zu schalten

              Und noch einen Trigger für z.B. Sonnenaufgang + X Minuten, um den Lampenmodus wieder auf 0 zu setzen

              Dann ein Trigger für 22:30, der nur den Lampenmodus auf 2 stellt

              Dann einen Trigger für den Bewegungsmelder, in dem prüfst Du den Lampenmodus. Wenn der Lampenmodus >0 ist, Lampe anschalten. Dann Timeout löschen und im Timeout in Abhängigkeit vom Lampenmodus entweder aus oder eben auf 20% schalten.

              Ich hoffe, das war verständlich?

              EDIT: Kleiner Nebeneffekt: Wenn Du später noch mehr Lampen hast, können die auch den Lampenmodus nutzen

              Ich Idiot 😄 jetzt habe ich es verstanden. Vielen lieben Dank für eure Hilfe!

              EDIT: Noch eine Frage - wie kann ich das Thema hier auf gelöst setzen?

              A 1 Reply Last reply Reply Quote 0
              • A
                Ahnungsbefreit @Der Goerch last edited by

                @der-goerch Ganz oben Deinen ersten Beitrag aufrufen und dort die Überschrift editieren.

                Der Goerch 1 Reply Last reply Reply Quote 0
                • Der Goerch
                  Der Goerch @Ahnungsbefreit last edited by

                  @ahnungsbefreit sagte in Blockly Verständnisfrage:

                  @der-goerch Ganz oben Deinen ersten Beitrag aufrufen und dort die Überschrift editieren.

                  Merci!

                  1 Reply Last reply Reply Quote 0
                  • F
                    Fabian1 last edited by

                    @der-goerch said in [gelöst] Blockly Verständnisfrage:

                    Folgendes Szenario: Zum Sonnenuntergang soll die Leuchte eingeschaltet werden und zwar mit 20%. Ab dem Zeitpunkt soll auch der Bewegungsmelder seine Arbeit aufnehmen. Bei einer erkannten Bewegung soll die Leuchte auf 100% Helligkeit gestellt werden und wenn keine Bewegung mehr erkannt wird, die Lampe wieder auf 20% dimmen.
                    Ab 22:30 soll sich das Verhalten allerdings ändern. Die Lampe soll jetzt nicht mehr auf 20% leuchten sondern ausgehen. Und nur bei Bewegung auf 100% gehen, wenn keine Bewegung, dann wieder ausgehen (das Licht soll ja nicht die ganze Nacht leuchten...).

                    Hier das ganze mit Javascript:

                    const lightId = "Haustür level"; // ID der Lampe
                    const motionSensorId = "BWMEingangVorne presence"; // ID des Bewegungsmelders
                    
                    // Nachtzeitpunkt
                    const nightTime = "22:30"; // Nachtmodus beginnt ab 22:30 Uhr
                    
                    // Funktion zur Bestimmung, ob Nachtmodus aktiv ist
                    function isNight() {
                        const now = new Date();
                        const [hours, minutes] = nightTime.split(":").map(Number);
                        return now.getHours() >= hours && now.getMinutes() >= minutes;
                    }
                    
                    // Bewegungsmelder-Trigger
                    on({ id: motionSensorId, change: "any" }, (obj) => {
                        const motionDetected = obj.state.val;
                    
                        if (isNight()) {
                            // Verhalten ab 22:30 Uhr
                            if (motionDetected) {
                                setState(lightId, 100); // Licht auf 100% bei Bewegung
                            } else {
                                setState(lightId, 0); // Licht aus ohne Bewegung
                            }
                        } else {
                            // Verhalten zwischen Sonnenuntergang und 22:30 Uhr
                            if (motionDetected) {
                                setState(lightId, 100); // Licht auf 100% bei Bewegung
                            } else {
                                setState(lightId, 20); // Licht auf 20% ohne Bewegung
                            }
                        }
                    });
                    
                    // Sonnenuntergangs-Trigger
                    on({ id: "system.sun.sunset", change: "any" }, () => {
                        // Zum Sonnenuntergang Licht auf 20% schalten
                        setState(lightId, 20); // Licht auf 20%
                    });
                    
                    // Nachtmodus-Trigger (ab 22:30 Uhr)
                    schedule("30 22 * * *", () => {
                        setState(lightId, 0); // Licht aus bei Nachtstart
                    });
                    
                    
                    A 1 Reply Last reply Reply Quote 0
                    • A
                      Ahnungsbefreit @Fabian1 last edited by Ahnungsbefreit

                      @fabian1 Ich habe es nicht ausprobiert aber so auf den ersten Blick ist bei Dir isNight() etwas eingeschränkt auf die Zeit, wenn die Stunde zwischen 22 und 23 ist UND die Minute zwischen 30 und 59. Oder habe ich das was übersehen?

                      EDIT: Und noch etwas: Das Ausschalten des Lichts soll ja wohl nicht über den Bewegungsmelder erfolgen, sondern erst nach X Minuten.

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      798
                      Online

                      31.6k
                      Users

                      79.6k
                      Topics

                      1.3m
                      Posts

                      4
                      9
                      354
                      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