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. "Alle" Objekte aus Baum abfragen bei Stateänderung

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    989

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

"Alle" Objekte aus Baum abfragen bei Stateänderung

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
15 Beiträge 3 Kommentatoren 1.1k Aufrufe 3 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.
  • M Offline
    M Offline
    maniac
    schrieb am zuletzt editiert von maniac
    #1

    Moin zusammen.

    Ich würde gerne die States bei Änderung von "allen" Objekten in einem Ordner überwachen und dann eine Telegram Nachricht bekommen.

    Speziell geht es um den Unifi Ordner Clients.

    e38b200e-bb14-44ca-8420-a35a2e2ed2cf-grafik.png

    Hier sind diverse Clients aufgeführt.

    Nun möchte ich wenn z.B. das NAS offline geht eine Telegram Meldung bekommen.
    Es soll also der Datenpunkt is_online ausgewertet werden. Dann möchte ich aber gerne in der Telegram Meldung den Namen sehen. In diesem Fall FFL-NAS

    Bisher mache ich das von Hand in den Telegram Einstellungen, was sehr aufwendig ist.

    f05a9d97-f43e-4653-a7a4-cfe0f8a327b5-grafik.png

    Das funktioniert zwar soweit, aber da sich die Geräte sehr dynamisch ändern, würde ich gerne den State is_online im gesamten Ordner auswerten und egal welcher Client sich an-/abmeldet eine Telegram bekommen mit dem Namen des Client.

    Als Beispiel nochmal, es wird ein neuer Drucker installiert, dieser wird im Unifi-Controller "Drucker0815" genannt. Wenn dieser nun online geht, soll eine Telegram mit Drucker0815 ist online oder so ähnlich erfolgen.

    Ist das irgendwie mit Blockly möglich?

    Gruß Frank…

    CodierknechtC paul53P 2 Antworten Letzte Antwort
    0
    • M maniac

      Moin zusammen.

      Ich würde gerne die States bei Änderung von "allen" Objekten in einem Ordner überwachen und dann eine Telegram Nachricht bekommen.

      Speziell geht es um den Unifi Ordner Clients.

      e38b200e-bb14-44ca-8420-a35a2e2ed2cf-grafik.png

      Hier sind diverse Clients aufgeführt.

      Nun möchte ich wenn z.B. das NAS offline geht eine Telegram Meldung bekommen.
      Es soll also der Datenpunkt is_online ausgewertet werden. Dann möchte ich aber gerne in der Telegram Meldung den Namen sehen. In diesem Fall FFL-NAS

      Bisher mache ich das von Hand in den Telegram Einstellungen, was sehr aufwendig ist.

      f05a9d97-f43e-4653-a7a4-cfe0f8a327b5-grafik.png

      Das funktioniert zwar soweit, aber da sich die Geräte sehr dynamisch ändern, würde ich gerne den State is_online im gesamten Ordner auswerten und egal welcher Client sich an-/abmeldet eine Telegram bekommen mit dem Namen des Client.

      Als Beispiel nochmal, es wird ein neuer Drucker installiert, dieser wird im Unifi-Controller "Drucker0815" genannt. Wenn dieser nun online geht, soll eine Telegram mit Drucker0815 ist online oder so ähnlich erfolgen.

      Ist das irgendwie mit Blockly möglich?

      CodierknechtC Online
      CodierknechtC Online
      Codierknecht
      Developer Most Active
      schrieb am zuletzt editiert von Codierknecht
      #2

      @maniac
      Im Prinzip nach diesem Muster:

      350a8716-eac3-4f94-8fc7-0e01b40ee69c-image.png

      Die JavaScript-Funktion ist denkbar einfach:

      return text.replace(oldText, newText);
      

      Edit:
      Allerdings findest Du damit noch keine neuen Geräte, da die Liste der zu überwachenden Objekte (der Selektor) beim Start des Script erzeugt wird.

      Edit2:
      Dir ist aber schon klar, dass die Liste ggf. seeeeehr lang werden kann?
      Besser wäre hier, mit einer Aufzählung zu arbeiten und nur bestimmte Geräte zu überwachen.

      "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

      M 2 Antworten Letzte Antwort
      1
      • CodierknechtC Codierknecht

        @maniac
        Im Prinzip nach diesem Muster:

        350a8716-eac3-4f94-8fc7-0e01b40ee69c-image.png

        Die JavaScript-Funktion ist denkbar einfach:

        return text.replace(oldText, newText);
        

        Edit:
        Allerdings findest Du damit noch keine neuen Geräte, da die Liste der zu überwachenden Objekte (der Selektor) beim Start des Script erzeugt wird.

        Edit2:
        Dir ist aber schon klar, dass die Liste ggf. seeeeehr lang werden kann?
        Besser wäre hier, mit einer Aufzählung zu arbeiten und nur bestimmte Geräte zu überwachen.

        M Offline
        M Offline
        maniac
        schrieb am zuletzt editiert von
        #3

        @codierknecht
        Danke, wie komme ich an den Block ran?
        76223fe7-41e5-4cc2-81a6-faf2bb3e1f50-grafik.png

        Device und Client sind Variablen denke ich? Wie wird Client gefüllt?

        Bisher habe ich es so.

        c999aa07-a8f0-4603-ab29-2d3308e93b1f-grafik.png

        Gruß Frank…

        M CodierknechtC 2 Antworten Letzte Antwort
        0
        • CodierknechtC Codierknecht

          @maniac
          Im Prinzip nach diesem Muster:

          350a8716-eac3-4f94-8fc7-0e01b40ee69c-image.png

          Die JavaScript-Funktion ist denkbar einfach:

          return text.replace(oldText, newText);
          

          Edit:
          Allerdings findest Du damit noch keine neuen Geräte, da die Liste der zu überwachenden Objekte (der Selektor) beim Start des Script erzeugt wird.

          Edit2:
          Dir ist aber schon klar, dass die Liste ggf. seeeeehr lang werden kann?
          Besser wäre hier, mit einer Aufzählung zu arbeiten und nur bestimmte Geräte zu überwachen.

          M Offline
          M Offline
          maniac
          schrieb am zuletzt editiert von
          #4

          @codierknecht sagte in "Alle" Objekte aus Baum abfragen bei Stateänderung:

          Edit:
          Allerdings findest Du damit noch keine neuen Geräte, da die Liste der zu überwachenden Objekte (der Selektor) beim Start des Script erzeugt wird.

          Das könnte ich ja lösen indem ich das einmal am Tag neu starte?

          Edit2:
          Dir ist aber schon klar, dass die Liste ggf. seeeeehr lang werden kann?
          Besser wäre hier, mit einer Aufzählung zu arbeiten und nur bestimmte Geräte zu überwachen.

          Wie würde das mit der Aufzählung funktionieren?

          Gruß Frank…

          1 Antwort Letzte Antwort
          0
          • M maniac

            @codierknecht
            Danke, wie komme ich an den Block ran?
            76223fe7-41e5-4cc2-81a6-faf2bb3e1f50-grafik.png

            Device und Client sind Variablen denke ich? Wie wird Client gefüllt?

            Bisher habe ich es so.

            c999aa07-a8f0-4603-ab29-2d3308e93b1f-grafik.png

            M Offline
            M Offline
            maniac
            schrieb am zuletzt editiert von
            #5

            @maniac sagte in "Alle" Objekte aus Baum abfragen bei Stateänderung:

            @codierknecht
            Danke, wie komme ich an den Block ran?
            76223fe7-41e5-4cc2-81a6-faf2bb3e1f50-grafik.png

            Hab es hinbekommen.

            9497f0d1-e7be-4170-99b6-820024f7b0c0-grafik.png

            Device und Client sind Variablen denke ich? Wie wird Client gefüllt?

            Client ist ja gar nicht nötig. Device reicht ja als Name.

            Gruß Frank…

            1 Antwort Letzte Antwort
            0
            • M maniac

              @codierknecht
              Danke, wie komme ich an den Block ran?
              76223fe7-41e5-4cc2-81a6-faf2bb3e1f50-grafik.png

              Device und Client sind Variablen denke ich? Wie wird Client gefüllt?

              Bisher habe ich es so.

              c999aa07-a8f0-4603-ab29-2d3308e93b1f-grafik.png

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

              @maniac sagte in "Alle" Objekte aus Baum abfragen bei Stateänderung:

              Wie wird Client gefüllt?

              Überbleibsel aus einem Test. Hat da nix zu suchen :-(

              wie komme ich an den Block ran?

              Indem Du Dir eine "JS-Funktion mit Ergebnis" baust, die die passenden Parameter entgegennimmt.

              Das könnte ich ja lösen indem ich das einmal am Tag neu starte?

              Dann müsstest Du Dir eine Liste der Geräte irgendwo vorhalten und beim Neustart abgleichen, ob neue hinzugekommen sind. Das wird dann schon ordentlich aufwändig.

              Wie würde das mit der Aufzählung funktionieren?

              Im Prinzip so:
              68156b3a-2cbe-4c44-95c9-9fc8473aa635-image.png

              3d8caa24-b816-4a90-9759-79efbe159107-image.png

              In der Aufzählung sind hier alle Geräte enthalten, die mich interessieren (hier: die Handys der Bewohner).
              Der Trigger feuert nur dann, wenn eines dieser Geräte seinen Status ändert.

              "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

              M 1 Antwort Letzte Antwort
              1
              • CodierknechtC Codierknecht

                @maniac sagte in "Alle" Objekte aus Baum abfragen bei Stateänderung:

                Wie wird Client gefüllt?

                Überbleibsel aus einem Test. Hat da nix zu suchen :-(

                wie komme ich an den Block ran?

                Indem Du Dir eine "JS-Funktion mit Ergebnis" baust, die die passenden Parameter entgegennimmt.

                Das könnte ich ja lösen indem ich das einmal am Tag neu starte?

                Dann müsstest Du Dir eine Liste der Geräte irgendwo vorhalten und beim Neustart abgleichen, ob neue hinzugekommen sind. Das wird dann schon ordentlich aufwändig.

                Wie würde das mit der Aufzählung funktionieren?

                Im Prinzip so:
                68156b3a-2cbe-4c44-95c9-9fc8473aa635-image.png

                3d8caa24-b816-4a90-9759-79efbe159107-image.png

                In der Aufzählung sind hier alle Geräte enthalten, die mich interessieren (hier: die Handys der Bewohner).
                Der Trigger feuert nur dann, wenn eines dieser Geräte seinen Status ändert.

                M Offline
                M Offline
                maniac
                schrieb am zuletzt editiert von
                #7

                @codierknecht Funktioniert einwandfrei wenn man es begriffen hat :grinning:
                Vielen Dank

                Gruß Frank…

                1 Antwort Letzte Antwort
                0
                • M maniac

                  Moin zusammen.

                  Ich würde gerne die States bei Änderung von "allen" Objekten in einem Ordner überwachen und dann eine Telegram Nachricht bekommen.

                  Speziell geht es um den Unifi Ordner Clients.

                  e38b200e-bb14-44ca-8420-a35a2e2ed2cf-grafik.png

                  Hier sind diverse Clients aufgeführt.

                  Nun möchte ich wenn z.B. das NAS offline geht eine Telegram Meldung bekommen.
                  Es soll also der Datenpunkt is_online ausgewertet werden. Dann möchte ich aber gerne in der Telegram Meldung den Namen sehen. In diesem Fall FFL-NAS

                  Bisher mache ich das von Hand in den Telegram Einstellungen, was sehr aufwendig ist.

                  f05a9d97-f43e-4653-a7a4-cfe0f8a327b5-grafik.png

                  Das funktioniert zwar soweit, aber da sich die Geräte sehr dynamisch ändern, würde ich gerne den State is_online im gesamten Ordner auswerten und egal welcher Client sich an-/abmeldet eine Telegram bekommen mit dem Namen des Client.

                  Als Beispiel nochmal, es wird ein neuer Drucker installiert, dieser wird im Unifi-Controller "Drucker0815" genannt. Wenn dieser nun online geht, soll eine Telegram mit Drucker0815 ist online oder so ähnlich erfolgen.

                  Ist das irgendwie mit Blockly möglich?

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

                  @maniac sagte: Namen sehen. In diesem Fall FFL-NAS

                  Der wird im Trigger als Kanalname geliefert.

                  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

                  M 1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @maniac sagte: Namen sehen. In diesem Fall FFL-NAS

                    Der wird im Trigger als Kanalname geliefert.

                    M Offline
                    M Offline
                    maniac
                    schrieb am zuletzt editiert von maniac
                    #9

                    @paul53 sagte in "Alle" Objekte aus Baum abfragen bei Stateänderung:

                    @maniac sagte: Namen sehen. In diesem Fall FFL-NAS

                    Der wird im Trigger als Kanalname geliefert.

                    Ja, hast Du Recht in dem Fall, aber es ist oft so, das im Kanalnamen nur eine IP steht wenn der Client noch nicht konfiguriert ist. Da ist der Hostname dann meist sinnvoller.
                    Es ging mir auch mehr um die Funktion alle States auf einmal zu "überwachen".
                    Bisher hatte ich ja jeden Client manuell mit Telegram konfiguriert.

                    Aber wo wir gerade dabei sind :wink:

                    Jetzt geht es weiter.

                    Wie kann ich jetzt aus allen Clients die online sind eine Liste generieren?

                    Ich habe da was mit cacheselektor gefunden, aber Javascript habe ich nun gar keinen Schimmer.
                    Ist da auch was in Blockly möglich?

                    Praktisch so: Selektiere alle Online clients und gebe den Namen und Status in eine Liste.

                    Gruß Frank…

                    CodierknechtC 1 Antwort Letzte Antwort
                    0
                    • M maniac

                      @paul53 sagte in "Alle" Objekte aus Baum abfragen bei Stateänderung:

                      @maniac sagte: Namen sehen. In diesem Fall FFL-NAS

                      Der wird im Trigger als Kanalname geliefert.

                      Ja, hast Du Recht in dem Fall, aber es ist oft so, das im Kanalnamen nur eine IP steht wenn der Client noch nicht konfiguriert ist. Da ist der Hostname dann meist sinnvoller.
                      Es ging mir auch mehr um die Funktion alle States auf einmal zu "überwachen".
                      Bisher hatte ich ja jeden Client manuell mit Telegram konfiguriert.

                      Aber wo wir gerade dabei sind :wink:

                      Jetzt geht es weiter.

                      Wie kann ich jetzt aus allen Clients die online sind eine Liste generieren?

                      Ich habe da was mit cacheselektor gefunden, aber Javascript habe ich nun gar keinen Schimmer.
                      Ist da auch was in Blockly möglich?

                      Praktisch so: Selektiere alle Online clients und gebe den Namen und Status in eine Liste.

                      CodierknechtC Online
                      CodierknechtC Online
                      Codierknecht
                      Developer Most Active
                      schrieb am zuletzt editiert von
                      #10

                      @maniac sagte in "Alle" Objekte aus Baum abfragen bei Stateänderung:

                      Praktisch so: Selektiere alle Online clients und gebe den Namen und Status in eine Liste.

                      Du baust Dir einfach eine weitere Liste.
                      Da ich zu bequem bin, das Ganze nochmal komplett zu bauen, hier nur das Prinzip:
                      b76742b9-779e-4edf-a12e-782d1c60616d-image.png

                      "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

                      M 1 Antwort Letzte Antwort
                      1
                      • CodierknechtC Codierknecht

                        @maniac sagte in "Alle" Objekte aus Baum abfragen bei Stateänderung:

                        Praktisch so: Selektiere alle Online clients und gebe den Namen und Status in eine Liste.

                        Du baust Dir einfach eine weitere Liste.
                        Da ich zu bequem bin, das Ganze nochmal komplett zu bauen, hier nur das Prinzip:
                        b76742b9-779e-4edf-a12e-782d1c60616d-image.png

                        M Offline
                        M Offline
                        maniac
                        schrieb am zuletzt editiert von
                        #11

                        @codierknecht

                        278ccb74-9ba1-494a-bd29-0ce1a20dd15d-grafik.png

                        So hab ich jetzt mal nachgebaut.
                        Passiert aber nix weiter.
                        Liste ist anscheinend leer. :confused:

                        Gruß Frank…

                        paul53P 1 Antwort Letzte Antwort
                        0
                        • M maniac

                          @codierknecht

                          278ccb74-9ba1-494a-bd29-0ce1a20dd15d-grafik.png

                          So hab ich jetzt mal nachgebaut.
                          Passiert aber nix weiter.
                          Liste ist anscheinend leer. :confused:

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

                          @maniac

                          Versuche mal:

                          Blockly_temp.JPG

                          Es muss sich erst ein Datenpunktwert "is_online" ändern, damit getriggert wird.

                          id = id.replace('is_online', 'hostname');
                          return getState(id).val;
                          

                          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

                          M 2 Antworten Letzte Antwort
                          1
                          • paul53P paul53

                            @maniac

                            Versuche mal:

                            Blockly_temp.JPG

                            Es muss sich erst ein Datenpunktwert "is_online" ändern, damit getriggert wird.

                            id = id.replace('is_online', 'hostname');
                            return getState(id).val;
                            
                            M Offline
                            M Offline
                            maniac
                            schrieb am zuletzt editiert von
                            #13

                            @paul53 Made my Day...

                            Das klappt soweit, vielen Dank.

                            Nun muesste das noch übersichtlicher werden, im Moment kommt es in Telegram so an:

                            Client1,Client2,Client3,Client4,Client5,Client6,Client7 usw.
                            In Telegram ist nur ein Komma dazwischen was natürlich recht unübersichtlich ist.

                            Gibt das Möglichkeiten in die Formatierung einzugreifen? z.B. nach jedem Client ein "return"?
                            Mit ´\n´ als Trennzeichen geht es nicht :innocent:
                            Oder wäre gar irgendwie HTML möglich zur Formatierung? (Wunschdenken... :wink: )

                            Gruß Frank…

                            1 Antwort Letzte Antwort
                            0
                            • paul53P paul53

                              @maniac

                              Versuche mal:

                              Blockly_temp.JPG

                              Es muss sich erst ein Datenpunktwert "is_online" ändern, damit getriggert wird.

                              id = id.replace('is_online', 'hostname');
                              return getState(id).val;
                              
                              M Offline
                              M Offline
                              maniac
                              schrieb am zuletzt editiert von
                              #14

                              @paul53
                              Und nochmal eine Verständnisfrage.

                              Diese Funktion wählt alle Datenpunkte aus die "true" sind?
                              Könnte man dann auch überall nutzen? Bei Licht z.B. alle eingeschalteten Lampen wählen? (Sofern die ID der Lampen "gleich" ist)

                              48c433b7-c3fb-46b6-8884-b135e01594f4-grafik.png

                              Gruß Frank…

                              paul53P 1 Antwort Letzte Antwort
                              0
                              • M maniac

                                @paul53
                                Und nochmal eine Verständnisfrage.

                                Diese Funktion wählt alle Datenpunkte aus die "true" sind?
                                Könnte man dann auch überall nutzen? Bei Licht z.B. alle eingeschalteten Lampen wählen? (Sofern die ID der Lampen "gleich" ist)

                                48c433b7-c3fb-46b6-8884-b135e01594f4-grafik.png

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

                                @maniac sagte: Diese Funktion wählt alle Datenpunkte aus die "true" sind?

                                Nein, es werden alle Datenpunkte ausgewählt, deren ID "unify.0.defaults.clients." und ".is_online" enthält. "falls Wert von id" filtert die Datenpunkte, deren Wert true ist.

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


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                397

                                Online

                                32.6k

                                Benutzer

                                82.3k

                                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