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. JavaScript
  5. [Scriptbeispiel] Alle Rollladen zeitverzögert per Taste/vis

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    883

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

[Scriptbeispiel] Alle Rollladen zeitverzögert per Taste/vis

Geplant Angeheftet Gesperrt Verschoben JavaScript
3 Beiträge 2 Kommentatoren 2.4k 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.
  • Y Offline
    Y Offline
    ykuendig
    schrieb am zuletzt editiert von
    #1

    Es wurden schon verschiedene Varianten des Rollladenscripts gezeigt.

    Ich möchte nun auch noch meine Adaption davon vorstellen, da diese gerade im Aufbau der Anlage von Vorteil ist.

    Dieses 'fire and forget' Script fährt immer alle Storen, auch wenn ihr welche abgebaut und / oder angebaut habt. Die einzelnen Läden müssen nicht neu konfiguriert oder eingetragen werden.

    Dafür fahren sie halt 'nur' ganz auf oder ganz zu.

    // Erzeuge zwei Objekte um mit .vis oder anderen Scripten einzugreifen
    createState("javascript.0.vis.Storen.runter", false);
    createState("javascript.0.vis.Storen.hoch", false);
    
    var input1 = "hm-rpc.0.LEQ0656999.1.PRESS_SHORT"/*HM-PB-2-WM55-2 LEQ0656999:1.PRESS_SHORT*/;    // Hier den Auslöse-Datenpunkt für 'AB' einfügen
    var input2 = "javascript.0.vis.Storen.runter"/*javascript.0.vis.Storen.runter*/;
    var input3 = "hm-rpc.0.LEQ0656999.2.PRESS_SHORT"/*HM-PB-2-WM55-2 LEQ0656999:2.PRESS_SHORT*/;    // Hier den Auslöse-Datenpunkt für 'AUF' einfügen
    var input4 = "javascript.0.vis.Storen.hoch"/*javascript.0.vis.Storen.hoch*/;
    var timer1 = 3000;  // Millisekunden Verzögerung zwischen den Storen                            // Das können virtuelle oder richtige Taste sein
    
    // DO NOT CHANGE BELOW THIS LINE, untill you know what you do!
    // It is better to cache all the blinds at start, because in big installations it can take some time to search for blinds
    var cacheSelector = $('channel{TYPE=BLIND}[state.id=*.LEVEL]');     // Get all blinds of Homematic
    var oldTimers = [];
    
    // set timed function
    function timedState(i, id, level) {
      oldTimers.push(setTimeout(function(){
        setState(id, level);
        log("fahre Storen " + id + " auf " + level + "%"); 
      }, timer1 * i));
    }
    
    function setPercent(value) {
        // Terminate old timers. So it is possible to start the next step without waiting 'till the old one finished
        for (var t = 0; t < oldTimers.length; t++) {
             clearTimeout(oldTimers[t]);
        }
        oldTimers = [];
        cacheSelector.each(function (id, i) {
            timedState(i, id, value);       // 0 for 0% or 100 for 100%
        }); 
    }
    
    // blinds down
    on({id: input1}, function () {
        log("Script: Storen schliessen startet");           // Log the action. Default level is always  "info"  
        setPercent(0);
    });
    on({id: input2}, function () {
        log("Script: Storen schliessen startet");
        setPercent(0);
    });
    
    // blinds up
    on({id: input3}, function () {
        log("Script: Storen öffnen startet");
         setPercent(100);
    });
    on({id: input4}, function () {
        log("Script: Storen öffnen startet");
         setPercent(100);
    });
    
    // astro functions
    schedule({astro: "sunriseEnd"}, function () {
        log("Script: Astro-SunriseEnd - Storen öffnen startet");
        setPercent(100);
    });
    schedule({astro: "sunset"}, function () {
        log("Script: Astro-Sunset - Storen schliessen startet");
        setPercent(0);
    });
    
    

    Version 0.2.0 15.06.15 Integration von virtuellen Datenpunkten, um zB mit .vis zu schalten

    Version 0.1.2 12.06.15 Auslösung durch Astro-Funktion angefügt

    Version 0.1.1 05.06.15 Anpassungen von Bluefox nachgetragen

    Version 0.1.0 04.06.15 First release

    Gruss Yves

    1 Antwort Letzte Antwort
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      schrieb am zuletzt editiert von
      #2

      Ich wurde das so ändern:

      var input1 = "hm-rpc.0.LEQ0696992.1.PRESS_SHORT"/*HM-PB-2-WM55-2 LEQ0696992:1.PRESS_SHORT*/;    // Hier den Datenpunkt für 'AB' einfügen
      var input2 = "hm-rpc.0.LEQ0696992.2.PRESS_SHORT"/*HM-PB-2-WM55-2 LEQ0696992:2.PRESS_SHORT*/;    // Hier den Datenpunkt für 'AUF' einfügen
      var timer1 = 4000;  // Millisekunden Verzögerung zwischen den Storen                            // Das kann eine Virtuell oder richtige Taste sein
      
      // DO NOT CHANGE BELOW THIS LINE
      // It is better to cache all the blinds at start, because in the big installations it can take the time to search for blinds
      var cacheSelector = $('channel{TYPE=BLIND}[state.id=*.LEVEL]');     // Get all blinds of Homematic
      var oldTimers = [];
      
      // set timed function
      function timedState(i, id, level) {
        oldTimers.push(setTimeout(function(){
          setState(id, level);
          log("fahre Storen " + id + " auf " + level + "%"); 
        }, timer1 * i));
      }
      
      function setPercent(value) {
          // Terminate old timers. So it is possible to start the next step without waiting till the old one finished
          for (var t = 0; t < oldTimers.length; t++) {
               clearTimeout(oldTimers[t]);
          }
          oldTimers = [];
          cacheSelector.each(function (id, i) {
              timedState(i, id, value);       // 0 for 0% or 100 for 100%
          }); 
      }
      
      // blinds down
      on({id: input1}, function () {
          log("Script: Storen schliessen startet");          // Log the action. Default level is always  "info"  
          setPercent(0);
      });
      
      // blinds up
      on({id: input2}, function () {
          log("Script: Storen öffnen startet");       // Log the action. Default level is always  "info" 
           setPercent(100);
      });
      
      
      1 Antwort Letzte Antwort
      0
      • Y Offline
        Y Offline
        ykuendig
        schrieb am zuletzt editiert von
        #3

        Cool; ( Immerhin hatte meins auch funktioniert… )

        Gruss Yves

        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

        753

        Online

        32.6k

        Benutzer

        82.1k

        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