Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Script mit Astro und Variablen Lampe einschalten

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Script mit Astro und Variablen Lampe einschalten

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
22 Beiträge 4 Kommentatoren 4.0k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von
    #7

    @Homoran:

    …hatte mich deine Aussage von eben etwas irritiert, dass keine UND oder ODER Verknüpfungen bei Triggern möglich seien. `
    Auch bei HM werden Trigger ausschließlich ODER-Verknüpft. Die ODER- bzw. UND-Verknüpfungen in der WebUI prüfen die statischen Bedingungen zur Entscheidung, welcher Zweig ausgeführt werden soll.
    @Homoran:

    Ein solches Programm wäre für mich wieder ein Codeschnipsel mehr, js verstehen zu lernen. `
    Das Script in diesem Beispiel ist dazu geeignet:

    • Deklaration Script-weiter Variablen zur Wert-Übergabe von den Triggern an die Funktion mit Bedingungsauswertung

    • Funktion mit Auswertung der Werte in Bedingungen (mit ODER- und UND-Verknüpfung)

    • 5 Auslöser (schedule, on).

    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

    1 Antwort Letzte Antwort
    0
    • HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #8

      @paul53:

      Das Script in diesem Beispiel ist dazu geeignet: `

      Danke

      Rainer

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #9

        @coyote:

        was ist "lampe()" im unteren Teil? Ist das ein Sprungbefehl nach "function lampe()" im ersten Teil nach den Variablen? Ja oder? `
        lampe() im unteren Teil ist ein Funktionsaufruf der Funktion (Unterprogramm) lampe(){…}, die im ersten Teil nach den Variablen deklariert ist.
        @coyote:

        Der Harmony Adapter kann 0/1/2/3 zurück geben. 0 wäre Activity gestoppt also aus und 2 wäre gestartet, also Fernseher an. `
        JS nimmt eine implizite Typwandlung vor: 0 = false, 1/2/3 = true. Wenn das Einschalten nur bei Zustand 2 erfolgen soll, musst Du den Teil ändern:

        on("harmony.0.CoyoteHarmonyHub.activities.Fernsehen", function(obj) {
            if(obj.newState.val == 2) {
              fernseh = true;
            } else {
              fernseh = false;
            }
            lampe();
        });
        

        Ebenso für "fireTV".
        2665_ical2.png

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        1 Antwort Letzte Antwort
        0
        • HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          schrieb am zuletzt editiert von
          #10

          @paul53:

          coyote hat geschrieben:

          Der Harmony Adapter kann 0/1/2/3 zurück geben. 0 wäre Activity gestoppt also aus und 2 wäre gestartet, also Fernseher an.

          JS nimmt eine implizite Typwandlung vor: 0 = false, 1/2/3 = true. Wenn das Einschalten nur bei Zustand 2 erfolgen soll, musst Du den Teil ändern: `

          Ich kenne bisher nur die Zustände 0-2, 3 ist mir nicht bekannt (heisst aber nichts)

          0 = aus

          1 = gestartet (oder soll starten)

          2 = läuft (Start bestätigt)

          Gruß

          Rainer

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          1 Antwort Letzte Antwort
          0
          • coyoteC Offline
            coyoteC Offline
            coyote
            Most Active
            schrieb am zuletzt editiert von
            #11

            Ok, alles klar soweit verstanden. Das mit der Typwandlung wusste ich nicht. Danke dir, ich werde mal testen.

            Hier Rainer aus dem Github:

            During the activity's exit sequence the status changes from 3 (stopping) to 0 (stopped)

            1 Antwort Letzte Antwort
            0
            • coyoteC Offline
              coyoteC Offline
              coyote
              Most Active
              schrieb am zuletzt editiert von
              #12

              So, scheint soweit zu funktioieren. Danke dir für das Script und deine Erklärung.

              Eine Frage noch, wie kann ich den Ausschaltzeitpunkt 1min verschieben?

              1 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #13

                @coyote:

                wie kann ich den Ausschaltzeitpunkt 1min verschieben? `
                Versuche es mal so:

                setTimeout(function() {setState("hm-rpc.0.LEQ0870824.1.STATE", false)}, 60 * 1000);  //Lampe ausschalten
                

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                1 Antwort Letzte Antwort
                0
                • coyoteC Offline
                  coyoteC Offline
                  coyote
                  Most Active
                  schrieb am zuletzt editiert von
                  #14

                  Sehr gut, das sollte funktionieren, kann ich heute Abend erst testen.

                  Gehen wir mal noch einen Schritt weiter, vllt denke ich zu kompliziert und das Ganze kann vereinfacht werden und vllt kann ich dann das Programm auf der CCU2 entfernen.

                  Ich würde ja gerne die Lampe, immer über den Wandsender ein/ausschalten können und zusätzlich im Zeitraum ab Sonnenuntergang + Fernseher/FireTV an, soll sie sich von selbst einschalten, aber ich möchte sie trotzdem über den Wandsender auch ausschalten können.

                  Momentan mach ich das über die Variable "hm-rega.0.11040" die auf true/false gesetzt wird, wenn ich den Wandsender betätige. Das ist meine AutomatikVariable, diese wird um 18:30Uhr immer auf "true" gesetzt damit die Bedingung passt für das Automatische Einschalten.

                  Das geht doch bestimmt auch anders oder? Hoffe ihr versteht was ich meine 😉

                  1 Antwort Letzte Antwort
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #15

                    @coyote:

                    Ich würde ja gerne die Lampe, immer über den Wandsender ein/ausschalten können und zusätzlich im Zeitraum ab Sonnenuntergang + Fernseher/FireTV an, soll sie sich von selbst einschalten, aber ich möchte sie trotzdem über den Wandsender auch ausschalten können. `
                    Also mit einer Taste toggeln ? Das sollte so gehen:

                    on("ID der Taste", function() {
                        var licht = getState("hm-rpc.0.LEQ0870824.1.STATE").val;
                        if (licht) setState("hm-rpc.0.LEQ0870824.1.STATE", false);
                        else setState("hm-rpc.0.LEQ0870824.1.STATE", true);
                    });
                    

                    Die Variable "tasteein" und der zugehörige Programmblock entfallen dann. Die Funktion lampe() vereinfacht sich:

                    function lampe() {
                      if (night && (fernseh || fireTV)) {
                          log("Licht nachts über TV ein");
                          setState("hm-rpc.0.LEQ0870824.1.STATE", true);         //Stehlampe einschalten
                      } else {
                          log("Licht aus");
                          setState("hm-rpc.0.LEQ0870824.1.STATE", false);        //Stehlampe ausschalten
                      }
                    }
                    
                    

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Antwort Letzte Antwort
                    0
                    • coyoteC Offline
                      coyoteC Offline
                      coyote
                      Most Active
                      schrieb am zuletzt editiert von
                      #16

                      Also ich hab das jetzt mal so umgeschrieben

                      var night = false;    // ab Sonnenuntergang bis Sonnenaufgang
                      var fernseh = false;  // Fernseher Aus/Ein
                      var fireTV = false;   // fireTV Aus/Ein
                      
                      function lampe() {
                        if (night && (fernseh || fireTV)) {
                            log("Licht nachts über TV ein");
                            setState("hm-rpc.0.LEQ0870824.1.STATE", true);         //Stehlampe einschalten
                        } else {
                            log("Licht aus");
                            setTimeout(function() {setState("hm-rpc.0.LEQ0870824.1.STATE", false)}, 60 * 1000);        //Stehlampe ausschalten
                        }
                      }
                      
                      schedule({astro:"sunset"}, function () {
                          night = true; 
                          lampe();
                      });
                      schedule({astro:"sunrise"}, function () {
                          night = false;
                          lampe();
                      });
                      
                      on("hm-rpc.0.MEQ0024459.2.PRESS_SHORT", function() {
                          var licht = getState("hm-rpc.0.LEQ0870824.1.STATE").val;
                          if (licht) setState("hm-rpc.0.LEQ0870824.1.STATE", false);
                          else setState("hm-rpc.0.LEQ0870824.1.STATE", true);
                      });
                      
                      on("harmony.0.CoyoteHarmonyHub.activities.Fernsehen", function(obj) {
                          if(obj.newState.val == 2) {
                            fernseh = true;
                          } else {
                            fernseh = false;
                          }
                          lampe();
                      });
                      
                      on("harmony.0.CoyoteHarmonyHub.activities.Fire_TV_Stick", function(obj) {
                        if(obj.newState.val == 2) {
                            fireTV = true;
                          } else {
                            fireTV = false;
                          }
                          lampe();
                      });
                      

                      funktioniert nur leider nicht. Die Lampe schaltet sich schon mal nach einer Minute wieder aus. Togglen über den Taster geht auch nicht.

                      Anschalten wenn, Fernseher/FireTV an ist funktioniert und ausschalten über den Taster, wenn die Lampe an ist geht auch. Irgendwie ist da noch ein Fehler drin

                      1 Antwort Letzte Antwort
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #17

                        @coyote:

                        funktioniert nur leider nicht. Die Lampe schaltet sich schon mal nach einer Minute wieder aus. Togglen über den Taster geht auch nicht. `
                        Keine Ahnung, warum :?

                        Vielleicht funktioniert das Toggeln so:

                        on({id:"hm-rpc.0.MEQ0024459.2.PRESS_SHORT", valNe: 2}, function() {
                            var licht = getState("hm-rpc.0.LEQ0870824.1.STATE").val;
                            if (licht) {
                                setState("hm-rpc.0.LEQ0870824.1.STATE", false);
                            } else {
                                setState("hm-rpc.0.LEQ0870824.1.STATE", true);
                            }
                        });
                        
                        

                        EDIT: Habe gerade http://forum.iobroker.org/viewtopic.php?f=21&t=448&p=2990#p3029: Anstellevon valNe: 2 funktioniert auch val:true.

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Antwort Letzte Antwort
                        0
                        • coyoteC Offline
                          coyoteC Offline
                          coyote
                          Most Active
                          schrieb am zuletzt editiert von
                          #18

                          Hi,

                          habe jetzt mal alle Konstelationen getestet, funktioniert soweit, bis auf eine.

                          Schalte ich die Lampe über den Taster ein (nach Sonnenuntergang), der TV/FireTV ist noch aus und ich schalte jetzt TV/FireTV ein, schaltet sich die Lampe nach einer Minute aus.

                          Weiß leider nicht warum, vllt hast du ja noch ne Idee @paul53

                          var night = false;    // ab Sonnenuntergang bis Sonnenaufgang
                          var fernseh = false;  // Fernseher Aus/Ein
                          var fireTV = false;   // fireTV Aus/Ein
                          
                          function lampe() {
                            if (night && (fernseh || fireTV)) {
                             log("Licht nachts über TV ein");
                                setState("hm-rpc.0.LEQ0870824.1.STATE", true);         //Stehlampe einschalten
                            } else {
                                log("Licht aus");
                                setTimeout(function() {setState("hm-rpc.0.LEQ0870824.1.STATE", false)}, 60 * 1000);        //Stehlampe ausschalten
                            }
                          }
                          
                          schedule({astro:"sunset"}, function () {
                              night = true; 
                              lampe();
                          });
                          schedule({astro:"sunrise"}, function () {
                              night = false;
                              lampe();
                          });
                          
                          on({id:"hm-rpc.0.MEQ0024459.2.PRESS_SHORT", valNe: 2}, function() {
                              var licht = getState("hm-rpc.0.LEQ0870824.1.STATE").val;
                              if (licht) {
                                  setState("hm-rpc.0.LEQ0870824.1.STATE", false);
                              } else {
                                  setState("hm-rpc.0.LEQ0870824.1.STATE", true);
                              }
                          });
                          
                          on("harmony.0.CoyoteHarmonyHub.activities.Fernsehen", function(obj) {  
                          
                              if(obj.newState.val == 2) {
                                fernseh = true;
                              } else {
                                fernseh = false;
                              }
                              lampe();
                          });
                          
                          on("harmony.0.CoyoteHarmonyHub.activities.Fire_TV_Stick", function(obj) {
                            if(obj.newState.val == 2) {
                                fireTV = true;
                              } else {
                                fireTV = false;
                              }
                              lampe();
                          });
                          
                          1 Antwort Letzte Antwort
                          0
                          • paul53P Offline
                            paul53P Offline
                            paul53
                            schrieb am zuletzt editiert von
                            #19

                            @coyote:

                            Schalte ich die Lampe über den Taster ein (nach Sonnenuntergang), der TV/FireTV ist noch aus und ich schalte jetzt TV/FireTV ein, schaltet sich die Lampe nach einer Minute aus. `
                            Das dürfte nicht sein, wenn der Wert von fireTV auf 2 bleibt, solange das Gerät an ist. Kann es sein, dass fireTV nur einen kurzen Impuls mit dem Wert 2 liefert ?

                            Füge mal zum Testen ein Log ein:

                            on("harmony.0.CoyoteHarmonyHub.activities.Fire_TV_Stick", function(obj) {
                              log("fireTV: " + obj.newState.val);
                              if ...
                            
                            

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            1 Antwort Letzte Antwort
                            0
                            • coyoteC Offline
                              coyoteC Offline
                              coyote
                              Most Active
                              schrieb am zuletzt editiert von
                              #20

                              Ich werd wahnsinnig :shock:

                              Habe jetzt nochmal alles probiert und es läuft jetzt…

                              Aber vllt hast du ne Idee wie man den doppelten Start weg bekommt oder ist es egal, schau mal

                              536_snip_20150917003343.png

                              Also bei dem HarmonyAdapter wechselt es von 0 nach 1 dann nach 2, denke deshalb kommt es doppelt oder?

                              1 Antwort Letzte Antwort
                              0
                              • paul53P Offline
                                paul53P Offline
                                paul53
                                schrieb am zuletzt editiert von
                                #21

                                @coyote:

                                Also bei dem HarmonyAdapter wechselt es von 0 nach 1 dann nach 2, denke deshalb kommt es doppelt oder? `
                                Dann dürfte es nicht 2 mal mit fireTV: true kommen.

                                Ändere mal die fireTV-Abfrage so:

                                on("harmony.0.CoyoteHarmonyHub.activities.Fire_TV_Stick", function(obj) {
                                  var fire = obj.newState.val;
                                  log("fireTV: " + fire);
                                  if(fire == 2) {
                                      fireTV = true;
                                      lampe();
                                    } else if (fire == 0) {
                                      fireTV = false;
                                      lampe();
                                    }
                                });
                                

                                und schau was passiert. Mit dem zusätzlichen Test auf 0 und dem Aufruf der Funktion lampe() innerhalb der Abfragen wird verhindert, dass lampe() auch bei den Werten 1 und 3 ausgeführt wird.

                                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                1 Antwort Letzte Antwort
                                0
                                • Homer.J.H Offline
                                  Homer.J.H Offline
                                  Homer.J.
                                  schrieb am zuletzt editiert von
                                  #22

                                  Hallo Leute vielleicht kann mir jemand helfen hab das Script jetzt angepasst so wie ich es haben möchte,

                                  hab aber das Problem das immer egal ob ich den Fernseher ein oder ausschalte es immer auf aus getriggert wird.

                                  Grüße Homer

                                  var night = false;    // ab Sonnenuntergang bis Sonnenaufgang
                                  var fernseh = false;  // Fernseher Aus/Ein
                                  
                                  function lampe() {
                                    if (night && (fernseh)) {
                                        log("Amphilight nachts über Smart TV ein");
                                        setState("hm-rpc.2.00105709A24040.3.STATE"/*Licht TV.STATE*/, true);         
                                    } else {
                                        log("Amphilight nachts über Smart TV aus");
                                        setState("hm-rpc.2.00105709A24040.3.STATE"/*Licht TV.STATE*/, false);        
                                    }
                                  }
                                  
                                  schedule({astro: "sunset"}, function () {
                                      night = true; 
                                      lampe();
                                  });
                                  
                                  schedule({astro: "sunrise"}, function () {
                                      night = false;
                                      lampe();
                                  });
                                  
                                  on("harmony.0.Harmony Hub.activities.Smart TV wiedergeben"/*activity:Smart TV wiedergeben*/, function(obj) {  
                                    var fernseh = obj.newState.val;
                                    log("fernseh: " + fernseh);
                                    if(fernseh === 2) {
                                        fernseh = true;
                                        lampe();
                                      } else if (fernseh === 0) {
                                        fernseh = false;
                                        lampe();
                                      }
                                  });
                                  
                                   21:24:56.648	[info]	javascript.0 script.js.Test.test_1: fernseh: 3
                                  21:25:02.389	[info]	javascript.0 script.js.Test.test_1: fernseh: 0
                                  21:25:02.390	[info]	javascript.0 script.js.Test.test_1: Amphilight nachts über Smart TV aus
                                  21:25:21.539	[info]	javascript.0 script.js.Test.test_1: fernseh: 1
                                  21:25:43.320	[info]	javascript.0 script.js.Test.test_1: fernseh: 2
                                  21:25:43.320	[info]	javascript.0 script.js.Test.test_1: Amphilight nachts über Smart TV aus
                                  
                                  1 Antwort Letzte Antwort
                                  0
                                  Antworten
                                  • In einem neuen Thema antworten
                                  Anmelden zum Antworten
                                  • Älteste zuerst
                                  • Neuste zuerst
                                  • Meiste Stimmen


                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  452

                                  Online

                                  32.4k

                                  Benutzer

                                  81.4k

                                  Themen

                                  1.3m

                                  Beiträge
                                  Community
                                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                  ioBroker Community 2014-2025
                                  logo
                                  • Anmelden

                                  • Du hast noch kein Konto? Registrieren

                                  • Anmelden oder registrieren, um zu suchen
                                  • Erster Beitrag
                                    Letzter Beitrag
                                  0
                                  • Aktuell
                                  • Tags
                                  • Ungelesen 0
                                  • Kategorien
                                  • Unreplied
                                  • Beliebt
                                  • GitHub
                                  • Docu
                                  • Hilfe