NEWS
Fragen / Antworten rund um die neue Alias Funktion
-
Welche JavaScript version? Wann wurde der State gelöscht? Nicht latest JavaScript adapter hatten eine bug das ggf neue oder gelöschte Objekte nicht bekannt waren. Oder noch bekannt waren.
-
@apollon77 habe gestern upgedated - ist aktuell mit latest 4.3.1
da ich teste, habe ich den datenpunkt nie angelegt, sondern beim erstellen einfach einen nicht-existenden unter common.alias.id eingegeben - das ist nicht das problem
der selector beim durchlauf meint irgendwie einen datenpunkt zu finden - den gibt es aber nicht - bzw. hat es nie gegeben
-
@liv-in-sky naja es kann sein das durch die alias Nutzung der State ggf irgendwie da ist und auch einen Wert hat aber kein Objekt existiert. Damit an sich undefinierter Zustand.
-
@apollon77 hab jetzt mal mit einem anderen getestet
da hat es funktioniert - ..Start4 gibt es nicht als datenpunkt
irgendwie ist durch die testerei dieser rolladen4 im system hängen geblieben - keine ahnung wo - in der object.json ist er nicht drin
-
@apollon77 hallo,
jetzt muss ich nochmal nachfragen - wieder das selbe thema wie oben beschrieben
alias angelegt - aber die zuweisung ist falsch , da der zugewiesene datenpunkt nicht existiert ( ist also so, als ob ich ein alias angelegt hatte und nach einer woche den zugewiesenen dp lösche - kann ja vorkommen
das problem bzw verhalten ist folgendes :
beim ersten test, ob der zugewiesene datenpunkt im alias vorhanden ist, ist alles ok - das script scannt alias.0 nach datenpunkte , vergleicht den inhalt der alias.id und sucht den zugehörigen dp - ist er da, ist alles gut, existiert er nicht - kommt fehler (alias.0.dritterVersuch)
jetzt das eigenartige verhalten - nach einem neustart des iobrokers, wird beim scannen des alias.0 ordners , der aliasdatenpunkt nicht mehr gefunden OBWOHL er im object tab noch da ist. im ersten bild ist "derFehler2" sichtbar - im 3ten bild wird durch alias.0 gelaufen und ausgegeben - da kommt "derFehler2" nicht mehr vor obwohl sichtbar - ABER nur nach einem neustart von iobroker
nach 10-20 aliaswerten könnten sich dort "datenzombies" sammeln und man kann dann fehler im script nicht mehr richtig finden oder auch in der vis - der datenpunkt existiert ja noch und kann auch zb. in der vis ausgewählt werden
weißt du, ob da eine fehlerroutine kommen wird? oder ist es noch zu früh, danach zu fragen
-
@liv-in-sky am besten lege deine Erkenntnisse mal als issue im Controller an. Am Ende müssen wir immer beim setzen von zielstates von einem alias aus prüfen ob es zum Ziel ein Objekt gibt. Nicht bei der Anlage. Sondern beim Wert setzen.
Bzw dein Skript müsste neben der existiert von state Werten prüfen ob es auch ein passendes Objekt gibt.
Am Ende entstehen bei sowas gerade Geister State werte ohne Objekt. Und das spiegelt das gut wieder was du beschreibst.
Müssen wir mal überlegen wie wir das behandeln können am besten.
-
@apollon77 ich mach ein git auf
ich prüfe übrigends den state an dieser stelle nicht ab sondern ob es ein dp-object gibt
erst später bzw seperat wird überprüft, ob alle datenpunkte auch statewerte haben - aber nicht bei aliasen!
danke dir
-
@marcuskl sagte:
Ah jetzt hat sich es grad irgentwie aktualisiert und er ist da
KomischDer Wert eines neuen Datenpunktes wird nicht gleich im Admin, Reiter "Objekte" angezeigt. Am schnellsten kommt man zu einer Wertanzeige, wenn man den Admin in einem neuen Browser-Tab öffnet. Getestet habe ich es mit folgendem Beispiel, in dem ein String-Datenpunkt, der nur die Werte "Aus" und "Ein" hat, in einen Logikwert gewandelt wird.
"common": { "name": "Bad.Licht.Deckenlampe", "role": "switch", "type": "boolean", "desc": "Wandlung aus String Aus/Ein", "alias": { "id": "meineDP.0.ch2.on_off", "read": "val == 'Aus' ? false : true", "write": "val ? 'Ein' : 'Aus'" }, "read": true, "write": true, "def": false }, "native": {},
-
@paul53 "on"/"off" sollte automatisch konvertiert werden! Da brauchst Du an sich keine read/write function. Es reicht wenn die Datentypen boolean/string sind bei target/source
-
@apollon77 sagte:
Da brauchst Du an sich keine read/write function. Es reicht wenn die Datentypen boolean/string sind bei target/source
Ja, ich weiß, wollte es aber mal mit "read" und "write" testen - eigentlich mit einem Datenpunkt "Aus"/"Ein", den ich aber erst hätte erstellen müssen. Ich passe es mal in meinem Beispiel oben an.
-
@paul53 ;.) "Ein"/"Aus" geht auch automatisch gg
-
@apollon77 sagte:
"Ein"/"Aus" geht auch automatisch
Wirklich ?
if (state.val === 'off' || state.val === 'OFF' || state.val === 'AUS' || state.val === 'aus' || state.val === 0 || state.val === '0') {
-
@paul53 ooooojhkkk ... "Aus" nicht ... ich baue es noch in ein lowercase um
-
@apollon77
Die Abfragestate.val === 0
kann man weglassen, denn der Fall wird abgedeckt durch
else state.val = !!state.val;
-
@paul53 korrekt
-
Ich habe nach dem Update auf den JS-Controller 2.1 einige meiner Skripte umgestellt, so dass jetzt 0_userdata.0 sowie die Alias (anstatt der LinkedDevices Adapter) genutzt wird.
0_userdata.0 funktioniert genau wie erwartet; Alias praktisch gar nicht.
Im Objektbaum werden die richtigen Werte angezeigt und auch bei Änderungen funktioniert es in beide Richtungen (schreiben auf Alias, sowie schreiben auf Originaldatenpunkt). Sobald aber ein Skript einen Aliasdatenpunkt nutzen soll funktioniert es nicht mehr. Die Trigger lösen nicht aus, wenn ein Skript versucht einen Aliasdatenpunkt zu lesen (gewählt via Objektbaum-Popup im Blockly), den es definitiv gibt, so schlägt es fehl mit folgendem Log:
-
Welche Version des JavaScript Adapters ist im Einsatz?
-
@apollon77 Script engine ist in Version 4.1.14 installiert.
Edit: falscher Adaptername -
@Xyolyp Ich meine den "Javascript" ("Script Engine" seit neuestem) Adapter
-
@apollon77 den meinte ich auch. Habe nur den falschen Namen geschrieben