NEWS
Die Alias funktion - Fragen
-
@gelberlemmy sagte in Die Alias funktion - Fragen:
@CrunkFX hallo, lese hier das Thema gerade mit. Ich habe ZWave Türsensoren die für "offen" 22 und geschlossen "23"ausgeben. Nun möchte ich per Alias für 22 = true und für 23 = false ausgeben.
Geht dies ? Was muss ich hierfür in RAW eingeben ?Gruß André
{ "from": "....", "user": "....", "ts": ..., "common": { "name": "on", "role": "", "type": "boolean", "desc": "Manuell erzeugt", "read": true, "write": false, "def": false, "alias": { "id": "orginal.pfad", "read": "val === '22' ? true : false" } }, "native": {}, "acl": { "object": ...., "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": .... }, "_id": "....", "type": "state" }
Kann man noch ausweiten - aber im Prinzip langt ja 22 = true - alles andere false.
-
@CrunkFX ich würde gern solch Dinge relativ gleich haben. In den Skripten zB würde ich gern immer den Weg mit true und false arbeiten.
-
@mickym super danke. Werde es einmal ausprobieren. Wäre super genial wenn das klappt. Danke
-
@gelberlemmy ich habs nochmal im Gesamtzusammenhang gepostet. Das Ganze muss unter alias unter common definiert werden. ggf. müssen die hochkommas bei der 22 weg, wenn man die Quelle als Zahl interpretieren kann.
-
@mickym ja die hochkommas müssen gelöscht werden bei mir. Was bedeutet eigentlich val === '22' eigentlich genau. Was passiert ist ja klar...
-
@gelberlemmy Da das Ganze als Zeichenkette (String) in doppelten Anführungszeichen ist, markieren die Hochkommas eine Zeichenkette in der Zeichenkette - bei Dir ist es aber tatsächlich eine Zahl - deshalb ohne Hochkommas. Im Prinizip gibst Du in dem String mit den doppelten Anführungszeichen Javascript code ein und "val" repräsentiert den Wert des Orginal-Datenpunktes.
Im Prinzip wird einfach bei setzten des Wertes Deines Alias (Read) Datenpunktes (Wertes = val) den Conditional Operator genutzt. Somit bedeutet es nichts weiter als Dein Orginal hat den Wert 22, dann setze true anderenfalls false. -
@mickym super danke für die Erklärung
-
@mickym
Moin, die Alias-Funktion scheint sich geändert zu haben und diese Methode schaltet bei mir nicht mehr das Alias.
Wie muss es aktuell heißen?Admin 5.1.25
Node.js v12.22.7
NPM 6.14.15 -
@troya Ehrlich gesagt weiß ich nicht, was Du meinst? Bei mir gabs keine Änderung. Installieren Dir doch mal den Alias Manager und schau mal ob Du das damit entsprechend hinbekommst:
-
@mickym sagte in Die Alias funktion - Fragen:
@gelberlemmy sagte in Die Alias funktion - Fragen:
@CrunkFX hallo, lese hier das Thema gerade mit. Ich habe ZWave Türsensoren die für "offen" 22 und geschlossen "23"ausgeben. Nun möchte ich per Alias für 22 = true und für 23 = false ausgeben.
Geht dies ? Was muss ich hierfür in RAW eingeben ?Gruß André
{ "from": "....", "user": "....", "ts": ..., "common": { "name": "on", "role": "", "type": "boolean", "desc": "Manuell erzeugt", "read": true, "write": false, "def": false, "alias": { "id": "orginal.pfad", "read": "val === '22' ? true : false" } }, "native": {}, "acl": { "object": ...., "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": .... }, "_id": "....", "type": "state" }
Kann man noch ausweiten - aber im Prinzip langt ja 22 = true - alles andere false.
Die Funktion mit dem umwandeln von 22 auf true von damals. Aber ich schau mir morgen mal den Manager an, danke!
-
@troya Das muss immer noch so funktionieren wie vorher - das hat auch nichts mit dem Adapter zu tun.
Im Adapter kannst Du das nur jetzt direkt eintragen und musst nicht mehr die Definition des Alias-Datenpunktes bemühen.
Wenn da also irgendwas nicht funktioniert - dann gibts ein anderes Problem - da weiß ich aber auch nicht weiter, weil es meines Erachtens weiter so gehen muss.
-
@troya sagte in Die Alias funktion - Fragen:
"read": "val === '22' ? true : false"
Hast du mal
"read": "val == '22' ? true : false"
versucht?
-
-
@troya Du prüfst mit deinem Befehl auf den Typ String. Möglicherweise ist aber der auszuwertende Wert vom Typ number. Wenn du in JS mit == prüfst ist der auszuwertende Typ egal( Disclaimer: Ganz einfach erklärt, für vollständige Erklärung: Hier klicken .
LG
CrunkFX -
Weil ich hierzu gerade eine Frage per Mail bekommen habe: true und false auf die Art zurück zu geben ist redundant. Der Vergleich liefert ja bereits genau das, was man sucht.
Aktuell wäre es also: "falls Ergebnis gleich
true
gibtrue
zurück, sonst gibfalse
zurück":val == 22 ? true : false
Es reicht:
val == 22
Mit
? :
(also if else) würde man ja nur arbeiten, wenn man daraus wieder andere Datentypen / Wert machen möchte. z.B.val == 22 ? 'jau' : 'nö'