Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Mehrere Aktoren abfragen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Mehrere Aktoren abfragen

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      TM-8 last edited by

      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.

      1 Reply Last reply Reply Quote 0
      • Bluefox
        Bluefox last edited by

        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 Reply Quote 0
        • T
          TM-8 last edited by

          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]
          
          1 Reply Last reply Reply Quote 0
          • Bluefox
            Bluefox last edited by

            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 Reply Quote 0
            • T
              TM-8 last edited by

              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.

              1 Reply Last reply Reply Quote 0
              • Bluefox
                Bluefox last edited by

                Na ja.. Erste

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

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

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                851
                Online

                31.9k
                Users

                80.1k
                Topics

                1.3m
                Posts

                2
                6
                1816
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo