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)
|
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
state_type = VALUES(state_type),
|
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),
|
possible_values = VALUES(possible_values),
|
||||||
unit = VALUES(unit),
|
unit = VALUES(unit),
|
||||||
url = VALUES(url),
|
url = VALUES(url),
|
||||||
@@ -485,7 +493,9 @@ class DatabaseManager:
|
|||||||
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
|
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
state_type = VALUES(state_type),
|
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),
|
unit = VALUES(unit),
|
||||||
url = VALUES(url),
|
url = VALUES(url),
|
||||||
value_path = VALUES(value_path),
|
value_path = VALUES(value_path),
|
||||||
|
|||||||
Reference in New Issue
Block a user