Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Subscribe auf ganze Datenpunkt-Zweige

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Subscribe auf ganze Datenpunkt-Zweige

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

      Mit dem Statement

      on({id: /^aaa\.0\.bbb\.ccc\./, change: 'ne'}, DoSomething);
      

      kann ich Änderungen im Datenpunkt-Zweig unterhalb des angegebenen Pfades abgreifen, ebenso dort erfolgte Datenpunkt-Neuanlagen, sofern ihnen ein Defaultwert mitgegeben wird. Dort erfolgte Löschungen von Datenpunkten werden jedoch nicht mitgeteilt. Wie kann ich derartige Löschungen per "on" abgreifen?

      paul53 AlCalzone 2 Replies Last reply Reply Quote 1
      • paul53
        paul53 @hsteinme last edited by

        @hsteinme sagte:

        Wie kann ich derartige Löschungen per "on" abgreifen?

        Was soll "on" im Datenpunkt-Objekt liefern, wenn das Objekt und der Zustand gerade gelöscht wurden ?

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

          @paul53 sagte in Subscribe auf ganze Datenpunkt-Zweige:

          Was soll "on" im Datenpunkt-Objekt liefern, wenn das Objekt und der Zustand gerade gelöscht wurden ?

          Ich rede nicht über ein einzelnes Objekt, sondern über einen Objektbaum. Ein Beispiel:

          aaa.0.bbb.ccc
          aaa.0.bbb.ccc.1
          aaa.0.bbb.ccc.1.11
          aaa.0.bbb.ccc.2
          

          Wenn z.B. aaa.0.bbb.ccc.1.11 gelöscht wird, so kann man dies als eine Änderung am "Ober-Objekt" aaa.0.bbb.ccc betrachten. Eine Möglichkeit, darüber informiert zu werden, suche ich für einen Anwendungsfall bei mir.

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

            Nachtrag: Ich hänge in dieser Fragestellung nicht am on-Statement. Paul53's Hinweis, was denn bei einem gelöschten Teilchen überhaupt gemeldet werden soll, habe ich schon verstanden. Mir würde auch schon eine Notification reichen, dass sich die Anzahl der Elemente im Zweig geändert hat. Hat jemand eine Idee dazu?

            paul53 liv-in-sky 2 Replies Last reply Reply Quote 0
            • paul53
              paul53 @hsteinme last edited by

              @hsteinme sagte:

              Notification reichen, dass sich die Anzahl der Elemente im Zweig geändert hat.

              Wodurch ändert sich die Anzahl der Objekte ?

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

                @paul53 sagte in Subscribe auf ganze Datenpunkt-Zweige:

                Wodurch ändert sich die Anzahl der Objekte ?

                Durch Löschungen oder Neuanlagen von Objekten unterhalb des "Ober-Objekts".

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

                  @hsteinme sagte in Subscribe auf ganze Datenpunkt-Zweige:

                  Wie kann ich derartige Löschungen per "on" abgreifen?

                  Soweit ich weiß, geht das nur mit einem Adapter.

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

                    @hsteinme sagte:

                    Durch Löschungen oder Neuanlagen von Objekten unterhalb des "Ober-Objekts".

                    Das erfolgt durch eine Adapter-Instanz oder durch ein Script ?

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

                      @paul53: Dieser Objekt-Teilbaum wird durch einen Adapter bereitgestellt und auch gepflegt. Mein Skript möchte Änderungen in diesem Teilbaum mitbekommen, um dann Aktionen lostreten zu können.

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

                        @hsteinme sagte:

                        Mein Skript möchte Änderungen in diesem Teilbaum mitbekommen,

                        Da sehe ich momentan keine Chance.

                        1 Reply Last reply Reply Quote 0
                        • liv-in-sky
                          liv-in-sky @hsteinme last edited by

                          @hsteinme sagte in Subscribe auf ganze Datenpunkt-Zweige:

                          Nachtrag: Ich hänge in dieser Fragestellung nicht am on-Statement. Paul53's Hinweis, was denn bei einem gelöschten Teilchen überhaupt gemeldet werden soll, habe ich schon verstanden. Mir würde auch schon eine Notification reichen, dass sich die Anzahl der Elemente im Zweig geändert hat. Hat jemand eine Idee dazu?

                          du könntest dir ein script machen, das diesen ordner scannt und alle id's in ein array speichern - dann frägst du jede z.b minute ab, ob diese array noch dem entspricht, das du gerade abfrägst - dann weißt du, dass es eine änderung
                          gegeben hat - du kannst sogar rausfinden an welcher stelle es sich geändert hat - ist nicht so schnell wie ein on{}, aber falls die zeit nicht unbedingt ein kriterium ist - letztlich kannst du auch auf das array triggern mit on{}

                          wenn du viele datenpunkte darin hast und öfter in der minute diese abfragen machst, wird dein load ziemlich hoch werden

                          paul53 hsteinme 3 Replies Last reply Reply Quote 0
                          • paul53
                            paul53 @liv-in-sky last edited by

                            @liv-in-sky sagte:

                            ein script machen, das diesen ordner scannt und alle id's in ein array speichern

                            Hast Du berücksichtigt, dass der Javascript-Adapter alle Objekte und Zustände puffert ?

                            liv-in-sky hsteinme 2 Replies Last reply Reply Quote 0
                            • liv-in-sky
                              liv-in-sky @paul53 last edited by liv-in-sky

                              @paul53 hab ich wohl nicht, wenn du so fragst

                              ich habe das getestet und es funktionierte

                              habe einfach von hand während der minute einen datenpunkt oder auch einen unterordner mit datenpunkten angelegt - das script hat sie gezeigt - der counter springt auf die richtige anzahl

                               schedule('* * * *  *',  function () {
                               var counter=0;
                                $('0_userdata.0.Tabellen.*').each(function(id, i) {         
                                  counter++
                                
                              log(id)
                              
                                   
                                }); 
                                log(counter.toString())
                              
                                 
                                 });    
                              

                              selbst mit einem 10 sekunden schedule hat es richtig angezeigt

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @liv-in-sky last edited by paul53

                                @liv-in-sky sagte:

                                selbst mit einem 10 sekunden schedule hat es richtig angezeigt

                                Um so besser, wenn es so funktioniert. Mit Subscriptions auf neue, per Hand angelegte Datenpunkte habe ich schon negative Erfahrungen gemacht.

                                liv-in-sky 2 Replies Last reply Reply Quote 0
                                • liv-in-sky
                                  liv-in-sky @paul53 last edited by

                                  @paul53 da ich weiß, das du bedeutend mehr erfahrung hast als ich:

                                  gehst du davon aus, dass es situationen gibt, in dem das nicht funktioniert und ich nur eine art "glück" hatte - oder ich irgendwas eingestellt habe, dass ich vergessen habe ?

                                  1 Reply Last reply Reply Quote 0
                                  • liv-in-sky
                                    liv-in-sky @paul53 last edited by

                                    @paul53 ok - überschneidung

                                    1 Reply Last reply Reply Quote 0
                                    • hsteinme
                                      hsteinme @liv-in-sky last edited by

                                      @liv-in-sky sagte in Subscribe auf ganze Datenpunkt-Zweige:

                                      du könntest dir ein script machen, das diesen ordner scannt und alle id's in ein array speichern - dann frägst du jede z.b minute ab, ob diese array noch dem entspricht, das du gerade abfrägst - dann weißt du, dass es eine änderung
                                      gegeben hat

                                      Ja, diesen Notnagel habe ich schon fertig da liegen, weil ich ihn eh an anderer Stelle benötige. Aber das ist kein Ansatz, der mir Freude bereitet. Im besagten Objektbaum gibt es im Abstand von Tagen gelegentliche Änderungen, auf die ich dann zeitnah reagieren möchte. Dann ist das in kurzen Abständen durchzuführende "Durchwandern" des Baumes wirklich nur eine verschwenderische Notlösung.

                                      Danke für Deine Anregung.

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

                                        @paul53 sagte in Subscribe auf ganze Datenpunkt-Zweige:

                                        Hast Du berücksichtigt, dass der Javascript-Adapter alle Objekte und Zustände puffert ?

                                        Ooooh! Gibt es dazu irgendwo verlässliche nachlesbare Informationen? Diese Aussage stellt ja schließlich elementare Teile des ioBroker-Konzepts in Frage. Von daher fehlt mir hier ein wenig der Glaube.

                                        Jeder, der einen Cache einführt, muss doch auch Mechanismen parat haben, die eine Inkonsistenz zwischen dem Cache und seinem repräsentierten Hintergrundmedium vermeiden.

                                        1 Reply Last reply Reply Quote 0
                                        • hsteinme
                                          hsteinme @liv-in-sky last edited by

                                          @liv-in-sky sagte in Subscribe auf ganze Datenpunkt-Zweige:

                                          du könntest dir ein script machen, das diesen ordner scannt und alle id's in ein array speichern [...] letztlich kannst du auch auf das array triggern mit on{}

                                          Nein, damit komme ich nicht weiter, da ich in die gleiche Situation hineinlaufe wie mit meinem on-Beispiel aus meinem ersten Beitrag: Änderungen an den Datenpunkten werden Dir mitgeteilt, Löschungen von Datenpunkten jedoch nicht.

                                          Ein Beispiel:

                                          var MyDPs = ['javascript.0.Test1', 'javascript.0.Test1.Test11'];
                                          on({id: MyDPs, change: 'any'}, function(DP) {
                                              console.log('Änderung in ' + MyDPs[MyDPs.indexOf(DP.id)]);
                                          });
                                          

                                          Änderst Du den Wert von Test11, so macht on fein säuberlich einen Vermerk im Log. Löschst Du jedoch Test11, so schweigt on Dich an.

                                          Hier gilt auch wieder die Anmerkung von paul 53: Wenn Test11 gelöscht ist, wie soll on bzw. function damit noch arbeiten können?

                                          1 Reply Last reply Reply Quote 0
                                          • T
                                            ticaki Developer last edited by ticaki

                                            Hallo,

                                            folgender Code erzeugt auf RB4 mit redis <1% load mit ca. 40-50 States:

                                            var arrayofstates = $('state[state.id=javascript.0.*]');
                                            setState("javascript.0.Test1",JSON.stringify(arrayofstates));
                                            
                                            schedule("*/1 * * * * *", function() { // jede Sekunde
                                              arrayofstates = $('state[state.id=javascript.0.*]');
                                              setState("javascript.0.Test1",JSON.stringify(arrayofstates));
                                            })
                                            
                                            on({id:"javascript.0.Test1", change:"ne"},function(obj) {
                                                console.log("test 123 kann mich wer hören");
                                            })
                                            
                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.1k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            21
                                            1106
                                            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