Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [gelöst] Shelly Überwachungs-Skript: Frage zu Trigger

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

[gelöst] Shelly Überwachungs-Skript: Frage zu Trigger

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 4 Kommentatoren 582 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.
  • K Offline
    K Offline
    Kuddel
    schrieb am zuletzt editiert von Kuddel
    #1

    Hallo zusammen,

    ich habe mir ein Skript geschrieben, das meine Shellys überwacht und alle Details in meiner VIS darstellt

    ec5231d8-f94c-40ae-b1d1-7ba021cd7c20-grafik.png

    Als Trigger nutze ich folgendes :

    • alle 60 Sekunden
    • Skript Start
    • Änderung eines DP bzgl. der Sortierung in der VIS

    Jetzt würde ich gerne das Skript starten, wenn sich der Online-Status von einem Shelly ändern.

    Leider funktioniert das noch nicht so ganz

    //Trigger definieren
     schedule("* * * * *", shelly);
     shelly
     on({ id: "0_userdata.0.shelly-devices.Sortierung" }, shelly);
     on({ id: "shelly.0.*.online" },shelly);
    

    Kann jemand helfen?

    haus-automatisierungH 1 Antwort Letzte Antwort
    0
    • K Kuddel

      Hallo zusammen,

      ich habe mir ein Skript geschrieben, das meine Shellys überwacht und alle Details in meiner VIS darstellt

      ec5231d8-f94c-40ae-b1d1-7ba021cd7c20-grafik.png

      Als Trigger nutze ich folgendes :

      • alle 60 Sekunden
      • Skript Start
      • Änderung eines DP bzgl. der Sortierung in der VIS

      Jetzt würde ich gerne das Skript starten, wenn sich der Online-Status von einem Shelly ändern.

      Leider funktioniert das noch nicht so ganz

      //Trigger definieren
       schedule("* * * * *", shelly);
       shelly
       on({ id: "0_userdata.0.shelly-devices.Sortierung" }, shelly);
       on({ id: "shelly.0.*.online" },shelly);
      

      Kann jemand helfen?

      haus-automatisierungH Offline
      haus-automatisierungH Offline
      haus-automatisierung
      Developer Most Active
      schrieb am zuletzt editiert von
      #2

      @kuddel Du musst mit dem $-Selector arbeiten: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#---selector

      $('shelly.0.*.online').on(shelly);
      

      🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
      🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
      📚 Meine inoffizielle ioBroker Dokumentation

      K paul53P 2 Antworten Letzte Antwort
      0
      • haus-automatisierungH haus-automatisierung

        @kuddel Du musst mit dem $-Selector arbeiten: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#---selector

        $('shelly.0.*.online').on(shelly);
        
        K Offline
        K Offline
        Kuddel
        schrieb am zuletzt editiert von Kuddel
        #3

        @haus-automatisierung sagte in Shelly Überwachungs-Skript: Frage zu Trigger:

        $('shelly.0.*.online').on(shelly);

        Super, funktioniert.

        Vielen Dank für die schnelle Hilfe

        W 1 Antwort Letzte Antwort
        0
        • K Kuddel

          @haus-automatisierung sagte in Shelly Überwachungs-Skript: Frage zu Trigger:

          $('shelly.0.*.online').on(shelly);

          Super, funktioniert.

          Vielen Dank für die schnelle Hilfe

          W Offline
          W Offline
          wobbix
          schrieb am zuletzt editiert von
          #4

          @kuddel
          Moin,
          könntest du mir dein Script evtl. zur verfügung stellen?
          Das ist genau das was ich grade suche. Ist aber für mich leider immer noch zu komplex zum selber basteln.

          Würde mich freuen.

          Gruß
          Wobbix

          K 1 Antwort Letzte Antwort
          0
          • haus-automatisierungH haus-automatisierung

            @kuddel Du musst mit dem $-Selector arbeiten: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#---selector

            $('shelly.0.*.online').on(shelly);
            
            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #5

            @haus-automatisierung sagte: mit dem $-Selector arbeiten:

            oder mit RegExp:

            on(/^shelly\.0\..+\.online$/, shelly);
            

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

            1 Antwort Letzte Antwort
            1
            • W wobbix

              @kuddel
              Moin,
              könntest du mir dein Script evtl. zur verfügung stellen?
              Das ist genau das was ich grade suche. Ist aber für mich leider immer noch zu komplex zum selber basteln.

              Würde mich freuen.

              Gruß
              Wobbix

              K Offline
              K Offline
              Kuddel
              schrieb am zuletzt editiert von Kuddel
              #6

              @wobbix

              function shelly(obj) {
              
                 //Devices-Anzahl erstellen
                 if(!existsState('0_userdata.0.shelly-devices.Anzahl')){
                     createState('0_userdata.0.shelly-devices.Anzahl', 0, { name: 'Anzahl', desc: 'Anzahl der Devices', type: 'number'});
                 };
              
                 //Sortierung erstellen
                 if(!existsState('0_userdata.0.shelly-devices.Sortierung')){
                     createState('0_userdata.0.shelly-devices.Sortierung', 0, {name: 'Sortierung',type: "number", def: 0, states: {0:"Name",1:"IP",2:"Raum",3:"Update",4:"Gereat",5:"Status",6:"Uptime"}});
                 };
              
              
                 var counter = 0;
                 var status_counter = 0;
                 var offline_devices = 0;
                 let list_of_devices = [];
              
                 var cacheSelector = $('[id=shelly.0.*.name]');
                 counter = counter+1;
                 cacheSelector.each(function(id, i) {
                     var id = id.replace('.name','');
                     geraetename = getState(id + ".name").val;
                     devicename = id
                     devicenameName = devicename.replace('shelly.0.','');
               
                     //Gerätetatus
                     var connected = getState("shelly.0." + devicenameName + ".online").val;
                     if(connected == true) {var status = 1}
                     else{var status = 0}
                     
                     //IP-Adresse
                     var ip = getState("shelly.0." + devicenameName + ".hostname").val;
              
                     //Raum
                     if(geraetename.indexOf("_AZ_") > 0 ){ raum = "Ankleide";}
                     if(geraetename.indexOf("_BZ_") > 0 ){ raum = "Badezimmer";}
                     if(geraetename.indexOf("_BR_") > 0 ){ raum = "Buero";}
                     if(geraetename.indexOf("_FL_") > 0 ){ raum = "Flur";}
                     if(geraetename.indexOf("_GA_") > 0 ){ raum = "Garten";}
                     if(geraetename.indexOf("_KE_") > 0 ){ raum = "Keller";}
                     if(geraetename.indexOf("_KZ_") > 0 ){ raum = "Kinderzimmer";}
                     if(geraetename.indexOf("_KU_") > 0 ){ raum = "Kueche";}
                     if(geraetename.indexOf("_SZ_") > 0 ){ raum = "Schlafzimmer";}
                     if(geraetename.indexOf("_WZ_") > 0 ){ raum = "Wohnzimmer";}
                     if(geraetename.indexOf("Test") > 0 ){ raum = "Test";}
              
                     //Typ
                     var geraet = getState("shelly.0." + devicenameName + ".id").val;
                     if(geraet == 'shelly1') {geraet = 'Shelly 1';}
                     if(geraet == 'shelly1pm') {geraet = 'Shelly 1 PM';}
                     if(geraet == 'shellyswitch25') {geraet = 'Shelly 2.5';}
                     if(geraet == 'shellyplug-s') {geraet = 'Shelly Plug S';}
                     if(geraet == 'shellyplug') {geraet = 'Shelly Plug';}
                     if(geraet == 'shellyrgbw2') {geraet = 'Shelly RGBW 2';}
                     if(geraet == 'shellyplus1') {geraet = 'Shelly Plus 1';}
              
                     
                     //Infos abfragen
                     if(status == 1 ) {
                         var status = "1"
              
                         //Uptime
                 		var uptime = getState("shelly.0." + devicenameName + ".uptime").val;
                         var tage = Math.floor(uptime / (24*3600));
                         var stunden = Math.floor((uptime % (24*3600))/3600);
                         var minuten = Math.floor((uptime % (3600))/60);
                         //var sekunden = Math.floor(uptime % 60);      
                         if (stunden < 10) {stunden = "0"+stunden};
                         if (minuten < 10) {minuten = "0"+minuten};				
                         if (tage == 1) {uptime = tage.toString()+" Tag, "+stunden.toString()+" Std, "+minuten.toString()+" Min ";};
                         if (tage != 1) {uptime = tage.toString()+" Tage, "+stunden.toString()+" Std, "+minuten.toString()+" Min ";}
                     
                         //var gereat = gereat.charAt(0).toUpperCase() + gereat.slice(1);
              
                         //Power
                         if(geraet != "Shelly RGBW 2") {
                             var power = getState("shelly.0." + devicenameName + ".Relay0.Switch").val;    
                         }
                         else{
                             var power = getState("shelly.0." + devicenameName + ".lights.Switch").val;    
                         }
              
                         //Verbauch
                         if(geraetename.startsWith("SD_")){
                             var verbrauch = getState("shelly.0." + devicenameName + ".Relay0.Power").val; 
                             //verbrauch = Number(verbrauch);
                         }
                         else{var verbrauch = 0;}
              
              
                         //Update
                         var update = getState("shelly.0." + devicenameName + ".firmware").val; 
                         if(update == true)   {update = "veraltet"}
                         else{update = "aktuell"}
                         if(!(update)) {update = ""}
                 		
                 		//Version
                 		var version = getState("shelly.0." + devicenameName + ".version").val;
              
                 		//Shelly Plus 1
                 		if(geraet == 'Shelly Plus 1') {
                 			//Version in String konverteiren
                 			version = String(version);
              
                 			//Suchen vom Slash in der Version
                 			indexslash = version.indexOf('/');
              
                 			//Funktion zum Suchen des - in der Versionsnummer
                 			function getPosition(string, subString, index) {return string.split(subString, index).join(subString).length;}
              
                 			//Minus in der Versionsnummer suchen
                 			position = getPosition(version, '-', 2);
              
                 			//Version auslesen
                 			version = version.substring(indexslash +1, position);
              
                 		}
                 		//normale Shellys
                 		else{
                 			//Version in String konverteiren
                 			version = String(version);
              
                 			//Suche vom v in Version
                 			indexv = version.indexOf('v');
                 			
                 			//Funktion zum Suchen des 2. Punktes in der Versionsnummer
                 			function getPosition(string, subString, index) {return string.split(subString, index).join(subString).length;}
              
                 			//2. Punkt in der Versionsnummer suchen
                 			position_punkt = getPosition(version, '.', 2);
                 			
                 			//Version auslesen
                 			if(position_punkt < 25){version = version.substring(indexv +1, position_punkt +2);}
                 			else{
                 				position_bindestrich = getPosition(version, '-', 2);
                 				version = version.substring(indexv +1, position_bindestrich);
                 			}
                 		}
              
                       
                         
                     }
                     if(status == false){
                         var status = "0"
                         var uptime = ""
                         var version = ""
                         //var ip = ""
                         //var geraet = ""
                         var power = false
                         var update = ""
                         var verbrauch = 0
              
                         offline_devices = offline_devices+1;
                     }
                     
                     //Alle Werte eines Gerätes in JSON schreiben
                     list_of_devices.push({"DeviceName": geraetename, "Uptime": uptime, "Status": status, "Version": version, "IP": ip, "Geraet": geraet, "Power": power, "Update": update, "Raum": raum, "Verbrauch": verbrauch});
              
                 }); 
                 
              
              
                 //JSON sortieren
                 var sortierung = getState("0_userdata.0.shelly-devices.Sortierung").val;
                 //Nach Namen sortieren
                 if(sortierung == 0){
                     list_of_devices.sort((a, b) => {
                 		return a.DeviceName.localeCompare(b.DeviceName);
                     });
                 };
                 
                 //Nach IP sortieren
                 if(sortierung == 1){
                     list_of_devices.sort((a, b) => {
                 		return a.IP.localeCompare(b.IP);
                     });
                 };
              
                 //Nach Raum sortieren
                 if(sortierung == 2){
                     list_of_devices.sort((a, b) => {
                 		//return a.Raum.localeCompare(b.Raum);
                         return a.Raum.localeCompare(b.Raum) || a.DeviceName.localeCompare(b.DeviceName);
                     });
                 };
              
                 //Nach Gerätetyp sortieren
                 if(sortierung == 3){
                     list_of_devices.sort((a, b) => {
                 		return a.Geraet.localeCompare(b.Geraet) || a.DeviceName.localeCompare(b.DeviceName);
                     });
                 };
              
                 //Nach Firmware sortieren
                 if(sortierung == 4){
                     list_of_devices.sort((a, b) => {
                 		return a.Version.localeCompare(b.Version) || a.DeviceName.localeCompare(b.DeviceName);
                     });
                 };
              
                 //Nach Status sortieren
                 if(sortierung == 5){
                     list_of_devices.sort((a, b) => {
                 		return a.Status.localeCompare(b.Status) || a.DeviceName.localeCompare(b.DeviceName);
                     });
                 };
              
                 //Nach Uptime sortieren
                 if(sortierung == 6){
                     list_of_devices.sort((a, b) => {
                 		return a.Uptime.localeCompare(b.Uptime) || a.DeviceName.localeCompare(b.DeviceName);
                     });
                 };
              
                 
              
                 //console.log(list_of_devices)
                   
              
              
                 //Inhalt aus JSON in DPs schreiben
                 counter = 0;
                 list_of_devices.forEach(device => {
                     //Device Counter
                     counter = counter+1;
              
                     
                     // Device-Name
                     dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Device-Name";
                     createState(dp, 'empty', { name: 'Device-Name', desc: '', type: 'string', role: '',read: true, write: true }); 
                     setStateDelayed(dp, device.DeviceName, 800);
                     
                     // Uptime
                     dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Uptime"; 
                     createState(dp, 'empty', { name: 'Uptime', desc: '', type: 'string', role: '',read: true, write: true });
                     setStateDelayed(dp, device.Uptime, 800);
                     
                     // Status
                     dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Status";
                     createState(dp, 'empty', { name: 'Status', desc: '', type: 'string', role: '',read: true, write: true }); 
                     setStateDelayed(dp, device.Status, 800);
                     
                     // Version
                     dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Version";
                     createState(dp, 'empty', { name: 'Version', desc: '', type: 'string', role: '',read: true, write: true }); 
                     setStateDelayed(dp, device.Version, 800);
                     
                     // IP
                     dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".IP";
                     createState(dp, 'empty', { name: 'IP', desc: '', type: 'string', role: '',read: true, write: true }); 
                     setStateDelayed(dp, device.IP, 800);
                     
                     // Gereatetyp
                     dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Geraet";
                     createState(dp, 'empty', { name: 'Geraet', desc: '', type: 'string', role: '',read: true, write: true }); 
                     setStateDelayed(dp, device.Geraet, 800);
                     
                     // Power
                     dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Power";
                     createState(dp, 'empty', { name: 'Power', desc: '', type: 'boolean', role: '',read: true, write: true }); 
                     setStateDelayed(dp, device.Power, 800);
                     
                     // Verbrauch
                     dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Verbrauch";
                     createState(dp, 'empty', { name: 'Verbrauch', desc: '', type: 'number', role: '',read: true, write: true }); 
                     setStateDelayed(dp, device.Verbrauch, 800);
                     
                     // Update
                     dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Update";
                     createState(dp, 'empty', { name: 'Update', desc: '', type: 'string', role: '',read: true, write: true }); 
                     setStateDelayed(dp, device.Update, 800);
                     
                     // Raum
                     dp="0_userdata.0.shelly-devices.Device_"+counter.toString()+".Raum";
                     createState(dp, 'empty', { name: 'Raum', desc: '', type: 'string', role: '',read: true, write: true }); 
                     setStateDelayed(dp, device.Raum, 800);
                     // Raum
              
                 });
                 
                 // 1 von der Anzahl der Offlien-Geräte abziehen (wenn Shelly offline), da der Shelly von der Druckerbeleuchtung nicht immer an ist
                 var shellyrgbw2 = getState("shelly.0.SHRGBW2#A89CF7#1.online").val;
                 if(shellyrgbw2 == false) {offline_devices = offline_devices -1};
                 
                 // 1 von der Anzahl der Offlien-Geräte abziehen (wenn Shelly offline), wenn der Pool abgebaut ist (Letzte Änderung Leistung > 12h)
                 var whirlpool_power_last_change = getState("alias.0.Garten.SD_GA_Whirlpool.POWER").lc;
                 var date1 = new Date(whirlpool_power_last_change);
                 var date2 = new Date();
                 var diff = date2.getTime() - date1.getTime();
                 var stunden = Math.floor(diff / (1000 * 60 * 60));
                 if(stunden > 0){offline_devices = offline_devices -1;}
              
              
                 //Gesamt Anzahl der online Geräte berechnen
                 dp="0_userdata.0.shelly-devices.Anzahl";
                 createState(dp, 'empty', { name: 'Anzahl', desc: '', type: 'number', role: '',read: true, write: true }); 
                 setStateDelayed(dp, counter, 800);
                 
              
                 
                 //Letzte aktualisierung
                 var datum = new Date();
                 var heute = datum.getDate()+ "." + (datum.getMonth()+ 1)+"." + datum.getFullYear()+" " +datum.getHours() +":" + datum.getMinutes() +":" + datum.getSeconds() + " Uhr" ;
                 createState('0_userdata.0.shelly-devices.Letztes_Update', 0, { name: 'Letztes_Update', desc: '', type: 'string', role: '',read: true, write: true }); 
                 setStateDelayed('0_userdata.0.shelly-devices.Letztes_Update', heute, 800);
              
                 //Alle Geräte online
                 if(status_counter == counter) {
                 	dp="0_userdata.0.shelly-devices.Alle_Devices_verbunden";
                 	createState(dp, 'empty', { name: 'Alle_Devices_verbunden', desc: '', type: 'string', role: '',read: true, write: true }); 
                 	setStateDelayed(dp, "1", 800);
                 }
                 else{
                 	dp="0_userdata.0.shelly-devices.Alle_Devices_verbunden";
                 	createState(dp, 'empty', { name: 'Alle_Devices_verbunden', desc: '', type: 'string', role: '',read: true, write: true }); 
                 	setStateDelayed(dp, "0", 800);
                 }
                 
                 //Anzahl offline Geräte
                 dp="0_userdata.0.shelly-devices.Anzahl_offline_Devices";
                 createState(dp, 'empty', { name: 'Anzahl_offline_Devices', desc: '', type: 'number', role: '',read: true, write: true }); 
                 setStateDelayed(dp, offline_devices, 800);
              
              
              }
              
              //Trigger definieren
              schedule("* * * * *", shelly);
              on({ id: "0_userdata.0.shelly-devices.Sortierung" }, shelly);
              $('shelly.0.*.online').on(shelly); 
              shelly();
              
              
              
              
              

              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

              339

              Online

              32.6k

              Benutzer

              82.3k

              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