Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Javaskript: Auf Listeneintrag triggern

    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

    Javaskript: Auf Listeneintrag triggern

    This topic has been deleted. Only users with topic management privileges can see it.
    • hanss
      hanss @paul53 last edited by hanss

      @paul53
      Vielen Dank, habe ich gemacht.
      Aber wie erhalte ich den index?
      (Es gibt neben D_Raum[index] auch noch andere Arrays)

      // Wohnzimmer: alexa2.0.Smart-Home-Devices.82c5b2dd-e744-42b4-8cf4-e55721b1a51b.targetSetpoint
      
      const AlexaSHD_Root="alexa2.0.Smart-Home-Devices."; 
      // Zimmer
      var S_Raum=[];                                     
      S_Raum[0]=AlexaSHD_Root+'b690f9b2-19a2-472e-9698-7bcf6c5ef1cf.targetSetpoint';    // Büro  
      S_Raum[1]=AlexaSHD_Root+'b551ed22-499c-4215-bc08-22ebbca23c31.targetSetpoint';    // Küche 
      S_Raum[2]=AlexaSHD_Root+'bf2c0ac3-ee45-47ab-9151-d003cb270374.targetSetpoint';    // Bad
      S_Raum[3]=AlexaSHD_Root+'82c5b2dd-e744-42b4-8cf4-e55721b1a51b.targetSetpoint';    // Wohnzimmer 
      S_Raum[4]=AlexaSHD_Root+'569d705b-f04b-4302-9ecc-268dfda7a9ae.targetSetpoint';    // OG Zi Links   
      S_Raum[5]=AlexaSHD_Root+'24e3ae80-80ac-4bb6-905e-c8bb989a7747.targetSetpoint';    // OG Wohnen
      S_Raum[6]=AlexaSHD_Root+'d8dfb5d7-0d33-4c46-9833-3c7a58c22058.targetSetpoint';    // OG Küche
      S_Raum[7]=AlexaSHD_Root+'270ad196-cb72-45da-ad55-c2edc33f65f2.targetSetpoint';    // OG Zi Rechts
      
      // Neue Alias Daten Objekte
      var D_Raum=[];
      D_Raum[0]='Buero';                                 // Büro
      D_Raum[1]='Kueche';                                
      D_Raum[2]='Bad';                                   
      D_Raum[3]='Wohnzimmer';                            
      D_Raum[4]='OG_Zi_Links';                                
      D_Raum[5]='OG_Wohnen'; 
      D_Raum[6]='OG_Kueche';                                 
      D_Raum[7]='OG_Zi_Rechts';  
      
      on({id: S_Raum, change: "ne"}, function(obj,index) {
        let SollTemp_akt = obj.state.val
        log('Neue '+D_Raum[index]+' Temperatur: '+SollTemp_akt)
      });
      
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @hanss last edited by

        @hanss said: wie erhalte ich den index?

        on({id: S_Raum, change: "ne"}, function(obj) {
          let index = S_Raum.indexOf(obj.id);
          let SollTemp_akt = obj.state.val;
          log('Neue '+D_Raum[index] + ' Temperatur: ' + SollTemp_akt);
        });
        
        hanss 1 Reply Last reply Reply Quote 0
        • hanss
          hanss @paul53 last edited by

          @paul53
          Super.
          Jetzt nur noch ein kleines Problem:

          Wie kann ich der Funktion xlog die Variable obj mitgeben?
          on({id: Target_Raum, change: "ne"}, xlog(obj)) funktioniert nicht

          on({id: Target_Raum, change: "ne"}, xlog)
          
          function xlog(obj){
              let index = S_Raum.indexOf(obj.id)
              let SollTemp_akt = obj.state.val
            log('Neue '+obj.channelName+' Temperatur: '+SollTemp_akt)     // ID: "alexa2.0.Smart-Home-Devices.bf2c0ac3-ee45-47ab-9151-d003cb270374"
            log('Index: '+index+'   Raum: '+D_Raum[index])
          }
          
          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @hanss last edited by paul53

            @hanss said: Wie kann ich der Funktion xlog die Variable obj mitgeben?

            Genau so, wenn Target_Raum das Array of IDs ist. Der Index muss dann auch von Target_Raum ermittelt werden.

            on({id: Target_Raum, change: "ne"}, xlog);
            

            Wenn xlog() auf mehrere Arrays anwendbar sein soll:

            on({id: Target_Raum, change: "ne"}, function(obj) {
               xlog(obj, Target_Raum);
            });
            
            hanss 2 Replies Last reply Reply Quote 0
            • hanss
              hanss @paul53 last edited by

              @paul53
              Das wäre ja genauso wie in meinem Beispiel.
              Wenn ich das so mache, dann wird index -1.

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @hanss last edited by paul53

                @hanss said: Wenn ich das so mache, dann wird index -1.

                Ja, wenn Trigger-Array und Index-Array nicht identisch sind. Versuche es mal so:

                function xlog(obj, index, names){
                    let SollTemp_akt = obj.state.val
                    log('Neue '+obj.channelName+' Temperatur: '+SollTemp_akt)     // ID: "alexa2.0.Smart-Home-Devices.bf2c0ac3-ee45-47ab-9151-d003cb270374"
                    log('Index: '+index+'   Raum: '+names[index])
                }
                
                on({id: Target_Raum, change: "ne"}, function(obj) {
                   xlog(obj, Target_Raum.indexOf(obj.id), D_Raum);
                });
                
                hanss 1 Reply Last reply Reply Quote 0
                • hanss
                  hanss @paul53 last edited by

                  @paul53 said in Javaskript: Auf Listeneintrag triggern:

                  @hanss said: Wie kann ich der Funktion xlog die Variable obj mitgeben?

                  Genau so, wenn Target_Raum das Array of IDs ist. Der Index muss dann auch von Target_Raum ermittelt werden.

                  on({id: Target_Raum, change: "ne"}, xlog);
                  

                  Wenn xlog() auf mehrere Arrays anwendbar sein soll:

                  on({id: Target_Raum, change: "ne"}, function(obj) {
                     xlog(obj, Target_Raum);
                  });
                  

                  Nur aus Interesse, für mich ist das sehr verwirrend:
                  Gibt es dafür einen Grund, dass man bei on( callback zwar bei function(obj) einen Parameter angeben
                  kann, aber nicht, wenn eine andere Funktion aufgerufen wird xlog?

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @hanss last edited by paul53

                    @hanss said: nicht, wenn eine andere Funktion aufgerufen wird xlog?

                    Das musste ich zu Anfang auch lernen: Das ist kein Funktionsaufruf, sondern eine Funktions-Referenz. Was an die Callback-Funktion übergeben wird, bestimmt die aufrufende Funktion on(id, callback).

                    function(obj) {}
                    

                    ist eine anonyme Callback-Funktion, bei der angegeben wird, mit welchem Bezeichner (obj) die Übergabe von Parametern an die Funktion erfolgt.

                    1 Reply Last reply Reply Quote 0
                    • hanss
                      hanss @paul53 last edited by hanss

                      @paul53 sagte in Javaskript: Auf Listeneintrag triggern:

                      Hallo paul53,
                      on({id: Target_Raum, change: "ne"}

                      Der Trigger wird offensichtlich ausgelöst, wenn nicht alle Target_Raum gleich sind.

                      Wie erhalte ich einen Trigger, der nur dann auslöst, wenn sich ein oder mehrere Target_Raum verändert haben?
                      Also:
                      kein Trigger bei

                      1. Target_Raum [1,2,3,4,5,6,7,8]
                      2. Target_Raum [1,2,3,4,5,6,7,8]

                      1* Trigger bei

                      1. Target_Raum [1,2,3,4,5,6,7,8]
                      2. Target_Raum [5,2,3,4,5,6,7,8]

                      1* Trigger bei

                      1. Target_Raum [1,2,3,4,5,6,7,8]
                      2. Target_Raum [5,0,9,4,5,6,7,8]
                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @hanss last edited by

                        @hanss sagte: wenn sich ein oder mehrere Target_Raum verändert haben?

                        Verstehe ich nicht. Getriggert wird, wenn sich in einem Target_Raum der Wert (targetSetpoint) ändert.

                        hanss 2 Replies Last reply Reply Quote 0
                        • hanss
                          hanss @paul53 last edited by hanss

                          @paul53

                          Das Beispiel ist so gemeint:
                          00:01 Uhr Target_Raum1 = 1; Target_Raum2 = 2; Target_Raum3 = 3 .....
                          00:02 Uhr Target_Raum1' Target_Raum2'Target_Raum3' ......

                          KEIN Trigger, wenn Target_Raum1 == Target_Raum1' && Target_Raum2 == Target_Raum2' ....
                          Trigger, wenn Target_Raum1 != Target_Raum1' || Target_Raum2 != Target_Raum2' ....

                          Es wird aber offensichtlich ein Trigger ausgelöst, wenn Target_Raum1 != Target_Raum2

                          d.h. change: "ne" soll nur jeweils den selben Raum betreffen.

                          kein Trigger bei
                          00:01 Uhr Target_Raum [1,2,3,4,5,6,7,8]
                          00:02 Uhr Target_Raum' [1,2,3,4,5,6,7,8]

                          1* Trigger bei
                          00:01 Uhr Target_Raum [1,2,3,4,5,6,7,8]
                          00:02 Uhr Target_Raum' [5,2,3,4,5,6,7,8]

                          1* Trigger bei
                          00:01 Uhr Target_Raum [1,2,3,4,5,6,7,8]
                          00:02 Uhr Target_Raum' [5,0,9,4,5,6,7,8]

                          Bitte um Nachricht, wenn es immer noch nicht klar ist, dann muß ich ein Beispiel programmieren.

                          1 Reply Last reply Reply Quote 0
                          • hanss
                            hanss @paul53 last edited by

                            @paul53
                            Entschuldige bitte, ich bin da einem Irrtum aufgesessen.
                            der on({id: Target_Raum, change: "ne"} Trigger bezieht sich tatsächlich
                            nur auf einen Target_Raum, so wie er soll.

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            786
                            Online

                            31.8k
                            Users

                            80.0k
                            Topics

                            1.3m
                            Posts

                            5
                            22
                            1504
                            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