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.
    • paul53
      paul53 @hanss last edited by paul53

      @hanss said:

      on(AlexaSHD_Root+S_Raum+".targetSetpoint"
      

      Das ist kein Array. Ein Array of IDs muss komplette IDs enthalten.

      hanss 1 Reply Last reply Reply Quote 0
      • 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

                              681
                              Online

                              31.9k
                              Users

                              80.1k
                              Topics

                              1.3m
                              Posts

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