NEWS
Typ falsch, bzw. number wird als string erwartet (alias)
-
Re: Fehlermeldung "Wrong type of…: "string"
Hallo,
bevor ich meine Frage stelle, eine kurze Vorstellung. Ich habe iobroker seit ein, zwei Jahren auf einem pi laufen und da auch schon diverse Dinge umgesetzt. Ich kann ein wenig JS, nutze Node-Red und habe noch Jarvis und VIS als Projekte auf dem Plan. Angesteuert werden im Moment zigbee-Geräte und noch ein paar Max-Thermostate.
Nun zu meiner Frage:
Die Max-Thermostate haben einen state 'mode':{ "_id": "maxcul.0.PEQXXXXXXX.mode", "common": { "name": "Thermostat PEQXXXXXXX mode", "type": "number", "role": "level.mode", "read": true, "write": true, "states": { "0": "auto weekly", "1": "manual", "2": "vacation", "3": "boost", "4": "manual eco", "5": "manual comfort", "6": "manual window" } }, "type": "state", "native": { "src": "1bXXXX", "type": 1, "raw": "1001AXXXXXXXXXXXXXXXXXXX", "rssi": -53.5, "serial": "PEQXXXXXXX" }, "from": "system.adapter.maxcul.0", "user": "system.user.admin", "ts": 163XXXXXXXXXX, "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
Ich habe einen Alias eingerichtet, dessen Definition so aussieht:
{ "common": { "alias": { "id": "maxcul.0.PEQXXXXXXX.mode", "read": "", "write": "" }, "name": "mode", "role": "level.mode", "type": "number", "unit": "", "min": "", "max": "", "read": true, "write": true, "states": { "0": "auto weekly", "1": "manual", "2": "vacation", "3": "boost", "4": "manual eco", "5": "manual comfort", "6": "manual window" } }, "native": {}, "type": "state", "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 16504XXXXXXXXXX, "_id": "alias.0.AZ.Thermostat.mode", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
Beim Schreiben von mode passiert aber nichts. Der vorige Wert bleibt.
setState('alias.0.AZ.Thermostat.mode', 1);
Wenn ich den Wert als string übergebe ('1'), wird der Wert gesetzt. Dann meckert javascript aber, weil der Typ falsch ist.
Anders sieht es aus, wenn ich nicht den Alias nutze:setState('maxcul.0.PEQXXXXXXX.mode', 1);
Dann wird der Wert richtig gesetzt.
Ein typeof liefert für 'maxcul.0.PEQXXXXXXX.mode' number zurück. Bei 'alias.0.AZ.Thermostat.mode' ist es string, wenn vorher versucht wurde, hierüber eine 1 zu setzen. Wird nur über 'maxcul' der Wert gesetzt und typeof für beide States ausgelesen, bleibt es bei number. Es scheint so, dass das Setzen des Wertes über den Alias irgendwas verbiegt.
Ich habe gerade ein wenig rumgespielt und im Alias in der Objektdefinition die Werte Min und Max gelöscht. Danach bleibt es bei number, egal über welchen Weg ich die Werte schreibe. Es funktioniert also nun und mein Problem hat sich erledigt.
Es bleibt natürlich die grundlegende Frage: Ist im Alias irgendwo ein Fehler versteckt?
Bei meiner Philips Hue hatte ich das Problem übrigens auch, wenn ich den State colortemp setzen wollte. Hier hat ein Editieren von "Min" geholfen.
Viellicht ist ja jemand anwesend, der mich etwas erleuchten kann.Schonmal vielen Dank.
-
@homeguy Du hättest einfach den mode Datentyp manuell auf string setzen können. Ist immer ein String, da die Zahl die Objekteigenschaft ist. Allerdings komme ich mit dieser Multistate Definition im iob eh nicht klar.
-
@mickym
OK, Danke. Merke ich mir fürs nächste Mal.
Aber warum funktioniert es denn jetzt, wo ich an der Definition selbst ja eigentlich nichts geändert habe und weiterhin number schreibe? -
@homeguy Ich kann Dir das nicht genau sagen. Ich weiss nur, dass der Admin manchmal versucht selbst den Typ zu setzen in Abhängigkeit was für Werte er bekommt. Wenn Du also erst mal Zahlen schickst, wird das Teil ggf. selbst den Datentyp auf Zahl ändern. Das habe ich aber nur so aus einem anderen Thread entnommen. Belegen kann ich Dir das nicht.
-
@homeguy
"min" und "max" haben den falschen Typ (string). Einfach löschen! -
@paul53
Es sieht zumindest so aus, als wäre nicht klar, was es sein soll. Nach Anlage steht "" in min und max. Nach Schreiben ist es null. Wenn ich Werte eintrage, also eine Ansage mache, was es denn sein soll, passt es.
Ich danke euch.