Hallo!
Ich benötige mal bitte Tipps, wie man mit FHEM folgendes "am besten"/"sinnvollsten"/"einfachsten" automatisiert.
Folgendes habe ich vor:
Ich habe einige Aktoren für die Bewässerung (für unterschiedliche Bewässerungsläufe + Pumpe). Ca. 30 Sekunden bevor ein Ventil zur Bewässerung geöffnet werden soll, soll die Pumpe eingeschaltet werden, damit Wasserdruck aufgebaut werden kann (Momentan mache ich das noch manuell). Die Pumpe soll wieder ausgeschaltet werden, wenn kein Kreislauf mehr eingeschaltet ist.
Mein Lösungsweg wäre hätte folgender:
Ich lege für jeden Bewässerungskreislauf ein Dummy-Device, mit dem Namensschema dy.Bewaesserung.X.Y an.
Mit einem notify auf dy.Bewaesserung. bekomme ich mit, wann was eingeschaltet und ausgeschaltet wird.
Entsprechend kann ich bei einem "on" die Pumpe einschalten und mit "at +00:00:30" 30 Sekunden später das Ventil öffnen. Beim Ausschalten soll die Pumpe ebenfalls nicht sofort ausschalten. Beim Rasensprenger muss z.B. zwischen Kreisläufen gewechselt werden.
Mein Problem
Das sind eigentlich 3 Dinge, bei deinen ich ad-hoc keine Lösung habe:
1. Wie mache ich am besten das Mapping, von dy.Bewaesserung.* auf den eigentlichen dazugehörigen Aktorausgang?
2. Wie prüfe ich am besten, dass alle Ventile seit mindestens 10 Sekunden geschlossen sind, bevor ich die Pumpe wieder abschalte?
3. Kleines "Problem": Wenn die Pumpe schon an ist brauche ich bei öffnen eines Ventils nicht noch mal 30 Sekunden warten.
Danke für eure Hilfe und viele Grüße
NehCoy
Erste Idee: Structure auf die Module und einen Watchdog darauf.
Fang doch einfach an mit den Dummys und der Struktur. Da kann man ja nichts falsch machen.
Wie sind denn Deine Ventile und Deine Pumpe aktuell in FHEM dar gestellt?
Moin,
structure auf die Ventile, über die Attribute einstellen: alle zu = off, eines auf = on
ich bin doif fan :-) nimm die dummy raus, setze dafür ein reading im aktor z.b. setreading aktor xy einschaltwunsch on
zu 1.
triggern auf einschaltwunsch on und obige Structure abfragen, ist die auf on, ist eines der Ventil auf und die Pumpe ist nicht nur an sondern lief vorher auch schon 30 sec, dann kannst mit $DEVICE direkt auf des auslösende Ventil zugreifen.
im zweiten DOIF zweig wird auch auf einschaltwunsch on getriggert aber hier ist structure off dann pumpe an und at +00:00:30 $DEVICE on
zu 2.
watchdog oder doif auf die Structure
zu 3.
wäre im doif oben ja schon erledigt
grüße
Achim
Die Structure attributierst Du so, dass sie auf ON geht, sobald ein Kreislauf ON ist. Der Watchdog überwacht das OFF und wenn nach 30s nicht wieder ein ON kommt, wird die Pumpe abgeschaltet.
Der Startteil könnte etwas komplexer sein, jenachdem, wie wirklich deine Anforderung ist. Im notify auf den dummy abfragen, ob die Pumpe schon läuft, wenn nein, anschalten und entweder ein ein at oder ein pause einbauen. Jetzt wird es komplexer, wenn Du konkurrierende Schaltungen abfangen musst. Kommt nach 10s die nächste Anschaltung rein, läuft die Pumpe ja bereits, aber Druck ist erst in 20s aufgebaut.
Das Problem der Konkurrenz lässt sich mglw. auch einfach lösen, indem die Structure nicht auf die Dummies, sondern die Ventile gelegt wird. Diese wird neben der Pumpe im Start-notify abgefragt und wenn OFF um 30s verzögert.
Dazu sollte aber die Nachlaufzeit etwas länger als 30s sein, sonst bekommst du evtl. ein Timingproblem. Also Nachlauf z.B 35s einstellen.
Hallo zusammen!
Erst noch mal danke für eure Hilfestellung und sorry für meine späte Rückmeldung.
Leider finde ich kaum Zeit mich dem Thema FHEM zu widmen.
Folgendes konnte ich bereits erfolgreich umsetzen:
- Eine Struktur mit den Venitlen anlegen
Ist mindestens ein Ventil geöffnet, ist die Struktur "on"; sind alle Ventile geschlossen, ist der Zustand der Struktur "off"
clientstate_behavior = relative
clientstate_priority = on|On|on off|Off|off
- Einen Watchdog anlegen, der momentan noch einen Dummy zum Testen auf on setzt, wenn seit 5 Sekunden die Struktur den Zustand "off" hat
ZitatDEF = struct.PumpenAutomatik:off 00:00:05 struct.PumpenAutomatik:on set dy.test on; trigger watchdog.Pumpe .
Soweit, so gut.
Für mich noch nicht gelöst ist das verzögerte Einschalten der Ventile, also 30 Sekunden nach der Pumpe. Mit dem aktivieren des Ventils wird es ja auch in Wirklichkeit geöffnet.
@volschin:ZitatDiese wird neben der Pumpe im Start-notify abgefragt und wenn OFF um 30s verzögert.
Deinen Vorschlag verstehe ich leider (noch) nicht. Könntest du das bitte näher erläutern.
Anderfalls müsste ich doch Dummies dafür verwenden. Dann stellt sich wieder die Frage nach Punkt 1
ZitatWie mache ich am besten das Mapping, von dy.Bewaesserung.* auf den eigentlichen dazugehörigen Aktorausgang?
Der Automaisierungmechanismus wäre dann:
- Dummies für die Ventile anlegen
- Dummies in einer Struktur zusammenfassen
- Watchdog auf die Struktur zum wiederausschalten der Pumpe nach x Sekunden, sobald kein Ventil für diese Zeit wieder geöffnet wurde
- Notify auf die Dummies, um das einschalten zu triggern und ein verzögertes Einschalten zu bewirken
Vielen Dank und viele Grüße
NehCoy
Moin,
das Timing zur Aktivierung der Ventile habe ich bei mir so gelöst:
Die Pumpe (genau genommen ein Hauswasserwerk mit Brunnenwasser) ist über ein HM-ES-PMSw1-Pl angeschlossen.
Bevor der eigentliche Bewässerungszyklus startet (also alle Ventile noch zu sind), wird die Pumpe eingeschaltet. Sie baut dann innerhalb von ca. 30 Sek den Betriebsdruck auf und schaltet sich dann ab.
Nach dieser Zeit wird die Leistungsaufnahme geprüft. Die sollte dann =0 W sein. Wenn das eintritt, startet der Bewässerungszyklus (Pumpe an, Ventile auf).
Wenn die Pumpe bei der Prüfung noch läuft, stimmt was nicht (Wassersäule weggesackt, Leck, ...) und es wird alles ausgeschaltet.
Umgesetzt wird das mit einem DOIF
Hallo alru!
Dein Problem klingt zwar ähnlich, scheint aber doch anders zu sein.
Du startest deinen Bewässerungszyklus und gehst dann eine Art Statemachine durch, oder?
Ich bestimme ja selsbt, welches Ventil geöffnet werden soll. Nur soll dieses eben erst 30 Sekunden nachdem die Pumpe eingeschaltet wurde geöffnet werden ...
Grüße
NehCoy
Hi NehCoy,
ja, es ist nicht der gleiche Prozess wie bei dir. Allerdings könnte man die Druckprüfung vor jeder Ventilöffnung vorschalten. Die einzelnen Bewässerungskreise werden bei mir auch manuell gestartet. Die Entscheidung darüber, was, wann und wie lange mit Wasser versorgt wird, will sich meine Frau nicht nehmen lassen.
Hallo!
ZitatAllerdings könnte man die Druckprüfung vor jeder Ventilöffnung vorschalten.
Die Druckprüfung könnte bei mir einfach nur "Pumpe an seit 30 Sekunden an?" lauten.
Aber genau diese 30 Sekunden sind ja das Problem ...
Grüße
NehCoy
OK, dazu könnte man beim Einschalten der Pumpe die aktuelle Zeit+30 Sek in ein reading schreiben. Dieser Zeitstempel wiederum öffnet dann dein Ventil.
Es soll aber das Ventil geöffnet werden, dass ich eben zuvor ausgewählt habe ...
Den Ablauf stelle ich mir so vor:
- Auswahl eines Ventils (z.B. über die Setlist eines Dummy)
- Dies triggert ein Event in einem DOIF und startet die Pumpe
- Dabei wird die Startzeit der Pumpe+30s in ein Reading des DOIF geschrieben
- Diese Startzeit wiederum start dann im gleichen DOIF ein weiteres cmd, dass das Ventil öffnet
Einen ähnlichen Ablauf hab ich für meine Bewässerung ebenfalls umgesetzt
Hallo!
Habe es nun wie folgt gelöst:
Für jedes Ventil ein Dummy angelegt.
Alle Dummy in eine Struktur aufgenommen, die dann "on" ist, sobald mindestens ein Element "on" ist.
Ein Notify auf diese Struktur zum direkten Einschalten der Pumpe, wenn diese On ist.
Ein Watchdog auf diese Struktur der die Pumpe nach 35 Sekunden wieder ausschalten, wenn deren Zustand Off ist.
Ein Notify auf jedes Dummy, der bei "On" das eigentliche Ventil durch einen at-Befehl 30 Sekunden später einschaltet und bei Off sofort aus.
Grüße
Neh Coy