Discovery loescht keine laufenden Messwerte mehr

Die Upserts schrieben current_value = VALUES(current_value). Ein Modul, das
keinen Startwert kennt - das Gartenwasser-Modul zum Beispiel, dessen Werte
ausschliesslich per MQTT hereinkommen -, liefert dort NULL, und damit
ueberschrieb jeder Discovery-Lauf den laufenden Wert mit NULL.

Der Runner holte das nicht zurueck. Er merkt sich in `geschrieben`, was er
zuletzt in die Datenbank geschrieben hat, und `regelwerk_laden` uebernimmt
diesen Merker beim Neuladen per setdefault - der naechste hereinkommende
Wert war damit "unveraendert" und wurde nicht erneut geschrieben. Im Editor
stand danach "Regen heute (= )" statt "(= 0,0 mm)", und zwar bis sich der
Wert zufaellig einmal aenderte. Bei "Bewaessert heute" koennen das Tage
sein.

Jetzt COALESCE: ein NULL aus dem Modul heisst "kein Startwert" und laesst
stehen, was da ist. Module, die beim Suchen wirklich einen Wert ablesen -
Tahoma, Shelly, WLED -, schreiben ihn weiterhin.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-04 16:01:54 +02:00
co-authored by Claude Opus 5
parent 03f823ae39
commit 7b9c9362a6
+12 -2
View File
@@ -413,7 +413,15 @@ class DatabaseManager:
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE
state_type = VALUES(state_type),
current_value = VALUES(current_value),
-- COALESCE und nicht VALUES() allein: ein Modul, das
-- keinen Startwert kennt, liefert hier NULL, und das
-- loeschte bisher den laufenden Messwert. Der Runner
-- schrieb ihn auch nicht zurueck - er merkt sich, was er
-- zuletzt in die Datenbank geschrieben hat, und der
-- naechste gleiche Wert galt damit als unveraendert. Im
-- Editor stand danach "Regen heute (= )", bis sich der
-- Wert zufaellig einmal aenderte.
current_value = COALESCE(VALUES(current_value), current_value),
possible_values = VALUES(possible_values),
unit = VALUES(unit),
url = VALUES(url),
@@ -485,7 +493,9 @@ class DatabaseManager:
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE
state_type = VALUES(state_type),
current_value = VALUES(current_value),
-- Siehe insert_actor: NULL heisst "kein Startwert",
-- nicht "Messwert loeschen".
current_value = COALESCE(VALUES(current_value), current_value),
unit = VALUES(unit),
url = VALUES(url),
value_path = VALUES(value_path),