Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [GELÖST] id Übergabe an Function klappt nicht

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [GELÖST] id Übergabe an Function klappt nicht

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mctom last edited by

      Hallo zusammen,

      hier ein Auszug aus einem Script von mir:

      var = idRArbeitenTuer = "hm-rpc.0.IEQ123456.1.LEVEL"/*Rollo-Arbeiten-Tuer.LEVEL*/,
      idKArbeitenTuer = "hm-rpc.0.IEQ123456.1.STATE"/*Kontakt-Arbeiten-Tuer.STATE*/,
      idRolloStatus = "javascript.0.Rollo.Steuerung.Status"/*Rollo.Steuerung.Status*/;
      
      on({id: idKArbeitenTuer, change: "ne"}, function () {
      	kontakt (idKArbeitenTuer,idRArbeitenTuer);
      });
      
      function kontakt (namekontakt,namerollo){
          log("kontaktänderung " + namerollo + namekontakt);
          if(getState(namekontakt) === 2 && getState(idRolloStatus) === 2)setState(namerollo,20);
          if(getState(namekontakt) === 0 && getState(idRolloStatus) === 2)setState(namerollo,0);
      }
      
      

      Leider funktioniert das ganze nicht so wie es soll.

      Der Aufruf der Function klappt soweit. Allerdings bekomme ich nicht die korrekte Übergabe der IDs hin. Da die Anführungszeichen entfernt werden.

      Kann mir jemand helfen und vielleicht einen Tipp geben ?

      Gruß

      Michael

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

        Hey,

        hat mit den Anführungszeichen nichts zu tun. Ich denke eher das es daran liegt das ein "getState()" ein Objekt zurückgibt und nicht den Wert!!

        Du musst getState().val nutzen um den Wert zu bekommen!+

        Ingo

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

          var = idRArbeitenTuer
          

          Das funktioniert trotz dem Gleichheitszeichen hinter dem var?

          Das Gleichheitszeichen gehört nach meiner Meinung nicht nicht da hin.

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

            Ja, das ist auch falsch. Hatte ich glatt übersehen

            1 Reply Last reply Reply Quote 0
            • arteck
              arteck Developer Most Active last edited by

              var idRArbeitenTuer = "hm-rpc.0.IEQ123456.1.LEVEL"/*Rollo-Arbeiten-Tuer.LEVEL*/;
              var idKArbeitenTuer = "hm-rpc.0.IEQ123456.1.STATE"/*Kontakt-Arbeiten-Tuer.STATE*/;
              var idRolloStatus = "javascript.0.Rollo.Steuerung.Status"/*Rollo.Steuerung.Status*/;
              
              on({id: idKArbeitenTuer, change: "ne"}, function () {
                 kontakt (idKArbeitenTuer,idRArbeitenTuer);
              });
              
              function kontakt (namekontakt,namerollo) {
                  log("kontaktänderung " + namerollo + namekontakt);
                  if (getState(namekontakt) === 2 && getState(idRolloStatus) === 2) {
                  	setState(namerollo,20);
                  }
                  if (getState(namekontakt) === 0 && getState(idRolloStatus) === 2) {
                  	setState(namerollo,0);
                  }
              }
              

              und hinten kein komma am variablendeklarationsende

              probier das mal..

              1 Reply Last reply Reply Quote 0
              • AlCalzone
                AlCalzone Developer last edited by

                @arteck:

                und hinten kein komma am variablendeklarationsende `
                Deklarationen per Komma trennen ist vollkommen ok, solange hinter dem letzten ein Semikolon steht. Nur das = direkt hinter <u>var</u> darf nicht sein.

                1 Reply Last reply Reply Quote 0
                • D
                  dwm last edited by

                  var idRArbeitenTuer = "hm-rpc.0.IEQ123456.1.LEVEL"/*Rollo-Arbeiten-Tuer.LEVEL*/;
                  var idKArbeitenTuer = "hm-rpc.0.IEQ123456.1.STATE"/*Kontakt-Arbeiten-Tuer.STATE*/;
                  var idRolloStatus = "javascript.0.Rollo.Steuerung.Status"/*Rollo.Steuerung.Status*/;
                  
                  on({id: idKArbeitenTuer, change: "ne"}, function () {
                     kontakt (idKArbeitenTuer,idRArbeitenTuer);
                  });
                  
                  function kontakt (namekontakt,namerollo) {
                      log("kontaktänderung " + namerollo + namekontakt);
                      if (getState(namekontakt).val === 2 && getState(idRolloStatus).val === 2) {
                         setState(namerollo,20);
                      }
                      if (getState(namekontakt).val === 0 && getState(idRolloStatus).val === 2) {
                         setState(namerollo,0);
                      }
                  }
                  

                  … die .val nach den getStates haben noch gefehlt.

                  Noch ein Tipp ... ich würde das mit mindestens 5s Verzögerung schalten. Sonst kriegt das Rollo immer Zuckungen, wenn jemand kurz mal den Hebel hin- und herdreht.

                  Also:

                  var idRArbeitenTuer = "hm-rpc.0.IEQ123456.1.LEVEL"/*Rollo-Arbeiten-Tuer.LEVEL*/;
                  var idKArbeitenTuer = "hm-rpc.0.IEQ123456.1.STATE"/*Kontakt-Arbeiten-Tuer.STATE*/;
                  var idRolloStatus = "javascript.0.Rollo.Steuerung.Status"/*Rollo.Steuerung.Status*/;
                  var RolloTimer = null;
                  
                  on({id: idKArbeitenTuer, change: "ne"}, function () {
                     if (RolloTimer !== null) 
                         clearTimeout(RolloTimer);
                     RolloTimer = setTimeout( function() {kontakt (idKArbeitenTuer,idRArbeitenTuer);},5000);
                  });
                  
                  function kontakt (namekontakt,namerollo) {
                      log("kontaktänderung " + namerollo + namekontakt);
                      if (getState(namekontakt).val === 2 && getState(idRolloStatus).val === 2) {
                         setState(namerollo,20);
                      }
                      if (getState(namekontakt).val === 0 && getState(idRolloStatus).val === 2) {
                         setState(namerollo,0);
                      }
                      RolloTimer=null;
                  }
                  
                  

                  Das ruft dann die Routine für Kontaktänderung erst nach 5s nach der letzten Statusänderung auf.

                  BTDTBTTS …

                  Werner

                  1 Reply Last reply Reply Quote 0
                  • M
                    mctom last edited by

                    Danke an alle für die Hilfe.

                    Da hatte ich am Anfang wohl Tomaten auf den Augen.

                    Die Idee mit den 5s habe ich direkt auch übernommen.

                    Gruß

                    Michael

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    520
                    Online

                    31.7k
                    Users

                    79.8k
                    Topics

                    1.3m
                    Posts

                    6
                    8
                    1015
                    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