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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst] Subscribe auf ganze Datenpunkt-Zweige

    This topic has been deleted. Only users with topic management privileges can see it.
    • 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
                      • hsteinme
                        hsteinme last edited by

                        @ticaki sagte in Subscribe auf ganze Datenpunkt-Zweige:

                          arrayofstates = $('state[state.id=javascript.0.*]');
                          setState("javascript.0.Test1",JSON.stringify(arrayofstates));
                        

                        Ein "schöner" 😊 Code, danke! Vor allem ein für mich brauchbarer Ansatz, insbesondere weil durch die Stringifizierung es ermöglicht wird, auch Löschungen innerhalb der Struktur als Änderung zu erfahren. Ganz herzlichen Dank!

                        Durch geeignete Wildcard-Wahl im $-Selektor kann ich darüber hinaus sogar erreichen, dass nur für mich relevante Teile des Objektbaums betrachtet werden.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        804
                        Online

                        31.9k
                        Users

                        80.1k
                        Topics

                        1.3m
                        Posts

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