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:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user