Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Meine Skriptesammlung

NEWS

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

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

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

Meine Skriptesammlung

Scheduled Pinned Locked Moved JavaScript
14 Posts 3 Posters 2.7k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • LSchulzeL LSchulze

    Die eben angelegten Datenpunkt wird im nächsten Skript eingesetzt um eine Deckenlampe zu steuern.

    Geräte

    • Hier wird eine Yeelight Lampe verwendet.

    Mögliche Probleme

    • Wenn ich auf "any" Change im "On()" Event achte, werden u.U. zuviele Aktionen ausgelöst. - Man muss die Nachrichten auf gt/lt filtern.
    • Die Lampe nur schalten, wenn Sie nicht schon an ist.
    • Es wurde ein IsDaytime Datenpunkt hinzugefügt.

    TODO

    • Wenn ein Lichtschalter betätigt wird, soll die automatische Ausschaltung überschrieben werden.

    [V002]

    var raumBewegungID  = 'javascript.0.variables.BewegungBüro'; 
    var deviceID        = 'yeelight-2.0.Büro_Deckenlampe'; //Gerät, dass geschaltet werden soll
    var onlyNighttime   = true
    var nighttimeID     = 'javascript.0.variables.DraußenEsIstHell'
    
    on(raumBewegungID, function (obj) { // triggert bei Wertänderung
      var value = obj.state.val;
      
      // Schalte das Gerät, sofern die Tageszeit es zulässt und es nicht bereits den Sollzustand hat. 
      if (((   onlyNighttime && getState(nighttimeID).val == false) // Ist es Nacht?
            || onlyNighttime == false )                             // Oder ist das egal?
            && getState(deviceID + ".control.power").val != value) { 
        setState(deviceID + ".control.power"/*power*/, value);
      }
    });
    
    LSchulzeL Offline
    LSchulzeL Offline
    LSchulze
    wrote on last edited by
    #5

    Problemstellung:

    Im Badezimmer fehlt mir eine einfache Möglichkeit zwischen Radiosendern auf einem Chromecast Gerät wechseln zu können.

    • eine festdefinierte Liste von MP3 Sendern. Es ist wichtig, dass die MP3 ausgelesen wirtd aus den M3U Dateien, die die Sender zur Verfügung stellen.
    • Mögliche Probleme, ein Volumen unter 0% und über 100% ist ungültig.
    • Beim drehen wird das Volumen alle x mm um 5 % erhöht. Ich habe hier noch nicht die perfekte Kombination gefunden, aber es ist wichtig zu wissen, dass egal ist wie schnell man es dreht, es wird beim drehen einfach alle x ms/sek der Wert erhöht.

    Geräte:

    • Irgendein Chromecast Gerät aus dem Chromecast Adapter
    • IKEA E1744 SYMFOISK

    ToDo

    • Ich konnte noch keine Spotfy Playlist abspielen.
    • Das starten vom DLF Stream dauert teilweise lange.
    • 3 Fach Click ist noch nicht belegt.

    Aktionen
    Drehregler zum steuern vom Volumen
    1 Click - Start / Pause
    2 Click - Nächster Radiosender
    3 Click - wird nicht verwendet.

    var deviceID = 'zigbee.0.680ae2fffe37314a';
    var volumenID = "javascript.0.variables.VolumenKüche";
    var chromecastID = 'chromecast.0.Küche_Home';
    var radiosenderListe = ['http://www.wdr.de/wdrlive/media/1live_fiehe.m3u', 'http://st01.dlf.de/dlf/01/128/mp3/stream.mp3', 'http://st03.dlf.de/dlf/03/128/mp3/stream.mp3', 'http://wdr-1live-specials.icecast.wdr.de/wdr/1live/specials/mp3/128/stream.mp3?ar-distributor=ffa1', null];
    
    var last = 1;
    on({id: deviceID + '.rotate_right', change: "any"}, function (obj) {
        var newState = getState(volumenID).val + 5;
        if(newState > 100)
            newState = 100;
        setState(volumenID, newState);
    });
    on({id: deviceID + '.rotate_left', change: "any"}, function (obj) {
        var newState = getState(volumenID).val - 5;
        if(newState < 0)
            newState = 0;
        setState(volumenID, newState);
    });
    
    on({id: deviceID + '.rotate_stop', change: "gt"}, function (obj) {
        setState(".status.volume", getState(volumenID));
    });
    
    on({id: deviceID + '.button_play_pause', change: "gt"}, function (obj) {
        
        if(getState(chromecastID + ".player.paused").val == false)
        {
    
            getState(chromecastID + ".player.paused", function (err, state) {
                setState(chromecastID + ".player.pause"/*Küche_Home.player.play*/, state ? !state.val : true);
            }); 
        }
        else
        {
            getState(chromecastID + ".player.paused", function (err, state) {
                setState(chromecastID + ".player.play"/*Küche_Home.player.play*/, state ? state.val : true);
            }); 
    
        }
        
    });
    
    on({id: deviceID + '.button_skip_foward', change: "gt"}, function (obj) {
        setState(chromecastID + ".player.url2play", (radiosenderListe[(last - 1)]));
        
        last = last + 1;
        if(last>4)
            last = 0;
    });
    
    
    
    LSchulzeL A 2 Replies Last reply
    0
    • LSchulzeL LSchulze

      Problemstellung:

      Im Badezimmer fehlt mir eine einfache Möglichkeit zwischen Radiosendern auf einem Chromecast Gerät wechseln zu können.

      • eine festdefinierte Liste von MP3 Sendern. Es ist wichtig, dass die MP3 ausgelesen wirtd aus den M3U Dateien, die die Sender zur Verfügung stellen.
      • Mögliche Probleme, ein Volumen unter 0% und über 100% ist ungültig.
      • Beim drehen wird das Volumen alle x mm um 5 % erhöht. Ich habe hier noch nicht die perfekte Kombination gefunden, aber es ist wichtig zu wissen, dass egal ist wie schnell man es dreht, es wird beim drehen einfach alle x ms/sek der Wert erhöht.

      Geräte:

      • Irgendein Chromecast Gerät aus dem Chromecast Adapter
      • IKEA E1744 SYMFOISK

      ToDo

      • Ich konnte noch keine Spotfy Playlist abspielen.
      • Das starten vom DLF Stream dauert teilweise lange.
      • 3 Fach Click ist noch nicht belegt.

      Aktionen
      Drehregler zum steuern vom Volumen
      1 Click - Start / Pause
      2 Click - Nächster Radiosender
      3 Click - wird nicht verwendet.

      var deviceID = 'zigbee.0.680ae2fffe37314a';
      var volumenID = "javascript.0.variables.VolumenKüche";
      var chromecastID = 'chromecast.0.Küche_Home';
      var radiosenderListe = ['http://www.wdr.de/wdrlive/media/1live_fiehe.m3u', 'http://st01.dlf.de/dlf/01/128/mp3/stream.mp3', 'http://st03.dlf.de/dlf/03/128/mp3/stream.mp3', 'http://wdr-1live-specials.icecast.wdr.de/wdr/1live/specials/mp3/128/stream.mp3?ar-distributor=ffa1', null];
      
      var last = 1;
      on({id: deviceID + '.rotate_right', change: "any"}, function (obj) {
          var newState = getState(volumenID).val + 5;
          if(newState > 100)
              newState = 100;
          setState(volumenID, newState);
      });
      on({id: deviceID + '.rotate_left', change: "any"}, function (obj) {
          var newState = getState(volumenID).val - 5;
          if(newState < 0)
              newState = 0;
          setState(volumenID, newState);
      });
      
      on({id: deviceID + '.rotate_stop', change: "gt"}, function (obj) {
          setState(".status.volume", getState(volumenID));
      });
      
      on({id: deviceID + '.button_play_pause', change: "gt"}, function (obj) {
          
          if(getState(chromecastID + ".player.paused").val == false)
          {
      
              getState(chromecastID + ".player.paused", function (err, state) {
                  setState(chromecastID + ".player.pause"/*Küche_Home.player.play*/, state ? !state.val : true);
              }); 
          }
          else
          {
              getState(chromecastID + ".player.paused", function (err, state) {
                  setState(chromecastID + ".player.play"/*Küche_Home.player.play*/, state ? state.val : true);
              }); 
      
          }
          
      });
      
      on({id: deviceID + '.button_skip_foward', change: "gt"}, function (obj) {
          setState(chromecastID + ".player.url2play", (radiosenderListe[(last - 1)]));
          
          last = last + 1;
          if(last>4)
              last = 0;
      });
      
      
      
      LSchulzeL Offline
      LSchulzeL Offline
      LSchulze
      wrote on last edited by
      #6

      Problemstellung:
      Jedes Zimmer hat eine Bewegungserkennung, doch manchmal will ich im Schlafzimmer das Licht selbst steuern.

      • An/Aus auf einer Taste
      • Lichtwärme
      • Mond Modus
      • Helligkeit regeln.

      Geräte:
      IKEA E1524/E1810 - TRADFRI remote control
      Eine yeelight Lampe, oder jede andere mit diesen Modi

      Mögliche Probleme

      • Wieder nur dann schalten, wenn es auch etwas zum schalten gibt.
      • Wieder nur gt/lt Events auswerten

      Todos:

      • Helligkeiten von 20% und drunter werden eigenlicht nicht benötigt.
      • Ich würde es eher so machen wenn ich durch die Helligkeitsmodi gehe, 50% Mondmodus, dann 100% Mondmodus, dann 20% ohne Mond, 50 % ohne Mond, 80% ohne Mond, 100% ohne Mond.
      • Eine Aktion in diesem Skript sollte den Bewegungsmelder erstmal für längere Zeit deaktivieren?

      Aktionen

      • power -> Schaltet das Licht an/aus
      • up click -> es wird Heller
      • down click -> es wird dunkler
      • right click hold -> Mondmodus wird aktiviert/deaktiviert
      • right click -> Licht wird kälter
      • left click -> Licht wird wärmer
      var lastBri = 100;
      var lastCT  = 1;
      var deviceID = 'zigbee.0.ec1bbdfffeed42cf';
      var lightID = 'yeelight-2.0.Büro_Deckenlampe.control';
      
      
      on({id: deviceID + ".toggle", change: "gt"}, function(obj) { 
        setState(lightID + '.power', !getState(lightID + '.power').val);
      });
       
      on({id: deviceID + ".up_click", change: "gt"}, function(obj) { 
        var bri = getState(lightID + '.active_bright').val
        if (bri < 90) {
            setState(lightID + '.active_bright', bri+10);
            lastBri = bri+10;
            return;
        }
        else setState(lightID + '.active_bright', 100) 
      });
       
      on({id: deviceID + ".down_click", change: "gt"}, function(obj) { 
        var bri = getState(lightID + '.active_bright').val
        if (bri > 10) {
            setState(lightID + '.active_bright', bri-10);
            lastBri = bri-10;
            return;
        }
        else setState(lightID + '.active_bright', 0) 
      });
      
      on({id: deviceID + ".right_button", change: "gt"}, function(obj) { 
        setState(lightID + '.moon_mode', !getState(lightID + '.moon_mode').val);
      });
      
      
      on({id: deviceID + ".right_click", change: "gt"}, function(obj) { 
        setState(lightID + ".ct", ([2700, 3500, 4000, 5500, 6500][(lastCT - 1)]));
        lastCT = lastCT + 1; 
        if(lastCT>5)
          lastCT = 5;
      });
      
      on({id: deviceID + ".left_click", change: "gt"}, function(obj) { 
        setState(lightID + ".ct", ([2700, 3500, 4000, 5500, 6500][(lastCT - 1)]));
        lastCT = lastCT - 1;
        if(lastCT<1)
          lastCT = 1;
      });
      
      
      1 Reply Last reply
      0
      • LSchulzeL LSchulze

        Die eben angelegten Datenpunkt wird im nächsten Skript eingesetzt um eine Deckenlampe zu steuern.

        Geräte

        • Hier wird eine Yeelight Lampe verwendet.

        Mögliche Probleme

        • Wenn ich auf "any" Change im "On()" Event achte, werden u.U. zuviele Aktionen ausgelöst. - Man muss die Nachrichten auf gt/lt filtern.
        • Die Lampe nur schalten, wenn Sie nicht schon an ist.
        • Es wurde ein IsDaytime Datenpunkt hinzugefügt.

        TODO

        • Wenn ein Lichtschalter betätigt wird, soll die automatische Ausschaltung überschrieben werden.

        [V002]

        var raumBewegungID  = 'javascript.0.variables.BewegungBüro'; 
        var deviceID        = 'yeelight-2.0.Büro_Deckenlampe'; //Gerät, dass geschaltet werden soll
        var onlyNighttime   = true
        var nighttimeID     = 'javascript.0.variables.DraußenEsIstHell'
        
        on(raumBewegungID, function (obj) { // triggert bei Wertänderung
          var value = obj.state.val;
          
          // Schalte das Gerät, sofern die Tageszeit es zulässt und es nicht bereits den Sollzustand hat. 
          if (((   onlyNighttime && getState(nighttimeID).val == false) // Ist es Nacht?
                || onlyNighttime == false )                             // Oder ist das egal?
                && getState(deviceID + ".control.power").val != value) { 
            setState(deviceID + ".control.power"/*power*/, value);
          }
        });
        
        paul53P Offline
        paul53P Offline
        paul53
        wrote on last edited by
        #7

        @LSchulze sagte:

        Die eben angelegte Variable wird im nächsten Skript eingesetzt um eine Deckenlampe zu steuern.

        Bitte für einen Datenpunkt nicht die Bezeichnung "Variable" verwenden, da es zu Verwechslungen mit Script-Variablen kommen kann.

        Effizienterer Code:

        const raumBewegungID  = 'javascript.0.variables.BewegungBüro'; 
        const deviceID        = 'yeelight-2.0.Büro_Deckenlampe'; //Gerät, dass geschaltet werden soll
         
        on(raumBewegungID, function (obj) { // triggert bei Wertänderung
          var value = obj.state.val;
         
          // Schalte das Gerät, sofern es nicht den Sollzustand hat.
          if (getState(deviceID + ".control.power").val != value) {
            setState(deviceID + ".control.power"/*power*/, value);
          }
        });
        

        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

        LSchulzeL 1 Reply Last reply
        1
        • LSchulzeL Offline
          LSchulzeL Offline
          LSchulze
          wrote on last edited by LSchulze
          #8

          Problemstellung:
          Ist es gerade Hell draußen?

          • Aktuell wird ein boolean Datenpunkt gefüllt mit aktuellen Astrodaten.
          • 1x alle 30 Minuten (Falls der Server nicht aktiv war, als die Sonne aufgegangen ist
          • Ansonsten beim ende vom Sonnenaufgang und beim start des Sonnenuntergangs wird der Datenpunkt per schedule gefüllt.

          TODO

          • Auswertung von Aqara Bewegungssensoren für zB das Schlafzimmer. Wenn dort die Gardienen zugezogen sind, soll auch tagsüber das Licht angehen. Man könnte also auch die Helligkeitsangabe in den Bewegungssensoren auslesen.
          var draußenEsIstHellID = "javascript.0.variables.DraußenEsIstHell"
          
          schedule({astro: "sunriseEnd", shift: 0}, function () {
            setState(draußenEsIstHellID, true, true);
          });
          schedule({astro: "sunsetStart", shift: 0}, function () {
            setState(draußenEsIstHellID, false, true);
          });
          schedule("*/30 * * * *", function () {
            if (compareTime(getAstroDate("sunriseEnd", undefined, 0), null, ">", null) && compareTime(getAstroDate("sunsetStart", undefined, 0), null, "<", null)) {
              setState(draußenEsIstHellID, true, true);
            } else {
              setState(draußenEsIstHellID, false, true);
            }
          });
          
          
          
          
          paul53P 1 Reply Last reply
          0
          • paul53P paul53

            @LSchulze sagte:

            Die eben angelegte Variable wird im nächsten Skript eingesetzt um eine Deckenlampe zu steuern.

            Bitte für einen Datenpunkt nicht die Bezeichnung "Variable" verwenden, da es zu Verwechslungen mit Script-Variablen kommen kann.

            Effizienterer Code:

            const raumBewegungID  = 'javascript.0.variables.BewegungBüro'; 
            const deviceID        = 'yeelight-2.0.Büro_Deckenlampe'; //Gerät, dass geschaltet werden soll
             
            on(raumBewegungID, function (obj) { // triggert bei Wertänderung
              var value = obj.state.val;
             
              // Schalte das Gerät, sofern es nicht den Sollzustand hat.
              if (getState(deviceID + ".control.power").val != value) {
                setState(deviceID + ".control.power"/*power*/, value);
              }
            });
            
            LSchulzeL Offline
            LSchulzeL Offline
            LSchulze
            wrote on last edited by
            #9

            @paul53 said in Meine Skriptesammlung:

            @LSchulze sagte:

            Die eben angelegte Variable wird im nächsten Skript eingesetzt um eine Deckenlampe zu steuern.

            Bitte für einen Datenpunkt nicht die Bezeichnung "Variable" verwenden, da es zu Verwechslungen mit Script-Variablen kommen kann.

            Effizienterer Code:

            const raumBewegungID  = 'javascript.0.variables.BewegungBüro'; 
            const deviceID        = 'yeelight-2.0.Büro_Deckenlampe'; //Gerät, dass geschaltet werden soll
             
            on(raumBewegungID, function (obj) { // triggert bei Wertänderung
              var value = obj.state.val;
             
              // Schalte das Gerät, sofern es nicht den Sollzustand hat.
              if (getState(deviceID + ".control.power").val != value) {
                setState(deviceID + ".control.power"/*power*/, value);
              }
            });
            

            Ich habe deinen Vorschlag in der V002 eingesetzt.

            1 Reply Last reply
            0
            • LSchulzeL LSchulze

              Problemstellung:
              Ist es gerade Hell draußen?

              • Aktuell wird ein boolean Datenpunkt gefüllt mit aktuellen Astrodaten.
              • 1x alle 30 Minuten (Falls der Server nicht aktiv war, als die Sonne aufgegangen ist
              • Ansonsten beim ende vom Sonnenaufgang und beim start des Sonnenuntergangs wird der Datenpunkt per schedule gefüllt.

              TODO

              • Auswertung von Aqara Bewegungssensoren für zB das Schlafzimmer. Wenn dort die Gardienen zugezogen sind, soll auch tagsüber das Licht angehen. Man könnte also auch die Helligkeitsangabe in den Bewegungssensoren auslesen.
              var draußenEsIstHellID = "javascript.0.variables.DraußenEsIstHell"
              
              schedule({astro: "sunriseEnd", shift: 0}, function () {
                setState(draußenEsIstHellID, true, true);
              });
              schedule({astro: "sunsetStart", shift: 0}, function () {
                setState(draußenEsIstHellID, false, true);
              });
              schedule("*/30 * * * *", function () {
                if (compareTime(getAstroDate("sunriseEnd", undefined, 0), null, ">", null) && compareTime(getAstroDate("sunsetStart", undefined, 0), null, "<", null)) {
                  setState(draußenEsIstHellID, true, true);
                } else {
                  setState(draußenEsIstHellID, false, true);
                }
              });
              
              
              
              
              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by paul53
              #10

              @LSchulze sagte:

              Ist es gerade Hell draußen?

              Genügt dafür nicht die Funktion isAstroDay des Javascript-Adapters ?

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

              1 Reply Last reply
              0
              • LSchulzeL Offline
                LSchulzeL Offline
                LSchulze
                wrote on last edited by LSchulze
                #11

                Problemstellung:
                Sind alle Fenster in einem Raum geschlossen?

                • Manche Räume haben bei mir 10 einzelne Fenster, eine gigantische IF Abfrage wäre da natürlich mist.
                • Es wird auf das Event eines Sensors gewartet, dann wird der ganze Raum geprüft.
                • Wenn alle Fenstersensoren also melden, dass sie geschlossen sind wird die Variable auf false gesetzt, ansosnten true.

                Geräte

                • Aqara Fenstersensor MCCGQ11LM oder MCCGQ01LM

                Von paul53 übernommen

                const roomID   = 'javascript.0.variables.Schließsensoren.BadezimmerOffen';
                const ids = ['zigbee.0.00158d00040be1df.opened', 'zigbee.0.00158d00024904cc.opened'];
                 
                on(ids, function() { // triggert bei Wertänderung
                    let istEinFensterOffen = false; 
                    for (let i in ids) {
                        if (getState(ids[i]).val) istEinFensterOffen = true; // Uns interessieren nur true Werte. 
                    }
                 
                    // Nachdem alle abgefragt wurden, setze den Wert.
                    setState(roomID, istEinFensterOffen, true);
                });
                
                
                
                
                
                paul53P 1 Reply Last reply
                0
                • LSchulzeL LSchulze

                  Problemstellung:
                  Sind alle Fenster in einem Raum geschlossen?

                  • Manche Räume haben bei mir 10 einzelne Fenster, eine gigantische IF Abfrage wäre da natürlich mist.
                  • Es wird auf das Event eines Sensors gewartet, dann wird der ganze Raum geprüft.
                  • Wenn alle Fenstersensoren also melden, dass sie geschlossen sind wird die Variable auf false gesetzt, ansosnten true.

                  Geräte

                  • Aqara Fenstersensor MCCGQ11LM oder MCCGQ01LM

                  Von paul53 übernommen

                  const roomID   = 'javascript.0.variables.Schließsensoren.BadezimmerOffen';
                  const ids = ['zigbee.0.00158d00040be1df.opened', 'zigbee.0.00158d00024904cc.opened'];
                   
                  on(ids, function() { // triggert bei Wertänderung
                      let istEinFensterOffen = false; 
                      for (let i in ids) {
                          if (getState(ids[i]).val) istEinFensterOffen = true; // Uns interessieren nur true Werte. 
                      }
                   
                      // Nachdem alle abgefragt wurden, setze den Wert.
                      setState(roomID, istEinFensterOffen, true);
                  });
                  
                  
                  
                  
                  
                  paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by paul53
                  #12

                  @LSchulze sagte:

                  on(getState(j_list[0]).val, function (obj) { // triggert bei Wertänderung

                  Das funktioniert nicht, denn man kann nicht auf Werte von Datenpunkten triggern. Richtig:

                  on(j_list, function (obj) { // triggert bei Wertänderung eines der Datenpunkte
                  

                  So benötigt man auch nur einen Trigger, da man ein "Array of IDs" übergeben kann.

                  EDIT: Vorschlag:

                  const roomID   = 'javascript.0.variables.Schließsensoren.BadezimmerOffen';
                  const ids = ['zigbee.0.00158d00040be1df.opened', 'zigbee.0.00158d00024904cc.opened'];
                   
                  on(ids, function() { // triggert bei Wertänderung
                      let istEinFensterOffen = false; 
                      for (let i in ids) {
                          if (getState(ids[i]).val) istEinFensterOffen = true; // Uns interessieren nur true Werte. 
                      }
                   
                      // Nachdem alle abgefragt wurden, setze den Wert.
                      setState(roomID, istEinFensterOffen, 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

                  LSchulzeL 1 Reply Last reply
                  0
                  • paul53P paul53

                    @LSchulze sagte:

                    on(getState(j_list[0]).val, function (obj) { // triggert bei Wertänderung

                    Das funktioniert nicht, denn man kann nicht auf Werte von Datenpunkten triggern. Richtig:

                    on(j_list, function (obj) { // triggert bei Wertänderung eines der Datenpunkte
                    

                    So benötigt man auch nur einen Trigger, da man ein "Array of IDs" übergeben kann.

                    EDIT: Vorschlag:

                    const roomID   = 'javascript.0.variables.Schließsensoren.BadezimmerOffen';
                    const ids = ['zigbee.0.00158d00040be1df.opened', 'zigbee.0.00158d00024904cc.opened'];
                     
                    on(ids, function() { // triggert bei Wertänderung
                        let istEinFensterOffen = false; 
                        for (let i in ids) {
                            if (getState(ids[i]).val) istEinFensterOffen = true; // Uns interessieren nur true Werte. 
                        }
                     
                        // Nachdem alle abgefragt wurden, setze den Wert.
                        setState(roomID, istEinFensterOffen, true);
                    });
                    
                    LSchulzeL Offline
                    LSchulzeL Offline
                    LSchulze
                    wrote on last edited by
                    #13

                    @paul53 ah!

                    darüber bin ich auch gestolpert.

                    1 Reply Last reply
                    0
                    • LSchulzeL LSchulze

                      Problemstellung:

                      Im Badezimmer fehlt mir eine einfache Möglichkeit zwischen Radiosendern auf einem Chromecast Gerät wechseln zu können.

                      • eine festdefinierte Liste von MP3 Sendern. Es ist wichtig, dass die MP3 ausgelesen wirtd aus den M3U Dateien, die die Sender zur Verfügung stellen.
                      • Mögliche Probleme, ein Volumen unter 0% und über 100% ist ungültig.
                      • Beim drehen wird das Volumen alle x mm um 5 % erhöht. Ich habe hier noch nicht die perfekte Kombination gefunden, aber es ist wichtig zu wissen, dass egal ist wie schnell man es dreht, es wird beim drehen einfach alle x ms/sek der Wert erhöht.

                      Geräte:

                      • Irgendein Chromecast Gerät aus dem Chromecast Adapter
                      • IKEA E1744 SYMFOISK

                      ToDo

                      • Ich konnte noch keine Spotfy Playlist abspielen.
                      • Das starten vom DLF Stream dauert teilweise lange.
                      • 3 Fach Click ist noch nicht belegt.

                      Aktionen
                      Drehregler zum steuern vom Volumen
                      1 Click - Start / Pause
                      2 Click - Nächster Radiosender
                      3 Click - wird nicht verwendet.

                      var deviceID = 'zigbee.0.680ae2fffe37314a';
                      var volumenID = "javascript.0.variables.VolumenKüche";
                      var chromecastID = 'chromecast.0.Küche_Home';
                      var radiosenderListe = ['http://www.wdr.de/wdrlive/media/1live_fiehe.m3u', 'http://st01.dlf.de/dlf/01/128/mp3/stream.mp3', 'http://st03.dlf.de/dlf/03/128/mp3/stream.mp3', 'http://wdr-1live-specials.icecast.wdr.de/wdr/1live/specials/mp3/128/stream.mp3?ar-distributor=ffa1', null];
                      
                      var last = 1;
                      on({id: deviceID + '.rotate_right', change: "any"}, function (obj) {
                          var newState = getState(volumenID).val + 5;
                          if(newState > 100)
                              newState = 100;
                          setState(volumenID, newState);
                      });
                      on({id: deviceID + '.rotate_left', change: "any"}, function (obj) {
                          var newState = getState(volumenID).val - 5;
                          if(newState < 0)
                              newState = 0;
                          setState(volumenID, newState);
                      });
                      
                      on({id: deviceID + '.rotate_stop', change: "gt"}, function (obj) {
                          setState(".status.volume", getState(volumenID));
                      });
                      
                      on({id: deviceID + '.button_play_pause', change: "gt"}, function (obj) {
                          
                          if(getState(chromecastID + ".player.paused").val == false)
                          {
                      
                              getState(chromecastID + ".player.paused", function (err, state) {
                                  setState(chromecastID + ".player.pause"/*Küche_Home.player.play*/, state ? !state.val : true);
                              }); 
                          }
                          else
                          {
                              getState(chromecastID + ".player.paused", function (err, state) {
                                  setState(chromecastID + ".player.play"/*Küche_Home.player.play*/, state ? state.val : true);
                              }); 
                      
                          }
                          
                      });
                      
                      on({id: deviceID + '.button_skip_foward', change: "gt"}, function (obj) {
                          setState(chromecastID + ".player.url2play", (radiosenderListe[(last - 1)]));
                          
                          last = last + 1;
                          if(last>4)
                              last = 0;
                      });
                      
                      
                      
                      A Offline
                      A Offline
                      aking
                      wrote on last edited by
                      #14

                      @lschulze said in Meine Skriptesammlung:

                      IKEA E1744 SYMFOISK

                      Hallo,
                      Dein Skript bildet eigentlich genau das ab, was ich möchte. Habe mir also die Symfonisk Remote geholt und eingebunden. Insgesamt entspricht meine Konfiguration auch Deiner, also Homematic, Shelly, Zigbee, Chromecast.
                      Habe nun Dein Skript genommen und die Objekte entsprechend angepasst. Das Skript wird gestartet und laut Log gibt es auch keinen Fehler:
                      javascript.0 2021-01-23 17:55:48.399 info (29768) script.js.Media.Chromecast_: registered 5 subscriptions and 0 schedules

                      Allerdings passiert überhaupt nichts, wenn ich etwas an der Remote mache. Habe ich etwas vergessen? Ich bin mit Skripten nicht betraut, nur mit ein wenig Blockly. Wenn Du mir weiterhelfen könntest, wäre das klasse!

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      393

                      Online

                      32.4k

                      Users

                      81.5k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Home
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe