Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JS: wie Datenpunkte Unterstrukturen lesen?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    JS: wie Datenpunkte Unterstrukturen lesen?

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

      Hi,

      ich möchte bei all meinen Shelly Geräten die IDs auslesen (shelly.0.info.FOLDER.id), so dass ich hinterher die Datenpunkte shelly.0.abc.id, shelly.0.def.id usw auslesen kann.
      Wie mach ich das am Besten in Javascript?

      96b4d1ed-7acc-4ca2-a44b-d93526ac2125-image.png

      Hintergrund: ich will ein Script nicht immer dann anpassen, wenn ein neues Gerät dazu kommt - da es sich in die gleiche Ordnerstruktur einsortiert, will ich es dann direkt auslesen können.

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

        @maddm sagte: Datenpunkte shelly.0.abc.id, shelly.0.def.id usw

        Im Trigger mit RegExp.

        on(/^shelly\.0\..+\.id$/, function(dp) {
            log(dp.id);
        });
        

        Oder mit dem $Selector. Dann muss aber nach Hinzufügen eines Gerätes das Skript oder die JS-Instanz neu gestartet werden.

        M 1 Reply Last reply Reply Quote 1
        • M
          Maddm @paul53 last edited by Maddm

          @paul53
          Danke für die Antwort, aber ich verstehe sie (noch) nicht...
          Du hast geschrieben "im Trigger" - ich möchte das Auslesen aber nicht machen, wenn irgendwas triggert, sondern jede Stunde.
          Sprich: geh jede Stunde durch alle Devices durch, gibt die Datenpunkte .id und .power aus.

          Output wäre dazu:
          shelly.0.abc.id = 15, shelly.0.abc.power = 100
          shelly.0.efg.id = 16, shelly.0.efg.power = 120
          shelly.0.hij.id = 17, shelly.0.hij.power = 170

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

            @maddm sagte: jede Stunde durch alle Devices durch, gibt die Datenpunkte .id und .power aus.

            Das geht mittels $Selector.

            const ids = $('shelly.0.*.id');
            
            schedule('0 * * * *', function() {
                ids.each(function(id) {
                    const idPower = id.replace('.id', '.power');
                    log(id + ' = ' + getState(id).val + ', ' + idPower + ' = ' + getState(idPower).val);
                });
            });
            
            haus-automatisierung 1 Reply Last reply Reply Quote 0
            • haus-automatisierung
              haus-automatisierung Developer Most Active @paul53 last edited by

              @paul53 Am besten den Selektor mit in den Callback, dann werden auch neue Geräte gefunden

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @haus-automatisierung last edited by paul53

                @haus-automatisierung: den Selektor mit in den Callback, dann werden auch neue Geräte gefunden

                Sicher?

                Das sähe dann so aus:

                schedule('0 * * * *', function() {
                    $('shelly.0.*.id').each(function(id) {
                        const idPower = id.replace('.id', '.power');
                        log(id + ' = ' + getState(id).val + ', ' + idPower + ' = ' + getState(idPower).val);
                    });
                });
                
                haus-automatisierung 1 Reply Last reply Reply Quote 3
                • haus-automatisierung
                  haus-automatisierung Developer Most Active @paul53 last edited by

                  @paul53 Klar dann wird der Selektor ja jedes mal neu ausgewertet

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @haus-automatisierung last edited by

                    @haus-automatisierung sagte: Klar dann wird der Selektor ja jedes mal neu ausgewertet

                    Nach meiner Erfahrung holt sich der Selektor die IDs aus dem Puffer der JS-Instanz. Ist der Puffer zu jeder Zeit aktuell?

                    haus-automatisierung 1 Reply Last reply Reply Quote 0
                    • haus-automatisierung
                      haus-automatisierung Developer Most Active @paul53 last edited by

                      @paul53 Ja der hat ja Subscriptions auf alle States und Objekte um das aktuell zu halten

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @haus-automatisierung last edited by paul53

                        @haus-automatisierung sagte: Ja der hat ja Subscriptions auf alle States und Objekte

                        Gerade getestet: Funktioniert.

                        EDIT: Früher hat es nicht funktioniert. Es musste erst die JS-Instanz neu gestartet werden, um neue Objekte / Zustände einzulesen, die nicht durch den Javascript-Adapter selbst erzeugt wurden.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        551
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

                        3
                        10
                        353
                        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