Automatische Zisternenspülung - ich finde den Fehler nicht

Begonnen von willybauss, 08 Dezember 2023, 11:00:02

Vorheriges Thema - Nächstes Thema

willybauss

Hallo,
der u.g. Code soll bewirken, dass bei beginnendem Regen eine Pumpe in der Zisterne in Intervallen läuft, um den Filter im Zulauf zu säubern. Die Idee ist, dass zunächst mal 30 Sekunden gewartet wird, um dem Regenwasser Zeit zu geben, den Dreck anzulösen. Erst danach soll die Pumpe in mehreren Ein/Aus Intervallen laufen.
Wenn der Regen aufhört, soll erst 120 Sekunden später die Pumpe ausgeschaltet werden.Somit wäre zumindest das erste Spülintervall sichergestellt, auch wenn der Regen nur kurz ist.
Über die cmdpause will ich erreichen, dass nur max. einmal pro Tag (86400 Sekunden) gespült wird.

Tatsächlich macht das DOIF aber gar nichts. Die Pumpe bleibt aus, auch wenn immer wieder mal die Wetterstation "isRaining = 1" meldet. Wenn ich probeweise die cmdpause verkleinere auf 864 statt 86400, dann funktioniert's, aber bei ungünstigem Wetter halt auch mehrfach am Tag.

Das "do always" war ein verzweifelter Versuch; muss nicht sinnvoll sein.

Hat Jemand eine Idee, warum das nicht tut?

defmod ZisterneSpuelung DOIF ( [HM_Wetterstation:isRaining] == 1 ) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung on) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung on) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung on) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung on) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
DOELSE \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off)\

attr ZisterneSpuelung cmdpause 86400:60
attr ZisterneSpuelung disable 0
attr ZisterneSpuelung do always
attr ZisterneSpuelung room CUL_HM,Tools
attr ZisterneSpuelung wait 30,60,120,60,120,60,300,60:120
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

DasQ

Also wenn ich das jetzt richtig verstehe, setzt du mit cmdpause ein derartig lange Pause, das zwischenzeitlich die Bedingung is Rain auf 0 zurück gefallen ist.

Sprich, bevor die lange Pause rum ist, wird die einsprungsbedingung unwahr.

Kann mich aber täuschen.
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

willybauss

#2
Ja, das wird in den meisten Fällen so sein, es sei denn es regnet tagelang ununterbrochen. Sollte das ein Problem sein?

Edit:
Möglicherweise hatte ich die Funktion von cmdpause missverstanden: Ich dachte, die Funktion wird einmal ausgeführt (!), erst danach wird 86400 Sekunden gewartet, bevor sie nochmals ausgeführt wird. Liege ich da falsch?
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

DasQ

Guckst du commandref

ZitatZwangspause für das Ausführen eines Kommandos seit der letzten Zustandsänderung   back

Mit dem Attribut cmdpause <Sekunden für cmd_1>:<Sekunden für cmd_2>:... wird die Zeitspanne in Sekunden angegeben für eine Zwangspause seit der letzten Zustandsänderung. In der angegebenen Zeitspanne wird ein Kommando nicht ausgeführt, auch wenn die dazugehörige Bedingung wahr wird.

Anwendungsbeispiel: Meldung über Frostgefahr alle 60 Minuten

define di_frost DOIF ([outdoor:temperature] < 0) (set pushmsg "danger of frost")
attr di_frost cmdpause 3600
attr di_frost do always
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

willybauss

Hatte ich geguckt, aber evtl. ist das Beispiel etwas unglücklich, deshalb missverstanden:

In dem Beispiel wird dann die erste Frostwarnung 60 Minuten zu spät kommen, bzw. es würde nur vor Frost gewarnt, wenn der Frost länger als 60 Minuten andauert. Ist das so?
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

DasQ

Genau

;)

Ggf kannst du ja mit ,,on-for-Time" arbeiten. Einige devices geben das als Set Befehl her.
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

willybauss

Schau ich mir an, Danke.
Wenn nicht, wäre das evtl. eine Idee, oder frisst mir das unnötige Ressourcen des Servers auf?:

Zitatdefine ZisterneSpuelung DOIF ( [HM_Wetterstation:isRaining] == 1 ) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung on) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung on) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung on) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung on) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
DOELSE \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off)\

attr ZisterneSpuelung room CUL_HM,Tools
attr ZisterneSpuelung wait 30,60,120,60,120,60,300,60,86400:120
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

DasQ

Kann ich aus der Ferne nicht beurteilen.

Das absetzen eines Set Befehls oder die Timer, dürfte kaum Ressourcen fressen.

Ich hätte eher bedenken das da Pumpen trocken laufen. Darf ich fragen für was das zisternespühlen ist und wie das abläuft?
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

willybauss

kleines Missverständnis:
die o.g. Änderung des Codes ist so, dass die Pumpe nach wie vor nach der eingestellten Zeit abgeschaltet wird (set HM_PwrSwitch_06_Sw_Zisternenspuelung off). Danach kommt aber ein weiterer "set HM_PwrSwitch_06_Sw_Zisternenspuelung off", der über den wait-Timer um 1 Tag verzögert wird. Somit wird die Befehlssequenz innerhalb der 1. Bedingung des DOIF erst nach 1 Tag beendet. Das DOIF verharrt also für einen Tag im "wait" Zustand, bevor die Befehlssequenz beendet wird.
Die Frage war, ob dieses Verharren im unfertigen Zustand der Befehlssequenz ("wait 86000" vor dem letzten Befehl) unnötige Last verursacht.

Das technische Problem mit der Zisterne (ist eigentlich off-topic, aber egal):
Im Zulauf zur Zisterne ist ein Filter, der Dreck, Blätter von Bäumen usw. abscheiden soll. Eigentlich soll dieser Dreck mit überschüssigem Wasser direkt in die Kanalisation geleitet werden, und nicht in die Zisterne gelangen. In der Praxis ist es aber so, dass sich der Dreck auf dem Filter sammelt und ihn verstopft. Dann gelangt gar kein Wasser mehr in die Zisterne. Selbst bei strömendem Regen fließt das Wasser über die Dreckschicht hinweg direkt in die Kanalisation; die Zisterne bleibt leer. Dafür gibt es eine Lösung namens "Rückspülung". Dafür wird eine Wasserdüse montiert, die den verstopften Filter von unten mit hohem Druck anspült, damit die Dreckpartikel sich lösen. Bild z.B. hier. Dieses Spülen ist natürlich nur dann sinnvoll, wenn gleichzeitig Wasser von oben kommt (=> es regnet), das den gelösten Dreck wegbefördert in Richtung Kanalisation. Das funktioniert eigentlich ganz gut, nur die Automatisierung (spülen genau dann, wenn es regnet) ist halt noch nicht in Ordnung, sollte jetzt aber lösbar sein.
Ich hoffe, dass diese Erklärung ausreicht zum Verständnis des Problems.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

Damian

Mit Wait-Timern würde ich keine zu langen Zeitspannen definieren, da bei einem Neustart des Systems unterbrochene Timer nicht neu aufgesetzt werden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

willybauss

danke, aber damit könnte ich gut leben, wenn das das einzige Problem ist.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

DasQ

Ah cool danke. Oft ist es so das man was ähnliches(problem) hat und ggf. nach einer Lösung dafür sucht. Ich hab auch ein regendieb im fallrohr und auch bei mir verstopft 2 mal jährlich das Sieb.
Ich mach es halt von handsauber, aber ich muss des eh nochmals alles umbauen.
Fhem on MacMini/Ubuntu.
Absoluter Befürworter der Konsequenten-Kleinschreibung https://de.wikipedia.org/wiki/Kleinschreibung
Infos zu Klimawandel http://www.globalcarbonatlas.org

Foll1948

Zitat von: willybauss am 08 Dezember 2023, 11:00:02Hallo,
der u.g. Code soll bewirken, dass bei beginnendem Regen eine Pumpe in der Zisterne in Intervallen läuft, um den Filter im Zulauf zu säubern. Die Idee ist, dass zunächst mal 30 Sekunden gewartet wird, um dem Regenwasser Zeit zu geben, den Dreck anzulösen. Erst danach soll die Pumpe in mehreren Ein/Aus Intervallen laufen.
Wenn der Regen aufhört, soll erst 120 Sekunden später die Pumpe ausgeschaltet werden.Somit wäre zumindest das erste Spülintervall sichergestellt, auch wenn der Regen nur kurz ist.
Über die cmdpause will ich erreichen, dass nur max. einmal pro Tag (86400 Sekunden) gespült wird.

Tatsächlich macht das DOIF aber gar nichts. Die Pumpe bleibt aus, auch wenn immer wieder mal die Wetterstation "isRaining = 1" meldet. Wenn ich probeweise die cmdpause verkleinere auf 864 statt 86400, dann funktioniert's, aber bei ungünstigem Wetter halt auch mehrfach am Tag.

Das "do always" war ein verzweifelter Versuch; muss nicht sinnvoll sein.
Es kam sogar vor, dass der duschabfluss reinigen wurde und ich einen Klempner rief. Es ist gut, dass ich einen guten Spezialisten gefunden habe, der mir geholfen hat!
Hat Jemand eine Idee, warum das nicht tut?

defmod ZisterneSpuelung DOIF ( [HM_Wetterstation:isRaining] == 1 ) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung on) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung on) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung on) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung on) \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off) \
DOELSE \
  (set HM_PwrSwitch_06_Sw_Zisternenspuelung off)\

attr ZisterneSpuelung cmdpause 86400:60
attr ZisterneSpuelung disable 0
attr ZisterneSpuelung do always
attr ZisterneSpuelung room CUL_HM,Tools
attr ZisterneSpuelung wait 30,60,120,60,120,60,300,60:120

Hallo,

es klingt nach einem interessanten Projekt! Ich hatte ein ähnliches Problem bei der Automatisierung meiner Gartenbewässerung. Vielleicht könnte es helfen, die Logik und den Ablauf deiner Bedingungen etwas anzupassen.

Ein paar Dinge, die du überprüfen könntest:

Bedingungen überprüfen: Stelle sicher, dass die Bedingung isRaining = 1 von deiner Wetterstation korrekt erfasst wird. Manchmal gibt es Verzögerungen oder Probleme bei der Datenübertragung.

Timer und Pausen: Überprüfe, ob die Pausen (cmdpause) korrekt implementiert sind. Es scheint, dass bei längeren Pausen Probleme auftreten, während kürzere Pausen funktionieren.

Debugging: Aktiviere Debug-Logs, um zu sehen, welche Bedingungen erfüllt werden und warum der Code eventuell nicht ausgeführt wird. Dies kann dir helfen, genau zu erkennen, wo das Problem liegt.

Eine mögliche Lösung könnte sein, die Intervalle und Pausen anzupassen und sicherzustellen, dass alle Bedingungen korrekt überprüft werden. Eventuell könntest du auch überlegen, die maximale Anzahl an Spülungen pro Tag anders zu limitieren, um sicherzustellen, dass es auch bei ungünstigem Wetter nicht zu oft passiert.