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. [gelöst]Lichtersteuerung auf Smartphone

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    518

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

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

[gelöst]Lichtersteuerung auf Smartphone

Geplant Angeheftet Gesperrt Verschoben Visualisierung
25 Beiträge 3 Kommentatoren 3.4k Aufrufe 3 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.
  • M Offline
    M Offline
    Meikie
    schrieb am zuletzt editiert von Meikie
    #1

    Hi,
    ich baue gerade im VIS-Editor (Standard) eine Visualisierung für mein Handy.
    Da ich allerdings viele Lichter habe und wenig Platz auf einem Display habe ich mir folgendes überlegt.

    Ich mache eine zentrale Steuerung für meine Lichter. Sprich ein Schieberegler für RGBW für White-Color und für an/aus.
    Jetzt dachte ich mir, dass ich alle Lichter als Buttons integriere und als Quelle auf eine eigene Variable (bool) verweise, sprich für jedes Licht eine eigene Variable (vielleicht in einem Array). Jetzt wähle ich quasi durch klick auf die Buttons ein oder mehrere Lichter aus und möchte nur die Ausgewählten mit der zentralen Steuerung steuern.
    Ich habe mir im Kopf auch schon ein Workaround überlegt mit eigenen Variablen für jedes Licht / Steuerzentrale und mit Blockly.
    Gibt es hierfür auch eine schönere Art mit Skripten zu arbeiten? Davon habe ich aktuell noch keine Ahnung.

    Vielen Dank für Eure Hilfe.

    PS: ich habe auch schon so eine Visualisierung für Rollladen hier im Forum gefunden, finde es allerdings nicht mehr. Habe mir zum Glück damals das Skript gespeichert, aber ich verstehe kein Wort davon.
    Hier das Skript:

    /**
     * CreationDate:     20.12.2018
     * Descriptin:      Rolladensteuerung im VIS Modul
     **/
     
    //enable Logging 
    logMode = true;
    
    //EG
    const rolladen_Kueche = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-Kueche" /*IOT-Shelly2-Rolladen-Kueche*/;
    const rolladen_Wz_Holzterrasse = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-WZ-Holzterrasse" /*IOT-Shelly2-Rolladen-WZ-Holzterrasse*/;
    const rolladen_Wz_Terrasse_Links = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-WZ-Terrasse-Links" /*IOT-Shelly2-Rolladen-WZ-Terrasse-Links*/;
    const rolladen_Wz_Terrasse_Mitte = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-WZ-Terrasse-Mitte" /*IOT-Shelly2-Rolladen-WZ-Terrasse-Mitte*/;
    const rolladen_Wz_Terrasse_Rechts = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-WZ-Terrasse-Rechts" /*IOT-Shelly2-Rolladen-WZ-Terrasse-Rechts*/;
    const rolladen_HWR = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-HWR";
    const rolladen_Buero = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-Buero";
    const rolladen_Gaestebad = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-Gaestebad";
    
    //OG
    const rolladen_Fitnessraum = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-Fitnessraum";
    const rolladen_Gaestezimmer = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-Gaestezimmer";
    const rolladen_Ankleide = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly25-Rolladen-Ankleide";
    const rolladen_Schlafzimmer = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly25-Rolladen-Schlafzimmer";
    const rolladen_Bad = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly25-Rolladen-Bad";
    const rolladen_Gaube = "javascript.0.Rolladensteuerung.VIS.IOT-Shelly25-Rolladen-Gaube";
    
    //Group buttons
    const grp_All = 'javascript.0.Rolladensteuerung.VIS.Group_All'/*Group All*/;
    const grp_EG = 'javascript.0.Rolladensteuerung.VIS.Group_EG'/*Group EG*/;
    const grp_OG = 'javascript.0.Rolladensteuerung.VIS.Group_OG'/*Group OG*/;
    const grp_Wohnzimmer = 'javascript.0.Rolladensteuerung.VIS.Group_Wohnzimmer'/*Group Wohnzimmer*/;
    const grp_Doors = 'javascript.0.Rolladensteuerung.VIS.Group_Doors'/*Group Doors*/;
    const grp_NoDoors = 'javascript.0.Rolladensteuerung.VIS.Group_No_Doors'/*Group No Doors*/;
    const grp_Sun_Protection_Front = 'grp_Sun_Protection_Front'/*No State/Button */;
    const grp_NoSelection = 'javascript.0.Rolladensteuerung.VIS.Group_No_Selection';
    
    const groupButtons = [grp_All, grp_EG, grp_OG, grp_Wohnzimmer, grp_Doors, grp_NoDoors, grp_NoSelection];
    const activeShutterState = 'javascript.0.Rolladensteuerung.VIS.Active_Shutters';
    
    const shutterMapping = {
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-Kueche":				'shelly.0.SHSW-21#134AD8#1', 
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-WZ-Holzterrasse":		'shelly.0.SHSW-25#68C63AFA1E5C#1',
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-WZ-Terrasse-Links":	'shelly.0.SHSW-21#559F06#1',
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-WZ-Terrasse-Mitte":	'shelly.0.SHSW-21#134A12#1',
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-WZ-Terrasse-Rechts":	'shelly.0.SHSW-25#483FDA762941#1',
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-HWR":					'shelly.0.SHSW-21#5596AC#1',
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-Buero":				'shelly.0.SHSW-21#135908#1',
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-Gaestebad":			'shelly.0.SHSW-21#134BD8#1',
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-Fitnessraum":			'shelly.0.SHSW-21#559883#1',
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly2-Rolladen-Gaestezimmer":			'shelly.0.SHSW-21#559ED1#1',
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly25-Rolladen-Ankleide":			'shelly.0.SHSW-25#691CB5#1',
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly25-Rolladen-Schlafzimmer":		'shelly.0.SHSW-25#5DBBA3#1',
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly25-Rolladen-Bad":					'shelly.0.SHSW-25#BA7E7D#1',
        "javascript.0.Rolladensteuerung.VIS.IOT-Shelly25-Rolladen-Gaube":               'shelly.0.SHSW-25#744E55#1'
    };
    
    const fnct_allUp = "javascript.0.Rolladensteuerung.VIS.Function_All_Up";
    const fnct_allDown = "javascript.0.Rolladensteuerung.VIS.Function_All_Down";
    const fnct_50Percent = "javascript.0.Rolladensteuerung.VIS.Function_50Percent";
    const fnct_SunProtection = "javascript.0.Rolladensteuerung.VIS.Function_Sun_Protection";
    const fnct_SunProtectionFront = "javascript.0.Rolladensteuerung.VIS.Function_Sun_Protection_Front";
    
    const functionButtons = [fnct_allUp, fnct_allDown, fnct_50Percent, fnct_SunProtection, fnct_SunProtectionFront];
    
    //Groups
    const groups = {
    	[grp_All]:
    	[   rolladen_Kueche,
    	    rolladen_Wz_Holzterrasse,
    		rolladen_Wz_Terrasse_Links,
    		rolladen_Wz_Terrasse_Mitte,
    		rolladen_Wz_Terrasse_Rechts,
            rolladen_HWR,
            rolladen_Buero,
            rolladen_Gaestebad,
            rolladen_Fitnessraum,
            rolladen_Gaestezimmer,
            rolladen_Ankleide,
            rolladen_Schlafzimmer,
            rolladen_Bad,
            rolladen_Gaube],
        [grp_EG]:
    	[   rolladen_Kueche,
    	    rolladen_Wz_Holzterrasse,
    		rolladen_Wz_Terrasse_Links,
    		rolladen_Wz_Terrasse_Mitte,
    		rolladen_Wz_Terrasse_Rechts,
            rolladen_HWR,
            rolladen_Buero,
            rolladen_Gaestebad],
        [grp_OG]:
    	[   rolladen_Fitnessraum,
            rolladen_Gaestezimmer,
            rolladen_Ankleide,
            rolladen_Schlafzimmer,
            rolladen_Bad,
            rolladen_Gaube],
    	[grp_Wohnzimmer]:
    	[
    		rolladen_Wz_Holzterrasse,
    		rolladen_Wz_Terrasse_Links,
    		rolladen_Wz_Terrasse_Mitte,
    		rolladen_Wz_Terrasse_Rechts],
    	[grp_Doors]:
    	[
    		rolladen_Wz_Holzterrasse,
    		rolladen_Wz_Terrasse_Mitte],
    	[grp_NoDoors]:
    	[   rolladen_Kueche,
    		rolladen_Wz_Terrasse_Links,
    		rolladen_Wz_Terrasse_Rechts,
            rolladen_HWR,
            rolladen_Buero,
            rolladen_Gaestebad,
            rolladen_Fitnessraum,
            rolladen_Gaestezimmer,
            rolladen_Ankleide,
            rolladen_Schlafzimmer,
            rolladen_Bad,
            rolladen_Gaube],
        [grp_Sun_Protection_Front]:
    	[   rolladen_Kueche,
            rolladen_HWR,
            rolladen_Buero,
            rolladen_Gaestebad,
            rolladen_Gaube],
        [grp_NoSelection]: 
    	[   "blank",
            ],
    };
    
    let activeGroupButton;
    let activeFunctionButton;
    let activeShutters = {};
    
    /**#########################
    ###     VIS-Steuerung    ###
    ############################*/
    
    //deselektiert alle group button bis auf den einen aktiven
    function deselectAllGroupButtons(activeGroupButton){
      groupButtons.forEach(function (button) {
          
    	    if (button != activeGroupButton) {
                setState(button, false);
                log(button);
            }
    	});
    };
    
    //deselektiert alle function buttons bis auf den einen aktiven
    function deselectAllFunctionButtons(functionButtonActive){
      functionButtons.forEach(function (button) {
    	    if (button != activeFunctionButton) setState(button, false);
    	});
    };
    
    //deselektiert alle group button bis auf den einen aktiven
    function deselectGroupButtons(shutter, state){
        if(activeGroupButton === undefined){
    
        }else{
          //check if shutter deactivated shutter is in active group
          //if so deactivate group button
          if(state === false){
            let groupShutters = groups[activeGroupButton];
            if(groupShutters.includes(shutter)){
              setState(activeGroupButton, false);
              activeGroupButton = undefined;
            }
          }
          //check if activated shutter is not in active group
          //if so deactivate group button
          else if(state == true){
            let groupShutters = groups[activeGroupButton];
            if(!groupShutters.includes(shutter)){
              setState(activeGroupButton, false);
              activeGroupButton = undefined;
            }
          }
        }    
    };
    
    
    //set active shutter buttons according to group
    function setShutterButtons(activeShutters){
        let allShutters = groups[grp_All];
        if(activeShutters === undefined){
          allShutters.forEach(function (shutter) {	    
            setState(shutter, false);
    	  });
        }else{
          allShutters.forEach(function (shutter) {
    	      if (activeShutters.includes(shutter) === true) setState(shutter, true);
              else setState(shutter, false);
    	  });
        }
    };
    
    function deselectAllShuttersAndGroups(){
        deselectAllGroupButtons(undefined);
        setShutterButtons(undefined);
        activeGroupButton = undefined;
        activeShutters = {};
    }
    
    /**#########################
    ###       Listener       ###
    ############################*/
    
    //Group Button Listener
    on(groupButtons, function (obj) {
    	var state = obj.newState.val;
        
        if(state === true){
            activeGroupButton = obj.id;
            log("activeButton " + obj.id);
          deselectAllGroupButtons(obj.id);
          setShutterButtons(groups[obj.id]);
          
          deselectAllFunctionButtons(undefined);
        }else if (state === false){
          //setShutterButtons(undefined);
          deselectAllFunctionButtons(undefined);
        } 
    });
    
    //Shutter Button Listener
    on(groups[grp_All], function (obj) {
        var state = obj.newState.val;
        deselectGroupButtons(obj.id, state);
    
        if(state === true){
          deselectAllFunctionButtons(undefined);
          activeShutters[shutterMapping[obj.id]] = obj.id;
        }else if(state === false){
          delete activeShutters[shutterMapping[obj.id]]
        }
        //setState(activeShutterState, JSON.stringify(activeShutters));
    });
    
    
    /**#########################
    ###  Shelly Steuerung    ###
    ############################*/
    
    // hoch / runter / pause
    function shutterAction(action, shutterList){
    
        let shutterToConsider = {};
    
        if(shutterList === undefined)shutterToConsider = activeShutters;
        else{
            //Convert Array with Names to Object with Shelly IDs
            shutterList.forEach(function(shutterId){
              shutterToConsider[shutterMapping[shutterId]] = shutterId;
            })
        }
    
        log(JSON.stringify((shutterToConsider)));
        Object.keys(shutterToConsider).forEach(function(key){
          switch (action){
              
              case "open":
              log(key);
                setState(key + '.Shutter.state', "open");
                break;
             case "stop":
                setState(key + '.Shutter.state', "stop");
                break;
             case "close":
                setState(key + '.Shutter.state', "close");
                break;            
          }
        });
    }
    
    //Fährt aktive Rolladen in entsprechende Position
    function shuttersTo(position, shutterList){
    
        let shutterToConsider = {};
        
        //consider active shutter if no shutter list available
        //convert shutterList to JSON structure if available
        if(shutterList === undefined)shutterToConsider = activeShutters;
        else{
            //Convert Array with Names to Object with Shelly IDs
            shutterList.forEach(function(shutterId){
              shutterToConsider[shutterMapping[shutterId]] = shutterId;
            })
        }
    
        log(JSON.stringify(activeShutters));
        log(JSON.stringify(shutterList));
        log(JSON.stringify(shutterToConsider));
    
    
        let currentState;
    
        Object.keys(shutterToConsider).forEach(function(key){
            currentState = key + '.Shutter.Position';
            log(currentState);
            log(getState(currentState).val);
    
         if (  shutterMapping[rolladen_Gaube] == key) setState('javascript.0.Rolladensteuerung.Gaubensteuerung.ValuePercentage', +position);
         else if (getState(currentState).val != position)setState(currentState, +position);
        
        });
    }
    
    
    /**#########################
    ###  Steuerungsbuttons   ###
    ############################*/
    
    // hoch / runter / pause  Button
    on("javascript.0.Rolladensteuerung.VIS.Steuerung", function (obj) {
        // 1/-1 --> pause
        // 2/-2 --> öffnen
        // 3/-3 --> schließen
    
    	let state = obj.newState.val;
        switch (state){
          case 1: shutterAction("stop"); break;
          case 2: shutterAction("open"); break;
          case 3: shutterAction("close"); break;
        } 
    });
    
    
    on("javascript.0.Rolladensteuerung.VIS.Position", function (obj) {
    	let state = obj.newState.val;
        shuttersTo(state, undefined);
    });
    
    
    /**#########################
    ###      Functions       ###
    ############################*/
    
    //all up
    on("javascript.0.Rolladensteuerung.VIS.Function_All_Up", function (obj) {
        var state = obj.newState.val;
        
        if(state === true){
            deselectAllShuttersAndGroups;
            setState('javascript.0.Rolladensteuerung.alleHoch', true);
        }
    });
    
    //all down
    on("javascript.0.Rolladensteuerung.VIS.Function_All_Down", function (obj) {
        var state = obj.newState.val;
        
        if(state === true){
            deselectAllShuttersAndGroups;
            setState('javascript.0.Rolladensteuerung.alleRunter', true);
        }
    });
    
    //50 Prozent
    on("javascript.0.Rolladensteuerung.VIS.Function_50Percent", function (obj) {
        var state = obj.newState.val;
        if(state === true){
            deselectAllShuttersAndGroups;
            shuttersTo(50, groups[grp_All]);
        }
    });
    
    //Sonnenschutz komplett
    on("javascript.0.Rolladensteuerung.VIS.Function_Sun_Protection", function (obj) {
        var state = obj.newState.val;
        if(state === true){
            deselectAllShuttersAndGroups;
            shuttersTo(getState('javascript.0.Rolladensteuerung.Sonnenschutz.RolladenProzent').val, groups[grp_All]);
        }
    });
    
    //Sonnenschutz Front
    on("javascript.0.Rolladensteuerung.VIS.Function_Sun_Protection_Front", function (obj) {
        var state = obj.newState.val;
        if(state === true){
            deselectAllShuttersAndGroups;
            shuttersTo(getState('javascript.0.Rolladensteuerung.Sonnenschutz.RolladenProzent').val, groups[grp_Sun_Protection_Front]);
        }
    });
    
    

    Mit freundlichen Grüßen
    Michael

    1 Antwort Letzte Antwort
    0
    • BananaJoeB Offline
      BananaJoeB Offline
      BananaJoe
      Most Active
      schrieb am zuletzt editiert von
      #2

      Also so etwas in der Art?

      Buttons1.gif

      Jepp, habe ich genau so gemacht wie du das schon gedacht hast, jeder Button / Schieber hat seine eigenen Datenpunkte,
      in meinem Beispiel noch mal einen extra für die Farbe (damit ich darstellen kann wo gerade eine Ansage läuft).

      Ich programmiere zwar auch in JavaScript wie dein Beispiel, dafür habe ich aber z.B. einfach Blockly genommen.

      Fang einfach mit 2 Buttons an, erstelle die Datenpunkte unterhalb von 0_userdata-0 dafür, baue die Widgets in die VIS und verknüpfe diese mit den Datenpunkten.

      Dann fängst du mit Blockly an und baust die Funktion hinter die beiden Buttons.
      Und dann baust du Button für Button, Schieber für Schieber etc. dazu.

      Irgendwann kommst du an Grenzen wie "Verdammt, echt jetzt, für jeden Button einen eigenen Event-Trigger?" und dann wirst du wieder im Forum suchen und das auf einen ID-Selector umbauen.

      Oder es bleibt bei den einzelnen Triggern, aber du baust die Dinge die sich ständig wiederholen in eine Funktion um die dann dann immer aufrufst.

      Das ist genau die Art von Projekt bei der man so etwas prima lernt. Wenn ich dir jetzt mein XL Blockly um die Ohren haue schreib ich mir die Finger Wund es dir zu erklären und du verstehst trotzdem nur Bahnhof weil der Berg im ersten Moment echt riesig ist.

      ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

      M 1 Antwort Letzte Antwort
      0
      • BananaJoeB BananaJoe

        Also so etwas in der Art?

        Buttons1.gif

        Jepp, habe ich genau so gemacht wie du das schon gedacht hast, jeder Button / Schieber hat seine eigenen Datenpunkte,
        in meinem Beispiel noch mal einen extra für die Farbe (damit ich darstellen kann wo gerade eine Ansage läuft).

        Ich programmiere zwar auch in JavaScript wie dein Beispiel, dafür habe ich aber z.B. einfach Blockly genommen.

        Fang einfach mit 2 Buttons an, erstelle die Datenpunkte unterhalb von 0_userdata-0 dafür, baue die Widgets in die VIS und verknüpfe diese mit den Datenpunkten.

        Dann fängst du mit Blockly an und baust die Funktion hinter die beiden Buttons.
        Und dann baust du Button für Button, Schieber für Schieber etc. dazu.

        Irgendwann kommst du an Grenzen wie "Verdammt, echt jetzt, für jeden Button einen eigenen Event-Trigger?" und dann wirst du wieder im Forum suchen und das auf einen ID-Selector umbauen.

        Oder es bleibt bei den einzelnen Triggern, aber du baust die Dinge die sich ständig wiederholen in eine Funktion um die dann dann immer aufrufst.

        Das ist genau die Art von Projekt bei der man so etwas prima lernt. Wenn ich dir jetzt mein XL Blockly um die Ohren haue schreib ich mir die Finger Wund es dir zu erklären und du verstehst trotzdem nur Bahnhof weil der Berg im ersten Moment echt riesig ist.

        M Offline
        M Offline
        Meikie
        schrieb am zuletzt editiert von
        #3

        @bananajoe Vielen Dank dafür. Also bin ich mit meinen Gedanken und dem Workaround garnicht einmal so falsch.
        Nur würde ich es mir gleich ein wenig vereinfachen und zumindest auf den ID selektiert oder eine Variable (Array) zurückgreifen um an einem Zentralen Ort alle Lichter einzubauen, die dann im Nachgang in einem Blockly abgefragt werden.
        Wie kann ich das umsetzen?
        Benötige ich für RGBW / An-Aus / Brightness jeweils ein extra Blockly oder kann ich das auch in einem Blockly überschaubar unterbringen?

        Vielen Dank.
        Meikie

        BananaJoeB 1 Antwort Letzte Antwort
        0
        • M Meikie

          @bananajoe Vielen Dank dafür. Also bin ich mit meinen Gedanken und dem Workaround garnicht einmal so falsch.
          Nur würde ich es mir gleich ein wenig vereinfachen und zumindest auf den ID selektiert oder eine Variable (Array) zurückgreifen um an einem Zentralen Ort alle Lichter einzubauen, die dann im Nachgang in einem Blockly abgefragt werden.
          Wie kann ich das umsetzen?
          Benötige ich für RGBW / An-Aus / Brightness jeweils ein extra Blockly oder kann ich das auch in einem Blockly überschaubar unterbringen?

          Vielen Dank.
          Meikie

          BananaJoeB Offline
          BananaJoeB Offline
          BananaJoe
          Most Active
          schrieb am zuletzt editiert von
          #4

          @meikie sagte in Lichtersteuerung auf Smartphone:

          Wie kann ich das umsetzen?

          Öhm? Wie sind denn deine Blockly Grundlagen? Einfach anfangen?

          Benötige ich für RGBW / An-Aus / Brightness jeweils ein extra Blockly oder kann ich das auch in einem Blockly überschaubar unterbringen?

          Du kannst das alles in einen Block packen, überschaubar ist Relativ. Zum einen kannst Blöcke kommentieren (nicht nur mit dem Kommentarblock) und zum anderen einklappen.

          Du kannst auch jederzeit auf JavaScript pur wechseln falls dir das lieber ist. Ein Blockly kann umgewandelt werden oder aber du kopierst dir aus der Quelltextansicht eben diesen heraus.
          Ich nehme auch oft kleine Blocklys um zu sehen wie etwas gemacht wird und baue das dann in mein großes JavaScript ein.

          ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

          M 1 Antwort Letzte Antwort
          0
          • BananaJoeB BananaJoe

            @meikie sagte in Lichtersteuerung auf Smartphone:

            Wie kann ich das umsetzen?

            Öhm? Wie sind denn deine Blockly Grundlagen? Einfach anfangen?

            Benötige ich für RGBW / An-Aus / Brightness jeweils ein extra Blockly oder kann ich das auch in einem Blockly überschaubar unterbringen?

            Du kannst das alles in einen Block packen, überschaubar ist Relativ. Zum einen kannst Blöcke kommentieren (nicht nur mit dem Kommentarblock) und zum anderen einklappen.

            Du kannst auch jederzeit auf JavaScript pur wechseln falls dir das lieber ist. Ein Blockly kann umgewandelt werden oder aber du kopierst dir aus der Quelltextansicht eben diesen heraus.
            Ich nehme auch oft kleine Blocklys um zu sehen wie etwas gemacht wird und baue das dann in mein großes JavaScript ein.

            M Offline
            M Offline
            Meikie
            schrieb am zuletzt editiert von
            #5

            @bananajoe Ganz so fit bin ich noch nicht. Habe erst dieses Jahr damit angefangen.

            // RGB wurde geändert
            on({id: "0_userdata.0.Lights.controll-rgb"/*controll-rgb*/, change: "ne"}, async function (obj) {
              var value = obj.state.val;
              var oldValue = obj.oldState.val;
              // Kamin Licht
              if (getState("0_userdata.0.Lights.WZ-Kaminlicht").val == true) {
                setState("zigbee.0.04cd15fffedb3087.color"/*Color*/, getState("0_userdata.0.Lights.controll-rgb").val);
              }
              // Wohn-Stehlampe
              if (getState("0_userdata.0.Lights.WZ-Stehlampe").val == true) {
                setState("zigbee.0.9035eafffe04994d.color"/*Color*/, getState("0_userdata.0.Lights.controll-rgb").val);
              }
            });
            

            Ich stelle mir halt vor, dass ich nicht für jedes Gerät, welches neu hinzukommt einen neue Wenn/Dann/Else Schleife hinzufügen muss.
            Ich hätte quasi gerne ein Array, welches das Skript durchgeht und bei jedem Datenpunkt, welcher auf True sitzt soll er das dementsprechende Licht steuern. Dann müsste ich quasi nur meine Variable füttern, wenn ein neues Gerät hinzukommt.

            Gibt es hierfür eine Möglichkeit?

            Vielen Dank.
            Meikie

            BananaJoeB 1 Antwort Letzte Antwort
            0
            • M Meikie

              @bananajoe Ganz so fit bin ich noch nicht. Habe erst dieses Jahr damit angefangen.

              // RGB wurde geändert
              on({id: "0_userdata.0.Lights.controll-rgb"/*controll-rgb*/, change: "ne"}, async function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                // Kamin Licht
                if (getState("0_userdata.0.Lights.WZ-Kaminlicht").val == true) {
                  setState("zigbee.0.04cd15fffedb3087.color"/*Color*/, getState("0_userdata.0.Lights.controll-rgb").val);
                }
                // Wohn-Stehlampe
                if (getState("0_userdata.0.Lights.WZ-Stehlampe").val == true) {
                  setState("zigbee.0.9035eafffe04994d.color"/*Color*/, getState("0_userdata.0.Lights.controll-rgb").val);
                }
              });
              

              Ich stelle mir halt vor, dass ich nicht für jedes Gerät, welches neu hinzukommt einen neue Wenn/Dann/Else Schleife hinzufügen muss.
              Ich hätte quasi gerne ein Array, welches das Skript durchgeht und bei jedem Datenpunkt, welcher auf True sitzt soll er das dementsprechende Licht steuern. Dann müsste ich quasi nur meine Variable füttern, wenn ein neues Gerät hinzukommt.

              Gibt es hierfür eine Möglichkeit?

              Vielen Dank.
              Meikie

              BananaJoeB Offline
              BananaJoeB Offline
              BananaJoe
              Most Active
              schrieb am zuletzt editiert von
              #6

              @meikie sagte in Lichtersteuerung auf Smartphone:

              Gibt es hierfür eine Möglichkeit?

              z.B. mit einer Funktion die du mit dem Datenpunkten aufrufst oder ja, einem Array welches du in einer Schleife abarbeitest.
              Ich bin meine Skriptsammlung mal durchgegangen, ein einfaches Beispiel ist da jetzt aber auch nicht bei
              Hier ein mehrdimensionales Array was dann in einer Schleife abgearbeitet wird:

              let a_SourceDatapoints = [
                  [ "Stromzähler<br>3EM", "3EM", "L1", "sourceanalytix.0.0_userdata__0__shellies__3EM-Stromzaehler__Total-kWh" ],
                  [ "Stromzähler<br>3EM Real", "Real3EM", "L1", "sourceanalytix.0.0_userdata__0__shellies__3EM-Stromzaehler__Total-kWh-with-Feed" ],
                  [ "Stromzähler", "Stadtwerke", "L1", "sourceanalytix.0.mqtt__0__esp32__esp32strom__zaehlerstand" ],
                  [ "Solaranlage", "Solaranlage", "L1", "sourceanalytix.0.0_userdata__0__Solaranlage__Total__Energy-Total" ]
              ];
              
              for (var i = 0; i < a_SourceDatapoints.length; i++) {
                      let s_currentName = a_SourceDatapoints[i][0];
                      let s_currentDevice = a_SourceDatapoints[i][1];
                      let s_currentPhase = a_SourceDatapoints[i][2];
                      let s_currentSourceAnalytix = a_SourceDatapoints[i][3];;
                      /* hier etwas mit den Variablen tun /*
              }
              

              ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

              M 1 Antwort Letzte Antwort
              0
              • BananaJoeB BananaJoe

                @meikie sagte in Lichtersteuerung auf Smartphone:

                Gibt es hierfür eine Möglichkeit?

                z.B. mit einer Funktion die du mit dem Datenpunkten aufrufst oder ja, einem Array welches du in einer Schleife abarbeitest.
                Ich bin meine Skriptsammlung mal durchgegangen, ein einfaches Beispiel ist da jetzt aber auch nicht bei
                Hier ein mehrdimensionales Array was dann in einer Schleife abgearbeitet wird:

                let a_SourceDatapoints = [
                    [ "Stromzähler<br>3EM", "3EM", "L1", "sourceanalytix.0.0_userdata__0__shellies__3EM-Stromzaehler__Total-kWh" ],
                    [ "Stromzähler<br>3EM Real", "Real3EM", "L1", "sourceanalytix.0.0_userdata__0__shellies__3EM-Stromzaehler__Total-kWh-with-Feed" ],
                    [ "Stromzähler", "Stadtwerke", "L1", "sourceanalytix.0.mqtt__0__esp32__esp32strom__zaehlerstand" ],
                    [ "Solaranlage", "Solaranlage", "L1", "sourceanalytix.0.0_userdata__0__Solaranlage__Total__Energy-Total" ]
                ];
                
                for (var i = 0; i < a_SourceDatapoints.length; i++) {
                        let s_currentName = a_SourceDatapoints[i][0];
                        let s_currentDevice = a_SourceDatapoints[i][1];
                        let s_currentPhase = a_SourceDatapoints[i][2];
                        let s_currentSourceAnalytix = a_SourceDatapoints[i][3];;
                        /* hier etwas mit den Variablen tun /*
                }
                
                M Offline
                M Offline
                Meikie
                schrieb am zuletzt editiert von
                #7

                @bananajoe Hi, danke dir. Kannst du mir kurz erklären wie das Array aufgebaut ist?
                Ist das ein Array mit 4 Werten pro Reihe? Wie kann ich hier meine Datenpunkte einfügen? Einfach den Pfad kopieren und zwischen "" einfügen?

                Beispiel:

                let a_SourceDatapoints =
                    ["Eigener Datenpunkt von Lampe", "Echter Datenpunkt von Lampe"],
                    ["0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.color"]
                ];
                

                Wäre das so richtig?
                Vielen Dank.
                Meikie

                BananaJoeB 1 Antwort Letzte Antwort
                0
                • M Meikie

                  @bananajoe Hi, danke dir. Kannst du mir kurz erklären wie das Array aufgebaut ist?
                  Ist das ein Array mit 4 Werten pro Reihe? Wie kann ich hier meine Datenpunkte einfügen? Einfach den Pfad kopieren und zwischen "" einfügen?

                  Beispiel:

                  let a_SourceDatapoints =
                      ["Eigener Datenpunkt von Lampe", "Echter Datenpunkt von Lampe"],
                      ["0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.color"]
                  ];
                  

                  Wäre das so richtig?
                  Vielen Dank.
                  Meikie

                  BananaJoeB Offline
                  BananaJoeB Offline
                  BananaJoe
                  Most Active
                  schrieb am zuletzt editiert von BananaJoe
                  #8

                  @meikie

                  Ja, wäre so richtig (wenn du die im Anschluss richtig ansprichst)

                  Wie viele Dimensionen brauchst du?

                  Einfaches Array:

                  a_meinArray = [
                      "Wert1",
                      "Wert2",
                      "Wert3"
                  ];
                  
                  // Abruf der Werte in einer Schleife:
                  for (var i = 0; i < a_meinArray .length; i++) {
                      let s_currentValue = a_meinArray[i];
                      // etwas mit den Werten machen
                  }
                  

                  Mit mehreren Dimensionen

                  a_meinArrayMD = [
                      [ "Wert1 A", "Wert1 B", 21 ],
                      [ "Wert2 A", "Wert2 B", 42 ],
                      [ "Wert3 A", "Wert3 B", 63 ]
                  ];
                  
                  // Abruf der Werte in einer Schleife:
                  for (var i = 0; i < a_meinArrayMD .length; i++) {
                      let s_WertA = a_meinArrayMD [i][0];
                      let s_WertB = a_meinArrayMD [i][1];
                      let s_WertZahl = a_meinArrayMD [i][2];
                      // etwas mit den Werten machen
                  }
                  

                  ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                  M 1 Antwort Letzte Antwort
                  0
                  • BananaJoeB BananaJoe

                    @meikie

                    Ja, wäre so richtig (wenn du die im Anschluss richtig ansprichst)

                    Wie viele Dimensionen brauchst du?

                    Einfaches Array:

                    a_meinArray = [
                        "Wert1",
                        "Wert2",
                        "Wert3"
                    ];
                    
                    // Abruf der Werte in einer Schleife:
                    for (var i = 0; i < a_meinArray .length; i++) {
                        let s_currentValue = a_meinArray[i];
                        // etwas mit den Werten machen
                    }
                    

                    Mit mehreren Dimensionen

                    a_meinArrayMD = [
                        [ "Wert1 A", "Wert1 B", 21 ],
                        [ "Wert2 A", "Wert2 B", 42 ],
                        [ "Wert3 A", "Wert3 B", 63 ]
                    ];
                    
                    // Abruf der Werte in einer Schleife:
                    for (var i = 0; i < a_meinArrayMD .length; i++) {
                        let s_WertA = a_meinArrayMD [i][0];
                        let s_WertB = a_meinArrayMD [i][1];
                        let s_WertZahl = a_meinArrayMD [i][2];
                        // etwas mit den Werten machen
                    }
                    
                    M Offline
                    M Offline
                    Meikie
                    schrieb am zuletzt editiert von
                    #9

                    @bananajoe Hi, ich habe jetzt mal ein JS Skript erstellt und den folgenden Code eingeben. Leider bringt er mir schon Ober bei der Variable sehr viele Fehler. (siehe Bild.)!

                    // Hier werden alle Lampen, die mit der Zentralen Steuerung geschalten werden aufgelistet.
                    // Variable [ "Name", "Eigener Datenpunkt", "Datenpunkt Lampe ONOFF", "Datenpunkt Lampe RGB"  ]
                    let a_lightcontrol =
                        ["WZ-Kaminlicht",   "0_userdata.0.Lights.WZ-Kaminlicht",    "zigbee.0.04cd15fffedb3087.state",  "zigbee.0.04cd15fffedb3087.color"], 
                        ["WZ-Couch",        "0_userdata.0.Lights.WZ-Couch",         "zigbee.0.842e14fffe36885f.state"],
                        ["WZ-Stehlampe",    "0_userdata.0.Lights.WZ-Stehlampe",     "zigbee.0.9035eafffe04994d.state",  "zigbee.0.9035eafffe04994d.color"],
                        ["Kü-Ambiente",     "0_userdata.0.Lights.Kü-Ambiente"],
                        ["KZ-Ambiente",     "0_userdata.0.Lights.KZ-Ambiente"],
                        ["Bad-Ambiente",    "0_userdata.0.Lights.Bad-Ambiente",     "zigbee.0.04cd15fffedb28e3.state",  "zigbee.0.04cd15fffedb28e3.color"],
                    ];
                    // Abruf der Werte in einer Schleife:
                    for (var i = 0; i < a_lightcontrol.length; i++) {  
                        let s_currentName = a_lightcontrol[i][0];
                        let s_currentData = a_lightcontrol[i][1];
                        let s_currentState = a_lightcontrol[i][2];
                        let s_currentColor = a_lightcontrol[i][3];
                    }
                        
                    // OnOff wurde geändert
                    on({id: "0_userdata.0.Lights.control-onoff"/*control-onoff*/, change: "ne"}, async function (obj) {
                      var value = obj.state.val;
                      var oldValue = obj.oldState.val;
                      setState(s_currentState/*Switch state*/, getState("0_userdata.0.Lights.control-onoff").val);
                      setStateDelayed("0_userdata.0.Lights.control-onoff"/*control-onoff*/, '', 1000, true);
                    });
                    
                    // RGB wurde geändert
                    on({id: "0_userdata.0.Lights.controll-rgb"/*controll-rgb*/, change: "ne"}, async function (obj) {
                      var value = obj.state.val;
                      var oldValue = obj.oldState.val;
                      // Kamin Licht
                      if (getState(s_currentData).val == true) {
                        setState(s_currentColor/*Color*/, getState("0_userdata.0.Lights.controll-rgb").val);
                    });
                    

                    Bildschirm­foto 2023-02-22 um 12.16.46.png

                    Danke für deine/eure Hilfe.

                    ZarelloZ 2 Antworten Letzte Antwort
                    0
                    • M Meikie

                      @bananajoe Hi, ich habe jetzt mal ein JS Skript erstellt und den folgenden Code eingeben. Leider bringt er mir schon Ober bei der Variable sehr viele Fehler. (siehe Bild.)!

                      // Hier werden alle Lampen, die mit der Zentralen Steuerung geschalten werden aufgelistet.
                      // Variable [ "Name", "Eigener Datenpunkt", "Datenpunkt Lampe ONOFF", "Datenpunkt Lampe RGB"  ]
                      let a_lightcontrol =
                          ["WZ-Kaminlicht",   "0_userdata.0.Lights.WZ-Kaminlicht",    "zigbee.0.04cd15fffedb3087.state",  "zigbee.0.04cd15fffedb3087.color"], 
                          ["WZ-Couch",        "0_userdata.0.Lights.WZ-Couch",         "zigbee.0.842e14fffe36885f.state"],
                          ["WZ-Stehlampe",    "0_userdata.0.Lights.WZ-Stehlampe",     "zigbee.0.9035eafffe04994d.state",  "zigbee.0.9035eafffe04994d.color"],
                          ["Kü-Ambiente",     "0_userdata.0.Lights.Kü-Ambiente"],
                          ["KZ-Ambiente",     "0_userdata.0.Lights.KZ-Ambiente"],
                          ["Bad-Ambiente",    "0_userdata.0.Lights.Bad-Ambiente",     "zigbee.0.04cd15fffedb28e3.state",  "zigbee.0.04cd15fffedb28e3.color"],
                      ];
                      // Abruf der Werte in einer Schleife:
                      for (var i = 0; i < a_lightcontrol.length; i++) {  
                          let s_currentName = a_lightcontrol[i][0];
                          let s_currentData = a_lightcontrol[i][1];
                          let s_currentState = a_lightcontrol[i][2];
                          let s_currentColor = a_lightcontrol[i][3];
                      }
                          
                      // OnOff wurde geändert
                      on({id: "0_userdata.0.Lights.control-onoff"/*control-onoff*/, change: "ne"}, async function (obj) {
                        var value = obj.state.val;
                        var oldValue = obj.oldState.val;
                        setState(s_currentState/*Switch state*/, getState("0_userdata.0.Lights.control-onoff").val);
                        setStateDelayed("0_userdata.0.Lights.control-onoff"/*control-onoff*/, '', 1000, true);
                      });
                      
                      // RGB wurde geändert
                      on({id: "0_userdata.0.Lights.controll-rgb"/*controll-rgb*/, change: "ne"}, async function (obj) {
                        var value = obj.state.val;
                        var oldValue = obj.oldState.val;
                        // Kamin Licht
                        if (getState(s_currentData).val == true) {
                          setState(s_currentColor/*Color*/, getState("0_userdata.0.Lights.controll-rgb").val);
                      });
                      

                      Bildschirm­foto 2023-02-22 um 12.16.46.png

                      Danke für deine/eure Hilfe.

                      ZarelloZ Offline
                      ZarelloZ Offline
                      Zarello
                      schrieb am zuletzt editiert von
                      #10

                      @meikie Dir fehlt eine öffnende eckige Klammer in der dritten (oder vierten) Zeile:

                      let a_lightcontrol = [
                      
                      1 Antwort Letzte Antwort
                      0
                      • M Meikie

                        @bananajoe Hi, ich habe jetzt mal ein JS Skript erstellt und den folgenden Code eingeben. Leider bringt er mir schon Ober bei der Variable sehr viele Fehler. (siehe Bild.)!

                        // Hier werden alle Lampen, die mit der Zentralen Steuerung geschalten werden aufgelistet.
                        // Variable [ "Name", "Eigener Datenpunkt", "Datenpunkt Lampe ONOFF", "Datenpunkt Lampe RGB"  ]
                        let a_lightcontrol =
                            ["WZ-Kaminlicht",   "0_userdata.0.Lights.WZ-Kaminlicht",    "zigbee.0.04cd15fffedb3087.state",  "zigbee.0.04cd15fffedb3087.color"], 
                            ["WZ-Couch",        "0_userdata.0.Lights.WZ-Couch",         "zigbee.0.842e14fffe36885f.state"],
                            ["WZ-Stehlampe",    "0_userdata.0.Lights.WZ-Stehlampe",     "zigbee.0.9035eafffe04994d.state",  "zigbee.0.9035eafffe04994d.color"],
                            ["Kü-Ambiente",     "0_userdata.0.Lights.Kü-Ambiente"],
                            ["KZ-Ambiente",     "0_userdata.0.Lights.KZ-Ambiente"],
                            ["Bad-Ambiente",    "0_userdata.0.Lights.Bad-Ambiente",     "zigbee.0.04cd15fffedb28e3.state",  "zigbee.0.04cd15fffedb28e3.color"],
                        ];
                        // Abruf der Werte in einer Schleife:
                        for (var i = 0; i < a_lightcontrol.length; i++) {  
                            let s_currentName = a_lightcontrol[i][0];
                            let s_currentData = a_lightcontrol[i][1];
                            let s_currentState = a_lightcontrol[i][2];
                            let s_currentColor = a_lightcontrol[i][3];
                        }
                            
                        // OnOff wurde geändert
                        on({id: "0_userdata.0.Lights.control-onoff"/*control-onoff*/, change: "ne"}, async function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          setState(s_currentState/*Switch state*/, getState("0_userdata.0.Lights.control-onoff").val);
                          setStateDelayed("0_userdata.0.Lights.control-onoff"/*control-onoff*/, '', 1000, true);
                        });
                        
                        // RGB wurde geändert
                        on({id: "0_userdata.0.Lights.controll-rgb"/*controll-rgb*/, change: "ne"}, async function (obj) {
                          var value = obj.state.val;
                          var oldValue = obj.oldState.val;
                          // Kamin Licht
                          if (getState(s_currentData).val == true) {
                            setState(s_currentColor/*Color*/, getState("0_userdata.0.Lights.controll-rgb").val);
                        });
                        

                        Bildschirm­foto 2023-02-22 um 12.16.46.png

                        Danke für deine/eure Hilfe.

                        ZarelloZ Offline
                        ZarelloZ Offline
                        Zarello
                        schrieb am zuletzt editiert von
                        #11

                        @meikie Und Du greifst nachher auf s_currentState und andere Variablen zu, die da nicht mehr existieren. Diese existieren nur innerhalb der for-Schleife.
                        Du musst dementsprechend die for-Schleife in Deine Trigger ziehen und überlegen, welche der Elemente Du schalten möchtest.

                        M 1 Antwort Letzte Antwort
                        0
                        • ZarelloZ Zarello

                          @meikie Und Du greifst nachher auf s_currentState und andere Variablen zu, die da nicht mehr existieren. Diese existieren nur innerhalb der for-Schleife.
                          Du musst dementsprechend die for-Schleife in Deine Trigger ziehen und überlegen, welche der Elemente Du schalten möchtest.

                          M Offline
                          M Offline
                          Meikie
                          schrieb am zuletzt editiert von
                          #12

                          @zarello Vielen Dank. Ja die kleine Fehler mit Kommas, Klammern usw.
                          Kann ich dann in der for-Schleife die Trigger mit einbauen? Also einfach das, was ich unten habe mit in die for-schleife bauen? Oder geht es einfacher in dem ich die Variable Global erstelle. Geht das?

                          Vielen Dank.

                          ZarelloZ 1 Antwort Letzte Antwort
                          0
                          • M Meikie

                            @zarello Vielen Dank. Ja die kleine Fehler mit Kommas, Klammern usw.
                            Kann ich dann in der for-Schleife die Trigger mit einbauen? Also einfach das, was ich unten habe mit in die for-schleife bauen? Oder geht es einfacher in dem ich die Variable Global erstelle. Geht das?

                            Vielen Dank.

                            ZarelloZ Offline
                            ZarelloZ Offline
                            Zarello
                            schrieb am zuletzt editiert von
                            #13

                            @meikie Die Trigger in die For-Schleife zu ziehen ist in dem Fall keine gute Idee, das verbraucht nur unnötig Resourcen.

                            Die Variablen global erstellen bringt Dir auch nichts. Die For-Schleife wird dann am Anfang einmal durchlaufen und dann stehen die Werte auf dem letzten Eintrag und bleiben dort. Wenn ein Trigger ausgelöst wird, wird er dementsprechend nur den letzten Eintrag verwenden.

                            M 1 Antwort Letzte Antwort
                            0
                            • ZarelloZ Zarello

                              @meikie Die Trigger in die For-Schleife zu ziehen ist in dem Fall keine gute Idee, das verbraucht nur unnötig Resourcen.

                              Die Variablen global erstellen bringt Dir auch nichts. Die For-Schleife wird dann am Anfang einmal durchlaufen und dann stehen die Werte auf dem letzten Eintrag und bleiben dort. Wenn ein Trigger ausgelöst wird, wird er dementsprechend nur den letzten Eintrag verwenden.

                              M Offline
                              M Offline
                              Meikie
                              schrieb am zuletzt editiert von
                              #14

                              @zarello und wie müsste ich dann die trigger integrieren? Ist für mich alles Neuland.

                              ZarelloZ 1 Antwort Letzte Antwort
                              0
                              • M Meikie

                                @zarello und wie müsste ich dann die trigger integrieren? Ist für mich alles Neuland.

                                ZarelloZ Offline
                                ZarelloZ Offline
                                Zarello
                                schrieb am zuletzt editiert von Zarello
                                #15

                                @meikie Sowas wie:

                                // Hier werden alle Lampen, die mit der Zentralen Steuerung geschalten werden aufgelistet.
                                // Variable [ "Name", "Eigener Datenpunkt", "Datenpunkt Lampe ONOFF", "Datenpunkt Lampe RGB"  ]
                                let a_lightcontrol = [
                                    ["WZ-Kaminlicht",   "0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.state",  "zigbee.0.04cd15fffedb3087.color"], 
                                    ["WZ-Couch",        "0_userdata.0.Lights.WZ-Couch",      "zigbee.0.842e14fffe36885f.state"],
                                    ["WZ-Stehlampe",    "0_userdata.0.Lights.WZ-Stehlampe",  "zigbee.0.9035eafffe04994d.state",  "zigbee.0.9035eafffe04994d.color"],
                                    ["Kü-Ambiente",     "0_userdata.0.Lights.Kü-Ambiente",   "hier fehlt noch eine ID"],
                                    ["KZ-Ambiente",     "0_userdata.0.Lights.KZ-Ambiente",   "hier fehlt noch eine ID"],
                                    ["Bad-Ambiente",    "0_userdata.0.Lights.Bad-Ambiente",  "zigbee.0.04cd15fffedb28e3.state",  "zigbee.0.04cd15fffedb28e3.color"]
                                ];
                                    
                                // OnOff wurde geändert
                                on({id: "0_userdata.0.Lights.control-onoff"/*control-onoff*/, change: "ne"}, async function (obj) {
                                  var value = obj.state.val;
                                  var oldValue = obj.oldState.val;
                                  // Abruf der Werte in einer Schleife:
                                  for (var i = 0; i < a_lightcontrol.length; i++) {  
                                    let s_currentName = a_lightcontrol[i][0];
                                    let s_currentData = a_lightcontrol[i][1];
                                    let s_currentState = a_lightcontrol[i][2];
                                
                                    // Ich bin mir nicht sicher, was Du hier erreichen wolltest. Ich habe mal geraten:
                                    if (getState (s_currentData).val) {
                                      setState(s_currentState/*Switch state*/, value);
                                      if (!value) {
                                        setStateDelayed("0_userdata.0.Lights.control-onoff"/*control-onoff*/, '', 1000, true);
                                      }
                                    }
                                  }
                                });
                                

                                Ich habe gerade keine Möglichkeit das zu testen, es könnten also noch Fehler vorhanden sein.
                                Versuch mal herauszufinden, was da dann wann und wie passiert. Tipp: if (!value) bedeutet: Wenn in value der Wert false steht.

                                M 1 Antwort Letzte Antwort
                                0
                                • ZarelloZ Zarello

                                  @meikie Sowas wie:

                                  // Hier werden alle Lampen, die mit der Zentralen Steuerung geschalten werden aufgelistet.
                                  // Variable [ "Name", "Eigener Datenpunkt", "Datenpunkt Lampe ONOFF", "Datenpunkt Lampe RGB"  ]
                                  let a_lightcontrol = [
                                      ["WZ-Kaminlicht",   "0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.state",  "zigbee.0.04cd15fffedb3087.color"], 
                                      ["WZ-Couch",        "0_userdata.0.Lights.WZ-Couch",      "zigbee.0.842e14fffe36885f.state"],
                                      ["WZ-Stehlampe",    "0_userdata.0.Lights.WZ-Stehlampe",  "zigbee.0.9035eafffe04994d.state",  "zigbee.0.9035eafffe04994d.color"],
                                      ["Kü-Ambiente",     "0_userdata.0.Lights.Kü-Ambiente",   "hier fehlt noch eine ID"],
                                      ["KZ-Ambiente",     "0_userdata.0.Lights.KZ-Ambiente",   "hier fehlt noch eine ID"],
                                      ["Bad-Ambiente",    "0_userdata.0.Lights.Bad-Ambiente",  "zigbee.0.04cd15fffedb28e3.state",  "zigbee.0.04cd15fffedb28e3.color"]
                                  ];
                                      
                                  // OnOff wurde geändert
                                  on({id: "0_userdata.0.Lights.control-onoff"/*control-onoff*/, change: "ne"}, async function (obj) {
                                    var value = obj.state.val;
                                    var oldValue = obj.oldState.val;
                                    // Abruf der Werte in einer Schleife:
                                    for (var i = 0; i < a_lightcontrol.length; i++) {  
                                      let s_currentName = a_lightcontrol[i][0];
                                      let s_currentData = a_lightcontrol[i][1];
                                      let s_currentState = a_lightcontrol[i][2];
                                  
                                      // Ich bin mir nicht sicher, was Du hier erreichen wolltest. Ich habe mal geraten:
                                      if (getState (s_currentData).val) {
                                        setState(s_currentState/*Switch state*/, value);
                                        if (!value) {
                                          setStateDelayed("0_userdata.0.Lights.control-onoff"/*control-onoff*/, '', 1000, true);
                                        }
                                      }
                                    }
                                  });
                                  

                                  Ich habe gerade keine Möglichkeit das zu testen, es könnten also noch Fehler vorhanden sein.
                                  Versuch mal herauszufinden, was da dann wann und wie passiert. Tipp: if (!value) bedeutet: Wenn in value der Wert false steht.

                                  M Offline
                                  M Offline
                                  Meikie
                                  schrieb am zuletzt editiert von
                                  #16

                                  @zarello Hi, danke für den Code. Leider kann ich ihn selbst auch noch nicht testen. Er sagt nämlich die ganze Zeit, dass in Zeile 3

                                  let a_lightcontrol = [
                                  

                                  Ein Fehler wäre.
                                  Ich finde dieses aber nicht.

                                  ZarelloZ 1 Antwort Letzte Antwort
                                  0
                                  • M Meikie

                                    @zarello Hi, danke für den Code. Leider kann ich ihn selbst auch noch nicht testen. Er sagt nämlich die ganze Zeit, dass in Zeile 3

                                    let a_lightcontrol = [
                                    

                                    Ein Fehler wäre.
                                    Ich finde dieses aber nicht.

                                    ZarelloZ Offline
                                    ZarelloZ Offline
                                    Zarello
                                    schrieb am zuletzt editiert von
                                    #17

                                    @meikie Evtl. war es das Komma am Ende der neunten Zeile. Ich habe das oben mal entfernt.

                                    ZarelloZ 1 Antwort Letzte Antwort
                                    0
                                    • ZarelloZ Zarello

                                      @meikie Evtl. war es das Komma am Ende der neunten Zeile. Ich habe das oben mal entfernt.

                                      ZarelloZ Offline
                                      ZarelloZ Offline
                                      Zarello
                                      schrieb am zuletzt editiert von Zarello
                                      #18

                                      @zarello Jetzt habe ich es einmal bei mir laufen lassen: Das funktioniert, egal ob mit oder ohne Komma am Ende der neunten Zeile.

                                      Gibt es evtl. eine zweite Variable a_lightcontrol in Deinem Skript, also eine zweite Zeile, die mit let a_lightcontrol anfängt?

                                      Um was sinnvolles dazu sagen zu können müsstest Du nochmals Dein Skript in der aktuellen Fassung komplett hier einstellen inklusive der Fehlermeldungen die Du bekommst.

                                      M 1 Antwort Letzte Antwort
                                      0
                                      • ZarelloZ Zarello

                                        @zarello Jetzt habe ich es einmal bei mir laufen lassen: Das funktioniert, egal ob mit oder ohne Komma am Ende der neunten Zeile.

                                        Gibt es evtl. eine zweite Variable a_lightcontrol in Deinem Skript, also eine zweite Zeile, die mit let a_lightcontrol anfängt?

                                        Um was sinnvolles dazu sagen zu können müsstest Du nochmals Dein Skript in der aktuellen Fassung komplett hier einstellen inklusive der Fehlermeldungen die Du bekommst.

                                        M Offline
                                        M Offline
                                        Meikie
                                        schrieb am zuletzt editiert von
                                        #19

                                        @zarello Hey, vielen Dank für deine Hilfe. Jetzt habe ich es soweit hinbekommen. Nur folgender Code bekomme ich nicht zum laufen.

                                        let a_lightcontrol = [
                                            [/*"WZ-Kaminlicht"*/    "WZ",   "0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.state",  "zigbee.0.04cd15fffedb3087.color"],
                                            [/*"WZ-Couch"*/         "WZ",   "0_userdata.0.Lights.WZ-Couch",      "zigbee.0.842e14fffe36885f.state"],
                                            [/*"WZ-Stehlampe"*/     "WZ",   "0_userdata.0.Lights.WZ-Stehlampe",  "zigbee.0.9035eafffe04994d.state",  "zigbee.0.9035eafffe04994d.color"],
                                            [/*"Bad-Ambiente"*/     "Bad",  "0_userdata.0.Lights.Bad-Ambiente",  "zigbee.0.04cd15fffedb28e3.state",  "zigbee.0.04cd15fffedb28e3.color"]
                                        ];
                                        // Wohnzimmer komplett selektieren / deselektieren
                                        on({id: "0_userdata.0.Lights.control-wz"/*control-wz*/, change: "ne"}, async function (obj) {
                                          var value = obj.state.val;
                                          var oldValue = obj.oldState.val;
                                                // Abruf der Werte in einer Schleife:
                                                 for (var i = 0; i < a_lightcontrol.length; i++) {  
                                                let s_currentRoom = a_lightcontrol[i][0];
                                                let s_currentData = a_lightcontrol[i][1];
                                                // Alle Lampen im Wohnzimmer auswählen
                                                console.log(s_currentRoom);
                                                if (getState (s_currentRoom).val == "WZ") {
                                                setState(s_currentData/*Switch state*/, getState("0_userdata.0.Lights.control-wz").val);
                                                }
                                            }
                                                /*Kaminlicht*/ //setState("0_userdata.0.Lights.WZ-Kaminlicht", value);
                                                /*Stehlampe*/  //setState("0_userdata.0.Lights.WZ-Stehlampe", value);
                                                /*Couch*/      //setState("0_userdata.0.Lights.WZ-Couch", value);
                                        });
                                        

                                        Folgende Fehlermeldung steht im Protokoll.

                                        javascript.0 782	2023-02-24 14:18:16.917	warn	at processImmediate (node:internal/timers:466:21)
                                        javascript.0 782	2023-02-24 14:18:16.917	warn	at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5916:56)
                                        javascript.0 782	2023-02-24 14:18:16.917	warn	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:593:29)
                                        javascript.0 782	2023-02-24 14:18:16.917	warn	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1244:38)
                                        javascript.0 782	2023-02-24 14:18:16.917	warn	at Object.<anonymous> (script.js.Ambiente.LichtsteuerungJS:66:13)
                                        javascript.0 782	2023-02-24 14:18:16.916	warn	getState "WZ" not found (3)
                                        javascript.0 782	2023-02-24 14:18:16.915	info	script.js.Ambiente.LichtsteuerungJS: WZ
                                        

                                        Was habe ich hier falsch? Vielen Dank für deine Hilfe.
                                        Liebe Grüße
                                        Michael

                                        BananaJoeB ZarelloZ 2 Antworten Letzte Antwort
                                        0
                                        • M Meikie

                                          @zarello Hey, vielen Dank für deine Hilfe. Jetzt habe ich es soweit hinbekommen. Nur folgender Code bekomme ich nicht zum laufen.

                                          let a_lightcontrol = [
                                              [/*"WZ-Kaminlicht"*/    "WZ",   "0_userdata.0.Lights.WZ-Kaminlicht", "zigbee.0.04cd15fffedb3087.state",  "zigbee.0.04cd15fffedb3087.color"],
                                              [/*"WZ-Couch"*/         "WZ",   "0_userdata.0.Lights.WZ-Couch",      "zigbee.0.842e14fffe36885f.state"],
                                              [/*"WZ-Stehlampe"*/     "WZ",   "0_userdata.0.Lights.WZ-Stehlampe",  "zigbee.0.9035eafffe04994d.state",  "zigbee.0.9035eafffe04994d.color"],
                                              [/*"Bad-Ambiente"*/     "Bad",  "0_userdata.0.Lights.Bad-Ambiente",  "zigbee.0.04cd15fffedb28e3.state",  "zigbee.0.04cd15fffedb28e3.color"]
                                          ];
                                          // Wohnzimmer komplett selektieren / deselektieren
                                          on({id: "0_userdata.0.Lights.control-wz"/*control-wz*/, change: "ne"}, async function (obj) {
                                            var value = obj.state.val;
                                            var oldValue = obj.oldState.val;
                                                  // Abruf der Werte in einer Schleife:
                                                   for (var i = 0; i < a_lightcontrol.length; i++) {  
                                                  let s_currentRoom = a_lightcontrol[i][0];
                                                  let s_currentData = a_lightcontrol[i][1];
                                                  // Alle Lampen im Wohnzimmer auswählen
                                                  console.log(s_currentRoom);
                                                  if (getState (s_currentRoom).val == "WZ") {
                                                  setState(s_currentData/*Switch state*/, getState("0_userdata.0.Lights.control-wz").val);
                                                  }
                                              }
                                                  /*Kaminlicht*/ //setState("0_userdata.0.Lights.WZ-Kaminlicht", value);
                                                  /*Stehlampe*/  //setState("0_userdata.0.Lights.WZ-Stehlampe", value);
                                                  /*Couch*/      //setState("0_userdata.0.Lights.WZ-Couch", value);
                                          });
                                          

                                          Folgende Fehlermeldung steht im Protokoll.

                                          javascript.0 782	2023-02-24 14:18:16.917	warn	at processImmediate (node:internal/timers:466:21)
                                          javascript.0 782	2023-02-24 14:18:16.917	warn	at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5916:56)
                                          javascript.0 782	2023-02-24 14:18:16.917	warn	at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:593:29)
                                          javascript.0 782	2023-02-24 14:18:16.917	warn	at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1244:38)
                                          javascript.0 782	2023-02-24 14:18:16.917	warn	at Object.<anonymous> (script.js.Ambiente.LichtsteuerungJS:66:13)
                                          javascript.0 782	2023-02-24 14:18:16.916	warn	getState "WZ" not found (3)
                                          javascript.0 782	2023-02-24 14:18:16.915	info	script.js.Ambiente.LichtsteuerungJS: WZ
                                          

                                          Was habe ich hier falsch? Vielen Dank für deine Hilfe.
                                          Liebe Grüße
                                          Michael

                                          BananaJoeB Offline
                                          BananaJoeB Offline
                                          BananaJoe
                                          Most Active
                                          schrieb am zuletzt editiert von BananaJoe
                                          #20

                                          @meikie sagte in [gelöst]Lichtersteuerung auf Smartphone:

                                          let s_currentRoom = a_lightcontrol[i][0];
                                          

                                          0 ist WZ, 1 wäre 0_userdata.0.Lights.WZ-Kaminlicht

                                          Und ich mag es ja mit vielen Kommentaren ... aber warum musst du die auch immer unbedingt da mitten in den Text schreiben. Bei deinem Array - das packe doch in 0 die Beschreibung die du als Kommentar nutzt, und wenn es dann ein Feld mehr ist. Ist dann auch beim Debuggen praktisch weil man dann die Beschreibung mit ausgeben könnte

                                          ioBroker@Ubuntu 24.04 LTS (VMware) für: >260 Geräte, 5 Switche, 7 AP, 10 IP-Cam, 1 NAS 42TB, 1 ESXi 15TB, 4 Proxmox 1TB, 1 Hyper-V 48TB, 14 x Echo, 5x FireTV, 5 x Tablett/Handy VIS || >=160 Tasmota/Shelly || >=95 ZigBee || PV 8.1kW / Akku 14kWh || 2x USV APC 750W kaskadiert || Creality CR-10 SE 3D-Drucker

                                          M 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

                                          446

                                          Online

                                          32.7k

                                          Benutzer

                                          82.5k

                                          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