Zefau / ioBroker.jarvis

jarvis - just another remarkable vis
https://forum.iobroker.net/topic/49776
Other
150 stars 38 forks source link

Numerische Werte werden von Geräten in Jarvis nur noch als string weitergegeben #885

Closed danfuh closed 3 years ago

danfuh commented 3 years ago

Hi,

ich verwende die Version v3.0.0-alpha.50

Geräte geben ihre Werte nur noch als String weiter, auch wenn es sich um Nummern handelt. Einzige Ausnahme: LevelBody

Konkret geht es bei mir um DropdownAction mit der Anzeigevariante {"8":"8 °C","9":"9 °C","10":"10 °C","11":"11 °C","12":"12 °C","13":"13 °C","14":"14 °C","15":"15 °C","16":"16 °C","17":"17 °C","18":"18 °C","19":"19 °C","20":"20 °C","21":"21 °C","22":"22 °C","23":"23 °C","24":"24 °C","25":"25 °C","26":"26 °C","27":"27 °C","28":"28 °C"}

Der Datenpunkt ist eine ioBroker Szene als virtuelle Gruppe, die den Wert einfach nur an das eigentliche Objekt homee.2.RadiatorThermostat-193.TargetTemperature-219 weiterreicht. Sowohl die Szene, als auch das homee Objekt erwarten einen Wert vom Typ "number". Auch wenn ich auf die Szene verzichte und direkt das homee Objekt als Datenpunkt im Jarvis Gerät einbinde, wird mir über das Drop-Down ein "string" and den Datenpunkt geschickt, kein numerischer Wert. Nur wenn ich als Dropdown-Alternative LevelBody verwende, bekommt der Datenpunkt seinen Zahlenwert auch wirklich als "number" geliefter. Für die Auswahl der Temperatur könnte ich erst einmal damit leben, allderdings nicht für z.B. die Einstellung des Heizmodus meines Thermostats, denn hier sieht die Anzeigevariante wie folgt aus {"0":"Aus","1":"Normal","2":"Energiesparend","3":"Boost","4":"Manuell"} Würde ich für die Heizmodi als Datenpunkt Eigenschaft {"min":0,"max":4} angeben und "LevelBody" verwenden, könnte ich zwar die Heizmodi wieder einstellen, hätte allerdings nur noch die Werte 0-4 zur Auswahl und wüsste nicht wofür diese stehen (ok, ich weiss es schon, meine Frau und Kinder aber nicht).

Falls es gewollt ist, dass alle Werte nur noch als "string" übergeben werden, wäre meine Frage: Wie kann ich dem Datenpunkt mit auf den Weg geben, dass er "number" anstelle von "string" übergeben soll?

In der v3.0.0-alpha.39 bestand der Fehler noch nicht. Betroffen sind bei mir alle 14 Heizungsthermostate und weitere 30 Geräte bei denen ich entweder DropDown oder Input verwende um Zahlenwerte an das jeweilie iobroper-Objekt weiterzugeben. Betroffen sind ebenfalls alle Datenpunkte die nur einen Wert als Zahl an das Objekt weitergeben sollen, aber dies konnte ich dank diverser Szenen umgehen, die jeweils für True eine Zahl an das eigentliche Objekt weiter geben.

Sollte es ein Bug sein, hätte ich im Zuge der Überarbeitung auch gleich noch einen Feature-Vorschlag: Könnte man eventuell für jeden einzelen Datenpunkt auswählen, was er übergeben soll (boolean, number, string, ...)? Gerne auch erst einmal nur im JSON und GUI später, damit es schneller verfügbar ist. Mit "jeden" meine ich deshalb jeden, weil einige Adapter erstaunlicherweise in ihren Objekten nicht "bool" erwarten, sondern wie z.B. der Homee Adapter 1 oder 0 anstelle von true bzw false. Hier wäre es natürlich perfekt der SwitchAction mitgeben zu können, dass sie bitte 1 anstelle von true (bzw. 0 statt false) weitergeben soll.

Schon jetzt vielen Dank und Daumen hoch von mir für die tolle Arbeit an Jarvis!

Zefau commented 3 years ago

Versuch Mal den Key des JSON ohne Anführungszeichen

Zefau commented 3 years ago

{8:"8 °C",9:"9 °C",10:"10 °C...

danfuh commented 3 years ago

{8:"8 °C",9:"9 °C",10:"10 °C...

Hatte ich als aller erstes versucht, ohne Erfolg. Zur Sicherheit hatte ich auch sämtliche Offline-Browser-Speicher für die Jarvis Oberfläche gelöscht (nur für den Fall, dass die Oberfläche die Änderung noch nicht hat), auch ohne Erfolg. Ich habe gelesen, dass für die Ausgabe eines Wertes in der Visualisierung der Value umgebogen, berechnet oder definiert werden kann. "value": "val => ..., so wie hier https://github.com/Zefau/ioBroker.jarvis/issues/416 Könnte mir das in irgend einer Art weiter helfen und falls ja, wie wäre die korrekte Syntax und wo genau muss die dann hin?

danfuh commented 3 years ago

Nachtrag zu Jason ohne Anführungszeichen: Wenn ich den Editor der GUI verwende und die Anführungszeichen für den Wert weg lasse, sind sie nach dem Speichern wieder da (wahrscheinlich dank der Syntaxkorrektur des Editors). Ich könnte nachher versuchen die Anführungszeichen direkt im Geräte JSON weg zu lassen - hätte aber zur Folge, dass ich nie wieder den Editor verwenden kann.

Zefau commented 3 years ago

Das ginge auch, aber wäre ein Workaround. Unter'm Strich ein Bug, den ich beheben werde.

danfuh commented 3 years ago

Das ginge auch, aber wäre ein Workaround.

Die Idee nur JSON zu verwenden und auf den Editor zu verzichten, oder dem "value" mitzugeben, dass er "number" sein soll? Falls letzteres, wie?

Unter'm Strich ein Bug, den ich beheben werde.

👍🏻 Vielen Dank im Voraus schon einmal.

Zefau commented 3 years ago

Der valuecallback wäre der Workaround. Also value => parseInt(value) bzw. ggf. (value, val) => parseInt(val).

danfuh commented 3 years ago

Ich habe beide Varianten versucht - leider ohne Erfolg. Sehe ich es richtig, dass "value => parseInt(value)" als Datenpunkt Eigenschaft angegeben wird? Falls ja, geht es leider nicht, weder die eine, noch die andere Variante. Zur Veranschaulichung ein paar Screenshots: datenpunkt visualisierung visualisierung2 log

Im Log ist gut zu erkennen, dass das Problem nicht nur den einen Datenpunkt betrifft und auch nicht nur Zahlenwerte - Alle Werte, auch binäre werden als "String" übergeben. Das Problem liegt auch nicht an den jeweiligen Szenen, denn wenn ich der Szene direkt einen Zahlenwert übergebe (z.B. aus VIS heruas, über Javascript, oder über die Test-Funktion in der Szene), dann wird dieser Zahlenwert auch an das Objekt der Szene weitergegeben und in diesem Fall die Temperatur auf den gewünschten Wert gesetzt. Bekommt die Szene den Wert aber als String, dann ändert sich zwar der Wert der Szene, diese übergibt ihn aber aufgrund des falschen Variableninhalts nicht an das Objekt und somit ändert sich die Temperatur auch nicht. Wenn ich anstelle der Szene direkt das Objekt einbinde, wird der Wert erst gar nicht übergeben und die Temperatur ändert sich ebenfalls nicht.

Der Versucht direkt im Geräte JSON (Jarvis Oberfläche) auf die Anführungszeichen zu verzichten führt zu einem Syntax-Error. Nach dem Speichern baut der Editor die Anführungszeichen einfach wieder hinein.

Die Anführungszeichen im JSON des ioBroker Objekts jarvis.0.devices zu entfernen bringt zwar eine Warnung ... iobroker-object-jarvis-devices1 ... lässt sich allerdings bestätigen und speichern ... iobroker-object-jarvis-devices2 ... um anschließend festzustellen, dass nicht nur der Syntax-Editor nicht mehr mit dem JSON klar kommt, sonder auch Jarvis nicht. Ausser Timeout auf weißen Hintergund gibt es keine Jarvis-Oberfläche mehr. Nachdem die Anführungszeichen nun wieder vorhanden sind, funktioniert alles so wie vorher.

Zefau commented 3 years ago

prüf bitte nochmal mit v3.0.0-alpha.51.

danfuh commented 3 years ago

Auch in der -51 verhält es sich leider falsch. Es ist auch egal ob ich als Objekt eine Szene, den Datenpunkt des homee device, oder z.B. den Datenpunkt von einem Shelly nehme. Wenn number erwartet wird, liefert Jarvis nur String und der Wert wird nicht gesetzt. (Ja, iobroker und Adapter hatte ich neu gestartet und auch geprüft ob wirklich die -51 installiert ist)

Wenn ich als Datenpunkt ein Alias-Decice nehme, dann wird mir z.B. für value.teperature der Wert erfolgreich gesetzt. Anscheinend ist der Alias Adapter nicht so wählerrisch und übergibt den Wert an das homee Objekt als number. Dies wäre jetzt auch mein Workarround, allerdings mit der Einschränkung, dass ich keine zwei Geräte gleichzeitig steuern kann (insofern nicht optimal, da in einigen Räumen mehr als ein Heizkörper ist und viele Lampen mehr als ein Leuchtmittel besitzen).

danfuh commented 3 years ago

Nach dem Update auf v3.0.0-alpha.54 ist der Fehler behoben.