Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Trigger wenn neues SubObjekt angelegt wurde?

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Trigger wenn neues SubObjekt angelegt wurde?

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

      @paul53 sagte in Trigger wenn neues SubObjekt angelegt wurde?:

      Trigger mit RegExp-ID

      Ich bin bisher davon ausgegangen, dass der reguläre Ausdruck nur zum Zeitpunkt des Abonniervorgangs aufgelöst wird und nicht laufend hinterher. Ist diese Annahme denn falsch? Falls nein, würden ja hinterher angelegte Objekte nicht mit einbezogen werden.

      paul53 Codierknecht 2 Replies Last reply Reply Quote 0
      • hsteinme
        hsteinme @paul53 last edited by

        @paul53 sagte in Trigger wenn neues SubObjekt angelegt wurde?:

        Trigger mit RegExp-ID

        Ich habe noch gut Deinen Kommentar hier im Hinterkopf.

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

          @hsteinme sagte: Ist diese Annahme denn falsch?

          Teste es.

          @hsteinme sagte in Trigger wenn neues SubObjekt angelegt wurde?:

          Ich habe noch gut Deinen Kommentar hier im Hinterkopf.

          Dort ging es um gelöschte Objekte. Gelöschte Datenpunkte triggern nicht mehr.

          hsteinme 1 Reply Last reply Reply Quote 0
          • Codierknecht
            Codierknecht Developer Most Active @hsteinme last edited by Codierknecht

            @hsteinme

            Ich bin bisher davon ausgegangen, dass der reguläre Ausdruck nur zum Zeitpunkt des Abonniervorgangs aufgelöst wird und nicht laufend hinterher

            Wenn man auf die einzelnen Clients triggern will, hast Du wohl Recht.
            Triggert man allerdings auf die Anzahl Clients je Kanal/SSID, sollte das funktionieren.
            Wenn die sich ändert, wurde ein Gerät an- oder abgemeldet.
            Wenn man dann durch ein Array mit den Clients eiert, findet man das neue Gerät.
            Über die Anzahl allein kann man ein neues Gerät natürlich nicht finden. Die ändert sich ja z.B. auch, wenn sich ein Gerät aus dem Netz verabschiedet (Haus verlassen) oder wieder anmeldet (kommt nach Hause).
            Man könnte aber z.B. "first_seen" heranziehen, um ein neues Gerät zu finden.

            Edit
            Man könnte aber auch auf unifi.0.default.devices.12:34:56:78:90:ab.user-num_sta triggern.

            Edit 2
            Nur so als Idee - ungetestet:

            on({id:'unifi.0.default.devices.74:83:c2:cc:58:7d.user-num_sta', change: 'ne' }, async function(obj) {
              const value = obj.state.val;
              const oldValue = obj.oldState.val;
              if (value > oldValue) {
                var id, dp;
                const clients = Array.prototype.slice.apply($('unifi.0.default.clients.*.mac'));
                clients.each(function(client) {
                  id = 'unifi.0.default.clients.' + client;
                  dp = id + '.first_seen';
                  console.info(id + ': ' + getState(dp).val);
                })
              }
            });
            

            Getriggert wird auf die Anzahl.
            Wird die größer, guckt man auf first_seen.
            Müsste noch überprüft werden, aber ich denke, dass bei einem neuen Gerät first_seen und last_seen gleich sind. Dann könnte man eine Meldung absetzen nach dem Motto "Neues Gerät im WLAN entdeckt!".

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

              @paul53 sagte in Trigger wenn neues SubObjekt angelegt wurde?:

              Teste es.

              Mein Ausgangspunkt:

              0_userdata.0.0_MyFolder
              0_userdata.0.0_MyFolder.MyStateA
              0_userdata.0.0_MyFolder.MyStateB
              

              Mein Skript:

              on({id: /^0_userdata\.0\.0_MyFolder\..+/}, function(dp) {
                  log('dp.id: ' + dp.id + '   dp.state.val: ' + dp.state.val);
              });
              

              Meine Testergebnisse:

              • Änderung eines bestehenden Datenpunktes:
                Abonnement schlägt zu
              • Anlage eines neuen Datenpunktes im Objekte-Tab:
                Abonnement schlägt nicht zu
              • Anlage eines neuen Datenpunktes per Skript:
                Abonnement schlägt zu

              Danke, Paul! Wieder was gelernt ...

              @paul53 sagte in Trigger wenn neues SubObjekt angelegt wurde?:

              Dort ging es um gelöschte Objekte.

              Das Missverständnis, dass es nur um gelöschte Objekte geht, konnte ich Dir damals schon nicht ausreden 😞

              @codierknecht sagte in Trigger wenn neues SubObjekt angelegt wurde?:

              Triggert man allerdings auf die Anzahl Clients je Kanal/SSID, sollte das funktionieren.

              Danke für Dein ausführliches Statement. Dein Lösungsansatz ist spezifisch für den unifi-Adapter und kann somit für @adarof hilfreich sein. Er kann aber nicht auf beliebige Objekt-Bäumchen angewandt werden.

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

                @hsteinme sagte: Anlage eines neuen Datenpunktes im Objekte-Tab:
                Abonnement schlägt nicht zu

                Richtig, schlägt erst zu, wenn der Zeitstempel anschließend aktualisiert wird (Wert nicht mehr orange).

                @hsteinme sagte in Trigger wenn neues SubObjekt angelegt wurde?:

                Anlage eines neuen Datenpunktes per Skript:
                Abonnement schlägt zu

                Das sollte auch bei Anlage eines neuen Datenpunktes durch eine beliebige Adapter-Instanz zutreffen, wenn nach Neuanlage der Wert nicht orange angezeigt wird.

                1 Reply Last reply Reply Quote 0
                • A
                  adarof @Codierknecht last edited by

                  @codierknecht Das ist sicher ne gute Idee. Leider hab ich 3 APs und müsste den Code dann ja für jeden AP einmal laufen lassen. Klar .. nicht schlimm. ABER: Ich wollte doch was über ioBroker generell lernen! 🙂
                  Ich probiere also mal den Iteratoransatz, der in den anderne Beiträgen diskutiert wurde. Melde mich dazu.

                  1 Reply Last reply Reply Quote 0
                  • A
                    adarof last edited by adarof

                    Ich habe das nun erstmal so gelöst - das tut wunderbar

                    const wlanids = Array.prototype.slice.apply($('unifi.0.default.clients.*.mac'));
                    log('wlanids init:'+wlanids);
                    
                    on({id: /^unifi\.0\.default\.clients\..+\.mac$/}, function(dp) {
                        log('called with device MAC: ' + dp.state.val);
                        if(!wlanids.includes(dp.id)) {
                            wlanids.push(dp.id);
                    
                        sendTo('email', 'send', {
                          text: 'Neues Netzwerk Gerät gefunden:'+dp.state.val,
                          to: 'XXXX',
                          subject: 'Neues Netzwerk Gerät gefunden'+dp.state.val,
                        });
                        } else {
                            log('ignoring - already known');
                        }
                    });
                    

                    Damit

                    • speichere ich also die Datenpunkt-Namen (unifi.0.default.clients.XX:XX:XX:XX:XX:XX.mac) in dem Array wlanids
                    • lasse mich aufrufen, wenn soetwas neu existiert
                    • vergleiche mit dem Inhalt des Arrays und sende ggf eine eMail mit der MAC adresse.

                    Testen kann man das indem man

                    1. ein aktuell gerade existierendes Gerät im unifi.0.default.clients.* löscht
                    2. Das Script neu startet (damit der wlanids Array das gelöschte Gerät auch vergisst)
                    3. Den Unify Adapter neu startet - nach wenigen Sekunden wird das Skript mit dem "neuen" Gerät aufgerufen.

                    DANKESCHÖN AN ALLE 😀

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

                      @adarof sagte: so gelöst

                      Zeile 2 funktioniert? Wenn nicht, dann ändere in

                      log('wlanids init: ' + JSON.stringify(wlanids));
                      
                      A 1 Reply Last reply Reply Quote 0
                      • A
                        adarof @paul53 last edited by

                        @paul53 Danke - tut so als "CSV":

                        script.js.common.WLAN-NewDeviceNotify: wlanids init:unifi.0.default.clients.XX:XX:XX:XX:XX:XX.mac,unifi.0.default.clients.YY:YY:YY:YY:YY:YY.mac, ...
                        
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        1.0k
                        Online

                        31.6k
                        Users

                        79.4k
                        Topics

                        1.3m
                        Posts

                        4
                        12
                        388
                        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