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. JavaScript
  5. javascript subscribe mit parameter

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

javascript subscribe mit parameter

Geplant Angeheftet Gesperrt Verschoben JavaScript
9 Beiträge 5 Kommentatoren 791 Aufrufe 5 Watching
  • Ä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.
  • I Offline
    I Offline
    ignis-draco
    schrieb am zuletzt editiert von
    #1

    Hi,

    ich bin dabei vom MaxCube auf den Maxcul zu wechseln dafür benötige ich jedoch ein paar Funktionen die ich jetzt selber schreiben muss.
    Aktuell bin ich dabei die "Fenster offen Heizung aus" Funktion zu bauen.
    Im Prinzip habe ich das auch am laufen :

    on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) {
        if (getState('maxcul.0.NEQ1152113.isOpen').val == true){
            setState('maxcul.0.NEQ1255028.mode',6);
        }else{
            setState('maxcul.0.NEQ1255028.mode',0);
        }
    });
    

    Da ich das für jedes Fenster /Raum machen müsste habe ich mir überlegt das ich lieber eine Funktion schreibe die dann als Parameter das Fenster und das/die Thermostat(e) bekommt.

    function window_change(window, thermostat){
     if (getState(window + '.isOpen').val == true){
            setState(thermostat +'.mode',6);
        }else{
            setState(thermostat +'.mode',0);
        }
    }
    

    Jetzt müsste ich aber beim "on" die Parameter mit geben. Geht das Überhaupt?

    on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' },window_change,('maxcul.0.NEQ1152113',''maxcul.0.NEQ1255028.mode"));
    

    oder muss ich das anderes schreiben das die window_change Funktion selber überprüfen muss um welches Fenster es sich handelt? Prinzipiell könnte ich über das Fenster Enum iterieren um herauszufinden welches offen ist und dann über die Räume das passende Thermostat zu finden.
    Das wäre aber für mein Verständnis sehr umständlich da ja eigendlich bekannt ist welches Fenster bewegt wurde.

    Über einen Tipp würde ich mich sehr freuen.

    Gruß Arne

    Proxmox [DMAF5] = LXC [Debian 12]
    ioBroker – apt-cacher – Semaphore – NGINX Proxy Manager – gitolite – LMS – tandoor – DokuWiki - paperless-ngx - unifi - mumble - wireguard - heimdall - planka - rustDesk - adguard

    arteckA AsgothianA H 3 Antworten Letzte Antwort
    0
    • I ignis-draco

      Hi,

      ich bin dabei vom MaxCube auf den Maxcul zu wechseln dafür benötige ich jedoch ein paar Funktionen die ich jetzt selber schreiben muss.
      Aktuell bin ich dabei die "Fenster offen Heizung aus" Funktion zu bauen.
      Im Prinzip habe ich das auch am laufen :

      on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) {
          if (getState('maxcul.0.NEQ1152113.isOpen').val == true){
              setState('maxcul.0.NEQ1255028.mode',6);
          }else{
              setState('maxcul.0.NEQ1255028.mode',0);
          }
      });
      

      Da ich das für jedes Fenster /Raum machen müsste habe ich mir überlegt das ich lieber eine Funktion schreibe die dann als Parameter das Fenster und das/die Thermostat(e) bekommt.

      function window_change(window, thermostat){
       if (getState(window + '.isOpen').val == true){
              setState(thermostat +'.mode',6);
          }else{
              setState(thermostat +'.mode',0);
          }
      }
      

      Jetzt müsste ich aber beim "on" die Parameter mit geben. Geht das Überhaupt?

      on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' },window_change,('maxcul.0.NEQ1152113',''maxcul.0.NEQ1255028.mode"));
      

      oder muss ich das anderes schreiben das die window_change Funktion selber überprüfen muss um welches Fenster es sich handelt? Prinzipiell könnte ich über das Fenster Enum iterieren um herauszufinden welches offen ist und dann über die Räume das passende Thermostat zu finden.
      Das wäre aber für mein Verständnis sehr umständlich da ja eigendlich bekannt ist welches Fenster bewegt wurde.

      Über einen Tipp würde ich mich sehr freuen.

      Gruß Arne

      arteckA Offline
      arteckA Offline
      arteck
      Developer Most Active
      schrieb am zuletzt editiert von arteck
      #2

      @ignis-draco bau ein array mit window, thermostat..

      dann schaust du nach ob sich was geändert hat

      on({id: [
        'maxcul.0.NEQ1152113.isOpen',
        'maxcul.0.NEQ1ewrwe13.isOpen',
        'maxcul.0.NEQ1w4443.isOpen',
      ], change: 'ne'}, function (obj) {
      
      
      
      });
      

      holst dir aus dem obj welches fenster ist den nu offen und arbeitest das laut dem array ab

      p.s:

      if (getState(window + '.isOpen').val){
      

      das reicht als abfrage

      zigbee hab ich, zwave auch, nuc's genauso und HA auch

      1 Antwort Letzte Antwort
      0
      • I ignis-draco

        Hi,

        ich bin dabei vom MaxCube auf den Maxcul zu wechseln dafür benötige ich jedoch ein paar Funktionen die ich jetzt selber schreiben muss.
        Aktuell bin ich dabei die "Fenster offen Heizung aus" Funktion zu bauen.
        Im Prinzip habe ich das auch am laufen :

        on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) {
            if (getState('maxcul.0.NEQ1152113.isOpen').val == true){
                setState('maxcul.0.NEQ1255028.mode',6);
            }else{
                setState('maxcul.0.NEQ1255028.mode',0);
            }
        });
        

        Da ich das für jedes Fenster /Raum machen müsste habe ich mir überlegt das ich lieber eine Funktion schreibe die dann als Parameter das Fenster und das/die Thermostat(e) bekommt.

        function window_change(window, thermostat){
         if (getState(window + '.isOpen').val == true){
                setState(thermostat +'.mode',6);
            }else{
                setState(thermostat +'.mode',0);
            }
        }
        

        Jetzt müsste ich aber beim "on" die Parameter mit geben. Geht das Überhaupt?

        on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' },window_change,('maxcul.0.NEQ1152113',''maxcul.0.NEQ1255028.mode"));
        

        oder muss ich das anderes schreiben das die window_change Funktion selber überprüfen muss um welches Fenster es sich handelt? Prinzipiell könnte ich über das Fenster Enum iterieren um herauszufinden welches offen ist und dann über die Räume das passende Thermostat zu finden.
        Das wäre aber für mein Verständnis sehr umständlich da ja eigendlich bekannt ist welches Fenster bewegt wurde.

        Über einen Tipp würde ich mich sehr freuen.

        Gruß Arne

        AsgothianA Offline
        AsgothianA Offline
        Asgothian
        Developer
        schrieb am zuletzt editiert von Asgothian
        #3

        @ignis-draco

        Mal vorne angefangen:

        an Stelle von

        on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) {
            if (getState('maxcul.0.NEQ1152113.isOpen').val == true){
                setState('maxcul.0.NEQ1255028.mode',6);
            }else{
                setState('maxcul.0.NEQ1255028.mode',0);
            }
        });
        

        kannst Du auch direkt

        on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) {
            if (obj.state.val == true){
                setState('maxcul.0.NEQ1255028.mode',6);
            }else{
                setState('maxcul.0.NEQ1255028.mode',0);
            }
        });
        

        nutzen. damit entfällt zumindest eine Variable. Das andere geht meiner Erfahrung nach nicht, weswegen ich das so lösen würde:

        function my_trigger(sensor, trigger, aktor) {
           const _actor = aktor;
           on({ id:sensor, change:trigger }, function (obj) {
            if (obj.state.val == true){
                setState(_actor,6);
            } else {
                setState(_actor,0);
            }
        }
        

        Wenn ich die Gültigkeit von Variablen und Konstanten richtig verstanden habe ist so sicher gestellt das die Funktion im Trigger mit den korrekten Werten aufgerufen wird.

        Die Funktion kannst du dann für Dein Beispiel so aufrufen:

        my_trigger('maxcul.0.NEQ1152113.isOpen', 'any', 'maxcul.0.NEQ1255028.mode')
        

        ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
        "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

        1 Antwort Letzte Antwort
        0
        • UncleSamU Offline
          UncleSamU Offline
          UncleSam
          Developer
          schrieb am zuletzt editiert von
          #4

          Den ersten Code kannst du vereinfachen:

          on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) {
              if (obj.state.val == true){
                  setState('maxcul.0.NEQ1255028.mode',6);
              }else{
                  setState('maxcul.0.NEQ1255028.mode',0);
              }
          });
          

          Du musst also nicht das Objekt abfragen, du bekommst alles im Parameter übergeben.

          Nun zu deiner eigentlichen Frage: fast richtig. Du musst einfach eine (anonyme) Funktion verwenden:

          on(
              { id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' },
              function (obj) { window_change('maxcul.0.NEQ1255028.mode') });
          

          Das erste Argument habe ich absichtlich weggelassen, da du ja den Wert bereits bekommst (siehe oben).

          Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
          ♡-lichen Dank an meine Sponsoren

          AsgothianA 1 Antwort Letzte Antwort
          0
          • UncleSamU Offline
            UncleSamU Offline
            UncleSam
            Developer
            schrieb am zuletzt editiert von
            #5

            ... und scheinbar beginnen alle Entwickler gleichzeitig zu arbeiten :rolling_on_the_floor_laughing:

            Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
            ♡-lichen Dank an meine Sponsoren

            1 Antwort Letzte Antwort
            1
            • I ignis-draco

              Hi,

              ich bin dabei vom MaxCube auf den Maxcul zu wechseln dafür benötige ich jedoch ein paar Funktionen die ich jetzt selber schreiben muss.
              Aktuell bin ich dabei die "Fenster offen Heizung aus" Funktion zu bauen.
              Im Prinzip habe ich das auch am laufen :

              on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) {
                  if (getState('maxcul.0.NEQ1152113.isOpen').val == true){
                      setState('maxcul.0.NEQ1255028.mode',6);
                  }else{
                      setState('maxcul.0.NEQ1255028.mode',0);
                  }
              });
              

              Da ich das für jedes Fenster /Raum machen müsste habe ich mir überlegt das ich lieber eine Funktion schreibe die dann als Parameter das Fenster und das/die Thermostat(e) bekommt.

              function window_change(window, thermostat){
               if (getState(window + '.isOpen').val == true){
                      setState(thermostat +'.mode',6);
                  }else{
                      setState(thermostat +'.mode',0);
                  }
              }
              

              Jetzt müsste ich aber beim "on" die Parameter mit geben. Geht das Überhaupt?

              on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' },window_change,('maxcul.0.NEQ1152113',''maxcul.0.NEQ1255028.mode"));
              

              oder muss ich das anderes schreiben das die window_change Funktion selber überprüfen muss um welches Fenster es sich handelt? Prinzipiell könnte ich über das Fenster Enum iterieren um herauszufinden welches offen ist und dann über die Räume das passende Thermostat zu finden.
              Das wäre aber für mein Verständnis sehr umständlich da ja eigendlich bekannt ist welches Fenster bewegt wurde.

              Über einen Tipp würde ich mich sehr freuen.

              Gruß Arne

              H Offline
              H Offline
              homecineplexx
              schrieb am zuletzt editiert von
              #6

              @ignis-draco said in javascript subscribe mit parameter:

              Hi,

              ich bin dabei vom MaxCube auf den Maxcul zu wechseln dafür benötige ich jedoch ein paar Funktionen die ich jetzt selber schreiben muss.
              Aktuell bin ich dabei die "Fenster offen Heizung aus" Funktion zu bauen.
              Im Prinzip habe ich das auch am laufen :

              on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) {
                  if (getState('maxcul.0.NEQ1152113.isOpen').val == true){
                      setState('maxcul.0.NEQ1255028.mode',6);
                  }else{
                      setState('maxcul.0.NEQ1255028.mode',0);
                  }
              });
              

              Da ich das für jedes Fenster /Raum machen müsste habe ich mir überlegt das ich lieber eine Funktion schreibe die dann als Parameter das Fenster und das/die Thermostat(e) bekommt.

              function window_change(window, thermostat){
               if (getState(window + '.isOpen').val == true){
                      setState(thermostat +'.mode',6);
                  }else{
                      setState(thermostat +'.mode',0);
                  }
              }
              

              Jetzt müsste ich aber beim "on" die Parameter mit geben. Geht das Überhaupt?

              on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' },window_change,('maxcul.0.NEQ1152113',''maxcul.0.NEQ1255028.mode"));
              

              oder muss ich das anderes schreiben das die window_change Funktion selber überprüfen muss um welches Fenster es sich handelt? Prinzipiell könnte ich über das Fenster Enum iterieren um herauszufinden welches offen ist und dann über die Räume das passende Thermostat zu finden.
              Das wäre aber für mein Verständnis sehr umständlich da ja eigendlich bekannt ist welches Fenster bewegt wurde.

              Über einen Tipp würde ich mich sehr freuen.

              Gruß Arne

              Hallo
              also wenn du schon einen Trigger mit dem Object hast, dann brauchst du dir den state nicht nochmals mit getState holen, sondern es reicht so

              on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) {
                  var isOpen = obj.state.val;
              
                  if (isOpen == true){
                      setState('maxcul.0.NEQ1255028.mode',6);
                  }else{
                      setState('maxcul.0.NEQ1255028.mode',0);
                  }
              });
              
              
              1 Antwort Letzte Antwort
              0
              • UncleSamU UncleSam

                Den ersten Code kannst du vereinfachen:

                on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) {
                    if (obj.state.val == true){
                        setState('maxcul.0.NEQ1255028.mode',6);
                    }else{
                        setState('maxcul.0.NEQ1255028.mode',0);
                    }
                });
                

                Du musst also nicht das Objekt abfragen, du bekommst alles im Parameter übergeben.

                Nun zu deiner eigentlichen Frage: fast richtig. Du musst einfach eine (anonyme) Funktion verwenden:

                on(
                    { id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' },
                    function (obj) { window_change('maxcul.0.NEQ1255028.mode') });
                

                Das erste Argument habe ich absichtlich weggelassen, da du ja den Wert bereits bekommst (siehe oben).

                AsgothianA Offline
                AsgothianA Offline
                Asgothian
                Developer
                schrieb am zuletzt editiert von
                #7

                modules:composer.user_said_in, @unclesam, javascript subscribe mit parameter

                Nun zu deiner eigentlichen Frage: fast richtig. Du musst einfach eine (anonyme) Funktion verwenden:

                                                                                                                                             on(                                                                                                                                                                                { id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' },                                                                                                                                                                                function (obj) { window_change('maxcul.0.NEQ1255028.mode') });                                            
                

                Das erste Argument habe ich absichtlich weggelassen, da du ja den Wert bereits bekommst (siehe oben).

                Hmm.. Muss da nicht noch ein parameter rein ob das Fenster auf Wert 0 oder Wert 6 gesetzt werden muss ? Also so:

                on( { id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) { window_change('maxcul.0.NEQ1255028.mode', (obj.state.val?6:0)) });
                

                ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                UncleSamU 1 Antwort Letzte Antwort
                0
                • AsgothianA Asgothian

                  modules:composer.user_said_in, @unclesam, javascript subscribe mit parameter

                  Nun zu deiner eigentlichen Frage: fast richtig. Du musst einfach eine (anonyme) Funktion verwenden:

                                                                                                                                               on(                                                                                                                                                                                { id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' },                                                                                                                                                                                function (obj) { window_change('maxcul.0.NEQ1255028.mode') });                                            
                  

                  Das erste Argument habe ich absichtlich weggelassen, da du ja den Wert bereits bekommst (siehe oben).

                  Hmm.. Muss da nicht noch ein parameter rein ob das Fenster auf Wert 0 oder Wert 6 gesetzt werden muss ? Also so:

                  on( { id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) { window_change('maxcul.0.NEQ1255028.mode', (obj.state.val?6:0)) });
                  
                  UncleSamU Offline
                  UncleSamU Offline
                  UncleSam
                  Developer
                  schrieb am zuletzt editiert von
                  #8

                  @asgothian Richtig, wollte eigentlich obj übergeben, aber hab ich dann vergessen.

                  Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
                  ♡-lichen Dank an meine Sponsoren

                  1 Antwort Letzte Antwort
                  0
                  • I Offline
                    I Offline
                    ignis-draco
                    schrieb am zuletzt editiert von
                    #9

                    Hi @ll,

                    wo das nenne ich mal schnelle Reaktion und gleich so viele.

                    Auf die Idee in der anonymen Funktion einfach meine Funktion aufzurufen hätte ich auch selber kommen können :disappointed:.
                    Das ich über obj ja auch an den state dran kommen wir mir nicht so bewusst (muss in meinen anderen Skripten schauen ob ich das da auch verwenden kann).
                    Ich mache das jetzt erstmal so.

                    function window_change(thermostat, value){
                        for (let i of thermostat){
                            setState(i +'.mode',value);
                        }
                    }
                    
                    on({ id: 'maxcul.0.NEQ1152113.isOpen', change: 'any' }, function (obj) {
                    window_change(['maxcul.0.NEQ1255028'],(obj.state.val?6:0)) 
                    });
                    

                    Vielleicht ändere ich das noch mal so dass es automatisch durch die enums erzeugt wird jedoch glaube ich das eine Änderung (neues Thermostat oder Fenstersensor) nicht so häufig passiert.

                    vielen dank noch mal für die vielen hilfreichen antworten.

                    Gruß
                    Arne

                    Proxmox [DMAF5] = LXC [Debian 12]
                    ioBroker – apt-cacher – Semaphore – NGINX Proxy Manager – gitolite – LMS – tandoor – DokuWiki - paperless-ngx - unifi - mumble - wireguard - heimdall - planka - rustDesk - adguard

                    1 Antwort Letzte Antwort
                    1
                    Antworten
                    • In einem neuen Thema antworten
                    Anmelden zum Antworten
                    • Älteste zuerst
                    • Neuste zuerst
                    • Meiste Stimmen


                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    888

                    Online

                    32.5k

                    Benutzer

                    81.6k

                    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