NEWS
["GELÖST"] Variable über Funktion erstellen?
-
@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!
-
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
-
@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.
-
@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
-
@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
-
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
-
@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.
-
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
-
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?
-
Moin @paul53
Hier mein Problem nochmal bildlich dargestellt:
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.