Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] Eine Teilfunktion meines Weckerscriptes mehrmals parallel aufrufen aber wie?

    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

    [Gelöst] Eine Teilfunktion meines Weckerscriptes mehrmals parallel aufrufen aber wie?

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

      Hi Leute,

      ich habe mir ein Weckerscript gebastelt welches das Raumlicht in verschiedenen Zimmern über eine definierte Zeit "hochfährt". Was im Prinzip auch blendend funktioniert solange nicht mehrmals die gleiche Weckzeit gewählt ist. Ich rufe über mehrere Schedule-Befehle eine Funktion auf welche dann so lange durchläuft bis das jeweilige Dimmer-Level auf 100% ist.

      Das Problem ist nun dass wenn diese Funktion mehrmals aufgerufen wird verliehrt sie die übergebene Geräte ID und erhöht nur noch den Dimmer des letzen genannten Raumes.

      Hier mal das ganze Script:

      ! ````
      // *****************************************************************************
      //
      // Wecker
      //
      //
      // V 1.0
      // *****************************************************************************
      ! // -----------------------------------------------------------------------------
      // allgemeine Variablen
      // -----------------------------------------------------------------------------
      var logging = true; // Logging on/off
      var instanz = 'javascript.0.'; // Javascript Instanz
      var pfad0 = 'Wecker.'; // Pfad innerhalb der Instanz - Status allgemien
      ! var laufzeit = 380; // Max Laufzeit in Sekunden (ca. Angabe da die Erhöhungsschritte gerundet werden.)
      var intervall = 20; // Durchlaufintervall - Nicht kleiner als 20 Sekunden
      var erhoehungs_schritt = Math.round(100 / (laufzeit / intervall)); // Ausgerechnetter Wert für jede Erhöhung
      ! var GeraeteListe = []; // Array der Geräte für die ein Wecker angelegt wird
      GeraeteListe[0] = ['Kinderzimmer_1','hm-rpc.0.LEQxxxxxx.1.LEVEL']; // Gerät 1 -> 1.Raum, 2.Datenpunkt
      GeraeteListe[1] = ['Kinderzimmer_2','hm-rpc.0.LEQxxxxxx.1.LEVEL']; // Gerät 2 -> 1.Raum, 2.Datenpunkt
      ! var Wochentage = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag']; // Wochentage für die Weckeistellungen angelegt werden (Mit Sonntag beginnen wegen Schedule)
      var WKZeit_Schedule = []; // Array für die verschiedene Schedule-Aufrufe
      // -----------------------------------------------------------------------------
      // Objekte
      // -----------------------------------------------------------------------------
      ! createState(instanz + pfad0 +'Weckereinstellungen_sichtbar', {def: 'false',type: 'boolean',name: 'Wecker Einstellungen '});
      createState(instanz + pfad0 +'Wecker_gestellt', {def: 'false',type: 'boolean',name: 'Wecker gestellt'});
      ! // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
      ! // #############################################################################
      // # #
      // # Funktion zum anlegen eines Weckers / einer Weckzeit #
      // # #
      // #############################################################################
      ! function WeckerStellen() {
      setState(instanz + pfad0 +'Wecker_gestellt', false);
      GeraeteListe.forEach(function(Geraet) {

          Wochentage.forEach(function(Wochentag){
              // -----------------------------------------------------------------------------
              // Objekte in Abhänigkeit der Raumliste
              // -----------------------------------------------------------------------------
              // Objekte für Wecker Ein/Aus
              createState(instanz + pfad0 + Geraet[0] +'.WeckerAktiv_'+Wochentag,  {def: 'false',type: 'boolean',name: 'Wecker Aktiv '+Wochentag});
      
              // Objekte für WeckZeiten
              createState(instanz + pfad0 + Geraet[0] +'.WeckZeit_'+Wochentag,  {def: '07:00',type: 'string',name: 'Weckzeit am '+Wochentag});
              if(getState(instanz + pfad0 + Geraet[0] + '.WeckZeit_'+Wochentag).val){
                  var WKZeit = getState(instanz + pfad0 + Geraet[0] + '.WeckZeit_'+Wochentag).val.split(':');
                  //log(WKZeit[1] + ' ' + WKZeit[0] + ' * * 1');
                  log(getState(instanz + pfad0 + Geraet[0]+ '.WeckerAktiv_'+Wochentag).val);
      
                  if(getState(instanz + pfad0 + Geraet[0]+ '.WeckerAktiv_'+Wochentag).val === true){
                      setState(instanz + pfad0 +'Wecker_gestellt', true);
                      clearSchedule(WKZeit_Schedule[Geraet[0]+'.'+Wochentag]);
                      WKZeit_Schedule[Geraet[0]+'.'+Wochentag] = schedule(WKZeit[1] + ' ' + WKZeit[0] + ' * * '+ Wochentage.indexOf(Wochentag), function (){WeckerEin(Raum[1]);});
                      if(logging) log('Wecker für '+Raum+' am '+Wochentag+' wurde auf '+WKZeit[0]+': '+WKZeit[1]+' Uhr gestellt');
                  }
                  else{                                                               
                       clearSchedule(WKZeit_Schedule[Geraet[0]+'.'+Wochentag]);
                      if(logging) log('Wecker für'+Raum+' am '+Wochentag+' wurde gelöscht');
                  }
              }
          });
      });
      

      }//Wecker stellen Ende

      ! // #############################################################################
      // # #
      // # Funktion zum langsamen erhöhen des Raumlichtes #
      // # #
      // #############################################################################
      ! function level_erhoehen(GeraeteID){
      setState(GeraeteID, (getState(GeraeteID).val + erhoehungs_schritt));
      if(logging) log('Level:"'+getState(GeraeteID).val+'" wird um '+erhoehungs_schritt+' erhöht');
      if(getState(GeraeteID).val >= 100){
      clearTimeout(timer);
      log('Level auf 100 somit ende');
      }
      else{
      timer = setTimeout(function() {
      level_erhoehen(GeraeteID);
      }, intervall * 1000);
      }
      }
      ! // #############################################################################
      // # #
      // # Funktion zum starten verschiedener Aktionen beim erreichen der Weckzeit #
      // # #
      // #############################################################################
      ! function WeckerEin(GeraeteID) {
      // Prüfen ob Raumlicht aus
      if(getState(GeraeteID).val <= 10){
      level_erhoehen(GeraeteID);
      }
      // Weitere mögliche Aktionen
      // hier
      }
      ! // #############################################################################
      // # #
      // # Beobachten aller Weckerdatenpunkte #
      // # #
      // #############################################################################
      on({enumName:'Weckerdatenpunkte', change: "ne"}, function (obj) {
      WeckerStellen();
      });
      ! ````

      Und hier die Funktion um die es geht:

      function level_erhoehen(GeraeteID){
          setState(GeraeteID, (getState(GeraeteID).val + erhoehungs_schritt));
          if(logging) log('Level:"'+getState(GeraeteID).val+'" wird um '+erhoehungs_schritt+' erhöht');
          if(getState(GeraeteID).val >= 100){
             clearTimeout(timer);
              if(logging) log('Level auf 100 somit ende');
          }
          else{
             timer = setTimeout(function() {
                  level_erhoehen(GeraeteID);
              }, intervall * 1000);  
          }
      }
      
      

      Wie könnte ich es nun anstellen dass diese Funktion zum erhöhen des Levels mehrmals gleichzeitig ausführbar wird, ohne einfach zweimal die gleiche Funktion mit unterschiedlichen Namen anzulegen. Denn wenn ich mal drei Dimmer habe bräuchte ich sie dann ja dreimal usw.

      Ich bin Dankbar für jede Idee

      Gruß

      Steffen

      1 Reply Last reply Reply Quote 0
      • Peoples
        Peoples last edited by

        So,

        konnte es dann doch noch selber lösen.

        Hier wie ich es umgesetzt habe:

        ! ````
        // *****************************************************************************
        //
        // Wecker
        //
        //
        // V 1.0 -
        // *****************************************************************************
        ! // -----------------------------------------------------------------------------
        // allgemeine Variablen
        // -----------------------------------------------------------------------------
        var logging = true; // Logging on/off
        var instanz = 'javascript.0.'; // Javascript Instanz
        var pfad0 = 'Wecker.'; // Pfad innerhalb der Instanz - Status allgemien
        ! var laufzeit = 380; // Max Laufzeit in Sekunden (ca. Angabe da die Erhöhungsschritte gerundet werden.)
        var intervall = 20; // Durchlaufintervall - Nicht kleiner als 20 Sekunden
        var erhoehungs_schritt = Math.round(100 / (laufzeit / intervall)); // Ausgerechnetter Wert für jede Erhöhung
        ! var RaumListe = []; // Array der Geräte für die ein Wecker angelegt wird
        RaumListe[0] = ['Kinderzimmer_1','hm-rpc.0.LEQ0528547.1.LEVEL']; // Gerät 1 -> 1.Raum, 2.Datenpunkt
        RaumListe[1] = ['Kinderzimmer_2','hm-rpc.0.NEQ1699205.1.LEVEL']; // Gerät 2 -> 1.Raum, 2.Datenpunkt
        ! var Wochentage = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag']; // Wochentage für die Weckeistellungen angelegt werden (Mit Sonntag beginnen wegen Schedule)
        var WKZeit_Schedule = [];
        ! var timer =[];
        // -----------------------------------------------------------------------------
        // Objekte
        // -----------------------------------------------------------------------------
        ! createState(instanz + pfad0 +'Weckereinstellungen_sichtbar', {def: 'false',type: 'boolean',name: 'Wecker Einstellungen '});
        createState(instanz + pfad0 +'Wecker_gestellt', {def: 'false',type: 'boolean',name: 'Wecker gestellt'});
        ! // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
        // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
        // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
        // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
        ! // #############################################################################
        // # #
        // # Funktion zum anlegen eines Weckers / einer Weckzeit #
        // # #
        // #############################################################################
        ! function WeckerStellen() {
        setState(instanz + pfad0 +'Wecker_gestellt', false);
        RaumListe.forEach(function(Raum) {

            Wochentage.forEach(function(Wochentag){
                // -----------------------------------------------------------------------------
                // Objekte in Abhänigkeit der Raumliste
                // -----------------------------------------------------------------------------
                // Objekte für Wecker Ein/Aus
                createState(instanz + pfad0 + Raum[0] +'.WeckerAktiv_'+Wochentag,  {def: 'false',type: 'boolean',name: 'Wecker Aktiv '+Wochentag});
        
                // Objekte für WeckZeiten
                createState(instanz + pfad0 + Raum[0] +'.WeckZeit_'+Wochentag,  {def: '07:00',type: 'string',name: 'Weckzeit am '+Wochentag});
        
                if(getState(instanz + pfad0 + Raum[0] + '.WeckZeit_'+Wochentag).val){
                    var WKZeit = getState(instanz + pfad0 + Raum[0] + '.WeckZeit_'+Wochentag).val.split(':');
                    //log(WKZeit[1] + ' ' + WKZeit[0] + ' * * 1');
                    log(getState(instanz + pfad0 + Raum[0]+ '.WeckerAktiv_'+Wochentag).val);
        
                    if(getState(instanz + pfad0 + Raum[0]+ '.WeckerAktiv_'+Wochentag).val === true){
                        setState(instanz + pfad0 +'Wecker_gestellt', true);
                        clearSchedule(WKZeit_Schedule[Raum[0]+'.'+Wochentag]);
                        WKZeit_Schedule[Raum[0]+'.'+Wochentag] = schedule(WKZeit[1] + ' ' + WKZeit[0] + ' * * '+ Wochentage.indexOf(Wochentag), function (){WeckerEin(Raum);});
                        if(logging) log('Wecker für '+Raum+' am '+Wochentag+' wurde auf '+WKZeit[0]+': '+WKZeit[1]+' Uhr gestellt');
                    }
                    else{                                                               
                         clearSchedule(WKZeit_Schedule[Raum[0]+'.'+Wochentag]);
                        if(logging) log('Wecker für'+Raum+' am '+Wochentag+' wurde gelöscht');
                    }
                }
            });
        });
        

        }//Wecker stellen Ende
        //WeckerStellen();

        ! // #############################################################################
        // # #
        // # Funktion zum langsamen erhöhen des Raumlichtes #
        // # #
        // #############################################################################
        ! function level_erhoehen(GeraeteID){
        if(getState(GeraeteID[1]).val >= 100){
        clearTimeout(timer[GeraeteID[0]]);
        log('Level Dimmer'+GeraeteID[0]+' auf 100% automatische Erhöhung Ende');
        }
        else{
        timer[GeraeteID[0]] = setTimeout(function() {
        if(logging) log('Level:'+GeraeteID[0]+' wird um '+erhoehungs_schritt+' erhöht auf '+(getState(GeraeteID[1]).val+erhoehungs_schritt));
        setState(GeraeteID[1], (getState(GeraeteID[1]).val + erhoehungs_schritt));
        level_erhoehen(GeraeteID);
        }, intervall * 1000);
        }
        }
        ! // #############################################################################
        // # #
        // # Funktion zum starten verschiedener Aktionen beim erreichen der Weckzeit #
        // # #
        // #############################################################################
        ! function WeckerEin(GeraeteID) {
        // Prüfen ob Raumlicht aus
        if(getState(GeraeteID[1]).val <= 10){
        level_erhoehen(GeraeteID);
        }
        // Weitere mögliche Aktionen
        // hier
        }
        ! // #############################################################################
        // # #
        // # Beobachten aller Weckerdatenpunkte #
        // # #
        // #############################################################################
        ! on({enumName:'Weckerdatenpunkte', change: "ne"}, function (obj) {
        WeckerStellen();
        });
        ! //WeckerEin(RaumListe[0]);
        //WeckerEin(RaumListe[1]);

        
        Gruß
        
        Steffen
        1 Reply Last reply Reply Quote 0
        • T
          tempestas last edited by

          Hi Steffen,

          könntest du mir etwas JS Logik näher bringen?

          ich verstehe diesen Teil nicht:

          ! // ############################################################################# // # # // # Funktion zum langsamen erhöhen des Raumlichtes # // # # // ############################################################################# ! function level_erhoehen(GeraeteID){ if(getState(GeraeteID[1]).val >= 100){ clearTimeout(timer[GeraeteID[0]]); log('Level Dimmer'+GeraeteID[0]+' auf 100% automatische Erhöhung Ende'); } else{ timer[GeraeteID[0]] = setTimeout(function() { if(logging) log('Level:'+GeraeteID[0]+' wird um '+erhoehungs_schritt+' erhöht auf '+(getState(GeraeteID[1]).val+erhoehungs_schritt)); setState(GeraeteID[1], (getState(GeraeteID[1]).val + erhoehungs_schritt)); level_erhoehen(GeraeteID); }, intervall * 1000); } } ! // ############################################################################# // # # // # Funktion zum starten verschiedener Aktionen beim erreichen der Weckzeit # // # # // ############################################################################# ! function WeckerEin(GeraeteID) { // Prüfen ob Raumlicht aus if(getState(GeraeteID[1]).val <= 10){ level_erhoehen(GeraeteID); } // Weitere mögliche Aktionen // hier } !

          Überall steht "GeraeteID"; aber nirgends ist das definiert. Das ist ein Teil von JS, derm ir immer noch nicht klar ist. GeraeteID[1] interpretiere ich eigentlich als zweiten Teil eines Arrays "GeraeteID". Aber diesen Array finde ich nirgends?

          Kannst du mir erklären, wie die Verknüpfungen hier laufen? Da hänge ich gedanklich leider seit jeher, ich verstehe die Systematik nicht.

          Ich verstehe es, wenn ich z.B. sowas habe:

          ` > function beispiel(x, y, z){

          log(x, y, z) ;

          } `
          und dann wo anders im Skript diese function aufrufe und sage:

          function beispiel (1, 2, 3). Dann werden x y und z eben durch 1, 2 und 3 ersetzt. Das ist klar.

          Aber das sehe ich so bei deinen Funktionen nicht. Erleuchtung für Dummies wäre toll.

          Danke und Grüße vom anderen Steffen

          1 Reply Last reply Reply Quote 0
          • Peoples
            Peoples last edited by

            Hi Steffen,

            Klaro!

            Das ist deswegen verwirrend weil ich das bisschen unglücklich gelöst habe und zwar:

            Bilde ich in der Funktion Wecker_Stellen ein Schedule, mit diesem Schedule rufe ich zur Auslösezeit die Fuktion WeckerEin auf und gebe das Array "Raum" mit.

            ....WKZeit_Schedule[Raum[0]+'.'+Wochentag] = schedule(WKZeit[1] + ' ' + WKZeit[0] + ' * * '+ Wochentage.indexOf(Wochentag), function (){WeckerEin(Raum);});...
            
            ... function WeckerEin(GeraeteID){....
            

            Somit ist das Array GeraeteID ein Teil der Raumliste.

            RaumListe[0] = ['Kinderzimmer_1','hm-rpc.0.OEQxxxxx.1.LEVEL'];
            RaumListe[0][0] -> GeraeteID[0] = 'Kinderzimmer_1'
            RaumListe[0][1] -> GeraeteID[1] = 'hm-rpc.0.OEQxxxxx.1.LEVEL'
            
            RaumListe[1] = ['Kinderzimmer_1',"hm-rpc.0.OEQxxxxx.1.LEVEL"];
            RaumListe[1][0] -> GeraeteID[0] = 'Kinderzimmer_2'
            RaumListe[1][1] -> GeraeteID[1] = 'hm-rpc.0.OEQxxxxx.1.LEVEL'
            

            Kann man 100% auch viel schöner "coden" aber da ich auch nur Anfänger bin und solange rumprobiere bis es läuft mag das alles ein bisschen undurchsichtig und wenig geschmeidig sein, ABER es läuft :mrgreen:

            EDIT

            Habe es extra für dich (der Verständnis halber) nochmal geändert :lol:

            ! ````
            // *****************************************************************************
            //
            // Wecker
            //
            //
            // Funktionen: 1. Dimmt das jeweilige Zimmerlicht langsam auf 100% bei Weckzeit
            //
            //
            // V1.0 - 14.12.2017
            // v1.0.1 - 14.12.2017 Datenpunkt für Max-Level Eingefügt
            // *****************************************************************************
            ! // -----------------------------------------------------------------------------
            // allgemeine Variablen
            // -----------------------------------------------------------------------------
            var logging = true; // Logging on/off
            var instanz = 'javascript.0.'; // Javascript Instanz
            var pfad0 = 'Wecker.'; // Pfad innerhalb der Instanz - Status allgemien
            ! var laufzeit = 600;//380 // Max Laufzeit in Sekunden (ca. Angabe da die Erhöhungsschritte gerundet werden.) Nicht höher als 600 Sekunden
            var intervall = 20; // Durchlaufintervall - Nicht kleiner als 20 Sekunden
            ! var GeraeteListe = []; // Array der Geräte für die ein Wecker angelegt wird
            GeraeteListe[0] = ['Kinderzimmer_1',"hm-rpc.0.NEQxxxxxx.1.LEVEL"]; // Gerät 1 -> 1.Raum, 2.Datenpunkt
            GeraeteListe[1] = ['Kinderzimmer_2',"hm-rpc.0.NEQxxxxxxx.1.LEVEL"]; // Gerät 2 -> 1.Raum, 2.Datenpunkt
            ! var Wochentage = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag']; // Wochentage für die Weckeistellungen angelegt werden (Mit Sonntag beginnen wegen Schedule)
            var WKZeit_Schedule = [];
            ! var timer =[];
            // -----------------------------------------------------------------------------
            // Objekte
            // -----------------------------------------------------------------------------
            ! createState(instanz + pfad0 +'Weckereinstellungen_sichtbar', {def: 'false',type: 'boolean',name: 'Wecker Einstellungen '}); // Datenpunkt für Vis - Wecker Anzeigen /Ausblenden
            createState(instanz + pfad0 +'Wecker_gestellt', {def: 'false',type: 'boolean',name: 'Wecker gestellt'}); //Datenpunkt für Vis - Wecker gestellt Ja/Nein
            createState(instanz + pfad0 +'Wecker_laeuft', {def: 'false',type: 'boolean',name: 'Automatische Licht Erhöhung'}); // Datenpunkt für Vis ob Dimmvorgang läuft
            // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
            // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
            // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
            // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
            ! // #############################################################################
            // # #
            // # Funktion zum anlegen eines Weckers / einer Weckzeit #
            // # #
            // #############################################################################
            ! function WeckerStellen() {
            setState(instanz + pfad0 +'Wecker_gestellt', false);
            GeraeteListe.forEach(function(Geraet) {

                Wochentage.forEach(function(Wochentag){
                    // -----------------------------------------------------------------------------
                    // Objekte in Abhänigkeit der GeraeteListe
                    // -----------------------------------------------------------------------------
                    // Objekte für Wecker Ein/Aus
                    createState(instanz + pfad0 + Geraet[0] +'.WeckerAktiv_'+Wochentag,  {def: 'false',type: 'boolean',name: 'Wecker Aktiv '+Wochentag});
            
                    // Objekte für WeckZeiten
                    createState(instanz + pfad0 + Geraet[0] +'.WeckZeit_'+Wochentag,  {def: '07:00',type: 'string',name: 'Weckzeit am '+Wochentag});
            
                    // Objekte für WeckZeiten
                    createState(instanz + pfad0 + Geraet[0] +'.Dimmer_Max_Level',  {def: '30',type: 'number',name: 'Maximales Raumlicht Level'});
            
                    if(getState(instanz + pfad0 + Geraet[0] + '.WeckZeit_'+Wochentag).val){
                        var WKZeit = getState(instanz + pfad0 + Geraet[0] + '.WeckZeit_'+Wochentag).val.split(':');
                        //log(WKZeit[1] + ' ' + WKZeit[0] + ' * * 1');
                        log(getState(instanz + pfad0 + Geraet[0]+ '.WeckerAktiv_'+Wochentag).val);
            
                        if(getState(instanz + pfad0 + Geraet[0]+ '.WeckerAktiv_'+Wochentag).val === true){
                            setState(instanz + pfad0 +'Wecker_gestellt', true);
                            clearSchedule(WKZeit_Schedule[Geraet[0]+'.'+Wochentag]);
                            WKZeit_Schedule[Geraet[0]+'.'+Wochentag] = schedule(WKZeit[1] + ' ' + WKZeit[0] + ' * * '+ Wochentage.indexOf(Wochentag), function (){WeckerEin(Geraet);});
                            if(logging) log('Wecker für '+Geraet[0]+' am '+Wochentag+' wurde auf '+WKZeit[0]+': '+WKZeit[1]+' Uhr gestellt');
                        }
                        else{                                                               
                             clearSchedule(WKZeit_Schedule[Geraet[0]+'.'+Wochentag]);
                            if(logging) log('Wecker für '+Geraet[0]+' am '+Wochentag+' wurde gelöscht');
                        }
                    }
                });
            });
            

            }//Wecker stellen Ende

            ! //WeckerStellen();
            ! // #############################################################################
            // # #
            // # Funktion zum langsamen erhöhen des Raumlichtes #
            // # #
            // #############################################################################
            ! function level_erhoehen(GeraeteID){
            if(getState(GeraeteID[1]).val >= getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val){
            clearTimeout(timer[GeraeteID[0]]);
            log('Level Dimmer'+GeraeteID[0]+' auf '+getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val+' automatische Erhöhung Ende');
            }
            else{
            timer[GeraeteID[0]] = setTimeout(function() {
            if(logging) log('Level:'+GeraeteID[0]+' wird um '+Math.round(getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val / (laufzeit / intervall))+' erhöht auf '+(getState(GeraeteID[1]).val+Math.round(getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val / (laufzeit / intervall))));
            setState(GeraeteID[1], (getState(GeraeteID[1]).val + Math.round(getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val / (laufzeit / intervall))));
            level_erhoehen(GeraeteID);
            }, intervall * 1000);
            }
            }
            ! // #############################################################################
            // # #
            // # Funktion zum starten verschiedener Aktionen beim erreichen der Weckzeit #
            // # #
            // #############################################################################
            ! function WeckerEin(GeraeteID) {
            // Prüfen ob Raumlicht aus
            if(getState(GeraeteID[1]).val <= 10){
            setState(instanz + pfad0 + 'Wecker_laeuft', true);
            level_erhoehen(GeraeteID);

                }
            

            // Weitere mögliche Aktionen
            // hier
            }

            ! // #############################################################################
            // # #
            // # Beobachten aller Weckerdatenpunkte #
            // # #
            // #############################################################################
            ! on({enumName:'Weckerdatenpunkte', change: "ne"}, function (obj) {
            WeckerStellen();
            ! });
            ! // #############################################################################
            // # #
            // # Beobachten des Datenpunktes zum Abbrechen des Dimmvorgangs #
            // # #
            // #############################################################################
            on({id: instanz + pfad0 + 'Wecker_laeuft', change: "ne"}, function (dp) {
            if(dp.state.val === false){
            GeraeteListe.forEach(function(GeraeteID) {
            clearTimeout(timer[GeraeteID[0]]);
            log('Automatisches hochfahren Raumlicht für '+GeraeteID[0]+' manuel gestoppt');
            });
            }
            });
            //WeckerEin(GeraeteListe[0]);
            //WeckerEin(GeraeteListe[1]);

            
            Hier sogar noch ein Screenshot wie es bei mir aussieht:
            
            >!  ![2417_wecker.jpg](/assets/uploads/files/2417_wecker.jpg) 
            
            Ich hoffe ich habe ein wenig Licht ins Dunkel gebracht
            
            Gruß Steffen
            1 Reply Last reply Reply Quote 0
            • T
              tempestas last edited by

              Danke,

              ich glaube, ich verstehe es.

              1 Reply Last reply Reply Quote 0
              • D
                DiLa last edited by

                Hi Steffen,

                ich bin gerade dabei meine Programme von der CCU2 auf ioBroker umzuziehen und dabei auf dein Wecker Script gestoßen.

                Das gefällt mir sehr gut und ich würde es gerne einsetzen.

                Ich stehe vom Verständnis von Javascript allerdings komplett am Anfang und verstehe nicht, wie die Daten in der View angezeigt/bearbeitet werden müssen, bzw. wo diese herkommen.

                Wäre es möglich, einen Export deine View zu bekommen?

                Viele Grüße,

                Dirk

                1 Reply Last reply Reply Quote 0
                • Peoples
                  Peoples last edited by

                  @DiLa:

                  Wäre es möglich, einen Export deine View zu bekommen?

                  Viele Grüße,

                  Dirk `

                  Hi,

                  da ich das Thema nicht aboniert hatte, habe ich das jetzt erst gelesen sorry. Das Script verursacht jedoch einen Fehler beim Update auf den Javascriptadapter höher der version 3.4.0 sobald ich diesen behoben habe poste ich hier das neue Scipt inkl. dem Export!

                  1 Reply Last reply Reply Quote 0
                  • D
                    DiLa last edited by

                    Hi Steffen,

                    das wäre super wenn du das machen würdest.

                    Ich musste das Script momentan auch abstellen nach dem Update des JS-Adapters.

                    Viele Grüße,

                    Dirk

                    1 Reply Last reply Reply Quote 0
                    • Peoples
                      Peoples last edited by

                      @DiLa:

                      Hi Steffen,

                      das wäre super wenn du das machen würdest.

                      Ich musste das Script momentan auch abstellen nach dem Update des JS-Adapters.

                      Viele Grüße,

                      Dirk `

                      Hi Dirk,

                      hier das Script:

                      ! ````
                      // *****************************************************************************
                      //
                      // Wecker
                      //
                      //
                      // Funktionen: 1. Dimmt das jeweilige Zimmerlicht langsam auf 100% bei Weckzeit
                      //
                      //
                      // v1.0 - 14.12.2017
                      // v1.0.1 - 14.12.2017 Datenpunkt zum abbrechen des Dimmvorgangs eingefügt
                      // Datenpunkt für das Max-Dimm-Level eingefügt
                      // v1.0.2 - 18.02.2018 Subscription von enum.functions.weckerdatenpunkte für
                      // Js-Adapter ab Version 3.4.0 geändert
                      //
                      // *****************************************************************************
                      ! // -----------------------------------------------------------------------------
                      // allgemeine Variablen
                      // -----------------------------------------------------------------------------
                      var logging = false; // Logging on/off
                      var instanz = 'javascript.0.'; // Javascript Instanz
                      var pfad0 = 'Wecker.'; // Pfad innerhalb der Instanz - Status allgemien
                      ! var laufzeit = 600;//380 // Max Laufzeit in Sekunden (ca. Angabe da die Erhöhungsschritte gerundet werden.) Nicht höher als 600 Sekunden
                      var intervall = 20; // Durchlaufintervall - Nicht kleiner als 20 Sekunden
                      ! var GeraeteListe = []; // Array der Geräte für die ein Wecker angelegt wird
                      GeraeteListe[0] = ['Kinderzimmer_1','hm-rpc.0.xxxx.1.LEVEL']; // Gerät 1 -> 1.Raum, 2.Datenpunkt
                      GeraeteListe[1] = ['Kinderzimmer_2',"hm-rpc.0.xxxxx.1.LEVEL"]; // Gerät 2 -> 1.Raum, 2.Datenpunkt
                      ! var Wochentage = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag']; // Wochentage für die Weckeistellungen angelegt werden (Mit Sonntag beginnen wegen Schedule)
                      var WKZeit_Schedule = [];
                      ! var timer =[];
                      // -----------------------------------------------------------------------------
                      // Objekte
                      // -----------------------------------------------------------------------------
                      ! createState(instanz + pfad0 +'Weckereinstellungen_sichtbar', {def: 'false',type: 'boolean',name: 'Wecker Einstellungen '}); //Datenpunkt für Vis - Einstellungen sichtbar Ja/Nein
                      createState(instanz + pfad0 +'Wecker_gestellt', {def: 'false',type: 'boolean',name: 'Wecker gestellt'}); //Datenpunkt für Vis - Wecker gestellt Ja/Nein
                      createState(instanz + pfad0 +'Wecker_laeuft', {def: 'false',type: 'boolean',name: 'Automatische Licht Erhöhung'}); //Datenpunkt für Vis - Dimmvorgang läuft? Ja/Nein
                      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                      // $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
                      ! // #############################################################################
                      // # #
                      // # Funktion zum anlegen eines Weckers / einer Weckzeit #
                      // # #
                      // #############################################################################
                      ! function WeckerStellen() {
                      setState(instanz + pfad0 +'Wecker_gestellt', false);
                      GeraeteListe.forEach(function(Geraet) {

                          Wochentage.forEach(function(Wochentag){
                              // -----------------------------------------------------------------------------
                              // Objekte in Abhänigkeit der GeraeteListe
                              // -----------------------------------------------------------------------------
                              // Objekte für Wecker Ein/Aus
                              createState(instanz + pfad0 + Geraet[0] +'.WeckerAktiv_'+Wochentag,  {def: 'false',type: 'boolean',name: 'Wecker Aktiv '+Wochentag});
                      
                              // Objekte für WeckZeiten
                              createState(instanz + pfad0 + Geraet[0] +'.WeckZeit_'+Wochentag,  {def: '07:00',type: 'string',name: 'Weckzeit am '+Wochentag});
                      
                              // Objekte für WeckZeiten
                              createState(instanz + pfad0 + Geraet[0] +'.Dimmer_Max_Level',  {def: '30',type: 'number',name: 'Maximales Raumlicht Level'});
                      
                              if(getState(instanz + pfad0 + Geraet[0] + '.WeckZeit_'+Wochentag).val){
                                  var WKZeit = getState(instanz + pfad0 + Geraet[0] + '.WeckZeit_'+Wochentag).val.split(':');
                                  //log(WKZeit[1] + ' ' + WKZeit[0] + ' * * 1');
                                  if(logging) log(getState(instanz + pfad0 + Geraet[0]+ '.WeckerAktiv_'+Wochentag).val);
                      
                                  if(getState(instanz + pfad0 + Geraet[0]+ '.WeckerAktiv_'+Wochentag).val === true){
                                      setState(instanz + pfad0 +'Wecker_gestellt', true);
                                      clearSchedule(WKZeit_Schedule[Geraet[0]+'.'+Wochentag]);
                                      WKZeit_Schedule[Geraet[0]+'.'+Wochentag] = schedule(WKZeit[1] + ' ' + WKZeit[0] + ' * * '+ Wochentage.indexOf(Wochentag), function (){WeckerEin(Geraet);});
                                      if(logging) log('Wecker für '+Geraet[0]+' am '+Wochentag+' wurde auf '+WKZeit[0]+': '+WKZeit[1]+' Uhr gestellt');
                                  }
                                  else{                                                               
                                       clearSchedule(WKZeit_Schedule[Geraet[0]+'.'+Wochentag]);
                                      if(logging) log('Wecker für '+Geraet[0]+' am '+Wochentag+' wurde gelöscht');
                                  }
                              }
                          });
                      });
                      

                      }//Wecker stellen Ende

                      ! //WeckerStellen();
                      ! // #############################################################################
                      // # #
                      // # Funktion zum langsamen erhöhen des Raumlichtes #
                      // # #
                      // #############################################################################
                      ! function level_erhoehen(GeraeteID){
                      if(getState(GeraeteID[1]).val >= getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val){
                      clearTimeout(timer[GeraeteID[0]]);
                      if(logging)log('Level Dimmer'+GeraeteID[0]+' auf '+getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val+' automatische Erhöhung Ende');
                      }
                      else{
                      timer[GeraeteID[0]] = setTimeout(function() {
                      if(logging) log('Level:'+GeraeteID[0]+' wird um '+Math.round(getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val / (laufzeit / intervall))+' erhöht auf '+(getState(GeraeteID[1]).val+Math.round(getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val / (laufzeit / intervall))));
                      setState(GeraeteID[1], (getState(GeraeteID[1]).val + Math.round(getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val / (laufzeit / intervall))));
                      level_erhoehen(GeraeteID);
                      }, intervall * 1000);
                      }
                      }
                      ! // #############################################################################
                      // # #
                      // # Funktion zum starten verschiedener Aktionen beim erreichen der Weckzeit #
                      // # #
                      // #############################################################################
                      ! function WeckerEin(GeraeteID) {
                      // Prüfen ob Raumlicht aus
                      if(getState(GeraeteID[1]).val <= 10){
                      setState(instanz + pfad0 + 'Wecker_laeuft', true);
                      level_erhoehen(GeraeteID);

                          }
                      

                      // Weitere mögliche Aktionen
                      // hier
                      }

                      ! // #############################################################################
                      // # #
                      // # Beobachten aller Weckerdatenpunkte #
                      // # #
                      // #############################################################################
                      ! $('state(functions=weckerdatenpunkte)').on(function(obj) {
                      WeckerStellen();
                      ! });
                      ! // #############################################################################
                      // # #
                      // # Beobachten des Datenpunktes zum Abbrechen des Dimmvorgangs #
                      // # #
                      // #############################################################################
                      ! on({id: instanz + pfad0 + 'Wecker_laeuft', change: "ne"}, function (dp) {
                      if(dp.state.val === false){
                      GeraeteListe.forEach(function(GeraeteID) {
                      clearTimeout(timer[GeraeteID[0]]);
                      if(logging)log('Automatisches hochfahren Raumlicht für '+GeraeteID[0]+' manuel gestoppt');
                      });
                      }
                      });
                      //WeckerEin(GeraeteListe[0]);
                      //WeckerEin(GeraeteListe[1]);

                      
                      und hier der Export:
                       ![2417_weckerview.txt](/assets/uploads/files/2417_weckerview.txt) 
                      
                      Zusätzlich musst du die Weckerdatenpunkte dann noch in den Aufzählungen anlegen denn dort "überwacht" sie das Script und setzt bei Änderung das Schedule neu.
                       ![2417_screenshot_weckerdatenpunkte.png](/assets/uploads/files/2417_screenshot_weckerdatenpunkte.png) 
                      Alternativ könntest du die einzelnen Datenpunkte aber auch über einen bzw. mehere On-Subscriptions "überwachen" finde ich persönlich jedoch nicht so schön.
                      1 Reply Last reply Reply Quote 0
                      • W
                        web4wasch last edited by

                        Hallo Steffen,

                        schau mir dein Script mit Interesse an.

                        Würde es gerne für meine Zwecke verwenden, möchte eigentlich zur Weckzeit meine Hue Lampen hoch dimmen lassen und den Radio einschalten.

                        Du benutzt einen Teil für dein Backup-Script (automatisches Backup), habe ich Recht? Dort werden aber die Weckzeiten automatisch unter der Java Instanz angelegt? Bei diesem Hier nicht und ich bekomme diese auch nicht unter Aufzählungen gebacken.

                        Könntest du mir evtl ein bisschen auf die Sprünge helfen???

                        Danke erstmal, Gruß

                        Marcus

                        1 Reply Last reply Reply Quote 0
                        • Peoples
                          Peoples last edited by

                          @web4wasch:

                          Hallo Steffen,

                          schau mir dein Script mit Interesse an.

                          Würde es gerne für meine Zwecke verwenden, möchte eigentlich zur Weckzeit meine Hue Lampen hoch dimmen lassen und den Radio einschalten.

                          Du benutzt einen Teil für dein Backup-Script (automatisches Backup), habe ich Recht? Dort werden aber die Weckzeiten automatisch unter der Java Instanz angelegt? Bei diesem Hier nicht und ich bekomme diese auch nicht unter Aufzählungen gebacken.

                          Könntest du mir evtl ein bisschen auf die Sprünge helfen???

                          Danke erstmal, Gruß

                          Marcus `

                          Klar helf ich dir gerne nur verstehe ich gerade noch nicht was ich genau für dich tun kann?

                          Die Aufzählungen benutze ich, weil ich mir dadurch das subscriben mehrerer Datenpunkte spare wenn das die Frage war. Wenn nicht hilf du mir mal dass ich dir helfen kann :lol:

                          1 Reply Last reply Reply Quote 0
                          • W
                            web4wasch last edited by

                            Guten Morgen,

                            danke für deine schnelle Antwort. Erstmal bräuchte ich Hilfe die Datenpunkte unter den Aufzählungen anzulegen! Wie mache ich das genau?

                            Würde das Script auch für Hue Lampen funktionieren, wenn ich die Geräte ID dementsprechend ändere.

                            Hier geht man ja den Umweg über die CCU. Ich würde halt im Script gleich die hue.o.xxxxx.level eintragen (wenn das möglich ist)

                            …in diesem Abschnitt:

                            // #############################################################################

                            // # #

                            // # Funktion zum starten verschiedener Aktionen beim erreichen der Weckzeit #

                            // # #

                            // #############################################################################

                            function WeckerEin(GeraeteID) {

                            // Prüfen ob Raumlicht aus

                            if(getState(GeraeteID[1]).val <= 10){

                            setState(instanz + pfad0 + 'Wecker_laeuft', true);

                            level_erhoehen(GeraeteID);

                            }

                            // Weitere mögliche Aktionen

                            // hier

                            }

                            prüfst du erst ob xxxx.level kleiner als 10 ist und springst dann in level_erhoehen

                            Wenn ich außer den Lampen noch z.B. eine Szene triggern möchte, wie müsste ich die weitere Aktion noch einbinden?

                            Sry, stehe bei JS ziemlich am Anfang …

                            Danke für die Unterstützung. 😉

                            1 Reply Last reply Reply Quote 0
                            • Peoples
                              Peoples last edited by

                              @web4wasch:

                              Guten Morgen,

                              danke für deine schnelle Antwort. Erstmal bräuchte ich Hilfe die Datenpunkte unter den Aufzählungen anzulegen! Wie mache ich das genau? `

                              Entweder du machst das manuell oder so:

                              // Hier zwei Datenpunkte erstellen
                              createState('javascript.0.testdatenpunkt1', {def: 'false',type: 'boolean',name: 'testdatenpunkt1'});
                              createState('javascript.0.testdatenpunkt1', {def: 'false',type: 'boolean',name: 'testdatenpunkt2'});
                              
                              // Dann ein leeres Array erstellen
                              var Enum_ids =[];                                       
                              
                              // Nun wird mittels push Befehl ein existierender Datenpunkt ins Array gepushed
                              Enum_ids.push('javascript.0.testdatenpunkt1');
                              Enum_ids.push('javascript.0.testdatenpunkt2');
                              
                              // So werden nun die Aufzählungen erstellt
                              var Enum_obj = {};
                                      Enum_obj.type = 'enum';
                                      Enum_obj.common = {};
                                      Enum_obj.common.name = 'MeineTestAufzaehlung';
                                      Enum_obj.common.members = Enum_ids;
                                      setObject('enum.functions.MeineTestAufzaehlung', Enum_obj);
                              
                              // Und so kannst du die Aufzählungen beobachten
                              $('state(functions=MeineTestAufzaehlung)').on(function(obj) {
                              
                                  log("Es wurde eine Änderung festgestellt");
                              
                              });
                              

                              @web4wasch:

                              Würde das Script auch für Hue Lampen funktionieren, wenn ich die Geräte ID dementsprechend ändere.

                              Hier geht man ja den Umweg über die CCU. Ich würde halt im Script gleich die hue.o.xxxxx.level eintragen (wenn das möglich ist) `
                              Klar!

                              du findest ja deine Homematic Datenpunkte auch in den Objekten oder? Dort kannst du übergetState("javascript.0.DeinHMDatenpunkt")den wert abfragen und über````
                              setState("javascript.0.DeinHMDatenpunkt", 10)

                              ~~@web4wasch:~~ 
                              
                              > prüfst du erst ob xxxx.level kleiner als 10 ist und springst dann in level_erhoehen `  
                              Ich habe einen Datenpunkt der das Max-Level der Lampe angiebt, und ich prüfe in vorgegebenen Abständen ob die Lampe diesen Wert erreicht/überschritten hat, wenn ja halte stoppe ich diese Prüfung und wenn nein lasse ich sie zyklisch weiterlaufen.
                              
                              ~~@web4wasch:~~ 
                              
                              > Wenn ich außer den Lampen noch z.B. eine Szene triggern möchte, wie müsste ich die weitere Aktion noch einbinden? `  
                              Das könntest du einfach am Anfang anstoßen oder irgendwo in der Mitte. Bspw. wenn der Wert deiner Lampen größer als 10 ist soll die Szene gestartet werden oder so.
                              
                              Hoffe das hilft dir erstmal
                              1 Reply Last reply Reply Quote 0
                              • W
                                web4wasch last edited by

                                Guten Morgen,

                                danke dir erstmal… beiß mich mal durch und versuche dank deiner Hilfe mal ein Wecker Script zu basteln. 😉

                                Schönen Sonntag wünsche ich.

                                Gruß,

                                Marcus

                                1 Reply Last reply Reply Quote 0
                                • W
                                  web4wasch last edited by

                                  Hallo Steffen,

                                  bekomme das ganze nicht gebacken - möchte eigentlich nur einen Weckzeit, die ich über VIS stellen kann und die mir über schedule dann einfach etwas auslöst–--> habe heute den ganzen Tag probiert - es löst einfach nicht aus! :?

                                  hier mal mein script...

                                  ! // *****************************************************************************
                                  ! //
                                  ! // Wecker
                                  ! //
                                  ! //
                                  ! //
                                  ! //
                                  ! // *****************************************************************************
                                  ! // –---------------------------------------------------------------------------
                                  ! // allgemeine Variablen
                                  ! // -----------------------------------------------------------------------------
                                  ! var logging = true; // Logging on/off
                                  ! var instanz = 'javascript.0.'; // Javascript Instanz
                                  ! var pfad0 = 'Wecker.'; // Pfad innerhalb der Instanz - Status allgemien
                                  ! var WKZeit_Schedule = []; // Array für die Weckzeit
                                  ! var Enum_ids =[]; // Array für Functions
                                  ! // -----------------------------------------------------------------------------
                                  ! // Objekte für Vis
                                  ! // -----------------------------------------------------------------------------
                                  ! createState(instanz + pfad0 + 'Wecker_gestellt', {def: 'false',type: 'boolean',name: 'Wecker gestellt'}); //Datenpunkt für Vis - Wecker gestellt Ja/Nein
                                  ! createState(instanz + pfad0 + 'Wecker_ausgeloest', {def: 'false',type: 'boolean',name: 'Wecker ausgeloest'}); //Datenpunkt für Vis - Wecker ausgelöst Ja/Nein
                                  ! // #############################################################################
                                  ! // # #
                                  ! // # Funktion einer Weckzeit #
                                  ! // # #
                                  ! // #############################################################################
                                  ! // -----------------------------------------------------------------------------
                                  ! // Objekte anlegen
                                  ! // -----------------------------------------------------------------------------
                                  ! // Objekte für Wecker Ein/Aus
                                  ! createState(instanz + pfad0 + 'Wecker_aktiv', {def: 'false',type: 'boolean',name: 'Wecker aktiv'});
                                  ! // Objekte für WeckZeit
                                  ! createState(instanz + pfad0 + 'WeckZeit', {def: '07:00',type: 'string',name: 'Weckzeit'});
                                  ! // Nun wird mittels push Befehl ein existierender Datenpunkt ins Array gepushed
                                  ! Enum_ids.push('javascript.0.Wecker_aktiv');
                                  ! Enum_ids.push('javascript.0.WeckZeit');
                                  ! // So werden nun die Aufzählungen erstellt
                                  ! var Enum_obj = {};
                                  ! Enum_obj.type = 'enum';
                                  ! Enum_obj.common = {};
                                  ! Enum_obj.common.name = 'weckerdatenpunkte';
                                  ! Enum_obj.common.members = Enum_ids;
                                  ! setObject('enum.functions.weckerdatenpunkte', Enum_obj);
                                  ! function WeckerStellen() {
                                  ! setState(instanz + pfad0 +'Wecker_gestellt', false);
                                  ! if(getState(instanz + pfad0 + 'WeckZeit').val){
                                  ! var WKZeit = getState(instanz + pfad0 + 'WeckZeit').val.split(':');
                                  ! if(logging) log(getState(instanz + pfad0 + 'WeckerAktiv').val);
                                  ! if(getState(instanz + pfad0 + 'WeckerAktiv').val === true){
                                  ! setState(instanz + pfad0 +'Wecker_gestellt', true);
                                  ! clearSchedule(WKZeit_Schedule);
                                  ! WKZeit_Schedule = schedule(WKZeit[1] + ' ' + WKZeit[0] + ' * * * ', function (){WeckerEin();});
                                  ! if(logging) log('Wecker wurde auf '+WKZeit[0]+':'+WKZeit[1]+' Uhr gestellt');
                                  ! }
                                  ! else{
                                  ! clearSchedule(WKZeit_Schedule);
                                  ! if(logging) log('Wecker wurde gelöscht');
                                  ! }
                                  ! }
                                  ! }//Wecker stellen Ende
                                  ! // #############################################################################
                                  ! // # #
                                  ! // # Funktion zum starten verschiedener Aktionen beim erreichen der Weckzeit #
                                  ! // # #
                                  ! // #############################################################################
                                  ! function WeckerEin() {
                                  ! setState("hue.0.WaMa_Hue.Deckenlicht.on", true);
                                  ! setState(instanz + pfad0 + 'Wecker_ausgeloest', true);
                                  ! // Weitere mögliche Aktionen
                                  ! // hier
                                  ! }
                                  ! // #############################################################################
                                  ! // # #
                                  ! // # Wecker ausschalten #
                                  ! // # #
                                  ! // #############################################################################
                                  ! on({id: instanz + pfad0 + 'Wecker_ausgeloest', change: "ne"}, function (dp) {
                                  ! if(dp.state.val === false){
                                  ! setState(instanz + pfad0 + 'Wecker_gestellt', false);
                                  ! setState("hue.0.WaMa_Hue.Deckenlicht.on", false);
                                  ! }
                                  ! });
                                  ! // #############################################################################
                                  ! // # #
                                  ! // # Beobachten aller Weckerdatenpunkte #
                                  ! // # #
                                  ! // #############################################################################
                                  ! $('state(functions=weckerdatenpunkte)').on(function(obj) {
                                  ! WeckerStellen();
                                  ! if(logging) log('Es wurde eine Änderung festgestellt');
                                  ! });

                                  hätte es auch mal anders probiert, aber gleicher Effekt - die Schedule schaltet nicht ein

                                  ! // *****************************************************************************
                                  ! //
                                  ! // Wecker
                                  ! //
                                  ! //
                                  ! //
                                  ! //
                                  ! // *****************************************************************************
                                  ! // –---------------------------------------------------------------------------
                                  ! // allgemeine Variablen
                                  ! // -----------------------------------------------------------------------------
                                  ! var logging = true; // Logging on/off
                                  ! var instanz = 'javascript.0.'; // Javascript Instanz
                                  ! var pfad0 = 'Wecker.'; // Pfad innerhalb der Instanz - Status allgemien
                                  ! var WKZeit_Schedule = []; // Array für die Weckzeit
                                  ! // -----------------------------------------------------------------------------
                                  ! // Objekte
                                  ! // -----------------------------------------------------------------------------
                                  ! createState(instanz + pfad0 + 'Wecker_aktiv', {def: 'false',type: 'boolean',name: 'Wecker aktiv'}); //Datenpunkt für Vis - Wecker aktiv Ja/Nein
                                  ! createState(instanz + pfad0 + 'WeckZeit', {def: '07:00',type: 'string',name: 'Weckzeit'}); //Datenpunkt für Vis - Weckzeit
                                  ! createState(instanz + pfad0 + 'Wecker_gestellt', {def: 'false',type: 'boolean',name: 'Wecker gestellt'}); //Datenpunkt für Vis - Wecker gestellt Ja/Nein
                                  ! createState(instanz + pfad0 + 'Wecker_ausgeloest', {def: 'false',type: 'boolean',name: 'Wecker ausgeloest'}); //Datenpunkt für Vis - Wecker ausgelöst Ja/Nein
                                  ! // #############################################################################
                                  ! // # #
                                  ! // # Wecker stellen #
                                  ! // # #
                                  ! // #############################################################################
                                  ! on({id: instanz + pfad0 + 'Wecker_aktiv', change: "ne"}, function(dp) {
                                  ! if(dp.state.val === true){
                                  ! var WKZeit = getState(instanz + pfad0 + 'WeckZeit').val.split(':');
                                  ! if(logging) log('Wecker wurde auf '+WKZeit[0]+':'+WKZeit[1]+' Uhr gestellt');
                                  ! setState(instanz + pfad0 + 'Wecker_gestellt', true);
                                  ! clearSchedule(WKZeit_Schedule);
                                  ! WKZeit_Schedule = schedule(WKZeit[1] + ' ' + WKZeit[0] + ' * * * ', function () {
                                  ! if(logging) log('Wecker hat ausgelöst');
                                  ! setState(instanz + pfad0 + 'Wecker_ausgeloest', true);
                                  ! setState("hue.0.WaMa_Hue.Deckenlicht.on", true);
                                  ! });
                                  ! }
                                  ! });
                                  ! // #############################################################################
                                  ! // # #
                                  ! // # Wecker ausschalten #
                                  ! // # #
                                  ! // #############################################################################
                                  ! on({id: instanz + pfad0 + 'Wecker_aktiv', change: "ne"}, function (dp) {
                                  ! if(dp.state.val === false){
                                  ! setState(instanz + pfad0 + 'Wecker_gestellt', false);
                                  ! setState(instanz + pfad0 + 'Wecker_ausgeloest', false);
                                  ! }
                                  ! });

                                  Könntest du mir bitte auf die Sprünge helfen? 😉

                                  Danke, Gruß

                                  Marcus

                                  1 Reply Last reply Reply Quote 0
                                  • Peoples
                                    Peoples last edited by

                                    Habe es am Handy jetzt nur überflogen da ich nicht zu hause bin. Was ist deine eingestellte Weckzeit es geht nur im Format hh:mm ohne sekunden.

                                    Wenn du Sekunden mit im Datenpunkt hast nimm die mal weg und mach bspw. noch 22:30 oder so ob es dann geht ansonsten gib Bescheid dann schau ich nochmal drauf wenn ich wieder daheim bin.

                                    1 Reply Last reply Reply Quote 0
                                    • W
                                      web4wasch last edited by

                                      habe keine Sekunden im Cron, nur hh:mm.

                                      Kein Thema, evtl schauen wir mal drüber, wenn du wieder Zuhause bist. Danke dir! 😉

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      649
                                      Online

                                      31.7k
                                      Users

                                      79.9k
                                      Topics

                                      1.3m
                                      Posts

                                      4
                                      17
                                      1666
                                      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