NEWS
(GELÖST) ID Selektoren bei True in Datenpunkt schreiben
-
Hello,
Ich steh auf der Leitung.
Würde gerne bei einer meiner Aufzählungen gerne die "Namen" der Datenpunkte in einen Datenpunkt schreiben. Allerdings nur wenn diese TRUE sind (sind alles Logikwerte). Falls einer oder mehrere FALSE sind sollen diese "Namen" auch nicht im Datenpunkt erscheinen. Ich möchte das nicht als Liste sondern, wie gesagt, den Namen der jeweiligen Datenpunkte, evtl. Kommasepariert, in einen String schreiben. Anbei jetzt mal mein Blockly....SO kann das natürlich nicht funktionieren, also es wird mir in diesem Fall nur der letzte auf TRUE gesetzte Name des Datenpunktes in das Objekt geschrieben.
Ziel ist es aus VIS per Checkboxen diese Werte in einen Datenpunkt zu schreiben um z.B. einen Value anzuzeigen oder/und per CRON als History in einem JSON zu visualisieren.Mir raucht grad schon der Kopf und wäre für HELP sehr dankbar.
Merci
-
@djmarc75
Vorschlag: -
@paul53
Habs jetzt mal 1:1 nachgebaut mit dem Ergebniss dass bei jedem Klick einfach nur alle Datenpunkte in das Objekt geschrieben werden... ABER mit Komma dazwischen
Habe auch schon ein bissle mit dem "ids vom Selektor-Block" rumgespielt aber ohne Erfolg. -
@djmarc75 sagte: bei jedem Klick einfach nur alle Datenpunkte in das Objekt geschrieben werden.
Alle Datenpunkte mit dem Wert true, die "enum.functions.pepper" zugeordnet sind?
-
@paul53 said in ID Selektoren bei True in Datenpunkt schreiben:
Alle Datenpunkte mit dem Wert true, die "enum.functions.pepper" zugeordnet sind?
Alle, auch die auf FALSE sind.
-
@djmarc75 sagte: Alle, auch die auf FALSE sind.
Das verhindert
falls Wert vom Objekt ID id
Oder ist "false" ein String?
Poste mal den erzeugten Javascript-Code ohne die letzte Zeile in Code tags.
-
var Liste, Futterliste, i; Liste = Array.prototype.slice.apply($("*(functions=pepper)")); on({id: Liste, change: "ne"}, async function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; Futterliste = []; for (var i_index in Liste) { i = Liste[i_index]; if (getState(i).val == true) { Futterliste.push((obj.common ? obj.common.name : "")); } } setState("0_userdata.0.Pepper.Aufgaben.Frischfutter.Futterliste"/*Futterliste*/, (Futterliste.join(',')), true); });
-
Es verhält sich im Moment so, dass, immer wenn ich einen Datenpunkt auf ändere, die Anzahl der auf True gesetzten stimmt, aber es wird, als Beispiel dann dreimal "Tomate" angezeigt, obwohl Gurke, Tomate und Karotte ausgewählt sind. Quasi immer der zuletzt geänderte wird dann angezeigt.
-
@djmarc75 sagte: dreimal "Tomate" angezeigt, obwohl Gurke, Tomate und Karotte ausgewählt sind.
Sorry, mein Fehler: Name enthält den Namen des Trigger-Datenpunktes, der sich in der Schleife nicht ändert. Du benötigst anstelle von Name eine JS-Funktion getName(id) mit Ergebnis mit folgendem Inhalt:
return getObject(id).common.name;
-
@paul53
Du bist spitze !!!
Vielen Dank und ich setzte den Post gleich mal auf gelöst !!!!MERCI
-
@paul53
Muss nochmal was nachfragen...Gibt es auch die Möglichkeit den ganzen Objektpfad auszulesen und diesen dann in einen Datenpunkt zu schreiben ?
-
@djmarc75 sagte: Gibt es auch die Möglichkeit den ganzen Objektpfad auszulesen und diesen dann in einen Datenpunkt zu schreiben ?
Mit Objektpfad meinst Du die ID? Die liegt ja bereits als Variable
id
vor. -
@paul53 said in (GELÖST) ID Selektoren bei True in Datenpunkt schreiben:
Mit Objektpfad meinst Du die ID? Die liegt ja bereits als Variable id vor.
0_userdata.0.Spotify.Variablen_zur_Steuerung.Headset
z.B. diesen kompletten Pfad wenn Wert true in einen Datenpunkt schreiben.
-
@djmarc75 sagte: z.B. diesen kompletten Pfad wenn Wert true in einen Datenpunkt schreiben.
Das ist der Inhalt der Variablen id. Also einfach die Funktion getName(id) weglassen und id in die Liste schreiben.
-
@paul53
Perfekt, wie immer.
Danke