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

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Mehrere Aktoren abfragen

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    357

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

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

Mehrere Aktoren abfragen

Scheduled Pinned Locked Moved Skripten / Logik
6 Posts 2 Posters 2.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    TM-8
    wrote on last edited by
    #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 Reply Last reply
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      wrote on last edited by
      #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 Reply Last reply
      0
      • T Offline
        T Offline
        TM-8
        wrote on last edited by
        #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 Reply Last reply
        0
        • BluefoxB Offline
          BluefoxB Offline
          Bluefox
          wrote on last edited by
          #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 Reply Last reply
          0
          • T Offline
            T Offline
            TM-8
            wrote on last edited by
            #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 Reply Last reply
            0
            • BluefoxB Offline
              BluefoxB Offline
              Bluefox
              wrote on last edited by
              #6

              Na ja.. Erste

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

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

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


              Support us

              ioBroker
              Community Adapters
              Donate

              465

              Online

              32.7k

              Users

              82.5k

              Topics

              1.3m

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

              • Don't have an account? Register

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