Gartenbewässerung

Begonnen von teichtaucher, 20 Juli 2016, 22:25:01

Vorheriges Thema - Nächstes Thema

teichtaucher

Hallo,
ich kann mittels Homematic hm-mod-re-8 und einer Relaisplatine meine Gartenbewässerung steuern - aber bis jetzt nur händisch. Jetzt überlege ich, wie das automatisieren kann.

Ich habe vier Kanäle, die ich steuern kann.

1) Pumpe
2) Sprinkler Kreis 1
3) Sprinkler Kreis 2
4) Wassersteckdose

Um die Bewässerung einzuschalten, muss immer die Pumpe laufen und dann eines der Ventile von 2) - 4). Am liebsten hätte ich das so, dass ich zwei Dummys definiere. Einen für die Startzeit, und einen für die Laufzeit.

Zur Startzeit vom Dummy startet dann die Pumpe und der Kreis 1. Wenn die Laufzeit abgelaufen ist, schaltet Kreis 1 ab und Kreis 2 ein. Wenn wieder die Laufzeit abgelaufen ist, schaltet Kreis 2 und die Pumpe ab.

Wie kann ich das machen? Wie definiere ich einen dummy für einen Zeitwert?

Mir schwebt so was vor:

at dummyStarzeit set Pumpe on-for-timer  dummyDauer * 2
at dummyStarzeit set SprinklerKreis1 on-for-timer dummyDauer
at dummyStarzeit + dummyDauer set SprinklerKreis2 on-for-timer dummyDauer

Kann das jemand in realen Code übersetzen?

rudolfkoenig

Ich habe die Aufgabe mit einem externen Perl-Skript geloest, eine vereinfachte und kommentierte Version ist unter contrib/garten.pl auch eingecheckt. Laeuft seit 8 Jahren unveraendert und unproblematisch.

spacy

Hallo,

Habe das bei mir per DOIF gelöst.

Habe 3 Kreise + Regensensor. Bei mir habe ich das so geregelt, es kann immer nur ein Kreis laufen. Habe über das WEB Interface die möglichkeit, die Startzeit + Dauer + Wochentag zubestimmen. Dieses wird dann für die automatische Beregnung genutzt. Ausserdem kann ich es auch manuel starten.
Wenn der Regensensor schaltet ist keine Automatische bewässerung nötig.

So sieht das dann für ein Ventil aus.

define Ventil3 dummy
attr Ventil3 alias Beregnung Vorne
attr Ventil3 devStateIcon Aus:general_aus:An An:sani_sprinkling@green:Aus
attr Ventil3 eventMap on:An off:Aus
attr Ventil3 group Beregnung Vorne
attr Ventil3 room Bewässerung
attr Ventil3 sortby 1
attr Ventil3 webCmd Auto:An:Aus

define Ventil3Start dummy
attr Ventil3Start alias Beregnung Start Vorne
attr Ventil3Start group Beregnung Vorne
attr Ventil3Start room Bewässerung
attr Ventil3Start setList state:time
attr Ventil3Start sortby 3
attr Ventil3Start webCmd state

define Ventil3Dauer dummy
attr Ventil3Dauer alias Beregnungs Dauer Vorne
attr Ventil3Dauer group Beregnung Vorne
attr Ventil3Dauer room Bewässerung
attr Ventil3Dauer setList state:time
attr Ventil3Dauer sortby 4
attr Ventil3Dauer webCmd state

define Ventil3Tag dummy
attr Ventil3Tag alias Beregnungstag
attr Ventil3Tag group Beregnung Vorne
attr Ventil3Tag room Bewässerung
attr Ventil3Tag setList state:multiple,So,Mo,Di,Mi,Do,Fr,Sa
attr Ventil3Tag sortby 5
attr Ventil3Tag userReadings weekdays {weekday2number(ReadingsVal($name, "state", ""))}
attr Ventil3Tag webCmd state
#attr Ventil3Tag eventMap So:0 Mo:1 Di:2 Mi:3 Do:4 Fr:5 Sa:6

define Ventil3An dummy
attr Ventil3An alias Zustand
attr Ventil3An devStateIcon Aus:general_aus:An An:sani_sprinkling@green:Aus
attr Ventil3An group Beregnung Vorne
attr Ventil3An room Bewässerung
attr Ventil3An sortby 2

define Wasser_Vorne_Ein_Auto DOIF ([([Ventil3Start]) - ([Ventil3Start]+[Ventil3Dauer])|[Ventil3Tag:weekdays]] and [Ventil3] eq "Auto" and [Ventil1An] ne "An" and [Ventil2An] ne "An" and [Regensensor] eq "off" or [Ventil3] eq "An") (set relais PortA7 on , set Ventil3An An) DOELSE (set relais PortA7 off , set Ventil3An Aus)
attr Wasser_Vorne_Ein_Auto do always

define Wasser_Vorne_An notify Ventil3:An { fhem "set relais PortA7 on" }
define Wasser_Vorne_Aus notify Ventil3:Aus { fhem "set relais PortA7 off" }


Vielleicht kannst es ja gebrauchen.

Gruß
Klaus

teichtaucher

Danke, das hilft mir weiter. Aber so, wie ich das verstehe regelst du den Tag, Uhrzeit und Dauer für jeden Kreis einzeln, richtig?

Ich muss mal überlegen, wie ich das mache. Ich will das ja so haben, dass erst der eine und dann der andere Kreis läuft. D.h. eine Startzeit und die Dauer ist dann für den ersten und den zweiten Kreis gültig.

spacy

Moin,

ja ich regel das für die 3 Kreise seperat.

Paul

Bei mir werden auch 3 Bereiche nacheinander beregnet. Wobei die Dauer konstant ist nur die Beregnung erst nach der Dunkelheit einsetzt.
Regen ist ein Dummy der verändert wird wenn es geregnet hat.

Du müsstest nur noch deine Pumpe im at einschalten.

*{sunset("REAL",3600)} { if ( Value ("Regen") eq "an") {fhem ("set Regner3 on-for-timer 600; define R2 at +00:11 set Regner2 on-for-timer 600; define R3 at +00:22 set Regner1 on-for-timer 600")}}
Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic

spacy

Ich habe mich mit meinem Garten und Landschaftsbauer unterhalten und der hat mir geraten den Rasen immer früh morgens zu wässern.
Abends ist er aufgeheizt und das Wasser kann nicht so gut ins Erdreich.
Wobei er morgens durch die kühlere Nacht aufnahme fähiger sein soll.

Michi1978

So wie du das hier geregelt hast gefällt mir das sehr gut! Gibt es noch die Möglichkeit das ganze über sunrise und sunset zu erweitern? also dass immer nur vor Sonnenaufgang und nach Sonnenuntergang gewässert wird?

Zitat von: spacy am 21 Juli 2016, 08:53:34
Hallo,

Habe das bei mir per DOIF gelöst.

Habe 3 Kreise + Regensensor. Bei mir habe ich das so geregelt, es kann immer nur ein Kreis laufen. Habe über das WEB Interface die möglichkeit, die Startzeit + Dauer + Wochentag zubestimmen. Dieses wird dann für die automatische Beregnung genutzt. Ausserdem kann ich es auch manuel starten.
Wenn der Regensensor schaltet ist keine Automatische bewässerung nötig.

So sieht das dann für ein Ventil aus.

define Ventil3 dummy
attr Ventil3 alias Beregnung Vorne
attr Ventil3 devStateIcon Aus:general_aus:An An:sani_sprinkling@green:Aus
attr Ventil3 eventMap on:An off:Aus
attr Ventil3 group Beregnung Vorne
attr Ventil3 room Bewässerung
attr Ventil3 sortby 1
attr Ventil3 webCmd Auto:An:Aus

define Ventil3Start dummy
attr Ventil3Start alias Beregnung Start Vorne
attr Ventil3Start group Beregnung Vorne
attr Ventil3Start room Bewässerung
attr Ventil3Start setList state:time
attr Ventil3Start sortby 3
attr Ventil3Start webCmd state

define Ventil3Dauer dummy
attr Ventil3Dauer alias Beregnungs Dauer Vorne
attr Ventil3Dauer group Beregnung Vorne
attr Ventil3Dauer room Bewässerung
attr Ventil3Dauer setList state:time
attr Ventil3Dauer sortby 4
attr Ventil3Dauer webCmd state

define Ventil3Tag dummy
attr Ventil3Tag alias Beregnungstag
attr Ventil3Tag group Beregnung Vorne
attr Ventil3Tag room Bewässerung
attr Ventil3Tag setList state:multiple,So,Mo,Di,Mi,Do,Fr,Sa
attr Ventil3Tag sortby 5
attr Ventil3Tag userReadings weekdays {weekday2number(ReadingsVal($name, "state", ""))}
attr Ventil3Tag webCmd state
#attr Ventil3Tag eventMap So:0 Mo:1 Di:2 Mi:3 Do:4 Fr:5 Sa:6

define Ventil3An dummy
attr Ventil3An alias Zustand
attr Ventil3An devStateIcon Aus:general_aus:An An:sani_sprinkling@green:Aus
attr Ventil3An group Beregnung Vorne
attr Ventil3An room Bewässerung
attr Ventil3An sortby 2

define Wasser_Vorne_Ein_Auto DOIF ([([Ventil3Start]) - ([Ventil3Start]+[Ventil3Dauer])|[Ventil3Tag:weekdays]] and [Ventil3] eq "Auto" and [Ventil1An] ne "An" and [Ventil2An] ne "An" and [Regensensor] eq "off" or [Ventil3] eq "An") (set relais PortA7 on , set Ventil3An An) DOELSE (set relais PortA7 off , set Ventil3An Aus)
attr Wasser_Vorne_Ein_Auto do always

define Wasser_Vorne_An notify Ventil3:An { fhem "set relais PortA7 on" }
define Wasser_Vorne_Aus notify Ventil3:Aus { fhem "set relais PortA7 off" }


Vielleicht kannst es ja gebrauchen.

Gruß
Klaus

tagedieb

Guten Morgen  zusammen

Da ich auch in den Morgenstunden beregne UND bei Bedarf zusätzlich abends, habe ich mir folgende Variante erstellt

Komplettberegnung:ein set MotionBeregnung off; set Masterventil01re on;
set Versenkregner04li on; sleep 600;
set Versenkregner04li off;
set Versenkregner02re on; sleep 600;
set Versenkregner02re off;
set Pipeline03li on; set Pipeline03re on; sleep 300;
set Pipeline03li off; set Pipeline03re off;
set Versenkregner04ob on; sleep 900;
set Versenkregner04ob off;
set Pipeline03li on; sleep 300;
set Pipeline03li off;
set AquaContour01li on; set Perlschlauch02li on;set Hochbeet02ob on; sleep 900;
set Hochbeet02ob off;set Perlschlauch02li off; set AquaContour01li off;
set Versenkregner04re on; sleep 600;
set Versenkregner04re off;
set Pipeline03li on; set Pipeline03re on; sleep 300;
set Pipeline03li off; set Pipeline03re off;
set HintHecke03ob on;set AquaCountour04re on; sleep 900;
set HintHecke03ob off;set AquaCountour04re off;
set Pipeline03re on; sleep 600;
set Pipeline03re off; set Masterventil01re off;
set Komplettberegnung aus; set MotionBeregnung on


Komplettberegnung ist ein Dummy und kann per Regensensor und per Zeit eingestellt werden
die Motion Bewegung ist zum Einstellen bestimmter Beregner, wenn fremde Tiere sich in dem Bereich bewegen
so habe ich alle 8 Kreise nacheinander( kann sie  aber auch einzeln schalten) und FHEM kann eine bestimmte Zeit, auf das Ende der Beregnung den Rasenmäher losschicken, wenn der Rasen trocken ist

Vielleicht gibt dir das auch Ideen für deine Bewässerung

Ich wünsche einen schönen Tag
tagedieb
FHEM 5.6 auf Cubitruck
CUL und Cul 868 und 2 HM LAN an Zbox
Remoteserver auf 2.Zboxi
HM-CC-RT-DN,HM-LC-Bl1PBU-FM,HM-LC-SW1-FM,HM-LC-SW4-PCB,HM-LC-Sw1PBU-FM,HM-PB-2-WM55,HM-PB-6-WM55,HM-SCI-3-FM,HM-SEC-RHS,HM-SEC-SC,HM-SEC-SC-2,HM-SEC-TIS,HM-WDS10-TH-O u.viele mehr
diverse IT Empfänger und LW3

Nighthawk

Hallo Rudi,

könntest Du evtl. dein Script etwas näher erläutern,
ich komme da mit meinen rudimentären Perl - Programmierkenntnissen nicht auf Anhieb klar.


Danke und Gruß
Alex

fiedel

Zitat von: Nighthawk am 14 Mai 2018, 16:27:02
Hallo Rudi,

könntest Du evtl. dein Script etwas näher erläutern,
ich komme da mit meinen rudimentären Perl - Programmierkenntnissen nicht auf Anhieb klar.


Danke und Gruß
Alex

Jetzt ist er bestimmt eingeschnappt...  ;D :-X
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

OliS.

Du könntest das eigentlich ganz leicht mit einem DOIF lösen. Habe ich zumindest bei mir so gemacht. Bei mir starten die einzelnen Ventilkreise auch nacheinander, in Abhängigkeit der jeweiligen Laufzeit der Kreise. Das Ganze habe ich über das Wait-Attribut gelöst.

So in der Art:

([Startzeit])
(set Kreis1 on-for-timer [Laufzeit])
(set Kreis2 on-for-timer [Laufzeit])
...

attr <doif> wait [Laufzeit],[Laufzeit]...)


Bei mir ist die Startzeit grundsätzlich sunrise. Ich setze bei Bedarf abends für die einzelnen Kreise die Laufzeit von "aus" auf eine bestimmte Dauer.

Oli
FHEM in Debian VM auf DS720+, HMLAN und HMUARTLGW, RFXTRX, Conbee II, Homebridge, Alexa
Geräte: Homematic, Tradfri, Shelly, IT, ESA2000, VU+, Denon-AVR, Sonos, Fritz!Box, Harmony Hub, IP-Cams, Roborock, Automower

Nighthawk

#12
Hallo Oli,
mit Doif habe ich aktuell auch den Ablauf der Timer am laufen, diese Aktion muss ich aber jedes Mal manuell anstossen.
Was ich aber gern haben würde ist eine Automatik die sich nach dem "gefallenen" Regen umd evtl. Sonneneinstralung bzw. Temperatur richtet.
Da Rudi ja schon ein funktionierendes Script hat, muss ich ja das Rad nicht neu erfinden, sondern nur verstehen.

rudolfkoenig

ZitatJetzt ist er bestimmt eingeschnappt
Nee, so einfach geht es nicht, hatte aber in den letzten Tagen wenig Zeit.

Zitatkönntest Du evtl. dein Script etwas näher erläutern,
Und ich dachte, es sei ausfuehrlich kommentiert :)

Ausgangspunkt:
- ein Temperatur und Regenmesser (bei mir ein KS300), dessen Tagesdaten in der Datei $avg gespeichert sind. Format in der Datei ist
YYYY-MM-DD_HH:MM:SS ks300DeviceName avg_day: T: 8.1  H: 98  W: 2.9  R: 2.5
("uebliches" KS300 Format). Daraus werden die Durchschnitt-Temperaturen und die Regenmengen der letzten $navg Zeilen mit avg_day rausgefischt, und auch der Name des KS300 Sensors, um die Werte des aktuellen Tages direkt in FHEM abzufragen.

- eine Pumpe und 7 Ventile (Anzahl ist nicht festgelegt). Typ ist nicht relevant, nur dass es on und off kann

- die Ventiltabelle mit den relativen Zeiten.

Nach dem im Header beschriebenen Formel wird aus Temperatur und Regenmenge der letzten $navg Tage + heute ein Faktor berechnet. Bei jedem Ventil ist eine Zeit hinterlegt, der mit diesem Faktor multipliziert wird. Falls die errechnete Zeit ueber $min (5Minuten) liegt, dann wird das Ventil eingeschaltet, sonst wird diese Zeit in gardencoll.log zwischengespeichert, und auf die Zeit morgen draufaddiert.

Da meine FS20-Ventilschalter schlecht erreichbar waren, habe ich alle Befehle mit 1sec Abstand zweimal gesendet.

Man kann alles testen, wenn man das Programm mit dem "test" Argument ausfuehrt.
Also man aendert Parameter, ruft "perl garden.pl test" auf, und schaut, ob die berechneten Werte einem passen.Achtung: das Programm liegt in contrib, d.h. ich plane keinen aktiven Support dafuer.
Ich habe sie auch seit laengerem nicht getestet, sie ist laut SVN 11+ Jahre alt. :)

Meine aktuell verwendete (und nicht veroeffentlichte) Version habe ich vor 8+ Jahren erweitert:
- mehrere Ventile parallel
- verwendet on-for-timer statt on
- Temperatur und Regenmenge weiter zurueckliegenden Tage wird weniger gewichtet

Nighthawk

Hallo Rudi,

vielen Dank für die Erklärung, ich spiele mal das ganze durch.