NEWS
Variablen mit "states" -> Probleme mit Rega und "jqui select value"
-
Hallo,
vielen Dank für iobroker! Es ist unglablich, wie gut so ein junges hobby Projekt funktioniert. Ihr macht es wirklich toll und deswegen möchte ich auch zum iobroker wechseln
ich habe letzter Woche iobroker auf ein Rasberry installiert und versuche langsamer meine Programe von dem CCU2 zum iobroker umzuziehen. Da das ein bisschen dauern wird, möchte ein "homeState" CCU2 System Variable in iobroker spiegeln so, dass ich in meinem iobroker Scripte nicht das Rega Variable benutzen muss. So kann ich später das rega Instanz löschen und das CCU2 mit dem Homematic raspberrry Adapter ersetzen.
Das spiegeln wollte ich so machen:
on("hm-rega.0.2134"/*homeState*/,"homeState"); on("homeState,"hm-rega.0.2134"/*homeState*/);
und dann in vis mit Hilfe von einem jqui select value widget, das Value zu zeigen und zu ändern. Leider habe ich einige Probleme getroffen, die vermutlich zu tun haben, dass homeState ein Variable mit states ist:
!
{ "common": { "name": "homeState", "type": "number", "role": "state", "min": 0, "max": 3, "read": true, "write": true, "states": { "0": "sleeping", "1": "awakeBeforeWork", "2": "empty", "3": "awake" } }, "native": { "Name": "homeState", "TypeName": "VARDP", "DPInfo": "", "ValueUnit": "", "ValueList": "sleeping;awakeBeforeWork;empty;awake", "ValueType": 16, "ValueSubType": 29, "ValueMin": null, "ValueMax": null }, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 }, "_id": "hm-rega.0.2134", "type": "state" } !
Hier sind die Probleme:
<list type="decimal">4. Wenn ich in in ioadmin das Value von homeState sehe, ist sie eine Zahl (object.common.type="number" so es passt, denke ich). Wenn ich aber sie dort per Hand ändere, dann wird das neue Wert als string gespeichert und auch als String an dem CCU2 gesendet. Das CCU2 erkennt das Wert nicht und setzt das State immer zu 0.
-
Mit einem jqui select value Widget kann ich das Wert des Variable ändern aber das neues Wert wird nicht gezeigt: das widget zeigt immer "Sleeping". Das widget habe ich so definiert:
!
[{"tpl":"tplJquiSelectList","data":{"oid":"hm-rega.0.2134","visibility-cond":"==","visibility-val":1,"values":"0;1;2;3","texts":"Sleeping;AwakeBeforeWork;Empty;Awake","height":"150"},"style":{"left":"481px","top":"122px"},"widgetSet":"jqui"}] !
-
Das local Variable zeigt auch ein falsches Wert in dem jqui select value Widget. Ich habe das Variable so definiert:
>! ```` { "common": { "name": "homeState", "type": "number", "read": true, "write": true, "role": "state", "states": { "0": "sleeping", "1": "awakeBeforeWork", "2": "empty", "3": "awake" }, "min": 0, "max": 3 }, "native": {}, "type": "state", "_id": "javascript.0.homeState", "acl": { "object": 1638, "state": 1638 } } >! ```` und das Widget so: >! ```` [{"tpl":"tplJquiSelectList","data":{"oid":"javascript.0.homeState","visibility-cond":"==","visibility-val":1,"values":"sleeping;awakeBeforeWork;empty;awake","texts":"Sleeping;AwakeBeforeWork;Empty;Awake","height":"150","open":true,"name":"homeState"},"style":{"left":9,"top":"49px","width":"221px","height":"30px"},"widgetSet":"jqui"}] >! ```` Das Wert wird in dem Variable als String gespeichert. Ich bin jetzt nicht sicher, ob man am ende solche "enums" als String oder Zahl gespeichert werden sollten…
-
-
Bis zur Version 0.6.3 von ioBroker.Admin hat sich die Auswahl eines anderen Zustandes im Reiter "Zustände" bei Multistate-Datenpunkten so ausgewirkt, dass````
var x = getState(id).val;In der neuen Version 0.6.4 ändert sich nach Zustandsänderung im Reiter "Zustände" der Wert nicht, d.h. die Auswahl hat keinen Einfluss auf das Ergebnis von getState(id).val; der vorher per setState(id, val) gesetzte Wert bleibt erhalten.
-
Wie sieht dein Datenpunkt aus?
-
Vielen Dank für deine Antwort paul53!
Mit Version 0.6.4 funktioniert wunderbar: ich kann in iobroker.admin das Wert für die multi-state Werte und sie bleiben Zahlen. Damit wird die System Variablen in rega richtig gespeichert.
Damit kann ich jetzt sehr einfach meine gespiegelte iobroker Variablen in sync halten:
addVariableSync("hm-rega.0.2134"/*homeState*/); addVariableSync("hm-rega.0.2735"/*homeStatePreview*/); function addVariableSync(objId) { var obj = getObject(objId); var objVal = getState(objId).val; var objName = obj.common.name; //Create and set local variable createState(objName, objVal, false, obj.common); setState(objName, objVal); //Update local variable when CCU variable changes on(objId,objName); //Update CCU variable when local variable changes on(objName,objId); }
Das Problem mit dem jqui - Select ValueList ist aber geblieben: ich kann die Variablen aktualizieren aber das Widget reflektiert, die Änderungen nicht…
[{"tpl":"tplJquiSelectList","data":{"oid":"javascript.0.homeState","visibility-cond":"==","visibility-val":1,"values":"0;1;2;3","texts":"Sleeping;AwakeBeforeWork;Empty;Awake","height":"150","open":false,"name":"homeState"},"style":{"left":9,"top":"49px","width":"221px","height":"30px"},"widgetSet":"jqui"}]
Btw: was macht eingentlich das Common -> Open Option?
-
Wie sieht dein Datenpunkt aus? `
Meinst Du das Rega oder Javascript Datenpunkt? Das Rega Datenpunkt ist meinem erste Post (erste "Spolier"). Hier ist das javascript Datenpunkt:
{ "common": { "name": "homeState", "type": "number", "read": true, "write": true, "role": "state", "states": { "0": "sleeping", "1": "awakeBeforeWork", "2": "empty", "3": "awake" }, "min": 0, "max": 3 }, "native": {}, "type": "state", "_id": "javascript.0.homeState", "acl": { "object": 1638, "state": 1638 } }
-
Wie sieht dein Datenpunkt aus? `
So:{ "common": { "name": "Wochenprogramm", "role": "", "type": "number", "desc": "Auswahl Wochenprogramm für Wandthermostate", "states": "0:Normalwoche;1:Woche 1;2:Woche 2", "min": 0, "max": 2, "def": 0, "read": true, "write": true }, "native": {}, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 }, "_id": "javascript.0.Wochenprogramm", "type": "state" }
-
{ "states": "0:Normalwoche;1:Woche 1;2:Woche 2", ```` `
Sollte es nicht ein Objectt statt ein String sein?
"states": {"0":"Normalwoche","1":"Woche 1","2":"Woche 2"
-
Sollte es nicht ein Objectt statt ein String sein? `
Beide Versionen sind möglich (http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules). -
Wie sieht dein Datenpunkt aus? `
So:{ "common": { "name": "Wochenprogramm", "role": "", "type": "number", "desc": "Auswahl Wochenprogramm für Wandthermostate", "states": "0:Normalwoche;1:Woche 1;2:Woche 2", "min": 0, "max": 2, "def": 0, "read": true, "write": true }, "native": {}, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 }, "_id": "javascript.0.Wochenprogramm", "type": "state" } ```` `
Es war noch ein Fehler drin. /opt/iobroker/node_modules/iobroker.admin/www/js/adminStates.js, Zeile 208
Aus
var parts = s.split(':');
bitte das machen
var parts = s****[v]****.split(':');
-
Sollte es nicht ein Objectt statt ein String sein?
Beide Versionen sind möglich ([http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules](http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules)).
Ehrlich gesagt, es geht hier nicht um jqGrid, sondern um ioBroker. Aber genau für dich habe ich das in admin ermöglicht. Ich empfehle trotzdem ein Object zu benutzen. -
var parts = s[v].split(':'); `
Danke, damit funktioniert es. Es wird jetzt zwar der Wert im Reiter "Zustände" angezeigt und nicht mehr der aktuelle Zustandstext wie vorher. Bei Änderung des Wertes im Reiter "Zustände" werden die Zustandstexte zur Auswahl angeboten, was o.k. ist. -
Paul,
hast Du ein jqui - select valuelist für dieses Datenpunkt? Wie sieht es bei Dir die "Values" und "Text" Feldern?