Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Überwachen in Objektbaum

    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

    Überwachen in Objektbaum

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

      Hi Ihr,
      ich müsste eine Aktion immer dann ausführen, wenn sich ein value eines Baumes ändert, der in etwa so aussieht:

      {
        "ctype": "group",
        "id": "LivingRoomLight",
        "params": {
          "switches": [
            {
              "outlet": 0,
              "switch": "off"
            }
          ],
          "white": {
            "br": 100,
            "ct": 42
          }
        }
      }
      

      Das ganze befindet sich aber im Objektbaum unter:

      Adapter.<DeviceID>.RESULT
      

      Geht das? Wenn ja, kann mir einer von Euch bitte sagen, wie das möglich wäre?

      DANKE !!!

      mickym 1 Reply Last reply Reply Quote 0
      • mickym
        mickym Most Active @Great SUN last edited by mickym

        @great-sun sagte in Überwachen in Objektbaum:

        Adapter.<DeviceID>.RESULT

        Wenn es darunter Datenpunkte gibt, machst Du ein Subscription auf alle Datenpunkte darunter:

        Adapter.<DeviceID>.RESULT.*
        

        Das was Du aber gepostet hast ist ein Objekt in dem Result, hier bekommst Du nur mit wenn sich das ganze Objekt geändert hat.

        Um aber einzelne Werte zu überwachen, dann musst Du das Objekt in einzelne Datenpunkte auftrennen.
        Wenn Du NodeRed nutzt habe ich dafür einen fertigen Subflow - ansonsten musst das halt selbst machen. Könntest - wenn Du es nicht selbst programmieren willst - Node Red nur für das Aufsplitten des Objektes verwenden und die Datenpunkte in Deiner Dir bevorzugten Logikmaschine weiterverarbeiten (JS oder Blockly).

        Great SUN 1 Reply Last reply Reply Quote 0
        • Great SUN
          Great SUN @mickym last edited by

          Hi nochmal an alle...

          Ich hab mich falsch ausgedrückt, wie es scheint...
          Den Objektbaum habe ich mangels alternativen als JSON dargestellt. Wenn ich den Objektbaum als JSON abziehen könnte via JavaScript und das resultierende JSON überwachen könnte, wäre das genial.
          Durch die Überwachung von allen Einzelpunkten bekomme ich bei zwei Änderungen im Objektbaum nämlich zwei Ausführungen, trotzdem ich eigentlich beide auf einmal abarbeiten wollen würde.

          Andere Frage, ähnliches Thema:
          In einem weiteren Objektbaum wird ein Objekt nur temporär angelegt. Ich würde aber gerne auf dieses Objekt reagieren, wenn es angelegt wird, bzw. wenn der Wert des angelegten Objektes geändert wird, oder es wieder entfernt wird. Gibt es dafür eine Option?
          Ich könnte mir natürlich vorstellen, dass ich das da genauso überwachen könnte, wenn ich das Problem mit dem Objektbaum als JSON überwachen gelöst bekäme...

          Bin für jede Idee dankbar!

          mickym T T 3 Replies Last reply Reply Quote 0
          • mickym
            mickym Most Active @Great SUN last edited by mickym

            @great-sun Wenn Du deinen Objektbaum einliest und ein JS Objekt erzeugst, kannst Du das doch über stringify in einem DP abspeichern. Wenn sich dieser String dann ändert - liest Du den DP wieder ein - wandelst es intern mit parse wieder in ein Objekt und verarbeitest es. - Aber wie gesagt - ich bin da nicht so drin, weil ich wie gesagt all solche Aufgaben mit NR löse, weil es einfach easy ist - aber gibt ja noch andere hier, die Dir gerne unter die Arme greifen und ggf. ein Skript für Dich erstellen.

            1 Reply Last reply Reply Quote 0
            • T
              Tyantreides @Great SUN last edited by Tyantreides

              @great-sun
              Du kannst fast jeden Datenpunkt im Objektbau via Subscriber überwachen lassen. Im Javascript Adapter ein neues Script anlegen und:

              on({id: 'adapter.instanz.Pfad.zu.deinem.datenpunkt', change: "ne"}, async function (obj) {
                  try { 
                      //wenn json drin ist:
                      let wert = JSON.parse(obj.state.val).wert;
                      //sonst:
                     let wert = obj.state.val;
                    //und hier was auch immer du dann als reaktion auf die Änderung tun möchtest
                   //setState('datenpunktpfad', wert)
                  } catch (e) {
                     return;
                  }
              });
              

              Beste Grüße
              Chris

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

                @great-sun sagte in Überwachen in Objektbaum:

                Andere Frage, ähnliches Thema:
                In einem weiteren Objektbaum wird ein Objekt nur temporär angelegt. Ich würde aber gerne auf dieses Objekt reagieren, wenn es angelegt wird, bzw. wenn der Wert des angelegten Objektes geändert wird, oder es wieder entfernt wird. Gibt es dafür eine Option?
                Ich könnte mir natürlich vorstellen, dass ich das da genauso überwachen könnte, wenn ich das Problem mit dem Objektbaum als JSON überwachen gelöst bekäme...

                Das reagieren auf erstellen und löschen ging nur über JSON.stringify() mit schedule. Ist zwar möglich das sie da etwas in letzter Zeit eingebaut haben, halte ich aber für unwahrscheinlich. Auf Änderungen von (noch) nicht existierenden Datenpunkten kannst du jedoch mit RegExp reagieren

                on(new RegExp(getRegEx('adapter.instanz.bla', '^')+'.*'), function(obj) {}
                

                Hab das aus einem Skript von mir, aktuell keine Ahnung wie RegEx nochmal funktioniert, muß ich immer nachlesen 🙂

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

                  @ticaki
                  die Funktion erzeugt eine neue Regular Expression, welche auf alle mit adapter.instanz.bla beginnenden Elemente anspringt.
                  Sprich Du erzeugst für diese Schnittmenge eine subscription und nicht nur für einen Datenpunkt.

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

                    @tyantreides
                    ich hab mich wohl falsch ausgedrückt. Ich weiß was es macht, aber in die Sprache um einen Regex String richtig zu schreiben muß ich mich erst einlesen. Mit Regex reagiert das Skript auch auf Datenpunkte die später hinzugefügt wurden.

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    546
                    Online

                    31.8k
                    Users

                    80.0k
                    Topics

                    1.3m
                    Posts

                    4
                    8
                    378
                    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