NEWS
[gelöst] Verständnisfrage Alias-Funktion
-
Hallo,
ich spiele gerade mit der Alias-Funktion herum. Dabei sind mir zwei Dinge aufgefallen.- Ich habe einen Alias angelegt. Wenn ich den mit getState auslesen möchte bekomme ich eine Fehlermeldung bzw. Warnung, das der Alias nicht existiert.
Starte ich den JS-Controller neu kann der Alias problemlos ausgelesen werden.- Wenn ich einen Alias per History aufzeichnen möchte, geht dies nicht. Die History wird zwar gestartet es erfolgt jedoch keine weitere Aufzeichnung von Werten.
Ist das so korrekt, oder habe ich irgendwo noch etwas übersehen?
Gruß Steffen
-
@Steff sagte:
Die History wird zwar gestartet es erfolgt jedoch keine weitere Aufzeichnung von Werten.
Das kann ich nicht bestätigen:
Ich brauchte nach dem Erzeugen des Alias (per JS) auch ioBroker nicht neu starten.
-
@paul53 ,
komisch, bei mir werden immer nur beim starten der History zwei Werte aufgezeichnet und dann ist Ruhe?!
-
@paul53,
ahh, wenn ich bei der History des Alias den Haken bei "Nur Änderungen aufzeichnen" rausnehme und dafür unter "trotzdem gleiche Werte aufzeichnen" was anderes als 0 eintrage dann geht´s auch bei mir. Das war mein Fehler, ich dachte hier kann ich auf Änderungen reagieren. OK ein Problem weniger.Hmm..., ich erstelle meine Aliase über das Script von Dir, das du als Vorlage --> hier gepostet hast. Muss ich im Script noch was anderes angeben als den Original- und Alias-Datenpunkt??
-
@Steff sagte:
Muss ich im Script noch was anderes angeben als den Original- und Alias-Datenpunkt??
Wenn die common-Attribute des Originals in Ordnung sind und so übernommen werden sollen: Nein.
-
Und da steige ich nicht durch!
Ich habe zum Testen eine Temperatur von meiner Heizung im Original-DP 'javascript.0.eBus.Heizung.ui_OutsideTemp', diesen möchte ich im Alias-DP 'alias.0.Aussentemperatur_Nord_Test' quasi spiegeln. Mit deinem Script zum Anlegen von Datenpunkten habe ich diesen Alias erzeugt. Wenn ich nun mit einem Testscript
den Alias abfrage erhalte ich folgende Log-Ausgabe:
Das aber nur solange bis ich den JS-Controller neu starte, dann kommt die Warnung nicht mehr -
@Steff sagte:
javascript.0 2019-12-07 17:04:50.409 info (3850) script.js.common.AAA_Alias-abfragen: Alias-ID hat Inhalt: null
Dann hat der JS-Controller noch keinen Zustand in den Alias geschrieben. Wahrscheinlich muss das Original erst einmal aktualisiert werden (Änderung des Zeitstempels) ?
@Steff sagte in Verständnisfrage Alias-Funktion:
javascript.0 2019-12-07 17:04:50.408 info (3850) script.js.common.AAA_Alias-abfragen: Original-ID hat Typ: string
Es sollte eine Wandlung in common.type: "number" erfolgen (Skript Zeile 8).
-
@paul53 sagte in Verständnisfrage Alias-Funktion:
Dann hat der JS-Controller noch keinen Zustand in den Alias geschrieben. Wahrscheinlich muss das Original erst einmal aktualisiert werden (Änderung des Zeitstempels) ?
Die Temperatur ändert sich nur sehr langsam, der Zeitstempel ändert sich schon, jedoch ist die letzte Wert-Änderung schon einige Zeit her.
Unter Objekte wird aber ein Wert angezeigt, nur halt eben bei der Script abfrage nicht, deshalb bin ich da etwas ratlos!
Die 7,56°C sollten ja aber im Script ausgegeben werden - oder nicht? -
@Steff sagte in Verständnisfrage Alias-Funktion:
Die 7,56°C sollten ja aber im Script ausgegeben werden - oder nicht?
Habe es gerade getestet: Bei mir wurde mit getState() von dem frisch angelegten Datenpunkt der Wert 0 geliefert, der falsch ist. Nach Neustart der Javascript-Instanz wird der richtige Wert eingelesen.
Das hängt damit zusammen, dass die JS-Instanz alle Objekte und Zustände puffert und getState() auf die Puffer zugreift. Erst ein Neustart der JS-Instanz aktualisiert die Puffer mit den Objekten des JS-Controllers. -
@paul53,
habe gerade nochmals einen Alias erstellt auf einen Datenpunkt, der sich öfters ändert. Aber auch da ist beim Testscript die 0 bzw. 'null' im Log.Zitat @paul53
Das hängt damit zusammen, dass die JS-Instanz alle Objekte und Zustände puffert und getState() auf die Puffer zugreift. Erst ein Neustart der JS-Instanz aktualisiert die Puffer mit den Werten des JS-Controllers.Das heißt also nach dem Anlegen eines Alias muss der JS-Controller oder vielmehr die JS-Instanz (sorry - habe das oben nicht explizit geschrieben) neu gestartet werden. Oder bin ich da immer noch falsch?
-
@Steff sagte:
nach dem Anlegen eines Alias mussdie JS-Instanz neu gestartet werden.
Wenn der neue Alias in einem Skript verwendet werden soll, muss erst die JS-Instanz neu gestartet werden. Das gilt nicht nur für einen Alias.
-
@paul53 sagte in Verständnisfrage Alias-Funktion:
Wenn der neue Alias in einem Skript verwendet werden soll, muss erst die JS-Instanz neu gestartet werden. Das gilt nicht nur für einen Alias.
OK, und wieder was dazugelernt. Für was gilt das noch?
-
@Steff sagte in Verständnisfrage Alias-Funktion:
Für was gilt das noch?
Das gilt auch für eigene Datenpunkte, die nicht per createState() erzeugt wurden, und nach meiner Erfahrung vor Allem auch für enums bzw. deren Zuweisung.
-
@paul53 sagte in Verständnisfrage Alias-Funktion:
Das gilt auch für eigene Datenpunkte, die nicht per createState() erzeugt wurden, und nach meiner Erfahrung vor Allem auch für enums bzw. deren Zuweisung.
OK, muss ich mal beobachten.
@paul53 ich danke dir für die ganzen Erläuterungen, du hast mich mal wieder ein Stückchen weitergebracht!!
Gruß Steffen