Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. "Alle" Objekte aus Baum abfragen bei Stateänderung

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    "Alle" Objekte aus Baum abfragen bei Stateänderung

    This topic has been deleted. Only users with topic management privileges can see it.
    • Codierknecht
      Codierknecht Developer Most Active @maniac last edited by 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 2 Replies Last reply Reply Quote 1
      • M
        maniac @Codierknecht last edited by

        @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 Codierknecht 2 Replies Last reply Reply Quote 0
        • M
          maniac @Codierknecht last edited by

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

          1 Reply Last reply Reply Quote 0
          • M
            maniac @maniac last edited by

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

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

              @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 1 Reply Last reply Reply Quote 1
              • M
                maniac @Codierknecht last edited by

                @codierknecht Funktioniert einwandfrei wenn man es begriffen hat 😀
                Vielen Dank

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

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

                  Der wird im Trigger als Kanalname geliefert.

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    maniac @paul53 last edited by 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 😉

                    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.

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

                      @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 1 Reply Last reply Reply Quote 1
                      • M
                        maniac @Codierknecht last edited by

                        @codierknecht

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

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

                        paul53 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @maniac last edited by 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 2 Replies Last reply Reply Quote 1
                          • M
                            maniac @paul53 last edited by

                            @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 😇
                            Oder wäre gar irgendwie HTML möglich zur Formatierung? (Wunschdenken... 😉 )

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

                              @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

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

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

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                529
                                Online

                                31.7k
                                Users

                                79.8k
                                Topics

                                1.3m
                                Posts

                                3
                                15
                                526
                                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