Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Trigger wenn neues SubObjekt angelegt wurde?

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

Trigger wenn neues SubObjekt angelegt wurde?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
12 Beiträge 4 Kommentatoren 773 Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • paul53P paul53

    @adarof sagte: einen einsteigspunkt?

    Trigger mit RegExp-ID, etwa so:

    const ids = Array.prototype.slice.apply($('unifi.0.default.clients.*.essid'));
    
    on({id: /^unifi\.0\.default\.clients\..+\.essid$/}, function(dp) {
        if(!ids.includes(dp.id)) {
            ids.push(dp.id);
            // Nachricht über neue ID
        }
    });
    
    hsteinmeH Online
    hsteinmeH Online
    hsteinme
    schrieb am zuletzt editiert von
    #3

    @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.

    paul53P CodierknechtC 2 Antworten Letzte Antwort
    0
    • paul53P paul53

      @adarof sagte: einen einsteigspunkt?

      Trigger mit RegExp-ID, etwa so:

      const ids = Array.prototype.slice.apply($('unifi.0.default.clients.*.essid'));
      
      on({id: /^unifi\.0\.default\.clients\..+\.essid$/}, function(dp) {
          if(!ids.includes(dp.id)) {
              ids.push(dp.id);
              // Nachricht über neue ID
          }
      });
      
      hsteinmeH Online
      hsteinmeH Online
      hsteinme
      schrieb am zuletzt editiert von
      #4

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

      Trigger mit RegExp-ID

      Ich habe noch gut Deinen Kommentar hier im Hinterkopf.

      1 Antwort Letzte Antwort
      0
      • hsteinmeH hsteinme

        @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.

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von paul53
        #5

        @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.

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        hsteinmeH 1 Antwort Letzte Antwort
        0
        • hsteinmeH hsteinme

          @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.

          CodierknechtC Offline
          CodierknechtC Offline
          Codierknecht
          Developer Most Active
          schrieb am zuletzt editiert von Codierknecht
          #6

          @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!".

          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

          Proxmox 9.1.1 LXC|8 GB|Core i7-6700
          HmIP|ZigBee|Tasmota|Unifi
          Zabbix Certified Specialist
          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

          A 1 Antwort Letzte Antwort
          0
          • paul53P 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.

            hsteinmeH Online
            hsteinmeH Online
            hsteinme
            schrieb am zuletzt editiert von
            #7

            @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 :disappointed:

            @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.

            paul53P 1 Antwort Letzte Antwort
            0
            • hsteinmeH hsteinme

              @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 :disappointed:

              @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.

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von paul53
              #8

              @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.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Antwort Letzte Antwort
              0
              • CodierknechtC 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 Offline
                A Offline
                adarof
                schrieb am zuletzt editiert von
                #9

                @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 Antwort Letzte Antwort
                0
                • A Offline
                  A Offline
                  adarof
                  schrieb am zuletzt editiert von adarof
                  #10

                  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 :grinning:

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • A 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 :grinning:

                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #11

                    @adarof sagte: so gelöst

                    Zeile 2 funktioniert? Wenn nicht, dann ändere in

                    log('wlanids init: ' + JSON.stringify(wlanids));
                    

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    A 1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @adarof sagte: so gelöst

                      Zeile 2 funktioniert? Wenn nicht, dann ändere in

                      log('wlanids init: ' + JSON.stringify(wlanids));
                      
                      A Offline
                      A Offline
                      adarof
                      schrieb am zuletzt editiert von
                      #12

                      @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 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      853

                      Online

                      32.4k

                      Benutzer

                      81.6k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe