NEWS
Fragen / Antworten rund um die neue Alias Funktion
-
@paul53 said in Fragen / Antworten rund um die neue Alias Funktion:
@scotty89 sagte: String werten in eine Boolean wandeln
Lesekonvertierung:Hallo,
das mit Lesekonvertierung verstehe ich langsam, ebenso das Parsen um bestimmte Werte aus einem JSON zu bekommen.Jetzt brauch ich aber beides in einem
Ich muss den Status des Kontakts "heraus parsen", und dann den Wert umwandeln ("true" soll "closed" ausgeben, "false" soll "open" ausgeben".
Konverter beim lesen sieht so aus (gibt halt: true/false zurück):
JSON.parse(val).contact -
@topsurfer sagte: "true" soll "closed" ausgeben, "false" soll "open" ausgeben".
JSON.parse(val).contact ? 'closed' : 'open'
-
@paul53 Thx again!
-
Hi,
ich habe nun endlich mal angefangen auf Aliase umzustellen. Ich habe hier jedoch einen State, den bekomme ich über ein Alias nicht mehr sinnvoll gesetzt. Ich übergebe eine Zahl, angeblich wird jedoch ein Objekt empfangen.
"Object alias.0.Gastherme.Steuerung.Betriebsart is invalid: obj.common.min has an invalid type! Expected "number", received "object" This will throw an error up from js-controller version 7.0.0!"
Übergebe ich wie bisher eine Zahl für den gewünschten Wert, dann erhalte ich ein null. Übergebe ich die Zahl als String, dann gehts, im Log erscheint jedoch natürlich ein Hinweis, dass eine Zahl erwartet worden ist.
Am Script habe ich nur den DP vom Ursprung zum Alias geändert.
Beide DP scheinen mir identisch konfiguriert.
Der Ursprung:
{ "type": "state", "common": { "name": "Betriebsart (700)", "type": "number", "role": "value", "read": true, "write": true, "unit": "", "states": { "0": "Schutzbetrieb", "1": "Automatik", "2": "Reduziert", "3": "Komfort", "65535": "---" }, "custom": { "history.0": { "enabled": true, "aliasId": "", "debounceTime": 0, "blockTime": 0, "changesOnly": true, "changesRelogInterval": 0, "changesMinDelta": 0, "ignoreBelowNumber": "", "disableSkippedValueLogging": false, "retention": 31536000, "customRetentionDuration": 365, "maxLength": 960, "enableDebugLogs": false, "chartStep": "" } } }, "native": { "id": "700", "bsb": { "name": "Betriebsart", "dataType_name": "ENUM", "dataType_family": "ENUM", "destination": "0", "possibleValues": [ { "enumValue": 65535, "desc": "---" }, { "enumValue": 0, "desc": "Schutzbetrieb" }, { "enumValue": 1, "desc": "Automatik" }, { "enumValue": 2, "desc": "Reduziert" }, { "enumValue": 3, "desc": "Komfort" } ], "isswitch": 0, "dataType": 1, "readonly": 0, "readwrite": 0, "unit": "" } }, "_id": "bsblan.0.Betriebsart_(700)", "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1739452181978 }
Der Alias:
{ "common": { "alias": { "id": "bsblan.0.Betriebsart_(700)", "read": "", "write": "" }, "name": "Betriebsart", "role": "value", "type": "number", "unit": "", "min": "", "max": "", "read": true, "write": true, "states": { "0": "Schutzbetrieb", "1": "Automatik", "2": "Reduziert", "3": "Komfort", "65535": "---" }, "custom": { "history.0": { "enabled": true, "aliasId": "", "debounceTime": 0, "blockTime": 0, "changesOnly": true, "changesRelogInterval": 0, "changesMinDelta": 0, "ignoreBelowNumber": "", "disableSkippedValueLogging": false, "retention": 31536000, "customRetentionDuration": 365, "maxLength": 960, "enableDebugLogs": false } } }, "native": {}, "type": "state", "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1734278479428, "_id": "alias.0.Gastherme.Steuerung.Betriebsart" }
Ich hab auch schon mal den Native-Block vom Original in den Alias kopiert, das hat aber nichts verändert. Auch ein "konvertiere Zahl zu Zahl" hat (wie erwartet) nichts verändert.
Was mache ich falsch? Wieso glaubt der Alias ein Objekt zu empfangen?
Update/Edit:
Gefunden. Da scheint etwas bei Übernehmen der min/max Values nicht zu passen. Diese waren im Alias plötzlich auf null. Ich hab sie jetzt manuell gesetzt, damit klappt es."min": 0, "max": 3,
Gelöst durch finden eines seit Jahren offnen Bugs: https://github.com/iobroker-community-adapters/ioBroker.alias-manager/issues/36
-
@gutgut30 sagte: Wieso glaubt der Alias ein Objekt zu empfangen?
Kann es sein, dass der Originalwert null sein kann? null ist ein Objekt.
Lösche "min" und "max", denn das sind Leerstrings. -
@paul53 Habs gerade so ähnlich gelöst und mein Posting aktualisiert. Das war es. Danke
-
@gutgut30 sagte: manuell gesetzt, damit klappt es.
Das müssen Zahlen sein - keine Strings!
-
@paul53 said in Fragen / Antworten rund um die neue Alias Funktion:
Das müssen Zahlen sein - keine Strings!
Du hast Recht. Hab es im Posting aktualisiert. ioBroker scheint es aber beim Speichern des DP auch selber zu korrigieren.
-
Eine kurze generelle Frage noch: Wenn ich meine Daten mit History oder InfluxDB logge. Logge ich dann den Alias oder den original Gerätedatenpunkt?
-
@gutgut30 sagte: Logge ich dann den Alias oder den original Gerätedatenpunkt?
Besser den Alias, auch in Visualisierung und Skripten.
-
-
Vielen Dank.
Der Fehler mit den min/max ist allerdings mehr als nervig. Ich muss so gut wie jeden Alias Datenpunkt nacharbeiten. Da kann man ja absolute Zweifel haben, dass man diesen Zeitaufwand jemals wieder reinholt weil ein bis 5 Geräte getauscht werden müssen...
-
@Homoran
hat jetzt nix direkt mit dem Thema zu tun... aber könntest du dasneue
mal aus der Überschrift raus machen - ich frage mich jedesmal was es neues mit dem Alias gibt, bis mir wieder einfällt das es ja die alteneue Alias Funktion
ist. -
@ticaki könnte man machen.
man könnte aber auch einen 6 Jahre alten Thread zu machen