NEWS
Werteliste
-
Hallo zusammen,
ich habe in der Homematic eine Werteliste erstellt unter den Variablen.
z.B.
19;20;21
Wenn ich nun im Vis eine Dropdown Liste erstelle werde auch die Werte angezeigt.
Wenn ich nun einen Wert auswähle und in ein Textfeld schreiben will, dann erhalte ich dort nur die Index Nummer und nicht den Value.
In meinem Fall ist es so, das 19 Index 0 ist, 20 Index 1 usw. ist.
Wie komme ich an den eigentlich Wert?
-
Das ist richtig so: 0 entspricht dem 1. Eintrag deiner Liste. Dort können ja auch Strings stehen. Mit Vis schaltest du halt entsprechend die Werte der Liste durch. Was möchtest du denn machen?
Grüße Brati
von unterwegs gesendet.
-
Wenn du beispielsweise in Javascript programmierst. lebst Du Dir ein Array mit den Werten an und nimmst den Index aus der Dropdownliste um den wahren Wert aus dem Array zu erhalten. Einziger Schönheitsfehler daran ist, dass man an zwei Stellen die Liste pflegen muss: in VIS und in dem Javascript.
-
Schon mal danke für Antwort.
Ich würde ganz gerne den ausgewählten Wert in ein Textfeld schrieben und nicht die ausgewählte Index Nummer.
-
Ich würde ganz gerne den ausgewählten Wert in ein Textfeld schrieben und nicht die ausgewählte Index Nummer. `
Mit folgendem Javascript-Code erhält man den Zustandstext, wenn der Index und die Datenpunkt-ID vorliegen:var txt = getObject(id).common.states[index];
-
So,
ich habe jetzt mal das Textfeld Widget aktiviert, und habe unter "Skripte" folgenden Code eingtragen
var txt = getObject(hm-rega.0.3187).common.states[1];
Dann habe ich ich in dem Textfeld Widget unter Object ID "txt" eingetragen, um auf die Variable im Script zu lesen.
Ist der Ansatz richtig, ich sehe leider nichts im Textfeld?
-
Ich schalte eine Werteliste im VIS wie folgt
Widget0 (sichtbar bei Wertindex = 0, schaltet Index auf 1)
Widget1 (sichtbar bei Wertindex = 1, schaltet Index auf 2)
Widget2 (sichtbar bei Wertindex = 2, schaltet Index auf 0)
usw.
Die liegen alle übereinander und haben jeweils ein anderes Icon, so kann man per Druck die Werteliste durchschalten, es sieht schicker aus und geht ohne JS. Die CCU stellt den Wert eh noch automatisch und ich kann es bei Bedarf ändern bzw. kontrollieren.
Es müßte auch noch ein Widget List geben, wo du selber einträgst, was bei 0,1,2… angezeigt werden soll.
Grüße
Brati
-
So,
ich habe jetzt mal das Textfeld Widget aktiviert, und habe unter "Skripte" folgenden Code eingtragen
var txt = getObject(hm-rega.0.3187).common.states[1];
Dann habe ich ich in dem Textfeld Widget unter Object ID "txt" eingetragen, um auf die Variable im Script zu lesen.
Ist der Ansatz richtig, ich sehe leider nichts im Textfeld? `
Nee, du musst die Variable noch in einen State schreiben und diesen dann anzeigen lassen. Das auslesen muss dann noch auf die Änderung der Variable triggern. Dass kann ich aber von unterwegs nicht schreiben…
-
Dankeschön Brati!
Irgendwie habe ich es aber nicht so recht verstanden.
Anbei mal zwei Bilder, um mein Problem besser zu verdeutlichen.
Danke für deine Hilfe!
1544_13-10-2016_15-20-39.gif
1544_13-10-2016_15-23-51.gif -
ohne zu wissen ob das Skript läuft…
auf jeden Fall reicht es nicht in die ObjectID einfach "txt" zu schreiben.
Dort muss die gesamte Bezeichnung rein. Also etwa javascript.0.xxxxx.
Am besten Auswählen über das Viereck neben dem Feld.
Ok, ich sehe gerade, Dir fehlt auch noch der Datenpunkt an sich.
Im Moment erzeugst du nur einen Wert in einer Variable. Dieser Wert wird aber nirgend gespeichert.
Zuerst musst Du Dir mit createState den Datenpunkt anlegen.
Dann fehlt auch noch der Auslöser für das Befüllen des Wertes. Dieser soll sich ja wahrscheinlich aktualisieren wenn sich etwas ändert.
Ansonsten wird txt immer nur dann gefüllt wenn das Skript gestartet wird.
Aber im Moment hab ich sehr wenig Zeit. Falls Dir bis heute Abend kein anderer geholfen hat und ich noch dazu komme...
Aber eigentlich sind hier immer alle sehr schnell...(und ich meistens zu langsam )
-
Zuerst musst Du Dir mit createState den Datenpunkt anlegen….Dann fehlt auch noch der Auslöser für das Befüllen des Wertes. Dieser soll sich ja wahrscheinlich aktualisieren wenn sich etwas ändert. `
createState("Zustandstext","19"); // Datenpunkt für Zustandstext erzeugen on("hm-rega.0.3187", function(dp) { setState("Zustandstext", dp.common.states[dp.state.val]); });
-
sag ich doch…
Paul war schneller
-
Herzlichen Danke für eure Hilfe!
Nun funktioniert es auch.
-
Fixed? Thema anpassen.