Hilfe bei der optimalen Umsetzung

Begonnen von NehCoy, 10 August 2018, 07:50:30

Vorheriges Thema - Nächstes Thema

NehCoy

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


volschin

Erste Idee: Structure auf die Module und einen Watchdog darauf.
Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

CoolTux

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?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CBSnake

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
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

volschin

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.
Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

volschin

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.
Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

NehCoy

#6
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

alru

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
Gruß,

Stefan
(Raspi 3B - Stretch / HM-LGW / HomeMatic / MySensors)

NehCoy

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

alru

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.
Gruß,

Stefan
(Raspi 3B - Stretch / HM-LGW / HomeMatic / MySensors)

NehCoy

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

alru

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.
Gruß,

Stefan
(Raspi 3B - Stretch / HM-LGW / HomeMatic / MySensors)

NehCoy

Es soll aber das Ventil geöffnet werden, dass ich eben zuvor ausgewählt habe ...

alru

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
Gruß,

Stefan
(Raspi 3B - Stretch / HM-LGW / HomeMatic / MySensors)

NehCoy

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