diff --git a/restricted/deviceDiscovery/modules/gartenwasser_module.py b/restricted/deviceDiscovery/modules/gartenwasser_module.py index 5f0fbde..b297727 100644 --- a/restricted/deviceDiscovery/modules/gartenwasser_module.py +++ b/restricted/deviceDiscovery/modules/gartenwasser_module.py @@ -75,8 +75,11 @@ class GartenwasserModule(BaseModule): sie stimmt die Automatik nicht mehr: * LastWatering trägt je Ventil ein "daysSinceWatering" - die Anzahl - Tage, nicht den Zeitstempel. + Tage, nicht den Zeitstempel. Das Feld fehlt, solange für ein Ventil + keine Bewässerung bekannt ist. * WateringToday wird um Mitternacht zurückgesetzt. + * Running sagt retained, ob gerade etwas läuft, und fällt über eine + Last-Will-Nachricht auch dann auf false, wenn die Steuerung wegbricht. """ def is_enabled(self) -> bool: @@ -110,18 +113,42 @@ class GartenwasserModule(BaseModule): """ topic = steuerung["topic"] + # Läuft an dieser Steuerung gerade etwas? Der Wächter für jede Regel, + # die hier etwas anstoßen will - die Zonen einer Steuerung hängen an + # derselben Leitung, zwei gleichzeitig gibt es nicht. + # + # Gelesen wird das aus Running und nicht aus Timers: Timers ist nicht + # retained und wird nur im Sekundentakt gesendet, solange etwas läuft. + # Der Runner sähe im Ruhezustand gar nichts und behielte nach einem + # Lauf den zuletzt gesehenen Wert - also genau das Gegenteil von + # verlässlich. Running ist retained und fällt über eine + # Last-Will-Nachricht auch dann auf false, wenn die Steuerung mitten + # im Gießen wegbricht. states = [{ - # Klartext der gerade laufenden Automatik, leer wenn keine läuft. - # Ohne Werteliste: was die Steuerung bei Stillstand genau schickt, - # steht in keiner Dokumentation, und eine falsche Übersetzung wäre - # schlimmer als der rohe Wert. - "name": "Laufende Automatik", - "url": topic + "/Timers", - "value_path": "auto", + "name": "Bewässerung läuft", + "url": topic + "/Running", + "value_path": "running", + "type": "bool", + }, { + # Klartext der laufenden Automatik ("Hoch", "Trog", "Vorn"), leer + # wenn von Hand oder gar nicht bewässert wird. + "name": "Laufender Modus", + "url": topic + "/Running", + "value_path": "mode", "type": "string", }] for valve, zone in steuerung["zonen"]: + if len(steuerung["zonen"]) > 1: + # Bei einer Steuerung mit nur einer Zone wäre das derselbe Wert + # wie "Bewässerung läuft" - ein zweiter Messwert, der nie etwas + # anderes sagt, macht die Auswahl nur länger. + states.append({ + "name": "Bewässerung läuft " + zone, + "url": topic + "/Running", + "value_path": "running%d" % valve, + "type": "bool", + }) states.append({ # Ersetzt die Zwölf-Stunden-Sperre von auto_watering.py: # "heute noch nicht bewässert" heißt hier schlicht "= 0". @@ -145,6 +172,11 @@ class GartenwasserModule(BaseModule): # Tage her" ist damit nicht formulierbar. Die Steuerung liefert # deshalb gleich die Anzahl Tage - dafür wurde ihre Firmware # erweitert, das Feld gab es vorher nicht. + # + # Für ein Ventil, das noch nie lief, lässt sie das Feld weg + # statt eine 0 zu schicken. Eine 0 hieße "heute bewässert" und + # würde den Notlauf für immer unterdrücken; ohne Feld bleibt + # der Messwert leer, und die Bedingung greift schlicht nicht. "name": "Tage seit Bewässerung " + zone, "url": topic + "/LastWatering", "value_path": "daysSinceWatering%d" % valve,