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. Parmeter in der on() Funktion übergeben

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

Parmeter in der on() Funktion übergeben

Scheduled Pinned Locked Moved Skripten / Logik
javascript
3 Posts 2 Posters 317 Views 1 Watching
  • 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.
  • W Offline
    W Offline
    Wlad
    wrote on last edited by
    #1

    Hallo, ich habe eine kleine Triggerfunktion, mit der ich die Thermostate bei der Umstellung Manu-Auto synchronisiere

    var BadThermostats = ['hm-rpc.1.NEQ   .2.','hm-rpc.1.NEQ   .4.'];
    
    on({id:BadThermostats[0]+"CONTROL_MODE",change:"ne"}, function(){   // hier array eintragen
        var arr = BadThermostats;                                       // hier array eintragen
        var status = getState(arr[0]+"CONTROL_MODE").val;
        console.log('stdout: ' + status);
        if(status === 0) {
            for(var i = 0; i<arr.length; i++) 
                setState(arr[i]+"AUTO_MODE",false);
        }
        else {
            var current=getState(arr[0]+"SET_TEMPERATURE");
            console.log('current.val: ' + current.val);
            for( i = 0; i<arr.length; i++) {
                setState(arr[i]+"MANU_MODE",current.val);
            } 
        } 
     });
    

    Damit klappt es soweit alles Prima.
    Nun möchte ich das gleiche für ca. 10 weitere Thermostatgruppen erweitern.
    Dann muss ich logischerweise dann den gleichen code 10 Mal kopieren und die arrays dementsprechen anpassen.
    Das ist total unbequem, da die Funktion schon ziemlich erweitert wurde( hier ist nur die vereinfachte Version) und zwecks weiteren Codeanpassungen total unbequem.
    Logisch wäre es natürliceh die Funktion auszulagern und dann ihr die Parameter mit dem entsprechenden Array der Thermostatgruppe übergeben.
    Wenn ich nur die Funkton auslagere

    function checkRoom(){   // hier array eintragen
        var arr = BadThermostats;                                       // hier array eintragen
        var status = getState(arr[0]+"CONTROL_MODE").val;
        console.log('stdout: ' + status);
        if(status === 0) {
            for(var i = 0; i<arr.length; i++) 
                setState(arr[i]+"AUTO_MODE",false);
        }
        else {
            var current=getState(arr[0]+"SET_TEMPERATURE");
            console.log('current.val: ' + current.val);
            for( i = 0; i<arr.length; i++) {
                setState(arr[i]+"MANU_MODE",current.val);
            } 
        } 
     }
    
    on({id:BadThermostats[0]+"CONTROL_MODE",change:"ne"},  checkRoom);
    

    Funktioniert ja alles noch, aber ich möchte nun Parameter übergeben.
    Dann ändere ich folgendermassen und der Compiler schimpft...
    io1.png
    Ich komme hier nicht weiter,
    kann mir bitte jemend auf die Sprünge helfen

    paul53P 1 Reply Last reply
    0
    • W Wlad

      Hallo, ich habe eine kleine Triggerfunktion, mit der ich die Thermostate bei der Umstellung Manu-Auto synchronisiere

      var BadThermostats = ['hm-rpc.1.NEQ   .2.','hm-rpc.1.NEQ   .4.'];
      
      on({id:BadThermostats[0]+"CONTROL_MODE",change:"ne"}, function(){   // hier array eintragen
          var arr = BadThermostats;                                       // hier array eintragen
          var status = getState(arr[0]+"CONTROL_MODE").val;
          console.log('stdout: ' + status);
          if(status === 0) {
              for(var i = 0; i<arr.length; i++) 
                  setState(arr[i]+"AUTO_MODE",false);
          }
          else {
              var current=getState(arr[0]+"SET_TEMPERATURE");
              console.log('current.val: ' + current.val);
              for( i = 0; i<arr.length; i++) {
                  setState(arr[i]+"MANU_MODE",current.val);
              } 
          } 
       });
      

      Damit klappt es soweit alles Prima.
      Nun möchte ich das gleiche für ca. 10 weitere Thermostatgruppen erweitern.
      Dann muss ich logischerweise dann den gleichen code 10 Mal kopieren und die arrays dementsprechen anpassen.
      Das ist total unbequem, da die Funktion schon ziemlich erweitert wurde( hier ist nur die vereinfachte Version) und zwecks weiteren Codeanpassungen total unbequem.
      Logisch wäre es natürliceh die Funktion auszulagern und dann ihr die Parameter mit dem entsprechenden Array der Thermostatgruppe übergeben.
      Wenn ich nur die Funkton auslagere

      function checkRoom(){   // hier array eintragen
          var arr = BadThermostats;                                       // hier array eintragen
          var status = getState(arr[0]+"CONTROL_MODE").val;
          console.log('stdout: ' + status);
          if(status === 0) {
              for(var i = 0; i<arr.length; i++) 
                  setState(arr[i]+"AUTO_MODE",false);
          }
          else {
              var current=getState(arr[0]+"SET_TEMPERATURE");
              console.log('current.val: ' + current.val);
              for( i = 0; i<arr.length; i++) {
                  setState(arr[i]+"MANU_MODE",current.val);
              } 
          } 
       }
      
      on({id:BadThermostats[0]+"CONTROL_MODE",change:"ne"},  checkRoom);
      

      Funktioniert ja alles noch, aber ich möchte nun Parameter übergeben.
      Dann ändere ich folgendermassen und der Compiler schimpft...
      io1.png
      Ich komme hier nicht weiter,
      kann mir bitte jemend auf die Sprünge helfen

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      @Wlad sagte:

      Dann ändere ich folgendermassen und der Compiler schimpft...

      on({id:BadThermostats[0]+"CONTROL_MODE", change:"ne"},  function() {
         checkRoom(Badthermostats);
      });
      

      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

      W 1 Reply Last reply
      1
      • paul53P paul53

        @Wlad sagte:

        Dann ändere ich folgendermassen und der Compiler schimpft...

        on({id:BadThermostats[0]+"CONTROL_MODE", change:"ne"},  function() {
           checkRoom(Badthermostats);
        });
        
        W Offline
        W Offline
        Wlad
        wrote on last edited by
        #3

        @paul53
        Absolute Spitze!
        Vilen Dank!

        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

        371

        Online

        32.5k

        Users

        81.6k

        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