Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. ["GELÖST"] Variable über Funktion erstellen?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    ["GELÖST"] Variable über Funktion erstellen?

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

      @newpicsel sagte: wieder als ObjektID in den trigger bekommen

      Da ich annehme, dass die Datenpunkte in einer bestimmten ID-Struktur vorliegen, kann man einen RegExp zum Triggern verwenden. Ein solcher Trigger reagiert auch auf Datenpunkte, die zum Zeitpunkt des Skriptstarts noch nicht vorhanden waren.

      @newpicsel sagte in Variable variablen! Variable über Funktion erstellen?:

      welche ObjektID denn tatsächlich nun der Auslöser war.

      Das kann per Objekt ID im Trigger abgefragt werden.

      Newpicsel 1 Reply Last reply Reply Quote 1
      • Newpicsel
        Newpicsel @paul53 last edited by Newpicsel

        @paul53 said in Variable variablen! Variable über Funktion erstellen?:

        Da ich annehme, dass die Datenpunkte in einer bestimmten ID-Struktur vorliegen, kann man einen RegExp zum Triggern verwenden. Ein solcher Trigger reagiert auch auf Datenpunkte, die zum Zeitpunkt des Skriptstarts noch nicht vorhanden waren.

        Ok, sehr interessant, dass schaue ich mir definitiv an! Vielen Dank 👍

        @newpicsel sagte in Variable variablen! Variable über Funktion erstellen?:

        welche ObjektID denn tatsächlich nun der Auslöser war.

        Das kann per Objekt ID im Trigger abgefragt werden.

        Auch wenn ich im trigger die objektID von z.B. einer JSON Liste, die ObjektIDs enthält angebe?
        Ich wüsste nicht, wie ich sonst eine solche Liste dem trigger zuweisen könnte!? 😅

        EDIT: Oder meinst in Verbindung mit dem RegExp?
        Damit kenne ich mich nicht aus, aber schaue ich mir wie gesagt gleich mal genauer an…

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

          @newpicsel
          Objekt ID enthält immer die ID des gerade auslösenden Datenpunktes, egal ob an den Trigger eine einzelne ID, eine Liste von IDs oder ein RegExp übergeben wurde.

          @newpicsel sagte in Variable variablen! Variable über Funktion erstellen?:

          JSON Liste, die ObjektIDs enthält angebe?

          Zeigen!

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

            @paul53

            Ach ich kann auch direkt eine Liste an den trigger setzen? 😂👍 hatte ich ehrlich gesagt nie getestet.
            Ich hatte angenommen, dass dieser immer direkt eine ID benötigt.

            Vielen vielen Dank 🙏

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

              @newpicsel sagte: eine Liste an den trigger setzen?

              Ja, aber die Liste wird bei Skriptstart übergeben und kann nur die Datenpunkt-IDs enthalten, die zu diesem Zeitpunkt bekannt sind.

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

                @paul53 said in Variable variablen! Variable über Funktion erstellen?:

                @newpicsel sagte in Variable variablen! Variable über Funktion erstellen?:

                JSON Liste, die ObjektIDs enthält angebe?

                Zeigen!

                Ich habe so etwas aktuell nicht 😅

                Da ich vermutet habe ich könne nur IDs an den trigger setzen, bin ich davon ausgegangen die Liste in einen Datenpunkt zu schreiben und diesen dann triggern.
                Eben genau dass dieses eigentlich nicht funktionieren kann (meines Wissens) hatte ich nochmal nachgefragt…

                Genau deshalb die Aussage:
                @newpicsel said in Variable variablen! Variable über Funktion erstellen?:

                Allerdings müsste ich all die erstellten variablen auch wieder als ObjektID in den trigger bekommen, was hier wohl die größte Herausforderung darstellen würde.

                Sorry für das Missverständnis 🙈

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

                  @paul53 said in Variable variablen! Variable über Funktion erstellen?:

                  @newpicsel sagte: eine Liste an den trigger setzen?

                  Ja, aber die Liste wird bei Skriptstart übergeben und kann nur die Datenpunkt-IDs enthalten, die zu diesem Zeitpunkt bekannt sind.

                  Wenn das über RegExp geht wäre das mega!

                  Aber auch ein trigger mit einer Liste lässt sich dahingehen austricksen, aktuell trigger ich IDs die es zum skriptstart so auch noch nicht bzw. Nicht mit der korrekten ID gibt, weil diese erst im Verlauf korrekt gesetzt werden.

                  Der trigger hat am Anfang auch immer die ID getriggert, die beim Start anlag, dies hab ich umgangen, in dem ich alle nötigen trigger in einen trigger gesetzt habe der aktualisiert sobald dieser auslöst und so haben auch die trigger mit der variable in diesem trigger dann die ID als Auslöser, die zu dem Zeitpunkt in der variable stehen.

                  Man muss sich halt irgendwie helfen wenn man keine Ahnung hat 😂😂😂

                  1 Reply Last reply Reply Quote 0
                  • Newpicsel
                    Newpicsel last edited by Newpicsel

                    Moin @paul53

                    @paul53 said in Variable variablen! Variable über Funktion erstellen?:

                    Da ich annehme, dass die Datenpunkte in einer bestimmten ID-Struktur vorliegen, kann man einen RegExp zum Triggern verwenden. Ein solcher Trigger reagiert auch auf Datenpunkte, die zum Zeitpunkt des Skriptstarts noch nicht vorhanden waren.

                    Was genau ist der Unterschied zwischen "RegExp" und "IDs vom Selektor $()"? 😅

                    Ist es auch möglich direkt "eine Liste" von den Werten dieser IDs zu bekommen?
                    Ich möchte z.B. ein Mittelwert (mit einer Dezimalstelle) der Werte dieser IDs erhalten und ich möchte abfragen (andere IDs) ob ein bestimmter Wert vorkommt (hier reicht True/false, ich benötige nicht zwingend eine angebe in welcher ID dieser Wert vorkommt.

                    Mir würde jetzt nur über eine Schleife einfallen, aber vielleicht geht es auch einfacher?

                    Vielen Dank für deine Hilfe

                    EDIT: Ich habe die Werte so oder so und es wäre kein Problem diese in eine separate Liste zu stecken um diese Aufgaben zu erledigen, ich suche oder frage hier nicht nach einer generellen Lösung, vielmehr ob es diese Option gibt z.B. über einen Baustein (ähnlich wie z.B. "Wert von ObjektID")oder vielleicht sogar einer weiteren/anderen Formulierung innerhalb des "RegExp" oder "selektor" Blockes.

                    EDIT2 in der Hoffnung dass ich noch nicht nerve:
                    Zu meiner Frage, was der Unterschied ist, ich möchte hier natürlich auch nicht ausgiebig erklärt bekommen, was genau RegExp ist.
                    Ich habe mir etliche Seiten Infomaterial durchgelesen und hab im groben schon ein Hauch von einer Idee was wohl dahintersteckt.

                    Die benötigen IDs habe ich auch bereits selektiert und arbeiten hervorragend im trigger.
                    Lediglich die Option direkt die Werte dieser IDs zu vergleichen wäre interessant (was nach meiner Einschätzung wohl möglich sein muss, ich bislang den Weg nur nicht finden konnte), sowie die Frage, wie es sich verhält, wenn mehrere IDs exakt gleichzeitig den trigger auslösen, werden diese nacheinander abgearbeitet oder nur der erste und die restlichen gehen unter?
                    Außerdem wie sehr belastet dies alles das System, ist es eventuell in einigen Punkten schlauer ein anderen weg zu gehen um das System nicht zu sehr zu belasten?

                    Vielen Dank nochmal 🙏

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

                      @newpicsel sagte: wenn mehrere IDs exakt gleichzeitig den trigger auslösen

                      Exakt gleichzeitig gibt es nicht. Es werden alle Trigger nacheinander abgearbeitet.

                      @newpicsel sagte in Variable variablen! Variable über Funktion erstellen?:

                      die Werte dieser IDs zu vergleichen wäre interessant

                      Dazu benötigt man meist eine Schleife.

                      @newpicsel sagte in Variable variablen! Variable über Funktion erstellen?:

                      Unterschied zwischen "RegExp" und "IDs vom Selektor $()"?

                      Wesentlicher Unterschied als Trigger: Der Selektor holt sich bei Skriptstart die IDs aus dem Puffer der Javascript-Instanz. RegExp reagiert auch auf zum Zeitpunkt des Skriptstarts noch unbekannte IDs, die dem regulären Ausdruck entsprechen. Anscheinend wird der RegExp von Node.js ausgewertet.

                      Newpicsel 1 Reply Last reply Reply Quote 1
                      • Newpicsel
                        Newpicsel @paul53 last edited by

                        @paul53

                        Vielen Dank, dass hilft mir und ist sehr interessant!

                        Da ich die Werte der IDs im gleichen Skript aus der JSON in die Datenpunkte schreibe, habe ich diese nun direkt dort abgegriffen und schreibe sie in eine Liste, welche ich dann vergleiche bzw. den Durchschnitt ermittle.

                        Auch wenn ich so keine variable variablen erstellen kann, betrachte ich mein Problem hiermit als gelöst. Vielen vielen Dank 🙏

                        1 Reply Last reply Reply Quote 0
                        • Newpicsel
                          Newpicsel last edited by

                          Moin @paul53

                          sorry ich muss nochmal anknüpfen.

                          Ich hab das Problem, dass oft mehr als nur eine ID aus dem RegExp nahezu gleichzeitig auslösen und nicht jede auslösung zu einer korrekten Steuerung führt.

                          Ich muss direkt mit der entsprechenden ID des Auslösers weiterarbeiten und schreibe diese in eine variable.
                          Ich vermute, dass die zweite Auslösung schon die variablen neu setzt, wodurch die Steuerung des ersten Auslösers mit den bereits neu gesetzten variablen des zweiten arbeitet.
                          (Habe hier mehrfach Ergebnisse)

                          Gibt es eine Möglichkeit dies zu unterbinden? 🙈

                          1 Reply Last reply Reply Quote 0
                          • Newpicsel
                            Newpicsel last edited by Newpicsel

                            Moin @paul53

                            Hier mein Problem nochmal bildlich dargestellt:
                            einmalID.jpg

                            Ich zähle hier die Auslöser und setze die ID in eine variable, ich logge diese direkt nach dem trigger und direkt im "exec" befehlsblock.

                            Dies zeigt deutlich, dass eben zwei Auslöser rein kommen, jedoch dann leider beide mit den selben variablen arbeiten, weil der zweite Auslöser diese schneller ändert als die Aktion braucht um durchzuführen.

                            Einzige sinnvolle Lösung die mir einfällt, ich muss die Zeit zwischen den Auslösungen des triggers erhöhen.
                            Aktuell knapp unter 30ms und die Zeit vom triggern bis zur Ausführung sind etwa 350ms.
                            Um sicher zu gehen, würde ich eine Verzögerung vom 500ms beim aktualisieren der DP aus der API einbauen, was bei 5 räumen schon eine Verzögerung von zwei Sekunden bedeuten würde…

                            Gibt es eine Alternative wie ich dies anders vielleicht besser lösen kann?

                            EDIT: zur Verständnis, der Sinn dieses triggers ist es bei Änderung einer soll Temperatur eines Raumes, zu prüfen ob hier ein Fenster geöffnet ist, um dann dementsprechend die Temperatur zu regeln.
                            Wenn ein Heizplan so eingestellt ist, dass die Heizung im kompletten Haus um z.B. 16uhr auf 22grad springt (warum auch immer) oder eine Anwesenheitsschaltung die Temperatur im ganzen Haus regelt, bedeutet dies eben eine schnelle kurze Aktualisierung aller DPs.
                            Wenn in drei von sechs Räumen ein Fenster geöffnet ist, läuft somit die Aktion im trigger 3mal komplett durch, aber die variablen werden 6 mal neu gesetzt um überhaupt die zugehörigen Fenster zu ermitteln.

                            Hier muss natürlich sichergestellt sein, dass die variablen für jeden durchlauf des triggers korrekt gesetzt sind, damit die Temperatur in jedem Raum korrekt geschaltet werden kann.

                            Vielen Dank für jede Hilfe. 🙏

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            859
                            Online

                            32.0k
                            Users

                            80.4k
                            Topics

                            1.3m
                            Posts

                            blockly javascript
                            3
                            16
                            606
                            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