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. Visualisierung
  4. Time Trigger per VIS ändern

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Time Trigger per VIS ändern

Geplant Angeheftet Gesperrt Verschoben Visualisierung
16 Beiträge 9 Kommentatoren 3.1k Aufrufe 7 Watching
  • Ä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.
  • HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von
    #6

    Das ist kein Script sondern ein Widget ;-)

    Im Vis Editor auf Widget importieren gehen, den Code in das Popup kopieren und bestätigen.

    http://www.iobroker.net/docu/?page_id=2 … #Widgets_2

    Unterpunkt 18

    Gruß

    Rainer

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

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

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

    1 Antwort Letzte Antwort
    0
    • K Offline
      K Offline
      Kuddel
      schrieb am zuletzt editiert von
      #7

      Import, ja natürlich :-D Oh peinlich, daran hab ich gar nicht gedacht.

      Ich habe vorm import den Verweis auf mein Objekt angepasst. Sprich "javascript.0.sonstige.weckzeit"

      Das Objekt wird jetzt korrekt über die VIS geändert.

      Da habe ich ja schonmal den ersten Schritt.

      Aktuell wird mein Schlafzimmerlicht per Blockly gesteuert. Würde ich natürlich gern beibehalten, wenn möglich, da ich von Java (noch) keine Ahnung habe.

      Falls es nicht geht, würde ich für diesen Anwendungsfall auch ein Javascript verwenden.

      Hier ist mein Blockly Script

      ! var Warten; ! schedule("35 5 * * 1-5", function () { if (getState("javascript.0.sonstige.arbeitsstatus").val == 0 && getState("tr-064.2.devices.Daniel.active").val == true && getState("feiertage.0.heute.boolean").val == false && getState("hm-rpc.0.MEQ0665968.1.STATE").val == false) { setState("hm-rpc.0.MEQ0665968.1.STATE"/*LS - Schlafzimmer - Schaltaktor.STATE*/, true); Warten = setTimeout(function () { if (getState("hm-rpc.0.MEQ0665968.1.STATE").val == true) { setState("hm-rpc.0.MEQ0665968.1.STATE"/*LS - Schlafzimmer - Schaltaktor.STATE*/, false); } }, 60000); } }); !

      1 Antwort Letzte Antwort
      0
      • K Offline
        K Offline
        Kuddel
        schrieb am zuletzt editiert von
        #8

        Ich habe es jetzt hinbekommen. Zwar nicht mit der eingestellten Zeit als direkten Trigger, aber es sollte so auch gehen_

        3467_wecklicht.png

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

          Hey,

          muss hier mal kurz nachfragen. Ich habe das Script von Paul heute eingebaut, um z.B. ein Lampe oder auch meine PoolPumpe Variabel ein- und auszuschalten. Hatte vorher ein anderes Script, war glaube auch von Paul aber schon etwas älter.

          Jetzt ist es aber so (bei beiden Scripten), dass wenn der Javascript Adapter neu startet (aus welchem Grund auch immer) steht zwar die Zeit noch in dem Datenpunkt, jedoch wird der Timer nicht mehr getriggert. Klar, läuft ja auch über die "on" Funktion wenn die Zeit geändert wird.

          Wie müsste denn das Script aussehen, wenn beim Javascript Adapter Start auch der "alte" Datenpunkt gelesen werden soll, ohne dass die Zeit verändert wurde und darauf wieder getriggert wird.

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

            @coyote:

            Wie müsste denn das Script aussehen, wenn beim Javascript Adapter Start auch der "alte" Datenpunkt gelesen werden soll, ohne dass die Zeit verändert wurde und darauf wieder getriggert wird.

            const idWeckzeit = '...';  // Weckzeit als String "hh:mm"
            const idWecker = '...'; //  boolean
            
            var t = getState(idWeckzeit).val.split(':');
            var timer = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
               setState(idWecker, true);
            });
            
            on(idWeckzeit, function(dp) {
               t = dp.state.val.split(':');
               clearSchedule(timer);
               timer = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
                   setState(idWecker, true);
               });
            });
            

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

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

              Danke dir Paul, funktioniert wie gewünscht :D

              1 Antwort Letzte Antwort
              0
              • X Offline
                X Offline
                xmace
                schrieb am zuletzt editiert von
                #12

                Hi,
                gibt es einen smarten weg die Funktion für mehrere Aktoren & Zeiten zu erstellen?
                Hab das jetzt einfach mal dupliziert bzw. vervierfacht für 2 Aktoren & 4 Zeiten (an/aus)

                const idZeitAN1 = 'javascript.0.STKD.DG1.Spielecke_Zeit_AN';  // Einschaltzeit als String "hh:mm"
                const idZeitAUS1 = 'javascript.0.STKD.DG1.Spielecke_Zeit_AUS';  // Ausschaltzeit als String "hh:mm"
                const idSwitch1 = 'javascript.0.STKD.DG1.Spielecke'; //  boolean
                
                const idZeitAN2 = 'javascript.0.STKD.DG1.Schlafzi_Zeit_AN';  // Einschaltzeit als String "hh:mm"
                const idZeitAUS2 = 'javascript.0.STKD.DG1.Schlafzi_Zeit_AUS';  // Ausschaltzeit als String "hh:mm"
                const idSwitch2 = 'javascript.0.STKD.DG1.Schlafzi'; //  boolean
                 
                var t1 = getState(idZeitAN1).val.split(':');
                var t2 = getState(idZeitAUS1).val.split(':');
                var t3 = getState(idZeitAN2).val.split(':');
                var t4 = getState(idZeitAUS2).val.split(':');
                
                var timer1 = schedule(t1[1] + ' ' + t1[0] + ' * * *', function() {
                   if (getState("javascript.0.Anwesend").val === true){
                	setState(idSwitch1, true);}
                });
                var timer2 = schedule(t2[1] + ' ' + t2[0] + ' * * *', function() {
                   setState(idSwitch1, false);
                });
                var timer3 = schedule(t3[1] + ' ' + t3[0] + ' * * *', function() {
                   if (getState("javascript.0.Anwesend").val === true){
                	setState(idSwitch2, true);}
                });
                var timer4 = schedule(t4[1] + ' ' + t4[0] + ' * * *', function() {
                   setState(idSwitch2, false);
                });
                
                on(idZeitAN1, function(dp) {
                   t1 = dp.state.val.split(':');
                   clearSchedule(timer);
                   timer1 = schedule(t1[1] + ' ' + t1[0] + ' * * *', function() {
                       if (getState("javascript.0.Anwesend").val === true){
                	setState(idSwitch1, true);}
                   });
                });
                on(idZeitAUS1, function(dp) {
                   t2 = dp.state.val.split(':');
                   clearSchedule(timer);
                   timer2 = schedule(t2[1] + ' ' + t2[0] + ' * * *', function() {
                       setState(idSwitch1, false);
                   });
                });
                on(idZeitAN2, function(dp) {
                   t3 = dp.state.val.split(':');
                   clearSchedule(timer);
                   timer3 = schedule(t3[1] + ' ' + t3[0] + ' * * *', function() {
                       if (getState("javascript.0.Anwesend").val === true){
                	setState(idSwitch2, true);}
                   });
                });
                on(idZeitAUS2, function(dp) {
                   t4 = dp.state.val.split(':');
                   clearSchedule(timer);
                   timer4 = schedule(t4[1] + ' ' + t4[0] + ' * * *', function() {
                       setState(idSwitch2, false);
                   });
                });
                
                AsgothianA 1 Antwort Letzte Antwort
                0
                • X xmace

                  Hi,
                  gibt es einen smarten weg die Funktion für mehrere Aktoren & Zeiten zu erstellen?
                  Hab das jetzt einfach mal dupliziert bzw. vervierfacht für 2 Aktoren & 4 Zeiten (an/aus)

                  const idZeitAN1 = 'javascript.0.STKD.DG1.Spielecke_Zeit_AN';  // Einschaltzeit als String "hh:mm"
                  const idZeitAUS1 = 'javascript.0.STKD.DG1.Spielecke_Zeit_AUS';  // Ausschaltzeit als String "hh:mm"
                  const idSwitch1 = 'javascript.0.STKD.DG1.Spielecke'; //  boolean
                  
                  const idZeitAN2 = 'javascript.0.STKD.DG1.Schlafzi_Zeit_AN';  // Einschaltzeit als String "hh:mm"
                  const idZeitAUS2 = 'javascript.0.STKD.DG1.Schlafzi_Zeit_AUS';  // Ausschaltzeit als String "hh:mm"
                  const idSwitch2 = 'javascript.0.STKD.DG1.Schlafzi'; //  boolean
                   
                  var t1 = getState(idZeitAN1).val.split(':');
                  var t2 = getState(idZeitAUS1).val.split(':');
                  var t3 = getState(idZeitAN2).val.split(':');
                  var t4 = getState(idZeitAUS2).val.split(':');
                  
                  var timer1 = schedule(t1[1] + ' ' + t1[0] + ' * * *', function() {
                     if (getState("javascript.0.Anwesend").val === true){
                  	setState(idSwitch1, true);}
                  });
                  var timer2 = schedule(t2[1] + ' ' + t2[0] + ' * * *', function() {
                     setState(idSwitch1, false);
                  });
                  var timer3 = schedule(t3[1] + ' ' + t3[0] + ' * * *', function() {
                     if (getState("javascript.0.Anwesend").val === true){
                  	setState(idSwitch2, true);}
                  });
                  var timer4 = schedule(t4[1] + ' ' + t4[0] + ' * * *', function() {
                     setState(idSwitch2, false);
                  });
                  
                  on(idZeitAN1, function(dp) {
                     t1 = dp.state.val.split(':');
                     clearSchedule(timer);
                     timer1 = schedule(t1[1] + ' ' + t1[0] + ' * * *', function() {
                         if (getState("javascript.0.Anwesend").val === true){
                  	setState(idSwitch1, true);}
                     });
                  });
                  on(idZeitAUS1, function(dp) {
                     t2 = dp.state.val.split(':');
                     clearSchedule(timer);
                     timer2 = schedule(t2[1] + ' ' + t2[0] + ' * * *', function() {
                         setState(idSwitch1, false);
                     });
                  });
                  on(idZeitAN2, function(dp) {
                     t3 = dp.state.val.split(':');
                     clearSchedule(timer);
                     timer3 = schedule(t3[1] + ' ' + t3[0] + ' * * *', function() {
                         if (getState("javascript.0.Anwesend").val === true){
                  	setState(idSwitch2, true);}
                     });
                  });
                  on(idZeitAUS2, function(dp) {
                     t4 = dp.state.val.split(':');
                     clearSchedule(timer);
                     timer4 = schedule(t4[1] + ' ' + t4[0] + ' * * *', function() {
                         setState(idSwitch2, false);
                     });
                  });
                  
                  AsgothianA Offline
                  AsgothianA Offline
                  Asgothian
                  Developer
                  schrieb am zuletzt editiert von Asgothian
                  #13

                  @xmace Da gibt es eine elegantere Lösung. Sie ist etwas länger, aber skalierter.

                  Schlussendlich setzt du nur im array "ids" die Namen der Datenpunkte die du hast (oder haben willst), und bei createStates ob das script sie bauen soll oder nicht

                  Den rest macht das script selber. Es erstellt ein Mapping fuer die Timer und ein Mapping fuer die Funktionen die beim Timer aufgerufen werden sollen, sowie die Trigger zum umsetzen.

                  
                  var ids = [ 'STKD.DG1.Schlafzi','STKD.DG1.Spielecke' ];
                  const createStates = true;
                  
                  var knownTimers = {};
                  var SheduleFunctions = {}
                  
                  for (var idx in ids) {
                      let id = ids[idx];
                      let sid = 'javascript.0.'+id;
                      let tid = sid+"_Zeit_AN"; 
                      if (createStates) {
                          console.log(getState(id + '_Zeit_AN'))
                          if (getState(id + '_Zeit_AN').notExist) createState(id + '_Zeit_AN', '09:00');
                          if (getState(id + '_Zeit_AUS').notExist) createState(id + '_Zeit_AUS', '09:01');
                          if (getState(id).notExist) createState(id, false);
                      }
                      let shed = null;
                      SheduleFunctions[tid] = function() {
                         if (getState("javascript.0.Anwesend").val === true){
                  	     setState(sid, true);}
                      };
                      let state = getState(tid);
                      if (!state.notExist)
                      {
                          let time = state.val.split(':')
                          if (time.length >= 2) {
                              knownTimers[tid] = schedule(time[1] + ' ' + time[0] + ' * * *', SheduleFunctions[tid]);
                          }
                      }
                      else knownTimers[tid] = null;
                      on ({id: tid, change: 'ne', ack:false}, function(obj) { UpdateTimer(obj); })
                      
                      sid = 'javascript.0.STKD.DG1.'+id;
                      tid = sid+"_Zeit_AUS"; 
                      shed = null;
                      if (knownTimers.hasOwnProperty(tid)) { shed = knownTimers[tid]; }
                      if (shed != null) { clearSchedule(shed); }
                      SheduleFunctions[tid] = function() {
                  	     setState(sid, true);
                      };
                      if (state.val)
                      {
                          let time = state.val.split(':')
                          if (time.length >= 2) {
                              knownTimers[tid] = schedule(time[1] + ' ' + time[0] + ' * * *', SheduleFunctions[tid]);
                          }
                      }
                      else knownTimers[tid] = null;
                      on ({id: tid, change: 'ne', ack: false}, function(obj) { UpdateTimer(obj); })
                  }
                  
                  
                  function UpdateTimer(obj)
                  {
                      let time = obj.state.val.split(':');
                      setState(obj.id, obj.val, true);
                      if (knownTimers[obj.id] != null) clearSchedule(knownTimers[obj.id]);
                      if (time.length >= 2)
                      {
                          knownTimers[obj.id] = schedule(time[1] + ' ' + time[0] + ' * * *', SheduleFunctions[obj.id]);
                      }
                      else 
                      { knownTimers[obj.id] = null; }
                  }
                  

                  ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                  "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                  X 1 Antwort Letzte Antwort
                  1
                  • AsgothianA Asgothian

                    @xmace Da gibt es eine elegantere Lösung. Sie ist etwas länger, aber skalierter.

                    Schlussendlich setzt du nur im array "ids" die Namen der Datenpunkte die du hast (oder haben willst), und bei createStates ob das script sie bauen soll oder nicht

                    Den rest macht das script selber. Es erstellt ein Mapping fuer die Timer und ein Mapping fuer die Funktionen die beim Timer aufgerufen werden sollen, sowie die Trigger zum umsetzen.

                    
                    var ids = [ 'STKD.DG1.Schlafzi','STKD.DG1.Spielecke' ];
                    const createStates = true;
                    
                    var knownTimers = {};
                    var SheduleFunctions = {}
                    
                    for (var idx in ids) {
                        let id = ids[idx];
                        let sid = 'javascript.0.'+id;
                        let tid = sid+"_Zeit_AN"; 
                        if (createStates) {
                            console.log(getState(id + '_Zeit_AN'))
                            if (getState(id + '_Zeit_AN').notExist) createState(id + '_Zeit_AN', '09:00');
                            if (getState(id + '_Zeit_AUS').notExist) createState(id + '_Zeit_AUS', '09:01');
                            if (getState(id).notExist) createState(id, false);
                        }
                        let shed = null;
                        SheduleFunctions[tid] = function() {
                           if (getState("javascript.0.Anwesend").val === true){
                    	     setState(sid, true);}
                        };
                        let state = getState(tid);
                        if (!state.notExist)
                        {
                            let time = state.val.split(':')
                            if (time.length >= 2) {
                                knownTimers[tid] = schedule(time[1] + ' ' + time[0] + ' * * *', SheduleFunctions[tid]);
                            }
                        }
                        else knownTimers[tid] = null;
                        on ({id: tid, change: 'ne', ack:false}, function(obj) { UpdateTimer(obj); })
                        
                        sid = 'javascript.0.STKD.DG1.'+id;
                        tid = sid+"_Zeit_AUS"; 
                        shed = null;
                        if (knownTimers.hasOwnProperty(tid)) { shed = knownTimers[tid]; }
                        if (shed != null) { clearSchedule(shed); }
                        SheduleFunctions[tid] = function() {
                    	     setState(sid, true);
                        };
                        if (state.val)
                        {
                            let time = state.val.split(':')
                            if (time.length >= 2) {
                                knownTimers[tid] = schedule(time[1] + ' ' + time[0] + ' * * *', SheduleFunctions[tid]);
                            }
                        }
                        else knownTimers[tid] = null;
                        on ({id: tid, change: 'ne', ack: false}, function(obj) { UpdateTimer(obj); })
                    }
                    
                    
                    function UpdateTimer(obj)
                    {
                        let time = obj.state.val.split(':');
                        setState(obj.id, obj.val, true);
                        if (knownTimers[obj.id] != null) clearSchedule(knownTimers[obj.id]);
                        if (time.length >= 2)
                        {
                            knownTimers[obj.id] = schedule(time[1] + ' ' + time[0] + ' * * *', SheduleFunctions[obj.id]);
                        }
                        else 
                        { knownTimers[obj.id] = null; }
                    }
                    
                    X Offline
                    X Offline
                    xmace
                    schrieb am zuletzt editiert von
                    #14

                    @Asgothian
                    super vielen Dank!!

                    1 Antwort Letzte Antwort
                    0
                    • padrinoP Online
                      padrinoP Online
                      padrino
                      Most Active
                      schrieb am zuletzt editiert von padrino
                      #15

                      falscher Thread... Beitrag könnte gelöscht werden

                      1 Antwort Letzte Antwort
                      0
                      • paul53P paul53

                        Per Javascript ist es leicht zu realisieren.

                        const idWeckzeit = '...';  // Weckzeit als String "hh:mm"
                        const idWecker = '...'; //  boolean
                        
                        var timer = null;
                        
                        on(idWeckzeit, function(dp) {
                           var t = dp.state.val.split(':');
                           clearSchedule(timer);
                           timer = schedule(t[1] + ' ' + t[0] + ' * * *', function() {
                               setState(idWecker, true);
                           });
                        });
                        
                        hanssH Online
                        hanssH Online
                        hanss
                        schrieb am zuletzt editiert von
                        #16

                        @paul53
                        Hallo paul53,
                        also das ist wirklich super, welche Tricks Du draufhast und die auch funktionieren.
                        Vielen Dank

                        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

                        763

                        Online

                        32.5k

                        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