Skip to content
  • Home
  • 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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Skript nur einmal am Tag ausführen und dann sperren

NEWS

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

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

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

Skript nur einmal am Tag ausführen und dann sperren

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
36 Beiträge 7 Kommentatoren 5.3k 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
    #13

    Inzwischen hast Du noch weitere Fehler eingebaut. Hier mal das erste Skript von Dir mit Korrekturen:

    ! ````
    var request = require ('request');
    var Url = "http://192.168.178.58:50000/track=gong.mp3";
    var bwm = "hm-rpc.0.MEQ1796971.1.MOTION"; // Bewegungsmelder Küche
    ! var freigabe = true;
    ! on({id: bwm, val: true}, function (obj) {
    if ( isTimeInRange('10:00:00', '10:45:00') && freigabe) // Trigger auslösen
    {
    morgenwetter(); // Ansage
    freigabe = false;
    log('Guten Morgen und Wetterbericht ausgegeben');
    }
    });

    function morgenwetter() {
        //Wochentag ermitteln
        var d = new Date ();
        var weekday = new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
        var w = weekday[d.getDay()];
    

    ! //Tagesdatum ermitteln
    var t = d.getDate();
    ! //Monat ermitteln
    var month = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
    var m = month[d.getMonth()];
    ! //Jahr ermitteln
    var j = d.getFullYear()
    ! //Stunde ermitteln
    h = d.getHours()
    ! //Minute ermitteln
    mi = d.getMinutes()
    ! // Die Außentemperatur ist xx. Das Wetter heute ist xx
    // Einfache Temperaturansage mit SayIt.
    // Variante 1 mittels splitten der Temperatur, damit die Ansage nicht
    // "Es sind 18 Punkt 2 Grad " sagt.
    ! var Temperatursensor = getState("hm-rpc.0.MEQ1600895.1.TEMPERATURE"); /Temperatursensor Balkon/
    var temperatur = Temperatursensor.val.toString();
    var temp_array = [];
    ! var MaxTemperatur = getState("yr.0.forecast.day0.temperature_max"); /Forecast of temperature for today/
    var maxtemp = MaxTemperatur.val.toString();
    var maxtemp_array = [];
    ! var witterung = getState("yr.0.forecast.day0.text").val ; /Actual text/
    log('Wetter: ' + witterung);
    ! temp_array = temperatur.split(".");
    ! // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist.
    // Es wird dann nur "18" gelesen.
    if (!temp_array[1]) {
    temp_array[1] = "0";
    log("Die Nach-Kommastelle in temp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt.");
    }
    ! maxtemp_array = maxtemp.split(".");
    ! // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist.
    // Es wird dann nur "18" gelesen.
    if (!maxtemp_array[1]) {
    maxtemp_array[1] = "0";
    log("Die Nach-Kommastelle in maxtemp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt.");
    }
    var ansage = "Einen schönen guten Morgen! Heute ist "
    + w + " der " + t + "te" + m + j
    + ", Es ist " + h + " Uhr und " + mi
    + " Minuten." + " Temperatur "
    + temp_array[0] + "," + temp_array[1]
    + " Grad. " + witterung + ". Maximal werden es heute. "
    + maxtemp_array[0] + "," + maxtemp_array[1] + " Grad. ";
    ! Url = "http://192.168.178.58:50000/track=4fachgong.mp3|tts=" + ansage;
    request(Url);
    }
    ! // Flag für Freigabe auf true zurücksetzen
    schedule("59 4 * * *", function() {
    freigabe = 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
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #14
      ...
      var Zeit1 =  isTimeInRange('13:12:00', '13:20:00');
      
      var freigabe = getState("javascript.0.Freigabe_Morgenwetter").val/*Freigabe_Morgenwetter*/;
      
      on({id: bwm, val: true}, function (obj) {
         if ( freigabe === 1 && Zeit1 === true ) // Trigger auslösen
         ...
      
      

      funktioniert so nicht, da so die Funktion isTimeInRange('13:12:00', '13:20:00') nur bei Skriptstart ausgeführt wird, also die aktuelle Zeit bei Bewegung nicht erfasst.

      Weshalb plötzlich die Verwendung eines Datenpunktes für die Freigabe ??

      Außerdem ist setState("javascript.0.Freigabe_Morgenwetter", true) falsch angewendet.

      EDIT: Falls Du für Freigabe deshalb einen Datenpunkt verwenden willst, damit die Freigabe einen (Skript-)Neustart übersteht, dann muss es so erfolgen:

      var request = require ('request');
      var Url = "http://192.168.178.58:50000/track=gong.mp3";
      var bwm = "hm-rpc.0.MEQ1796971.1.MOTION"; // Bewegungsmelder Küche
      var idFreigabe =  "javascript.0.Freigabe_Morgenwetter"; //Freigabe_Morgenwetter
      
      on({id: bwm, val: true}, function (obj) {  // Trigger auslösen
         var freigabe = getState(idFreigabe).val;
         if ( freigabe && isTimeInRange('13:12:00', '13:20:00')) 
         {
            morgenwetter();                   // Ansage
            setState(idFreigabe, false);
            log('Guten Morgen und Wetterbericht ausgegeben');
         }   
      });
      
      ...
      
      // DP Freigabe auf true zurücksetzen
      schedule("23 13 * * *", function() {
          setState(idFreigabe, 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
      • P Offline
        P Offline
        pix
        schrieb am zuletzt editiert von
        #15

        Hallo Nordlicht,

        wenn du isTimeInRange sparen willst oder tatsächlich ein Sperre haben möchtest (die du evtl sogar mit VIS zusätzlich ein/ausschalten kannst), geht auch die Nutzung der neuen Funktion startScript() und stopScript(). Die hat Bluefox neuerdings eingebaut.

        Dann zwei Skripte

        Skript 1, Name "Bewegungsmelder_freigeben"

        schedule("20 12 * * *", startScript("Bewegung_erkennen", true)); // "freigeben", also Skript starten
        schedule("30 12 * * *", startScript("Bewegung_erkennen", false)); // "sperren", Skript stoppen
        
        

        Skript 2, Name "Bewegung_erkennen" (wie im Skript 1 verwendet)

        function morgenwetter() {
            // ...
        }
        
        var bwm = "hm-rpc.0.MEQ1796971.1.MOTION"; // Bewegungsmelder Küche
        on({id: bwm, val: true}, function(obj) {
            morgenwetter();  
            setTimeout(function() {
                stopScript();
            }, 10 * 1000); // Stoppt sich selbst nach 10s
        });
        
        

        Skript 1 läuft immer und schaltet täglich um 12:20 Skript 2 auf aktiv und um 12:30 auf inaktiv (wie grün und rot im Skriptreiter)

        Skript 2 prüft (nur wenn aktiv) auf Bewegungen. Wenn ja, wird morgenwetter() aufgerufen und dann um 10s verzögert das Skript wieder gestoppt.

        Per VIS kannst du nun die Sperre ausschalten/das Skript einschalten, durch Nutzung eines ToggleWidgets oder SetValue-Widgets mit dem Datenpunkt "javascript.0.scriptEnabled.common.Bewegung_erkennen" (Pfad und Instanz natürlich anpassen)

        Gruß

        Pix

        ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

        1 Antwort Letzte Antwort
        0
        • N Offline
          N Offline
          Nordlicht
          schrieb am zuletzt editiert von
          #16

          @paul53:

          Inzwischen hast Du noch weitere Fehler eingebaut. Hier mal das erste Skript von Dir mit Korrekturen:

          ! ````
          var request = require ('request');
          var Url = "http://192.168.178.58:50000/track=gong.mp3";
          var bwm = "hm-rpc.0.MEQ1796971.1.MOTION"; // Bewegungsmelder Küche
          ! var freigabe = true;
          ! on({id: bwm, val: true}, function (obj) {
          if ( isTimeInRange('10:00:00', '10:45:00') && freigabe) // Trigger auslösen
          {
          morgenwetter(); // Ansage
          freigabe = false;
          log('Guten Morgen und Wetterbericht ausgegeben');
          }
          });

          function morgenwetter() {
              //Wochentag ermitteln
              var d = new Date ();
              var weekday = new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
              var w = weekday[d.getDay()];
          

          ! //Tagesdatum ermitteln
          var t = d.getDate();
          ! //Monat ermitteln
          var month = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
          var m = month[d.getMonth()];
          ! //Jahr ermitteln
          var j = d.getFullYear()
          ! //Stunde ermitteln
          h = d.getHours()
          ! //Minute ermitteln
          mi = d.getMinutes()
          ! // Die Außentemperatur ist xx. Das Wetter heute ist xx
          // Einfache Temperaturansage mit SayIt.
          // Variante 1 mittels splitten der Temperatur, damit die Ansage nicht
          // "Es sind 18 Punkt 2 Grad " sagt.
          ! var Temperatursensor = getState("hm-rpc.0.MEQ1600895.1.TEMPERATURE"); /Temperatursensor Balkon/
          var temperatur = Temperatursensor.val.toString();
          var temp_array = [];
          ! var MaxTemperatur = getState("yr.0.forecast.day0.temperature_max"); /Forecast of temperature for today/
          var maxtemp = MaxTemperatur.val.toString();
          var maxtemp_array = [];
          ! var witterung = getState("yr.0.forecast.day0.text").val ; /Actual text/
          log('Wetter: ' + witterung);
          ! temp_array = temperatur.split(".");
          ! // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist.
          // Es wird dann nur "18" gelesen.
          if (!temp_array[1]) {
          temp_array[1] = "0";
          log("Die Nach-Kommastelle in temp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt.");
          }
          ! maxtemp_array = maxtemp.split(".");
          ! // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist.
          // Es wird dann nur "18" gelesen.
          if (!maxtemp_array[1]) {
          maxtemp_array[1] = "0";
          log("Die Nach-Kommastelle in maxtemp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt.");
          }
          var ansage = "Einen schönen guten Morgen! Heute ist "
          + w + " der " + t + "te" + m + j
          + ", Es ist " + h + " Uhr und " + mi
          + " Minuten." + " Temperatur "
          + temp_array[0] + "," + temp_array[1]
          + " Grad. " + witterung + ". Maximal werden es heute. "
          + maxtemp_array[0] + "," + maxtemp_array[1] + " Grad. ";
          ! Url = "http://192.168.178.58:50000/track=4fachgong.mp3|tts=" + ansage;
          request(Url);
          }
          ! // Flag für Freigabe auf true zurücksetzen
          schedule("59 4 * * *", function() {
          freigabe = true;
          });
          ```` `

          Das liegt vielleicht auch daran, dass - so wie ich als Anfänger es sehe - zwei verschiedene Wege gehen. Der von Dir und jener von @bahnuhr unterscheiden sich was das setzen von "freigabe" angeht. Welcher Weg nun der bessere ist vermag ich nicht zu beurteilen.

          Mit

          freigabe = false;
          

          funktioniert es hier nicht, wieso und weshalb auch immer. Verwende ich stattdessen

          setState("javascript.0.Freigabe_Morgenwetter", 1)
          bzw.
          setState("javascript.0.Freigabe_Morgenwetter", 0)
          

          wird zumindest der Status richtig gesetzt bzw. gelöscht.

          Vorteil dieser Variante meines Erachtens, ich kann den aktuellen Status in den Objekten einsehen und ggf. manuell verändern.

          Bei "freigabe=false" bzw. "freigabe=true" ist das nicht der Fall.

          Nichts desto trotz passiert folgendes:

          Ungeachtet der Freigabe und des Zeitfensters wird die Ansage bei jeder festgestellten Bewegung ausgelöst.

          Ich glaube es ja schon langsam nicht mehr….. :shock:

          Verwende ich den von Dir zuletzt korrigierten Skript verhält es sich übrigens ganz genauso.

          1 Antwort Letzte Antwort
          0
          • N Offline
            N Offline
            Nordlicht
            schrieb am zuletzt editiert von
            #17

            @pix:

            Hallo Nordlicht,

            wenn du isTimeInRange sparen willst oder tatsächlich ein Sperre haben möchtest (die du evtl sogar mit VIS zusätzlich ein/ausschalten kannst), geht auch die Nutzung der neuen Funktion startScript() und stopScript(). Die hat Bluefox neuerdings eingebaut.

            Gruß

            Pix `

            Hi Pix,

            diese Funktion ist in jedem Fall interessant. Die merke ich mir für andere Projekte.

            Hier ist sie nicht einsetzbar, der BWM muss immer aktiv bleiben, da er auch noch das Licht steuert.

            Irgendwie wird man das hier schon noch gelöst bekommen.

            Aber vielen Dank trotzdem!

            Gruß

            Thomas

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              pix
              schrieb am zuletzt editiert von
              #18

              Es ist nicht der Bewegunsmelder, der gesperrt wird, sondern nur dieses eine Skript.

              Pix

              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

              1 Antwort Letzte Antwort
              0
              • N Offline
                N Offline
                Nordlicht
                schrieb am zuletzt editiert von
                #19

                @pix:

                Es ist nicht der Bewegunsmelder, der gesperrt wird, sondern nur dieses eine Skript.

                Pix `

                Ok, dann war das ein Missverständnis.

                Habe es mal so eingebaut.

                Aber es wirft folgenden Fehler aus, egal wie das programm genannt wird:

                15:32:50.584	[info]	javascript.1 Stop script script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben
                15:32:50.587	[info]	javascript.0 Stop script script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben
                15:32:50.609	[info]	javascript.0 Start javascript script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben
                15:32:50.610	[error]	javascript.0 script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben: Cannot start "script.js.javascript.0.scriptEnabled.TTS_Mediaplayer.Bewegung_erkennen", because not found
                15:32:50.610	[error]	javascript.0 script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben: schedule callback missing
                15:32:50.610	[error]	javascript.0 script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben: Cannot start "script.js.javascript.0.scriptEnabled.TTS_Mediaplayer.Bewegung_erkennen", because not found
                15:32:50.610	[error]	javascript.0 script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben: schedule callback missing
                15:32:50.610	[info]	javascript.0 script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben: registered 0 subscriptions and 0 schedules
                
                15:42:37.160	[info]	javascript.1 Stop script script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben
                15:42:37.159	[info]	javascript.0 Stop script script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben
                15:42:37.173	[info]	javascript.0 Start javascript script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben
                15:42:37.174	[error]	javascript.0 script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben: Cannot start "script.js.Bewegung_erkennen", because not found
                15:42:37.174	[error]	javascript.0 script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben: schedule callback missing
                15:42:37.174	[error]	javascript.0 script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben: Cannot start "script.js.Bewegung_erkennen", because not found
                15:42:37.174	[error]	javascript.0 script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben: schedule callback missing
                15:42:37.174	[info]	javascript.0 script.js.TTS_Mediaplayer.Bewegungsmelder_freigeben: registered 0 subscriptions and 0 schedules
                
                1 Antwort Letzte Antwort
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #20

                  @Nordlicht:

                  Ungeachtet der Freigabe und des Zeitfensters wird die Ansage bei jeder festgestellten Bewegung ausgelöst.

                  Ich glaube es ja schon langsam nicht mehr….. :shock:

                  Verwende ich den von Dir zuletzt korrigierten Skript verhält es sich übrigens ganz genauso. `
                  Habe das folgende Skript bei mir getestet und es funktioniert wie es soll:

                  var request = require ('request');
                  var Url = "http://192.168.178.58:50000/track=gong.mp3";
                  var bwm = "javascript.1.MOTION"; // Bewegungsmelder Küche
                  var idFreigabe =  "javascript.1.Freigabe_Morgenwetter"; //Freigabe_Morgenwetter
                  
                  on({id: bwm, val: true}, function (obj) {  // Trigger auslösen
                     var freigabe = getState(idFreigabe).val;
                     if ( freigabe && isTimeInRange('15:48:00', '16:00:00')) 
                     {
                        setState(idFreigabe, false);
                        morgenwetter();                   // Ansage
                        log('Guten Morgen und Wetterbericht ausgegeben');
                     }   
                  });
                  
                  function morgenwetter() {
                      log('Funktion morgenwetter ausgeführt');
                  }
                  
                  // DP Freigabe auf true zurücksetzen
                  schedule("23 13 * * *", function() {
                      setState(idFreigabe, true);
                  });
                  
                  

                  Bei Wechsel von false auf true des DP "javascript.1.MOTION" erfolgen die beiden Logs und der DP "javascript.1.Freigabe_Morgenwetter" wird von true auf false gesetzt. Eine nochmalige Ausgabe der Logs bei erneutem Wechsel von false auf true (MOTION) erfolgt nicht.

                  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
                  • bahnuhrB Online
                    bahnuhrB Online
                    bahnuhr
                    Forum Testing Most Active
                    schrieb am zuletzt editiert von
                    #21

                    Nochmal

                    ! ````
                    ! function weiter() {
                    Sprache ausgeben ......
                    SetState('Java....anzahl', 1);
                    }
                    ! on({id: '......motion'}, function (obj) {
                    ! var Anzahl = getState('Java.....anzahl').val;
                    var Zeit1 = isTimeInRange('12:12:00', '12:20:00');
                    ! if ( Anzahl === 0 && Zeit1 === true ) {
                    Weiter();
                    }
                    });

                    
                    Paul hat recht. Die vars müssen zu on.
                    
                    Nordlicht, warum probierst du dies nicht einmal aus?????
                    
                    Deinen Sprachteile musst du doch nur oben bei weiter() einfügen.
                    
                    Mit freundlichen Grüßen
                    
                    Dieter

                    Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                    Danke.
                    gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                    ScreenToGif :https://www.screentogif.com/downloads.html

                    1 Antwort Letzte Antwort
                    0
                    • N Offline
                      N Offline
                      Nordlicht
                      schrieb am zuletzt editiert von
                      #22

                      @bahnuhr:

                      Nochmal `

                      Ich probiere ja ständig aus was hier alles so beigetragen wird.
                      > Paul hat recht. Die vars müssen zu on.
                      Hier http://forum.iobroker.net/viewtopic.php?p=49661#p49661 war es halt anders dargestellt.

                      Es ging mehrfach hin und her was die "Freigabe" betrifft. Als Neuling kann man hier schon schwer ins Schleudern kommen…. das ist keine böse Absicht.

                      Ich gehe aber davon aus, dass es so richtig ist (freigabe

                         if ( freigabe === true && isTimeInRange('16:26:00', '17:00:00')) 
                      
                      

                      und nicht so
                      > if ( freigabe && isTimeInRange('16:26:00', '17:00:00'))
                      Oder?

                      Hab es eben so wie genannt am laufen…. ich werde sehen ob das funzt.

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

                        @Nordlicht:

                        Hier http://forum.iobroker.net/viewtopic.php?p=49661#p49661 war es halt anders dargestellt. `
                        Nein, ist es nicht. Die Funktion isTimeInRange('16:26:00', '17:00:00') wird innerhalb der if-Abfrage aufgerufen und nicht bei Skriptstart.
                        @Nordlicht:

                        Ich gehe aber davon aus, dass es so richtig ist

                           if ( freigabe === true && isTimeInRange('16:26:00', '17:00:00'))
                        

                        und nicht so

                            if ( freigabe && isTimeInRange('16:26:00', '17:00:00'))
                        

                        Oder? `
                        Das ist beides im Ergebnis identisch.

                        if(x)  // prüft auf x === true  bzw.  x !== 0  bzw.  x !== null
                        if(!x)  // prüft auf x === false  bzw.  x === 0  bzw.  x === null
                        

                        Bei boolschen Werten wird ohnehin schon true oder false geliefert, bei Zahlen oder Objekten erfolgt eine implizite Typwandlung wie angegeben.

                        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
                        • N Offline
                          N Offline
                          Nordlicht
                          schrieb am zuletzt editiert von
                          #24

                          @paul53:

                          @Nordlicht:

                          Hier http://forum.iobroker.net/viewtopic.php?p=49661#p49661 war es halt anders dargestellt. Nein, ist es nicht. Die Funktion __isTimeInRange('16:26:00', '17:00:00')__ wird innerhalb der if-Abfrage aufgerufen und nicht bei Skriptstart.

                          Das bezog sich darauf, dass hier die "vars" nicht bei on standen sowie @bahnuhr es erwähnte.

                          Das klang eben so, als würde ich nicht das machen was hier vorgeschlagen wird. Und das ist nun mal nicht so.

                          Ansonsten

                          if(x)  // prüft auf x === true  bzw.  x !== 0  bzw.  x !== null
                          if(!x)  // prüft auf x === false  bzw.  x === 0  bzw.  x === null
                          

                          das glaube ich Dir gerne, aber für Anfänger ist es ohnehin nicht einfach. Da darfst Du nicht damit kommen, dass dies identisch ist.

                          Das Skript habe ich jetzt getestet, soweit eben möglich.

                          ! ````
                          var request = require ('request');
                          var Url = "http://192.168.178.58:50000/track=gong.mp3";
                          var bwm = "hm-rpc.0.MEQ1796971.1.MOTION"; // Bewegungsmelder Küche
                          var idFreigabe = "javascript.0.Freigabe_Morgenwetter"; //Freigabe_Morgenwetter
                          ! on({id: bwm, val: true}, function (obj) { // Trigger auslösen
                          var freigabe = getState(idFreigabe).val;
                          if ( freigabe === true && isTimeInRange('05:00:00', '08:00:00'))
                          {
                          setState(idFreigabe, false);
                          morgenwetter(); // Ansage
                          log('Guten Morgen und Wetterbericht ausgegeben');
                          }
                          });
                          ! function morgenwetter() {
                          //Wochentag ermitteln
                          var d = new Date ();
                          var weekday = new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
                          var w = weekday[d.getDay()];
                          ! //Tagesdatum ermitteln
                          var t = d.getDate();
                          ! //Monat ermitteln
                          var month = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
                          var m = month[d.getMonth()];
                          ! //Jahr ermitteln
                          var j = d.getFullYear()
                          ! //Stunde ermitteln
                          h = d.getHours()
                          ! //Minute ermitteln
                          mi = d.getMinutes()
                          ! // Die Außentemperatur ist xx. Das Wetter heute ist xx
                          // Einfache Temperaturansage mit SayIt.
                          // Variante 1 mittels splitten der Temperatur, damit die Ansage nicht
                          // "Es sind 18 Punkt 2 Grad " sagt.
                          ! var Temperatursensor = getState("hm-rpc.0.MEQ1600895.1.TEMPERATURE"); /Temperatursensor Balkon/
                          var temperatur = Temperatursensor.val.toString();
                          var temp_array = [];
                          ! var MaxTemperatur = getState("yr.0.forecast.day0.temperature_max"); /Forecast of temperature for today/
                          var maxtemp = MaxTemperatur.val.toString();
                          var maxtemp_array = [];
                          ! var witterung = getState("yr.0.forecast.day0.text").val ; /Actual text/
                          log('Wetter: ' + witterung);
                          ! temp_array = temperatur.split(".");
                          ! // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist.
                          // Es wird dann nur "18" gelesen.
                          if (!temp_array[1]) {
                          temp_array[1] = "0";
                          log("Die Nach-Kommastelle in temp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt.");
                          }
                          ! maxtemp_array = maxtemp.split(".");
                          ! // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist.
                          // Es wird dann nur "18" gelesen.
                          if (!maxtemp_array[1]) {
                          maxtemp_array[1] = "0";
                          log("Die Nach-Kommastelle in maxtemp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt.");
                          }
                          var ansage = "Einen schönen guten Morgen! Heute ist "
                          + w + " der " + t + "te" + m + j
                          + ", Es ist " + h + " Uhr und " + mi
                          + " Minuten." + " Temperatur "
                          + temp_array[0] + "," + temp_array[1]
                          + " Grad. " + witterung + ". Maximal werden es heute. "
                          + maxtemp_array[0] + "," + maxtemp_array[1] + " Grad. ";
                          ! Url = "http://192.168.178.58:50000/track=gong.mp3|tts=" + ansage;
                          request(Url);
                          log('Funktion morgenwetter ausgeführt');
                          }
                          ! // DP Freigabe auf true zurücksetzen
                          schedule("59 4 * * *", function() {
                          setState(idFreigabe, true);
                          });

                          Es scheint zu klappen, hundertprozentig weiß ich dass dann morgen.
                          
                          Mit
                          

                          if ( freigabe && isTimeInRange('05:00:00', '08:00:00'))

                          hat es übrigens nicht ausgelöst. Weiß der Geier warum…..
                          
                          Nicht böse sein, aber Anfänger sehen eben oft den Wald vor lauter Bäumen nicht.
                          
                          Selbstverständlichkeiten für Fortgeschrittene finden da noch nicht den nötigen Platz.
                          
                          Danke für die Hilfe und ich werde morgen nochmals berichten ob es klappt.
                          
                          Thomas
                          1 Antwort Letzte Antwort
                          0
                          • paul53P Offline
                            paul53P Offline
                            paul53
                            schrieb am zuletzt editiert von
                            #25

                            @Nordlicht:

                            das glaube ich Dir gerne, aber für Anfänger ist es ohnehin nicht einfach. Da darfst Du nicht damit kommen, dass dies identisch ist. `
                            Da ich annehme, dass Du nicht alle Skripte selbst entwickelst, sondern auch in vorhandene Skripte schaust und diese vermutlich verstehen möchtest, wird Dir die Kenntnis dieses Zusammenhanges helfen. Ich würde z.B. niemals schreiben

                            if(x === true)
                            

                            ,es sei denn, ich möchte gleichzeitig den Typ (boolean) testen.

                            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
                            • paul53P Offline
                              paul53P Offline
                              paul53
                              schrieb am zuletzt editiert von
                              #26

                              Übrigens kann die globale Funktion

                              isTimeInRange('05:00:00', '08:00:00')
                              

                              ersetzt werden durch die vom JS-Adapter bereit gestellte Funktion

                              compareTime(getDateObject('05:00'), getDateObject('08:00'), 'between')
                              

                              EDIT: Die Funktion compareTime() gibt es erst ab Version 3.0.10 des JS-Adapters.

                              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
                              • N Offline
                                N Offline
                                Nordlicht
                                schrieb am zuletzt editiert von
                                #27

                                @paul53:

                                Übrigens kann die globale Funktion

                                isTimeInRange('05:00:00', '08:00:00')
                                

                                ersetzt werden durch die vom JS-Adapter bereit gestellte Funktion

                                compareTime(getDateObject('05:00'), getDateObject('08:00'), 'between')
                                ```` `  
                                

                                Das ist es eben.

                                Es fehlt ein Handbuch, das speziell solche grundlegenden Dinge (auch mit Praxisbeispielen) aufzeigt.

                                ioBroker hat viele "Grundfunktionen" sag ich mal. Mag sein dass vieles hier im Forum steht, ist nur die Frage wo und wie man es suchen soll.

                                Das soll jetzt kein Vorwurf sein, nur eine Feststellung. Ich bin sicher sehr vielen Anfängern wäre damit geholfen.

                                1 Antwort Letzte Antwort
                                0
                                • Jeeper.atJ Offline
                                  Jeeper.atJ Offline
                                  Jeeper.at
                                  schrieb am zuletzt editiert von
                                  #28

                                  Nun, gerade das oben beschriebene ist JavaScript. Und da gibt es Doku bis zum abwinken im Netz.

                                  Bei anderen Adaptern sehe ich das ein. (auch wenn diese Lücke dankenswerterweise durch Rainer laufend geschlossen wird).

                                  Aber gerade be JavaScript braucht man meines Erachtens nicht noch viel extra schreiben.

                                  Lg

                                  Günther

                                  1 Antwort Letzte Antwort
                                  0
                                  • N Offline
                                    N Offline
                                    Nordlicht
                                    schrieb am zuletzt editiert von
                                    #29

                                    @Jeeper.at:

                                    Nun, gerade das oben beschriebene ist JavaScript. Und da gibt es Doku bis zum abwinken im Netz.

                                    Bei anderen Adaptern sehe ich das ein. (auch wenn diese Lücke dankenswerterweise durch Rainer laufend geschlossen wird).

                                    Aber gerade be JavaScript braucht man meines Erachtens nicht noch viel extra schreiben.

                                    Lg

                                    Günther `

                                    Es geht nicht um die Erklärung von Javascript.

                                    Ich meinte damit eine Sammlung von Beispielen.

                                    -Wenn ich "etwas nur einmal am Tag laufen lassen will"…. dann geht das so.

                                    -Wenn ich eine Sprachausgabe haben möchte.... dann so

                                    Den kompletten Funktionsumfang von Javascript braucht man nicht, wenn man nicht gerade das mega-Projekt vor hat.

                                    ioBroker arbeitet mit Jacascript, richtig. Aber der spezielle Verwendungszweck, der müsste zusammengfasst sein.

                                    Aber egal, ich will hier keinen Zoff produzieren, das ist ganz alleine meine Ansicht.

                                    Gruß

                                    Thomas

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

                                      @Nordlicht:

                                      Das ist es eben.

                                      Es fehlt ein Handbuch, das speziell solche grundlegenden Dinge (auch mit Praxisbeispielen) aufzeigt. `
                                      Diesmal bin ich nicht dieser Meinung.

                                      Im Gegensatz zu grundlegenden Funktionen sehe ich eine Aufgabenstellung mit javascript um ein
                                      > Skript nur einmal am Tag ausführen und dann sperren
                                      nicht als Anfängerthema.

                                      GST888/Steinwedel hat eine schöne Einsteigerdoku mit Praxisbeispielen geschrieben.

                                      http://www.iobroker.net/docu/?page_id=5385&lang=de

                                      Und die ist auf der Website unter Scripte als erster Menüpunkt wirklich leicht zu finden.

                                      Was den Umfang des javascript-Adapters angeht, hat Bluefox sich die Finger wund getippt und diese umfangreiche Doku auf Github angefertigt:

                                      https://github.com/iobroker/ioBroker.ja … /README.md

                                      Hier wird jeder einzelne Befehl, der im Adapter integriert ist mit Syntax erklärt.

                                      Und auch diese Seite ist ganz einfach zu finden, indem man im Admin bei dem Adapter auf das Fragezeichen rechts außen klickt

                                      Dies steht in der Doku zum Admin
                                      Admin-Doku"](?) Wenn dieser Button aktiv ist, verlinkt er zu der Hilfeseite zu dem Adapter. Diese befindet sich üblicherweise auf GitHub, wo auch der Adapter gepflegt wird. `

                                      Gruß

                                      Rainer

                                      EDIT: zu langsam getippt und Links gesucht :(

                                      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
                                      • bahnuhrB Online
                                        bahnuhrB Online
                                        bahnuhr
                                        Forum Testing Most Active
                                        schrieb am zuletzt editiert von
                                        #31

                                        so, nun wird dir geholfen.

                                        ! ````
                                        // Idee von Nordlicht
                                        // 27.01.2017 Script von bahnuhr
                                        //
                                        ! function weiter() {

                                        // Varaiablen
                                        var idzahl = 'javascript.0.Morgenwetter.zahl'; // diese Zahl wird automatisch angelegt.
                                        var Zeit1 = isTimeInRange('05:00:00', '08:00:00');

                                        ! // Variable in Objekten anlegen
                                        createState(idzahl, {
                                        type: 'number',
                                        name: 'Anzahl der Ansagen',
                                        min: 0,
                                        def: 0,
                                        role: 'value'
                                        });
                                        ! // eigentliches Script - nix mehr ändern
                                        // Datum und Uhrzeit ermitteln
                                        var d = new Date ();
                                        var weekday = new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
                                        var w = weekday[d.getDay()];
                                        var vTag = new Date().getDate(),
                                        vMonat = new Date().getMonth()+1,
                                        vJahr = new Date().getFullYear();
                                        var sDatum = w + "," + vTag + "." + vMonat + "." + vJahr; // String mit Wochentag + Tag + Monat + Jahr (Jahr mit 4 Stellen)
                                        var vStunde = new Date().getHours(),
                                        vMinute = new Date().getMinutes();
                                        // Temperatur
                                        var Temp = parseInt(getState("hm-rpc.0.MEQ1600895.1.TEMPERATURE").val);
                                        var Temp_max = parseInt("yr.0.forecast.day0.temperature_max").val;
                                        var witterung = getState("yr.0.forecast.day0.text").val ;
                                        log('Wetter: ' + witterung);
                                        ! var vtext = "Einen schönen guten Morgen! Heute ist ";
                                        vtext = vtext + w + " " + sDatum + ",";
                                        vtext = vtext + "Es ist " + vStunde + " Uhr und " + vMinute;
                                        vtext = vtext + "Minuten. " + " Die Temperatur beträgt " + Temp + " Grad.";
                                        vtext = vtext + witterung + ". Maximal werden es heute. " + Temp_max + " Grad.";
                                        ! //Sound
                                        var request = require ('request');
                                        Url = "http://192.168.178.58:50000/track=gong.mp3|tts=" + vtext;
                                        request(Url);
                                        ! setState('javascript.0.Morgenwetter.zahl', 1);
                                        }
                                        ! // Auslöser und Schedule ---------------------------------------------------------------------------------------------------------
                                        ! on({id: "hm-rpc.0.MEQ1796971.1.MOTION"}, function() { // Bewegung Küche
                                        getState('javascript.0.Morgenwetter.zahl').val;
                                        if (zahl === 0) {
                                        weiter();
                                        log('Guten Morgen und Wetterbericht ausgegeben');
                                        }
                                        });
                                        ! // Zahl wieder auf 0 setzen
                                        schedule("59 4 * * *", function() {
                                        setState('javascript.0.Morgenwetter.zahl', 0);
                                        });
                                        ! ````

                                        Habs mal umgeschrieben und verkürzt. so hätte ich es geschrieben.

                                        Probier es aus.

                                        mfg

                                        Dieter

                                        P.S.

                                        getestet hab ichs nicht. Hab ja andere HMid.

                                        Falls Fragen, melden.


                                        Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                                        Danke.
                                        gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                                        ScreenToGif :https://www.screentogif.com/downloads.html

                                        1 Antwort Letzte Antwort
                                        0
                                        • N Offline
                                          N Offline
                                          Nordlicht
                                          schrieb am zuletzt editiert von
                                          #32

                                          @bahnuhr:

                                          so, nun wird dir geholfen. `
                                          Danke für Deine Mühe, ich werde das so mal einbauen.

                                          @Homoran:

                                          Diesmal bin ich nicht dieser Meinung. `
                                          Das musst Du ja auch nicht, jeder hat so seine Sicht auf die Dinge.

                                          Ich will hier auch gar nicht weiter eintauchen, dafür ist dieses Forum nicht geschaffen worden um Meinungsverschiedenheiten dieser Kategorie zu klären.

                                          Und… ich will auch niemandem zu nahe treten mit der Arbeit die er hier einbringt. Ich würde es auch tun.... könnte ich es denn.

                                          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

                                          765

                                          Online

                                          32.4k

                                          Benutzer

                                          81.6k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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