Zahlencodes als Klartext
Manche Geraete schicken eine Zahl und meinen einen Zustand - der
go-eCharger etwa 2 fuer "Charging". Welche Zahl welchen Namen hat, steht im
value_template der Home-Assistant-Discovery als Werttabelle:
{{ ['Unknown','Idle','Charging','WaitCar','Complete','Error'][value_json|int] }}
Das ist kein Pfad in die Nutzlast, sondern eine Uebersetzung, und sie wurde
bisher verworfen. Jetzt landet sie in possible_values - in derselben
Schreibweise, die WLED fuer seine Effektliste schon benutzt, naemlich einer
Liste aus {Wert: Bezeichnung}. Damit versteht der Editor sie ohne
Zusatzarbeit und macht eine Auswahlliste daraus. Ein Versatz im Ausdruck
wandert in die Schluessel: aus [value_json|int-3] wird {"3":"Default"}.
Der Runner uebersetzt beim Lesen, eine Bedingung vergleicht also den
Klartext. Steht die Zahl nicht in der Tabelle, bleibt sie stehen - ein
erfundener Name waere schlimmer als ein roher Wert.
Dabei ist ein Folgefehler aufgefallen: Auswahlwerte in dieser Schreibweise
kamen im Editor als "[object Object]" an. Die alte addOptions kannte die
Form, der neue Modell-Aufbau nicht - aufgefallen ist es nie, weil WLED beim
Umbau abgeschaltet war. Der Katalog liefert Auswahlwerte jetzt einheitlich
als {value, label}, und zwar seitenrichtig:
Messwert angezeigt Charging, gespeichert Charging
(der Runner hat schon uebersetzt)
Parameter angezeigt Blink, gespeichert 1
(das Geraet will die Zahl)
Die Uebersicht loest die Bezeichnung ebenfalls auf: "Effekt (Blink)" statt
"Effekt (1)".
Nachgemessen: alle fuenf Werttabellen auf dem Broker richtig erkannt,
einschliesslich des Versatzes, kein Fehltreffer unter den 35 uebrigen
Vorlagen. Live liefert der go-eCharger jetzt Idle, Neutral, Auto, Eco und
None statt 1, 0, 0, 4, 0. Ein weiterer Discovery-Lauf aendert keine Zeile.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -84,9 +84,11 @@ function wertFeld(spec, wert) {
|
||||
optionListe(feld, [{ value: "true", text: "JA" }, { value: "false", text: "NEIN" }],
|
||||
wert === "" ? "true" : wert);
|
||||
} else if (spec.input === "select") {
|
||||
// Die Auswahl kommt fertig aus dem Katalog: bei Messwerten steht der
|
||||
// Klartext auch als Wert, bei Geraeteparametern die Zahl dahinter.
|
||||
feld = document.createElement("select");
|
||||
feld.className = "form-select";
|
||||
optionListe(feld, spec.options.map(o => ({ value: o, text: o })), wert);
|
||||
optionListe(feld, spec.options.map(o => ({ value: o.value, text: o.label })), wert);
|
||||
} else {
|
||||
feld = document.createElement("input");
|
||||
feld.className = "form-control";
|
||||
@@ -104,7 +106,7 @@ function wertFeld(spec, wert) {
|
||||
/** Standardwert, wenn eine Zeile auf einen anderen Messwert umgestellt wird. */
|
||||
function standardWert(spec) {
|
||||
if (spec.input === "bool") return "true";
|
||||
if (spec.input === "select") return spec.options.length ? spec.options[0] : "";
|
||||
if (spec.input === "select") return spec.options.length ? spec.options[0].value : "";
|
||||
if (spec.input === "time") return "00:00";
|
||||
if (spec.input === "date") return new Date().toISOString().split("T")[0];
|
||||
if (spec.input === "number") return "0";
|
||||
|
||||
Reference in New Issue
Block a user