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. Mehrere Aktoren abfragen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    324

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

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

Mehrere Aktoren abfragen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 2 Kommentatoren 2.0k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Offline
    T Offline
    TM-8
    schrieb am zuletzt editiert von
    #1

    Hallo, ich bin am Anfang mit der Script Welt und ioBroker. Ich habe mir da ein Script geschrieben, wofür es mit Sicherheit eine bessere Möglichkeit zur Programmierung gibt.

    Das Script soll folgendes erledigen:

    1. Überwachen ob an einem der Schaltausgänge des Wired Aktors HMW-IO-12-Sw7-DR MEQXXXXXXX eingeschaltet oder ausgeschaltet wird.

    2. Je nach Status eines Ausgangs soll 0 oder 1 geschrieben werden.

    3. Aus den Schaltzuständen soll der Name einer Grafikdatei zusammengesetzt werden, zur Zeit wird die Grafik über das Widget "static image" angezeigt. Den Dateinamen setze ich dab erst im Widget zusammen und zwar so:

    /vis.0/1280x800/img/plan/haus-nacht_st-{javascript.0.HausUntenStrahlerEinfahrt}_ur-{javascript.0.HausUntenWandleuchteEinfahrt}_ef-{javascript.0.HausUntenEinfahrt}_fr-{javascript.0.HausUntenFreisitz}_ei-{javascript.0.HausUntenEingang}.png
    

    Es funktioniert, aber ich bin mir sicher es geht eleganter und besser, evtl. über ein array oder so. Leider habe ich es nur so hinbekommen. Noch besser wäre es wenn man nur einen createState bräuchte und der Dateinamen im Script zusammengesetzt wird.

    Folgendes sollte noch möglich sein. Das Script soll nur nach Sonnenuntergang ausgeführt werden.

    createState('HausUntenStrahlerEinfahrt', '0');
    createState('HausUntenWandleuchteEinfahrt', '0');
    createState('HausUntenEinfahrt', '0');
    createState('HausUntenFreisitz', '0');
    createState('HausUntenEingang', '0');
    
    on("hm-rpc.1.MEQXXXXXXX.13.STATE", function(obj) {
        /*HausUntenStrahlerEinfahrt*/
        if (obj.newState.val === true){
          setState('HausUntenStrahlerEinfahrt', '1');
        } else {
              setState('HausUntenStrahlerEinfahrt', '0');
        }
    });
    
    on("hm-rpc.1.MEQXXXXXXX.14.STATE", function(obj) {
        /*HausUntenWandleuchteEinfahrt*/
        if (obj.newState.val === true){
          setState('HausUntenWandleuchteEinfahrt', '1');
        } else {
          setState('HausUntenWandleuchteEinfahrt', '0');
        }
    });
    
    on("hm-rpc.1.MEQXXXXXXX.16.STATE", function(obj) {
        /*HausUntenEinfahrt*/
        if (obj.newState.val === true){
          setState('HausUntenEinfahrt', '1');
        } else {
          setState('HausUntenEinfahrt', '0');
        }
    });
    
    on("hm-rpc.1.MEQXXXXXXX.17.STATE", function(obj) {
        /*HausUntenFreisitz*/
        if (obj.newState.val === true){
          setState('HausUntenFreisitz', '1');
        } else {
          setState('HausUntenFreisitz', '0');
        }
    });
    

    Anzeigen tut das Script dann eine 3D Ansicht vom Haus (verkleinerte Bilder hänge ich in den Anhang, zur besseren Vorstellung, natürlich sind es noch mehr Grafiken), in der die jeweils eingeschalteten Strahler, Laternen, Wandleuchten am Haus und Grundstück dann leuchten wenn diese eingeschaltet sind. Das funktioniert auch schon wunderbar.

    Vielleicht kann mir jemand dabei helfen das Ganze besser zum machen.

    Alles aus bei Nacht:
    613_haus-nacht_st-0_ur-0_ef-0_fr-0_ei-0.png

    Wandleuchte im Freisitz leuchtet bei Nacht:
    613_haus-nacht_st-0_ur-0_ef-0_fr-1_ei-0.png

    Alle ein bei Nacht
    613_haus-nacht_st-1_ur-1_ef-1_fr-1_ei-1.png

    Vielen Dank schonmal.

    Raspberry Matic auf Raspberry pi3 (64 Homematic Aktoren, 10 Homematic IP Aktoren, Homematic Wired 5 Komponenten)
    Dell Server (Backup System intel Nuc i5) als VMs (über Proxmox) laufend: ioBroker, grafana, MQTT, uvm.
    cc2531 -> ZigBee, Diverse Shelly, 12 Philips Hue, DIY esp23, HomeKit, mehrere Alex, Sonos, usw.

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

      So?

      `var pattern = "/vis.0/1280x800/img/plan/haus-nacht_st-%s_ur-%s_ef-%s_fr-%s_ei-%s.png";
      var values = [];
      var myIndexes =  [
      	"hm-rpc.1.MEQXXXXXXX.13.STATE",
      	"hm-rpc.1.MEQXXXXXXX.14.STATE",
      	"hm-rpc.1.MEQXXXXXXX.16.STATE",
      	"hm-rpc.1.MEQXXXXXXX.17.STATE",
      	"hm-rpc.1.MEQXXXXXXX.YY.STATE"
      ];
      
      function createPictureName(doNotWrite) {
      	var result = pattern;
      	for (var i = 0; i < myIndexes.length; i++) {
      		result = result.replace('%s', values[i]);
      	}
      
      	if (!doNotWrite) setState('pictureName', result, true);
      
      	return result;
      }
      
      // Init states
      var myStates = $('hm-rpc.1.MEQXXXXXXX.*.STATE');
      myStates.each(function(id) {
       	var pos = myIndexes.indexOf(obj.id); 
      	if (id != -1) {
      		var val = getState(id).val;
      		values[pos] = (val === true || val === 'true') ? 1 : 0;	
      	}
      }).on(function(obj) {
      	var pos = myIndexes.indexOf(obj.id); 
      	if (id != -1) {
      		var val = getState(id).val;
      		values[pos] = (val === true || val === 'true') ? 1 : 0;	
      	}
          createPictureName();
      });
      createState('pictureName', createPictureName(true));` 
      
      Und dann "basic - string image src" verwenden[/i]
      
      1 Antwort Letzte Antwort
      0
      • T Offline
        T Offline
        TM-8
        schrieb am zuletzt editiert von
        #3

        Hallo Bluefox,

        vielen Dank für deine schnelle Hilfe.

        Ich habe es wie folgt abgeändert:

        `var pattern = "/vis.0/1280x800/img/plan/haus-nacht_st-%s_ur-%s_ef-%s_fr-%s_ei-0.png";
        var values = [];
        var myIndexes =  [
           "hm-rpc.1.MEQ0064913.13.STATE",
           "hm-rpc.1.MEQ0064913.14.STATE",
           "hm-rpc.1.MEQ0064913.16.STATE",
           "hm-rpc.1.MEQ0064913.17.STATE"
        ];
        
        function createPictureName(doNotWrite) {
           var result = pattern;
           for (var i = 0; i < myIndexes.length; i++) {
              result = result.replace('%s', values[i]);
               log(result);
           }
        
           if (!doNotWrite) setState('pictureName', result, true);
        
           return result;
        }
        
        // Init states
        var myStates = $('hm-rpc.1.MEQ0064913.*.STATE');
        myStates.each(function(id) {
            var pos = myIndexes.indexOf(obj.id);
           if (id != -1) {
              var val = getState(id).val;
              values[pos] = (val === true || val === 'true') ? 1 : 0;   
           }
        }).on(function(obj) {
           var pos = myIndexes.indexOf(obj.id);
           if (id != -1) {
              var val = getState(id).val;
              values[pos] = (val === true || val === 'true') ? 1 : 0;   
           }
            createPictureName();
        });
        createState('pictureName', createPictureName(true));`
        
        Weil es den letzten Platzhalter im Bildnamen noch nicht gibt.
        
        Dann habe ich als Pfad zum Bild das hier eingetragen:
        
        `~~[code]~~{javascript.0.pictureName}[/code]`
        
        Es wird aber kein Bild angegeben, weil "%s" als undefined im Bildnamen wiedergegeben wird.
        
        Im Quelltext steht folgender Bildname mit Pfad:
        `~~[code]~~...  src="/vis.0/1280x800/img/plan/haus-nacht_st-undefined_ur-undefined_ef-undefined_fr-undefined_ei-0.png" ...[/code]`
        
        Was habe ich falsch gemacht?[/i]
        

        Raspberry Matic auf Raspberry pi3 (64 Homematic Aktoren, 10 Homematic IP Aktoren, Homematic Wired 5 Komponenten)
        Dell Server (Backup System intel Nuc i5) als VMs (über Proxmox) laufend: ioBroker, grafana, MQTT, uvm.
        cc2531 -> ZigBee, Diverse Shelly, 12 Philips Hue, DIY esp23, HomeKit, mehrere Alex, Sonos, usw.

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

          Was wird bei dir angezeigt?

          `var pattern = "/vis.0/1280x800/img/plan/haus-nacht_st-%s_ur-%s_ef-%s_fr-%s_ei-0.png";
          var values = [];
          var myIndexes =  [
             "hm-rpc.1.MEQ0064913.13.STATE",
             "hm-rpc.1.MEQ0064913.14.STATE",
             "hm-rpc.1.MEQ0064913.16.STATE",
             "hm-rpc.1.MEQ0064913.17.STATE"
          ];
          
          function createPictureName(doNotWrite) {
             var result = pattern;
             for (var i = 0; i < myIndexes.length; i++) {
                result = result.replace('%s', values[i]);
                 log(result);
             }
          
             if (!doNotWrite) setState('pictureName', result, true);
          
             return result;
          }
          
          // Init states
          var myStates = $('hm-rpc.1.MEQ0064913.*.STATE');
          myStates.each(function(id) {
              var pos = myIndexes.indexOf(obj.id);
             log('Found ' + id + ' position ' + pos);
             if (pos != -1) {
                var val = getState(id).val;
                values[pos] = (val === true || val === 'true') ? 1 : 0;   
             }
          });
          myStates.on(function(obj) {
             var pos = myIndexes.indexOf(obj.id);
             if (pos != -1) {
                var val = getState(id).val;
                values[pos] = (val === true || val === 'true') ? 1 : 0;   
             }
              createPictureName();
          });
          createState('pictureName', createPictureName(true));`
          Und ich habe noch Fehler gefunden.
          
          War:
          `~~[code]~~if (id != -1) {[/code]`
          muss:
          `~~[code]~~if (pos != -1) {[/code]`[/i]
          
          1 Antwort Letzte Antwort
          0
          • T Offline
            T Offline
            TM-8
            schrieb am zuletzt editiert von
            #5

            Hallo, danke für deine schnelle Antwort.

            Ich habe es hinbekommen.

            Habe diesen Teil hier:
            ` > // Init states

            var myStates = $('hm-rpc.1.MEQ0064913.*.STATE');

            myStates.each(function(id) {

            var pos = myIndexes.indexOf(obj.id);

            log('Found ' + id + ' position ' + pos);

            if (pos != -1) {

            var val = getState(id).val;

            values[pos] = (val === true || val === 'true') ? 1 : 0;

            }

            });

            myStates.on(function(obj) {

            var pos = myIndexes.indexOf(obj.id);

            if (pos != -1) {

            var val = getState(id).val;

            values[pos] = (val === true || val === 'true') ? 1 : 0;

            }

            createPictureName();

            }); `

            so geändert bei obj und id die in Klammern stehen:

            // Init states
            var myStates = $('hm-rpc.1.MEQ0064913.*.STATE');
            myStates.each(function(id) {
               var pos = myIndexes.indexOf(id);
               if (pos != -1) {
                  var val = getState(id).val;
                  values[pos] = (val === true || val === 'true') ? 1 : 0;   
               }
            }).on(function(obj) {
                var pos = myIndexes.indexOf(obj.id);
               if (pos != -1) {
                  var val = getState(obj.id).val;
                  values[pos] = (val === true || val === 'true') ? 1 : 0;   
               }
                createPictureName();
            });
            

            Jetzt schreibt er die Werte in den Dateinamen.

            Vielen Dank nochmal für deine Hilfe.

            Raspberry Matic auf Raspberry pi3 (64 Homematic Aktoren, 10 Homematic IP Aktoren, Homematic Wired 5 Komponenten)
            Dell Server (Backup System intel Nuc i5) als VMs (über Proxmox) laufend: ioBroker, grafana, MQTT, uvm.
            cc2531 -> ZigBee, Diverse Shelly, 12 Philips Hue, DIY esp23, HomeKit, mehrere Alex, Sonos, usw.

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

              Na ja.. Erste

              var pos = myIndexes.indexOf(obj.id);
              

              Habe ich übersehen. Gut, dass es läuft.

              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

              564

              Online

              32.5k

              Benutzer

              81.7k

              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