FHEM Forum

Verschiedenes => Projekte => Thema gestartet von: funclass am 29 Oktober 2016, 22:22:41

Titel: Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 29 Oktober 2016, 22:22:41
UPDATE: mittlerweile ist der Code umfangreich überarbeitet worden. Die aktuellste Version ist weiter hinten in diesem Thread zu finden.
https://forum.fhem.de/index.php/topic,59872.msg1064293.html#msg1064293 (https://forum.fhem.de/index.php/topic,59872.msg1064293.html#msg1064293)


Da ich schon mit einigen Leuten zu meiner Umsetzung einer Bewässerungssteuerung gesprochen habe und diese immer auf reges Interesse stieß, möchte ich die Lösung hier vorstellen. Ich habe mal drüber nachgedacht das ganze in ein Modul zu "gießen", hierfür fehlen mir jedoch weiterführende Perl-Kenntnisse und die nötige Zeit. Für Anregungen, Fragen, neue Ideen und auch Kritik bin ich offen.

Allgemeines, Voraussetzungen und Anforderungen:


Weiterhin gibt es mittlerweile auch eine "abgespeckte" Version, welche ich mit nur einem Kreis für meine Tropfbewässerung nutze. Diese aktiviert sich in Abhängigkeit der "großen" Rasenbewässerung, lässt sich jedoch unabhängig davon bedienen. Doku folgt...

Im Folgenden möchte ich die einzelnen Teile etwas genauer erläutern und meinen Quellcode zur Verfügung stellen...
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 29 Oktober 2016, 22:57:29
"Hauptschalter"

Zentrales (de-)aktivieren der Bewässerungsautomatik.

define Beregnung dummy
attr Beregnung alias Bewässerung
attr Beregnung devStateIcon on:10px-kreis-gruen off:10px-kreis-rot
attr Beregnung eventMap on:on off:off
attr Beregnung group Bewässerung
attr Beregnung icon humidity
attr Beregnung room Außen
attr Beregnung sortby 0
attr Beregnung userReadings Automatik_Aktiv,Aktiver_Regner,Tage,Menge
attr Beregnung webCmd on:off

Die Userreadings haben folgende Bedeutung:
Automatik_Aktiv: automatischer Bewässerungszyklus läuft gerade
Aktiver_Regner: gibt an, welcher Bewässerungskreis gerade aktiv ist -> beim manuellen Setzen außerhalb des Automatikzykluses wird der einzelne, gewählte Bewässerungskreis mit der eingestellten Intensität gestartet
Tage: Anzahl der Tage seit der letzten Bewässerung bzw. seit Erreichen der gewünschten Niederschlagsmenge
Menge: Niederschlagsmenge im Zeitraum der o.g. Tage

Ich habe für meinen Anwendungsfall festgelegt, dass 10 Liter/qm die optimale Bewässerungsmenge ist. Das heißt, jeder Kreis soll bei voller Intensität (100%) diese Menge ausbringen. Sofern innerhalb von 5 Tagen mind. 10 Liter/qm an Niederschlag gemessen werden, so wird nicht bewässert sondern beide Zähler zurückgesetzt. Ist die Menge nach 5 Tagen geringer, so wird die Intensität gewählt um 10 Liter/qm zu "komplettieren" und der Bewässerungszyklus gestartet. Die minimale Intensität beträgt jedoch 35%. Nach erfolgreicher Bewässerung wird die Bewässerte Menge auf den aktuellen Wert im Reading Menge aufaddiert. Hierdurch wird der Tageszähler am Ende des Tages zurückgesetzt. Voraussetzung für das Starten der Bewässerung ist natürlich immer der aktivierte "Hauptschalter".

Beispiele:
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 29 Oktober 2016, 23:02:01
Intensität

Zur Einstellung der Bewässerungsmenge (Intensität) wird ein Dummy genutzt welcher sich einfach per Slider im Bereich zwischen 0 und 100% verstellen lässt.

define Beregnungsmenge dummy
attr Beregnungsmenge alias Intensität
attr Beregnungsmenge group Bewässerung
attr Beregnungsmenge icon weather_rain_gauge
attr Beregnungsmenge room Außen
attr Beregnungsmenge setList state:slider,0,1,100
attr Beregnungsmenge sortby 1
attr Beregnungsmenge stateFormat state%</br>GR: Getrieberegner min</br>SR: Spruehregner min
attr Beregnungsmenge userReadings Getrieberegner {60/100*ReadingsVal("Beregnungsmenge","state",100)}, Spruehregner {20/100*ReadingsVal("Beregnungsmenge","state",100)}, Last
attr Beregnungsmenge webCmd state

Die Userreadings haben folgende Bedeutung:
Getrieberegner: Dauer für Beregnungskreise mit Getrieberegnern (GR) um die gewünschte Menge auszubringen
Last: Merker für manuelle Einstellung der Intensität
Spruehregner: Dauer für Beregnungskreise mit Sprühregnern (SR) um die gewünschte Menge auszubringen

Im Hintergrund berechnet der Dummy die jeweilige Bewässerungsdauer für einzelne Bewässerungskreise. In meinem Fall gibt es 2 unterschiedliche Varianten:

Die (Maximal-)Dauer lässt sich individuell anpassen und hängt natürlich von den eingesetzten Regnern und den örtlichen Gegebenheiten wie z.B. dem Wasserdruck ab. Es lassen sich auch noch weitere Varianten ergänzen. Im Bewässerungszyklus muss dann auf die entsprechenden Werte zurückgegriffen werden um die gewünschte Dauer zu Bewässern.
Da die Intensität im Automatikzyklus von der Niederschlagsmenge abhängt und automatisch bestimmt wird, existiert noch ein "Merker" welcher die manuell gewählte Einstellung speichert um diese nach dem Bewässerungszyklus wiederherzustellen. Um sofort die Bewässerungsdauer für die einzelnen Kreise ablesen zu können wurde das Stateformat neben der Prozentangabe um die beiden Userreadings ergänzt.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 29 Oktober 2016, 23:06:12
Niederschlagszähler

Täglich kurz vor Mitternacht wird die kumulierte Niederschlagsmenge des Tages auf die, der letzten Tage aufaddiert. Ist die Menge größer als der gewünschte Wert (bei mir 10L), dann wird der Zähler, als auch die Anzahl der Tage zurückgesetzt. Ein automatischer Bewässerungszyklus erhöht ebenfalls den Zähler, wodurch dieser ebenfalls am Abend wieder zurückgestellt wird. Die Niederschlagsdaten entnehme ich einer öffentlichen Wetterstation von wunderground.com, natürlich können auch andere öffentliche oder eigene Wetterstationen als Quelle dienen.

define Niederschlag_schreiben at *23:59:30 {\
my $aktuell = ReadingsVal('Beregnung', 'Menge', '0');;\
my $niederschlag = ReadingsVal('wu_conditions', 'current_observation_precip_today_metric', '0') + $aktuell;;\
my $tage = ReadingsVal('Beregnung', 'Tage', '0') + 1;;\
# wenn Niederschlagsmenge >= 10, dann Werte zurücksetzen\
{if ($niederschlag >= 10) {\
$niederschlag = 0;;\
$tage = 1;;\
}}\
fhem "setReading Beregnung Menge $niederschlag";;\
fhem "setReading Beregnung Tage $tage";;\
}
attr Niederschlag_schreiben group Bewässerung
attr Niederschlag_schreiben icon weather_rain_meter
attr Niederschlag_schreiben room Außen
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 29 Oktober 2016, 23:09:30
Bewässerungskreissteuerung

Das Aktivieren der einzelnen Bewässerungskreise erfolgt über ein einzelnes Userreading (Aktiver_Regner) im "Hauptschalter". Damit lässt sich relativ einfach ein einzelner Kreis aktivieren oder eine individuelle Reihenfolge realisieren. Der Zugriff auf die Aktoren, welche die Magnetventile ansteuern geschieht gekapselt durch dieses Notify. In meinem Fall hängen alle Magnetventile an einem Relaisblock, welcher durch einen Arduino Nano mit FIRMATA angesteuert wird. Durch set-extensions kann ich den on-for-timer Befehl nutzen und somit muss ich mich nur ums Einschalten und die Zeitvorgabe kümmern. Einen direkten, manuellen Zugriff vermeide ich, da hierbei die Intensität und andere Mechanismen nicht berücksichtigt würden. Direktes Bedienen der Aktoren nutze ich lediglich für Testzwecke oder z.B. beim Einwintern der Bewässerungsanlage.

Wird das Reading "Aktiver_Regner" auf einen Wert zwischen 1 und 4 gesetzt, wird der entsprechende Bewässerungskreis für die eingestellte Dauer im Dummy "Intensität" eingeschaltet und eine Infomeldung per Pushover versendet. Das Setzen kann durch den Automatikzyklus oder auch manuell geschehen.

Wird das Reading "Aktiver_Regner" auf 0 gesetzt, werden alle Aktoren ausgeschaltet.
+ Sofern der Automatikzyklus aktiv ist wird dieser beendet. Sollten noch Zeitgeber vorhanden sein, so werden diese gelöscht. Außerdem wird die bewässerte Menge auf den Zähler aufaddiert und die zuletzt eingestellte Intensität wiederhergestellt.

define notify_Beregnungskreis notify Beregnung:Aktiver_Regner:.* {\
# Prüfen welcher Beregnungskreis aktiviert werden soll...\
my $beregnungskreis = ReadingsVal('Beregnung', 'Aktiver_Regner', '0');;\
{if ($beregnungskreis eq '0') {\
# alles ausschalten und ggf. Zeitgeber löschen\
fhem ("set Relais01,Relais02,Relais03,Relais04 off");;\
{if (ReadingsVal('Beregnung', 'Automatik_Aktiv', '0') eq 'ja') {\
fhem ("setReading Beregnung Automatik_Aktiv nein");;\
fhem ("delete autoRegner.*");;\
fhem ("set pushmsg msg 'Beregnung' 'Automatikprogramm Rasenbewässerung beendet.' 'iPhone' -1 ''");;\
# Beregnungsmenge wieder zurücksetzen\
my $menge_aktuell = ReadingsVal('Beregnungsmenge', 'state', '0');;\
my $menge_last = ReadingsVal('Beregnungsmenge', 'Last', '0');;\
fhem ("set Beregnungsmenge $menge_last");;\
fhem ("setReading Beregnungsmenge Last $menge_aktuell");;\
# Tageszähler zurücksetzen\
my $menge = ReadingsVal('Beregnung', 'Menge', '0') + ($menge_aktuell / 10);;\
fhem ("setReading Beregnung Menge $menge_aktuell");;\
}}\
}}\
my $min_gr = ReadingsVal("Beregnungsmenge","Getrieberegner",'0');;\
my $sek_gr = $min_gr * 60 - 10;;\
my $min_sr = ReadingsVal("Beregnungsmenge","Spruehregner",'0');;\
my $sek_sr = $min_sr * 60 - 10;;\
\
{if ($beregnungskreis eq '1') {\
fhem ("set Relais01 on-for-timer $sek_gr");;\
fhem ("set pushmsg msg 'Beregnung' 'Regner Hinten für $min_gr Minuten eingeschaltet.' 'iPhone' -1 ''");;\
}}\
{if ($beregnungskreis eq '2') {\
fhem ("set Relais02 on-for-timer $sek_gr");;\
fhem ("set pushmsg msg 'Beregnung' 'Regner Terrasse für $min_gr Minuten eingeschaltet.' 'iPhone' -1 ''");;\
}}\
{if ($beregnungskreis eq '3') {\
fhem ("set Relais03 on-for-timer $sek_sr");;\
fhem ("set pushmsg msg 'Beregnung' 'Regner Vorn für $min_sr Minuten eingeschaltet.' 'iPhone' -1 ''");;\
}}\
{if ($beregnungskreis eq '4') {\
fhem ("set Relais04 on-for-timer $sek_sr");;\
fhem ("set pushmsg msg 'Beregnung' 'Regner Seite für $min_sr Minuten eingeschaltet.' 'iPhone' -1 ''");;\
}}\
}
attr notify_Beregnungskreis group Bewässerung
attr notify_Beregnungskreis icon control_arrow_rightward
attr notify_Beregnungskreis room Außen
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 29 Oktober 2016, 23:13:14
Bewässerung beenden / deaktivieren

Beschreibung folgt noch...

define notify_BeregnungAus notify Beregnung:off {\
# falls gerade automatikprozess aktiv ist, dann diesen unterbrechen und Zeitgeber löschen\
{if (ReadingsVal('Beregnung','Automatik_Aktiv','0') eq 'ja') {\
fhem ("setReading Beregnung Automatik_Aktiv nein");;\
fhem ("delete autoRegner.*");;\
fhem ("set pushmsg msg 'Beregnung' 'Automatikprogramm Rasenbewässerung unterbrochen.' 'iPhone' -1 ''");;\
# Beregnungsmenge wieder zurücksetzen\
my $menge_aktuell = ReadingsVal('Beregnungsmenge', 'state', '0');;\
my $menge_last = ReadingsVal('Beregnungsmenge', 'Last', '0');;\
fhem ("set Beregnungsmenge $menge_last");;\
fhem ("setReading Beregnungsmenge Last $menge_aktuell");;\
}}\
# falls ein Beregnungskreis aktiv ist, diesen ausschalten\
{if (ReadingsVal('Beregnung','Aktiver_Regner','0') > 0) {\
fhem ("setReading Beregnung Aktiver_Regner 0");;\
}}\
}
attr notify_BeregnungAus group Bewässerung
attr notify_BeregnungAus icon general_aus
attr notify_BeregnungAus room Außen

define notify_BeregnungskreisAus notify Relais01.value:.off|Relais02.value:.off|Relais03.value:.off|Relais04.value:.off {\
# Kennzeichen für Beregnungskreis nach Einzelbetrieb zurücksetzen\
{if (ReadingsVal('Beregnung', 'Automatik_Aktiv', '0') eq "nein") {\
fhem ("setReading Beregnung Aktiver_Regner 0");;\
}}\
}
attr notify_BeregnungskreisAus group Bewässerung
attr notify_BeregnungskreisAus icon general_aus
attr notify_BeregnungskreisAus room Außen
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 29 Oktober 2016, 23:15:18
Hinweis für anstehende Bewässerung

Beschreibung folgt noch...

define BeregnungsHinweis at *19:55:00 {if (Value("Beregnung") eq "on") {\
## wenn Bewässerungsautomatik aktiviert\
my $liter_soll = 10;;\
my $tage_max = 4;;\
my $niederschlag = ReadingsVal('Beregnung', 'Menge', '0');;\
my $tage = ReadingsVal('Beregnung', 'Tage', '0');;\
## prüfen ob Niederschlag der letzten x Tage kleiner als x Liter\
{if (($tage > $tage_max) && ($niederschlag < $liter_soll)) {\
# dann Pushmeldung versenden\
fhem ("set pushmsg msg 'Beregnung' 'Morgen wird voraussichtlich der Rasen bewässert.'");;\
}}\
}}
attr BeregnungsHinweis icon message_attention
attr BeregnungsHinweis room Aktionen
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 29 Oktober 2016, 23:17:41
Bewässerungszyklus (automatisch) starten

Beschreibung folgt noch...

define bewaesserung_starten at *03:59:00 {if (Value("Beregnung") eq "on") {\
## wenn Bewässerungsautomatik aktiviert\
my $liter_soll = 10;;\
my $tage_max = 5;;\
my $niederschlag = ReadingsVal('Beregnung', 'Menge', '0');;\
my $tage = ReadingsVal('Beregnung', 'Tage', '0');;\
## prüfen ob Niederschlag der letzten x Tage kleiner als x Liter\
{if (($tage > $tage_max) && ($niederschlag < $liter_soll)) {\
## Beregnungsmenge einstellen (min. 35%)\
my $menge = int(100 - $niederschlag / $liter_soll * 100);;\
{if ($menge < 35) {\
$menge = 35;;\
}}\
my $menge_aktuell = ReadingsVal('Beregnungsmenge', 'state', '0');;\
# aktuellen Wert vor Änderung speichern\
fhem ("setReading Beregnungsmenge Last $menge_aktuell;;");;\
fhem ("set Beregnungsmenge $menge;;");;\
my $min_gr = ReadingsVal("Beregnungsmenge","Getrieberegner",'0');;\
my $sek_gr = $min_gr * 60 - 10;;\
my $min_sr = ReadingsVal("Beregnungsmenge","Spruehregner",'0');;\
my $sek_sr = $min_sr * 60 - 10;;\
## Logik zum Schalten der Beregnungskreise\
my $sek = 60;;\
my $zeit0 = myOffset($sek);;\
$sek = $sek + $sek_gr + 10;;\
my $zeit1 = myOffset($sek);;\
$sek = $sek + $sek_gr + 10;;\
my $zeit2 = myOffset($sek);;\
$sek = $sek + $sek_sr + 10;;\
my $zeit3 = myOffset($sek);;\
$sek = $sek + $sek_sr + 10;;\
my $zeit4 = myOffset($sek);;\
fhem ("setReading Beregnung Automatik_Aktiv ja;;");;\
fhem ("set pushmsg msg 'Beregnung' 'Automatikprogramm Rasenbewässerung startet in einer Minute mit $menge%.' 'iPhone' 0 ''");;\
fhem ("defmod autoRegner1 at +$zeit0 setReading Beregnung Aktiver_Regner 1");;\
fhem ("defmod autoRegner2 at +$zeit1 setReading Beregnung Aktiver_Regner 2");;\
fhem ("defmod autoRegner3 at +$zeit2 setReading Beregnung Aktiver_Regner 3");;\
fhem ("defmod autoRegner4 at +$zeit3 setReading Beregnung Aktiver_Regner 4");;\
fhem ("defmod autoRegnerEnde at +$zeit4 setReading Beregnung Aktiver_Regner 0");;\
fhem ("attr autoRegner.* room Außen;; attr autoRegner.* group Bewässerung;;");;\
}}\
}}
attr bewaesserung_starten cmdIcon execNow:audio_play
attr bewaesserung_starten group Bewässerung
attr bewaesserung_starten icon control_arrow_turn_right
attr bewaesserung_starten room Außen
attr bewaesserung_starten sortby 2
attr bewaesserung_starten webCmd execNow

Die Funktion myOffset muss in der Datei 99_myUtils.pm eingefügt werden. Diese dient dazu die Startzeitpunkte für die einzelnen Beregnungskreise korrekt zu formatieren.

sub myOffset($) {

my ($Sekunden) = @_;

my $Stunden = int($Sekunden / 3600);
   $Sekunden %= 3600;
 
my $Minuten = int($Sekunden / 60);
   $Sekunden %= 60;

return sprintf("%02d:%02d:%02d", $Stunden, $Minuten, $Sekunden)

}
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Dersch am 01 November 2016, 14:42:10
Ich bin der von Facebook :) Freut mich, dass du dir hier die Mühe machst das aufzuschreiben! Ich hoffe es geht weiter und die Beteiligung wächst.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: jnewton957 am 06 November 2016, 19:56:02
An den Thema Bewässerungssteuerung bin ich auch schon länger dran. Bisher auf Basis MySensors - aber so richtig zuverlässig habe ich das auf der Testbench nicht hinbekommen. Mal schalten die Relais - mal nicht. Ich habe Gardena 24V im Garten an 5 Strängen. Bisher eben langweilig über eine Gardena 6030 in der Garage

Deine Lösung ist super und ich würde mir gerne die Teile der "Hardware" gerne besorgen bzw. sehen, ob ich die da habe.

Kannst du etwas zur Hardware posten und insbesondere auch dein sketch und Anschluss des nanos beschreiben.

Ein Bild wäre auch super.

Danke
Jörg
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 06 November 2016, 20:15:18
Gern kann ich ein paar Fotos und ein Schaltbild posten. Muss ich die nächsten Tage mal vorbereiten.
Bewässerungsventile per Funk ohne Rückkanal schalten wäre mir zu unsicher. Genau genommen gibt FIRMATA auch eine echte Info zurück ob der Ausgang wirklich ein- bzw. ausgeschalten wurde, aber bei mir funktioniert diese Variante nach einer kleinen Modifikation seit über einem Jahr absolut zuverlässig.
Vorab schonmal kurz meine Hardware-Liste:
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: jnewton957 am 08 November 2016, 17:39:33
Gern kann ich ein paar Fotos und ein Schaltbild posten. Muss ich die nächsten Tage mal vorbereiten.


Ja  das wäre schon wichti. Insbesondere sollte man auch sehen, wie der ULN2003 verkabelt ist.

Habe tatsächlich bis auf den IC alle Teile da und würde das gerne nachbauen.
Eigentlich kann ich das ja dann auch mit einem 1-er Relais auch für die Pumpe verwenden, die ja eben vorher Strom braucht.
Oder ich muss die über eine Funksteckdose schalten - mal sehen-

Danke für die Mühen.

Jörg

Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Dersch am 08 November 2016, 18:54:24
Warum hast du den Relaisblock nicht direkt an den GPIO des PI? Ich verstehe den Grund dafür nicht so richtig. Mit Ardunio habe ich mich noch gar nicht befasst. Aber ich verstehe es grob so, dass ich einen PI nehme wenn ich auch direkt ein Linux mit Anwendungen fahren möchte und einen Ardunio wenn ich nur einen günstigen Mikrocontroller für eine vordefinierte Aufgabe brauche. Aber einen Ardunio an einem Pi verstehe ich nicht ganz :D
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 08 November 2016, 22:11:03
Grundsätzlich kann man den Relaisblock auch direkt an die GPIOs des Raspberry anklemmen. Eine triftige Begründung für meinen Nano habe ich nicht wirklich. Hatte mal überlegt diesen irgendwo "in der Ferne" zu platzieren und die GPIOs über 1wire anzusteuern. Hierfür fehlt mir jedoch bis heute die Muße. Ich nutze jedoch noch einen Pin des Nano um 1wire-Temperatursensoren auszulesen.
Kurz gesagt, ich fand´s irgendwie eleganter als direkt an den Pi anzuklemmen.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: jnewton957 am 14 November 2016, 07:32:51
Warum hast du den Relaisblock nicht direkt an den GPIO des PI? Ich verstehe den Grund dafür nicht so richtig. Mit Ardunio habe ich mich noch gar nicht befasst. Aber ich verstehe es grob so, dass ich einen PI nehme wenn ich auch direkt ein Linux mit Anwendungen fahren möchte und einen Ardunio wenn ich nur einen günstigen Mikrocontroller für eine vordefinierte Aufgabe brauche. Aber einen Ardunio an einem Pi verstehe ich nicht ganz :D

Ich nehme die Arduinos letztlich aus Gründen der "Dezentralisierung". Da müssen Antennen (433,868,JeeLink,MySensors etc) für die ganzen Steckdosen und andere IoT Dinge her.

Im Falle der Bewässerungssteuerung brauche ich den Adruino, da ich die Steuerung in der Garage (wgen Verkabelung des Gartens) brauche. Also wird  auch hier wieder ein nano mit Funklösung benötigt.

@funclass: Bin gespannt audf den Schaltplan und Bilder. Gerade nochmals versucht zu googeln, wie man den ULN2003 an den Arduino anbringen könnte - nichts gefunden.
Ich hoffe daher auf ein paar mehr Details - DANKE

Jörg.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 21 November 2016, 22:11:59
Sorry erstmal für die fehlende Reaktion in den letzten Tagen. Hab aktuell noch einige Bauprojekte zu laufen, und da der Winter naht ist Bewässerungssteuerung derzeit nicht Priorität A Thema.
Ich habe mal 2 Fotos von meiner "FHEM-Unterverteilung" gemacht und mal nen allgemeines Bild zur Nutzung des ULN im Netz rausgesucht (ist zwar nicht der ULN2003 abgebildet aber Funktionsweise ist identisch). Ist im Grunde ziemlich simpel, 5V an Pin 9 und Masse an 10. Ausgang des Nanos (oder Raspis) an Pin 1, 2, 3 ... oder 7 und gegenüberliegenden Pin an das Relais. Da ich in Summe 16 Relais zur Verfügung habe, habe ich 3 ICs verbaut.
Um flexibel zu sein und problemlos Änderungen vornehmen zu können habe ich nicht gelötet sondern auf Breadboardverkabelung gesetzt. Nun kurz ne grobe Beschreibung, ausführlich muss ich später noch werden.

Die ersten 4 Relais oben links steuern die Bewässerungsventile. Die angeklemmten Relais des rechten Blocks sind für meine Hoftürklingel. Unten rechts der Trafo für die Ventile. Gezeichnetes Schaltbild reiche ich noch nach.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: jnewton957 am 26 November 2016, 10:02:38
Gezeichnetes Schaltbild reiche ich noch nach.

Schon mal ganz herzlichen Dank für die Bilder und Beschreibung.
Es macht es etwas klarer und ist schon mal hilfreich.

Auf das gezeichnete Schaltbild freuen wir uns - damit dürften dann insbesondere auch "Unklarheiten" auf der linken Seite des Entwicklungsboards ausgeräumt werden.

Danke für die Mühe.

Jörg
P.S. wäre mal interessant an welchen "Großprojekten" du sonst noch arbeitest - die Bewässerungssteuerung ist auf jeden Fall für mich der Hammer und "mein" Großprojekt über die Weihnachtstage.
Parallel arbeite ich noch an MySensors Sensoren für die Bewässerungsnotwendigkeit von Pflanzen in outdoor Blumenkübeln und einer Wasseruhrablesevorrichtung (auch mysensors)

Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 12 Dezember 2016, 22:40:14
Hallo zusammen,

anbei mal ein schematischer Schaltplan beschränkt auf 7 Relais. Für weitere 7 wird ein 2. ULN2003 benötigt. Ich habe neben der Bewässerungssteuerung auch meine Hoftürklingel über 2 Relais laufen, daher gibt es noch ein paar Zusatzbauteile auf dem Breadboard. Außerdem hängt noch ein 1Wire-Temperatursensor am Arduino, für die Bewässerungslogik ist das aber alles irrelevant.
Die Elektronik wird komplett über die USB-Versorgung des Arduino gespeist. Dieser hängt am gleichen Netzteil wie mein Raspberry (hat 2 USB-Ports mit jeweils 2A).
Auf dem Arduino läuft der Sketch ConfigurableFirmata v2.06 ohne weitere Anpassungen. Standard würde hierfür auch vollkommen ausreichen, da ich 1 Wire brauche habe ich damals aber CF verwendet.

Derzeit beginne ich mit dem Ausbau meines Dachgeschosses. Deshalb wir hier FHEM noch ein wenig mehr zu tun bekommen (Rollläden der Dachfenster, schaltbare Steckdosen, Beleuchtung etc.). Außerdem wird je nach Wetterlage auch noch an der Garage gebaut, daher die sporadische Pflege von Infos zu diesem Projekt hier.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: jnewton957 am 16 Dezember 2016, 19:39:26
Hallo zusammen,

anbei mal ein schematischer Schaltplan beschränkt auf 7 Relais.

DANKE DANKE DANKE

Schönen 4. Advent

Jörg
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: tante ju am 05 Januar 2017, 23:12:43
Ich habe diesen Sommer die Bewässerung im Garten auch automatisiert. Hatte auch erst mit den fertigen Relais-Platinen experimentiert, war da aber nicht so glücklich mit.

Letztlich habe ich ein Steuergerät auf MySensor-Basis gebaut. Leider habe ich keine Fotos vor dem Zusammenbau, wollte das aber noch mal bauen und Fotos machen, da ich da ein paar Dinge eingebaut habe, die vielleicht für viele interessant sind.

Die Basisplatine enthält Sicherung und Schaltwandler von 220V auf 5V zur Versorgung der Elektronik. NRF Modul, ATmega, ATSHA, ULN und 7 Relais sind auch noch untergebracht. Eine zweite Platine, die oben im Hutschienengehäuse eingebaut wird, enthält 7 Taster, 7 LEDs, 2 PCF8574, ein OLED und einen LM75. Die beiden Platinen sind über I2C verbunden.

Warum ich dieses gewählt habe?

Ich wollte alles in einer normalen Unterverteilung einbauen und Kleinspannung und Niederspannung trennen und da keine nackten Kontakte. Da auch die Pumpe gesteuert werden soll, muß noch ein Koppelrelais dahinter, die es auch für Hutschiene gibt.

Dann sollte alles auch autonom laufen. Also über die Tasten Pumpe an/aus und auch die Ventile zu betätigen, automatische maximale Laufzeiten, damit bei Fehlfunktionen keine Sumpflandschaft entsteht, und der LM75 als Temperatursensor, damit automatisch bei unter 10 Grad die Pumpe abgeschaltet bleibt. Ein automatisches Belüftungsprogramm für den Winter muß ich noch einbauen.

Die LEDs zeigen an, ob ein Relais eingeschaltet ist und evtl. ob ein Timer läuft. Das OLED ist eigentlich überflüssig, zeigt aber ein paar Statusinfos, wie Temperatur an.

Das ganze läuft über MySensors und der ATSHA ist drin, damit nicht irgendwer Kontrolle über das Wasser übernimmt.

Bei Bedarf kann ich gerne mal Schaltpläne und Layouts bereitstellen.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 06 Januar 2017, 09:17:50
Das klingt auch sehr interessant. Über weiterführende Infos würde ich mich natürlich freuen.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: jnewton957 am 17 Februar 2017, 20:16:17


Bei Bedarf kann ich gerne mal Schaltpläne und Layouts bereitstellen.

Hallo,

ich hätte Bedarf und würde mich über mehr Infos (und Bilder) sehr freuen.

Danke
Jörg
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: tante ju am 27 März 2017, 20:55:27
So,

hier ein paar mehr Infos zu meiner Bewässerungssteuerung.
Die Anbindung an FHEM erfolgt mittels MySensor. Dafür habe ich eine Modul für die Hutschiene gebaut, welches:

Schaltpläne und Layouts habe ich angehängt.
Wenn man sich das 19" Hutschienengehäuse anschaut, dann kann man da mehrere Platinen unterbringen, bzw. muß man sogar. Deswegen sind es zwei Platinen: Einmal die Basisplatine, auf welcher auch die Schraubklemmen für die Anschlüsse sitzen und einmal die Front-Platine mit den LEDs und Tastern.
Das Modul läuft auch nur mit der Basisplatine. Dann kann man halt vor Ort nichts sehen oder steuern. Die Anbindung mit der Frontplatine läuft über I2C, womit sich die Verkabelung in Grenzen hält. Die Platinenmaße sind exakt so, daß es in ein Hutschienengehäuse passt. (Details müsste ich nachschauen).

Wichtig ist hierbei, daß man ein wenig an der Arduino-Library basteln muß. Es werden ALLE I/O-Pins des ATmega verwendet, also auch die beiden, an denen normalerweise der Quarz hängt. Diese sind aber in der normalen Header-Datei nicht definiert, weswegen man die beiden Einträge hinzufügen muß. Ebenso muß man manuell per avrdude die Fuses richtig setzen, damit die beiden I/Os verfügbar werden. Im Laufe der Entwicklung hatten sich ein paar Änderungen ergeben, weswegen drei analoge Pins nun wieder frei sind, und man das auch anders machen könnte.
An jedem Relais ist ein Jumper, durch welchen man einstellen kann, ob die beiden nach Außen geführten Kontakte ein Öffner oder Schließer sind. Nur beim mittleren Relais muß man das mit Drahtbrücke festlegen, da dort ein Steg vom Gehäuse im Weg ist.

Die Display-Platine enthält eine LED und einen Taster für jeden Kanal, welche über I2C I/O angesprochen werden. Ich habe da noch ei OLED eingebaut, weil ich es hatte und ein paar Zusatzinfos anzeigen wollte. Das ist aber nicht so wirklich nötig und das kann man sich sparen. Der Temperatursensor sitzt auch auf der Displayplatine, um nicht durch Stauwärme im Gehäuse beeinträchtigt zu werden.

Die Funktion ist folgende:
Für jeden Kanal kann man einstellen (per MySensor), ob es einen Timer gibt. Mit Timer wird dann ab der Aktivierung (per Taster oder MySensor Befehl) die Zeit runtergezählt und anschließend das Relais wieder deaktiviert. Der Temperaturfühler ist zur Sicherung der Pumpe da und schaltet die Pumpe unterhalb von 10 Grad ab. 10 Grad, weil das ganze in einem Unterverteiler sitzt, der immer ein wenig über Außentemperatur ist.

Die Relais steuern direkt die 24V für die Magnetventile, wobei ein Relais de gemeinsamen Kontakt aller Magnetventile steuert. So kann ich die Ventilbox komplett potentialfrei schalten. Ist nicht unbedingt notwendig, aber das ist für mich noch die Rückversicherung bei abgeschalteter Anlage, daß nicht ein einzelner Tastendruck irgendwo Wasser einschaltet :-)

Die Pumpe und andere 220V Verbraucher schalte ich über Finder Koppelrelais. Also das Relais schaltet das Koppelrelais, welches dann erst die 220V schaltet. Eigentlich könnten auch die eingebauten Relais 220V schalten, aber man sollte Niederspannung von Kleinspannung immer soweit wie möglich trennen, deswegen wollte ich an der Anschlußleiste keine 220V haben.

Noch ein paar Warnhinweise:
Auf der Platine ist ein Netzteil, somit liegen da auch 220V an. Das ganze gehört in ein entsprechendes Gehäuse mit Schutzklasse je nach Aufstellungsort. Die ganze 220V Verkabelung sollte nur Fachkräfte machen. 220V kann nicht nur tödlich sein, Fehler können auch Brände auslösen und Fehler können auch zur Zerstörung von Geräten führen.
Da sich Kondenswasser bilden kann, sollte die Platine (Kupferseite) auch entsprechend beschichtet sein, um Leckströme zu verhindern.

Ich übernehme keine Garantien und werde diese Platinen auch nicht produzieren oder verkaufen.

Bei Bedarf kann ich auch noch die anderen, wasserberührenden, Bauteile raussuchen, die ich verwendet habe.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: pnewman am 29 März 2017, 21:34:05
Hallo,

danke für diese wunderbare Steuerung.

Da Ich wunderground nicht nutze, muss Ich den Niederschlagszähler auslassen und die Beregnung auf die Frage "Regnet es Heute oder Morgen?" mit Proplanta umstellen.

Hat das schon jemand?


Gruß
Ralf
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 29 März 2017, 21:37:03
Wie sehen die readings bei Proplanta hierfür aus?
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: pnewman am 29 März 2017, 21:51:38
Hallo,

für Heute ist es "fc0_rain"
für morgen ist es "fc1_rain"

Danke für deine Hilfe.


Edit:
Übrigens benutze ich einen Homematic 8fach Empfänger und eine 8fach Relaisplatine für Arduino.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 29 März 2017, 22:11:00
Ich würde dafür lediglich den automatischen Start des Beregnungszyklus um die Prüfung der beiden Readings erweitern und die tägliche Kumulation der Niederschlagsmenge deaktivieren (es sei denn Proplanta liefert auch irgendwie den Tageswert für Niederschlag). Vorteil ist dann, dass der Zyklus der Beregnung weiterhin über den Tageszähler gewählt werden kann und sonst keine weiteren Anpassungen nötig wären.

z.B.:
## Zyklus starten
...
my $heute = ReadingsVal('Proplanta', 'fc0_rain', '0');;\
my $morgen = ReadingsVal('Proplanta', 'fc1_rain', '0');;\
## prüfen ob Niederschlag der letzten x Tage kleiner als x Liter\
{if (($tage > $tage_max) && ($niederschlag < $liter_soll) && ($heute < x) && (morgen < x)) {\
...

-> x muss natürlich gegen einen gewünschten Mindestwert ersetzt werden oder du prüfst ob heute und morgen = 0 ist

und

define Niederschlag_schreiben at *23:59:30 {\
my $aktuell = ReadingsVal('Beregnung', 'Menge', '0');;\
my $niederschlag = $aktuell;;\
...
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Jewe am 30 März 2017, 09:11:51
So,

hier ein paar mehr Infos zu meiner Bewässerungssteuerung.

Hallo tante ju,

kannst Du vielleicht noch ein paar Bilder Deiner Anlage posten ? Würde mich schon sehr interessieren. :-)

Jens
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: pnewman am 30 März 2017, 17:01:15
Hallo funclass,

heißen deine Getrieberegner "Getrieberegner"?

Ich schreibe gerade den Code für mich um und bin darüber gestolpert.
Gestern hatte ich alles nur grob überflogen und mich über wunderground informiert.


Edit:

damke habe es schon gefunden, du steuerst Relais01 - Relais04!

Gruß
Ralf
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: pnewman am 30 März 2017, 18:02:06
Hallo funclass,

ich habe "Niederschlag_schreiben" mal auf 17:54:00 gestellt und folgendes Log erhalten:
2017.03.30 17:54:00 3: setReading Beregnung Menge 0 : Please define Beregnung first
2017.03.30 17:54:00 3: setReading Beregnung Tage 1 : Please define Beregnung first
2017.03.30 17:54:00 3: Niederschlag_schreiben: Please define Beregnung first
Wenn ich Beregnung nicht definiert habe ist dies schon klar.

Nur habe ich nichts dergleichen gefunden.

Wenn ich auf den Pfeil von "bewaesserung_starten" klicke passiert auch nichts.



Edit:

Zu Dumm zum Lesen! Entschuldigung!
Ich sollte auch den Anfang mitlesen  "Hauptschalter"
Gruß
Ralf
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 30 März 2017, 20:38:41
Hallo Ralf,

auch wenn du die Fragen schon selbst klären konntest, von mir noch ein paar Hinweise.

Ja, meine Ventile für die Regner werden von Relais01 bis Relais04 geschaltet (bald kommen noch 4 Weitere hinzu). Die Unterscheidung in Getriebe- und Sprühregner mache ich nur, da die Wassermenge unterschiedlich ist und ich somit unterschiedliche Einschaltdauern für die Kreise brauche.

Die Readings für den Tages- und Niederschlagszähler habe ich damals der Einfachheit halber am "Hauptschalter" angedockt. Diese könnten theoretisch auch irgendwo anders stehen.

Das manuelle Starten des Bewässerungszyklus über den "Pfeilbutton" funktioniert derzeit noch nicht, da auch dort die Logikabfrage für Tage und Niederschlagsmenge greift. Das muss ich noch umbauen. Da ich meine Bewässerung grade erweitere, werde ich das nach den Bauarbeiten gleich mal mit angehen.

Bisher habe ich leider noch keinen gefunden, der mich bei der Entwicklung eines Moduls für die Steuerungslogik unterstützt. Mir fehlen hierfür einfach weitergehende Perl-Kenntnisse. Damit könnte man die Einrichtung und Erweiterung nochmal ein ganzes Stück vereinfachen.

Bei weiteren Fragen einfach schreiben. Zu großen Dokumentationen komme ich derzeit nicht, aber neue Beiträge schaue ich mir immer zeitnah an und kann darauf auch reagieren.

Gruß Christian
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: tante ju am 30 März 2017, 20:49:12
Hallo tante ju,

kannst Du vielleicht noch ein paar Bilder Deiner Anlage posten ? Würde mich schon sehr interessieren. :-)

Muß nächste Tage mal Fotos machen. Hab leider keine Fotos vom Aufbau gemacht. Reicht das? Sind aber nicht spannend. Eine UVT mit Sicherung, dem Steuermodul, 24V Netzteil für die Ventile und 3 Koppelrelais.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: pnewman am 31 März 2017, 22:14:53
Hallo Christian,

da ich erhebliche schwierigkeiten mit deiner steuerung hatte, da ich sie noch nicht ganz verstanden habe, habe ich diese wieder deinstalliert und erstmal etwas einfacheres installiert.

##Bewässerungssteuerung##
define Bewaesserung_DI DOIF ([Beregnung] eq "An")(set B_Garten_Pumpe on, set B_Garten_Rasen on)(set B_Garten_Rasen off)(set B_Garten_Beete on)(set B_Garten_Pumpe off, set B_Garten_Beete off)\
DOELSEIF ([[$SELF:mybegin,"00:00"]] and [Beregnung] eq "Automatik") (set B_Garten_Pumpe on, set B_Garten_Rasen on)(set B_Garten_Rasen off)(set B_Garten_Beete on)(set B_Garten_Pumpe off, set B_Garten_Beete off)\
DOELSEIF ([Beregnung] eq "Aus")(set B_Garten_Pumpe off, set B_Garten_Rasen off)(set B_Garten_Beete off)
attr Bewaesserung_DI cmdState Rasen,Kein,Beete,Ende|AutoRasen,Kein,AutoBeete,Autoende|Ausgeschaltet,Ausgeschaltet
attr Bewaesserung_DI do resetwait
attr Bewaesserung_DI group Bewässerung
attr Bewaesserung_DI icon humidity
attr Bewaesserung_DI readingList mybegin
attr Bewaesserung_DI room Garten
attr Bewaesserung_DI setList mybegin:time
attr Bewaesserung_DI sortby 1
attr Bewaesserung_DI wait 0,300,0,300:0,300,0,300
attr Bewaesserung_DI webCmd mybegin

##Hauptschalter##
define Beregnung dummy
attr Beregnung alias Bewässerung
attr Beregnung devStateIcon An:10px-kreis-gruen Aus:10px-kreis-rot
attr Beregnung eventMap on:An off:Aus
attr Beregnung group Bewässerung
attr Beregnung icon control_arrow_turn_right
attr Beregnung room Garten
attr Beregnung sortby 0
attr Beregnung webCmd on:off:Automatik

Mein Wasser kommt aus einem Brunnen mittels Pumpe (B_Garten_Pumpe)
Die Getrieberegner (B_Garten_Rasen)
Die Sprayer (B_Garten_Beete)


Jetzt habe ich etwas geforscht und gesehen das mein AgroWeather(Proplanta) über fc0_rain die Niederschlagsmenge für Heute angibt (Niederschlagsmenge (1 mm ~ 1 l/qm))
fc1_rain für Morgen usw.

Sobald Ich wieder mehr Zeit habe gehe Ich das Thema wieder an.
Ich muss noch eine Leitung für die 2. Sprayer (B_Garten_Beet_Rasen) legen.

Vielen Dank für deine Hilfe.

Gruß
Ralf
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: pnewman am 31 März 2017, 23:22:17
Hallo Christian,

Es ließ mir keine Ruhe, hier mal der abgeänderte Code:
"Hauptschalter"
define Beregnung dummy
attr Beregnung alias Bewässerung
attr Beregnung devStateIcon on:10px-kreis-gruen off:10px-kreis-rot
attr Beregnung eventMap on:on off:off
attr Beregnung group Bewässerung
attr Beregnung icon humidity
attr Beregnung room Garten
attr Beregnung sortby 0
attr Beregnung userReadings Automatik_Aktiv,Aktiver_Regner,Tage,Menge
attr Beregnung webCmd on:off

"Intensität"
define Beregnungsmenge dummy
attr Beregnungsmenge alias Intensität
attr Beregnungsmenge group Bewässerung
attr Beregnungsmenge icon weather_rain_gauge
attr Beregnungsmenge room Garten
attr Beregnungsmenge setList state:slider,0,1,100
attr Beregnungsmenge sortby 1
attr Beregnungsmenge stateFormat state%</br>GR: Getrieberegner min</br>SR: Spruehregner min
attr Beregnungsmenge userReadings Getrieberegner {60/100*ReadingsVal("Beregnungsmenge","state",100)}, Spruehregner {20/100*ReadingsVal("Beregnungsmenge","state",100)}, Last
attr Beregnungsmenge webCmd state

"Niederschlagszähler"
define Niederschlag_schreiben at *23:59:30 {\
my $aktuell = ReadingsVal('Beregnung', 'Menge', '0');;\
my $niederschlag = ReadingsVal('AgroWeather', 'fc0_rain', '0') + $aktuell;;\
my $tage = ReadingsVal('Beregnung', 'Tage', '0') + 1;;\
# wenn Niederschlagsmenge >= 10, dann Werte zurücksetzen\
{if ($niederschlag >= 10) {\
$niederschlag = 0;;\
$tage = 1;;\
}}\
fhem "setReading Beregnung Menge $niederschlag";;\
fhem "setReading Beregnung Tage $tage";;\
}
attr Niederschlag_schreiben group Bewässerung
attr Niederschlag_schreiben icon weather_rain_meter
attr Niederschlag_schreiben room Garten

"Bewässerungskreissteuerung"
define notify_Beregnungskreis notify Beregnung:Aktiver_Regner:.* {\
# Prüfen welcher Beregnungskreis aktiviert werden soll...\
my $beregnungskreis = ReadingsVal('Beregnung', 'Aktiver_Regner', '0');;\
{if ($beregnungskreis eq '0') {\
# alles ausschalten und ggf. Zeitgeber löschen\
fhem ("set B_Garten_Pumpe,B_Garten_Rasen,B_Garten_Beete,B_Garten_Beet_Rasen off");;\
{if (ReadingsVal('Beregnung', 'Automatik_Aktiv', '0') eq 'ja') {\
fhem ("setReading Beregnung Automatik_Aktiv nein");;\
fhem ("delete autoRegner.*");;\
fhem ("set Pushover_Client msg 'Beregnung' 'Automatikprogramm Rasenbewässerung beendet.' -1 ''");;\
# Beregnungsmenge wieder zurücksetzen\
my $menge_aktuell = ReadingsVal('Beregnungsmenge', 'state', '0');;\
my $menge_last = ReadingsVal('Beregnungsmenge', 'Last', '0');;\
fhem ("set Beregnungsmenge $menge_last");;\
fhem ("setReading Beregnungsmenge Last $menge_aktuell");;\
# Tageszähler zurücksetzen\
my $menge = ReadingsVal('Beregnung', 'Menge', '0') + ($menge_aktuell / 10);;\
fhem ("setReading Beregnung Menge $menge_aktuell");;\
}}\
}}\
my $min_gr = ReadingsVal("Beregnungsmenge","Getrieberegner",'0');;\
my $sek_gr = $min_gr * 60 - 10;;\
my $min_sr = ReadingsVal("Beregnungsmenge","Spruehregner",'0');;\
my $sek_sr = $min_sr * 60 - 10;;\
\
{if ($beregnungskreis eq '1') {\
fhem ("set B_Garten_Pumpe,B_Garten_Rasen on-for-timer $sek_gr");;\
fhem ("set Pushover_Client msg 'Beregnung' 'Regner Rasen für $min_gr Minuten eingeschaltet.' -1 ''");;\
}}\
{if ($beregnungskreis eq '2') {\
fhem ("set B_Garten_Pumpe,B_Garten_Beete on-for-timer $sek_sr");;\
fhem ("set Pushover_Client msg 'Beregnung' 'Regner Beete für $min_sr Minuten eingeschaltet.' -1 ''");;\
}}\
{if ($beregnungskreis eq '3') {\
fhem ("set B_Garten_Pumpe,B_Garten_Beet_Rasen on-for-timer $sek_sr");;\
fhem ("set Pushover_Client msg 'Beregnung' 'Regner Beete+Rasen für $min_sr Minuten eingeschaltet.' -1 ''");;\
}}\
}
attr notify_Beregnungskreis group Bewässerung
attr notify_Beregnungskreis icon control_arrow_rightward
attr notify_Beregnungskreis room Garten

"Bewässerung beenden / deaktivieren"
define notify_BeregnungAus notify Beregnung:off {\
# falls gerade automatikprozess aktiv ist, dann diesen unterbrechen und Zeitgeber löschen\
{if (ReadingsVal('Beregnung','Automatik_Aktiv','0') eq 'ja') {\
fhem ("setReading Beregnung Automatik_Aktiv nein");;\
fhem ("delete autoRegner.*");;\
fhem ("set Pushover_Client msg 'Beregnung' 'Automatikprogramm Rasenbewässerung unterbrochen.' -1 ''");;\
# Beregnungsmenge wieder zurücksetzen\
my $menge_aktuell = ReadingsVal('Beregnungsmenge', 'state', '0');;\
my $menge_last = ReadingsVal('Beregnungsmenge', 'Last', '0');;\
fhem ("set Beregnungsmenge $menge_last");;\
fhem ("setReading Beregnungsmenge Last $menge_aktuell");;\
}}\
# falls ein Beregnungskreis aktiv ist, diesen ausschalten\
{if (ReadingsVal('Beregnung','Aktiver_Regner','0') > 0) {\
fhem ("setReading Beregnung Aktiver_Regner 0");;\
}}\
}
attr notify_BeregnungAus group Bewässerung
attr notify_BeregnungAus icon general_aus
attr notify_BeregnungAus room Garten

define notify_BeregnungskreisAus notify Relais01.value:.off|Relais02.value:.off|Relais03.value:.off|Relais04.value:.off {\
# Kennzeichen für Beregnungskreis nach Einzelbetrieb zurücksetzen\
{if (ReadingsVal('Beregnung', 'Automatik_Aktiv', '0') eq "nein") {\
fhem ("setReading Beregnung Aktiver_Regner 0");;\
}}\
}
attr notify_BeregnungskreisAus group Bewässerung
attr notify_BeregnungskreisAus icon general_aus
attr notify_BeregnungskreisAus room Garten

"Hinweis für anstehende Bewässerung"
define BeregnungsHinweis at *19:55:00 {if (Value("Beregnung") eq "on") {\
## wenn Bewässerungsautomatik aktiviert\
my $liter_soll = 10;;\
my $tage_max = 4;;\
my $niederschlag = ReadingsVal('Beregnung', 'Menge', '0');;\
my $tage = ReadingsVal('Beregnung', 'Tage', '0');;\
## prüfen ob Niederschlag der letzten x Tage kleiner als x Liter\
{if (($tage > $tage_max) && ($niederschlag < $liter_soll)) {\
# dann Pushmeldung versenden\
fhem ("set Pushover_Client msg 'Beregnung' 'Morgen wird voraussichtlich der Rasen bewässert.'");;\
}}\
}}
attr BeregnungsHinweis icon message_attention
attr BeregnungsHinweis room Aktionen

"Bewässerungszyklus (automatisch) starten"
define bewaesserung_starten at *03:59:00 {if (Value("Beregnung") eq "on") {\
## wenn Bewässerungsautomatik aktiviert\
my $liter_soll = 10;;\
my $tage_max = 5;;\
my $niederschlag = ReadingsVal('Beregnung', 'Menge', '0');;\
my $tage = ReadingsVal('Beregnung', 'Tage', '0');;\
## prüfen ob Niederschlag der letzten x Tage kleiner als x Liter\
{if (($tage > $tage_max) && ($niederschlag < $liter_soll)) {\
## Beregnungsmenge einstellen (min. 35%)\
my $menge = int(100 - $niederschlag / $liter_soll * 100);;\
{if ($menge < 35) {\
$menge = 35;;\
}}\
my $menge_aktuell = ReadingsVal('Beregnungsmenge', 'state', '0');;\
# aktuellen Wert vor Änderung speichern\
fhem ("setReading Beregnungsmenge Last $menge_aktuell;;");;\
fhem ("set Beregnungsmenge $menge;;");;\
my $min_gr = ReadingsVal("Beregnungsmenge","Getrieberegner",'0');;\
my $sek_gr = $min_gr * 60 - 10;;\
my $min_sr = ReadingsVal("Beregnungsmenge","Spruehregner",'0');;\
my $sek_sr = $min_sr * 60 - 10;;\
## Logik zum Schalten der Beregnungskreise\
my $sek = 60;;\
my $zeit0 = myOffset($sek);;\
$sek = $sek + $sek_gr + 10;;\
my $zeit1 = myOffset($sek);;\
$sek = $sek + $sek_gr + 10;;\
my $zeit2 = myOffset($sek);;\
$sek = $sek + $sek_sr + 10;;\
my $zeit3 = myOffset($sek);;\
$sek = $sek + $sek_sr + 10;;\
my $zeit4 = myOffset($sek);;\
fhem ("setReading Beregnung Automatik_Aktiv ja;;");;\
fhem ("set Pushover_Client msg 'Beregnung' 'Automatikprogramm Rasenbewässerung startet in einer Minute mit $menge%.' 0 ''");;\
fhem ("defmod autoRegner1 at +$zeit0 setReading Beregnung Aktiver_Regner 1");;\
fhem ("defmod autoRegner2 at +$zeit1 setReading Beregnung Aktiver_Regner 2");;\
fhem ("defmod autoRegner3 at +$zeit2 setReading Beregnung Aktiver_Regner 3");;\
fhem ("defmod autoRegner4 at +$zeit3 setReading Beregnung Aktiver_Regner 4");;\
fhem ("defmod autoRegnerEnde at +$zeit4 setReading Beregnung Aktiver_Regner 0");;\
fhem ("attr autoRegner.* room Garten;; attr autoRegner.* group Bewässerung;;");;\
}}\
}}
attr bewaesserung_starten cmdIcon execNow:audio_play
attr bewaesserung_starten group Bewässerung
attr bewaesserung_starten icon control_arrow_turn_right
attr bewaesserung_starten room Garten
attr bewaesserung_starten sortby 2
attr bewaesserung_starten webCmd execNow

Gestern hatte ich im Log folgende Fehler:
2017.03.30 18:36:00 1: ERROR evaluating {if (Value("Beregnung") eq "on") {
## wenn Bewässerungsautomatik aktiviert
my $liter_soll = 10;;
my $tage_max = 2;;
my $niederschlag = ReadingsVal('Beregnung', 'Menge', '0');;
my $tage = ReadingsVal('Beregnung', 'Tage', '0');;
## prüfen ob Niederschlag der letzten x Tage kleiner als x Liter
{if (($tage > $tage_max) && ($niederschlag < $liter_soll)) {
## Beregnungsmenge einstellen (min. 35%)
my $menge = int(100 - $niederschlag / $liter_soll * 100);;
{if ($menge < 35) {
$menge = 35;;
}}
my $menge_aktuell = ReadingsVal('Beregnungsmenge', 'state', '0');;
# aktuellen Wert vor Änderung speichern
fhem ("setReading Beregnungsmenge Last $menge_aktuell;;");;
fhem ("set Beregnungsmenge $menge;;");;
my $min_gr = ReadingsVal("Beregnungsmenge","Getrieberegner",'0');;
my $sek_gr = $min_gr * 60 - 10;;
my $min_sr = ReadingsVal("Beregnungsmenge","Spruehregner",'0');;
my $sek_sr = $min_sr * 60 - 10;;
## Logik zum Schalten der Beregnungskreise
my $sek = 60;;
my $zeit0=myOffset($sek);;
$sek = $sek + $sek_gr + 10;;
my $zeit1=myOffset($sek);;
$sek = $sek + $sek_gr + 10;;
my $zeit2=myOffset($sek);;
$sek = $sek + $sek_sr + 10;;
my $zeit3=myOffset($sek);;
$sek = $sek + $sek_sr + 10;;
my $zeit4=myOffset($sek);;
fhem ("setReading Beregnung Automatik_Aktiv ja;;");;
fhem ("set pushmsg msg 'Beregnung' 'Automatikprogramm Rasenbewässerung startet in einer Minute mit $menge%.' 'iPhone' 0 ''");;
fhem ("defmod autoRegner1 at +$zeit0 setReading Beregnung Aktiver_Regner 1");;
fhem ("defmod autoRegner2 at +$zeit1 setReading Beregnung Aktiver_Regner 2");;
fhem ("defmod autoRegner3 at +$zeit2 setReading Beregnung Aktiver_Regner 3");;
fhem ("defmod autoRegner4 at +$zeit3 setReading Beregnung Aktiver_Regner 4");;
fhem ("defmod autoRegnerEnde at +$zeit4 setReading Beregnung Aktiver_Regner 0");;
fhem ("attr autoRegner.* room Garten;; attr autoRegner.* group Bewässerung;;");;
}}
}}: Undefined subroutine &main::myOffset called at (eval 363225) line 24.

2017.03.30 18:36:00 3: bewaesserung_starten: Undefined subroutine &main::myOffset called at (eval 363225) line 24.

Womit hat er denn da ein Problem? Mit "myOffset" ?
Wie bekomme ich das bereinigt?

Gruß
Ralf
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 01 April 2017, 21:56:41
Hi,

sorry, da fällt mir auf, dass ich euch doch glatt die Funktion zur Berechnung der Einschaltzeitpunkte für die Beregnungskreise unterschlagen habe. Ich habe mir den ganzen code nicht angesehen, aber wenn du die folgende Funktion in 99_myUtils.pm ergänzt, dann sollte die Fehlermeldung verschwinden.

sub myOffset($) {

my ($Sekunden) = @_;

my $Stunden = int($Sekunden / 3600);
   $Sekunden %= 3600;
 
my $Minuten = int($Sekunden / 60);
   $Sekunden %= 60;

return sprintf("%02d:%02d:%02d", $Stunden, $Minuten, $Sekunden)

}
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: thorschtn am 03 April 2017, 07:38:34
Hallo funclass,

steuerst Du die Beregnungsmenge tatsächlich ausschliesslich anhand der Voreinstellung und des Niederschlages der vergangenen Tage? Macht es, wenn es besispielsweise vorgestern ausreichend geregnet hat, nicht einen wesentlichen Unterschied ob seit dem letzten Regen 16° oder 36° sind, bei bewölktem Himmel oder bei praller Sonne? Ich hätte gemutmasst, dass entweder das aktuelle Wetter (Verdunstung) oder die Bodenfeuchte mit in die Steuerung einbezogen werden müssten. Wie sind Deine Erfahrungen?

Danke & viele Grüße

thorschtn
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 03 April 2017, 08:01:43
Moin thorschtn,

ja, aktuell sind die Niederschlagsmenge und vergangenen Tage die einzigen Einschaltbedingungen. Natürlich macht es einen Unterschied ob brühende Hitze oder nur kühle Frühlingstage sind. Mit meinen 5 Tagen bin ich bisher ganz gut gefahren. Ich könnte mir eine Art Faktor vorstellen, der temperaturabhängig ist. Vielleicht fällt dir ja was gutes ein. Ich will es nur nicht unendlich kompliziert machen (aus Pflanzenbewässerung lässt sich schnell ne Wissenschaft machen).
Verbesserungen integriere ich gern.

Gruß Christian
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Tom71 am 15 Mai 2017, 15:48:35
Hallo,
ich habe auch gerade eine Regnersteuerung aufgebaut mit 4 Relais, die ich paarweise schalten möchte. Ich habe deine Commandos alle eingefügt und auch das WetterReading. Ich bekomme aber beim schreiben des Nierderschlags:
2017.05.15 15:30:30 3: Niederschlag_schreiben: Usage: setreadingdesc <devspec> <readingspec> [noCheck] <key>=[<value>|?]
where <devspec> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
<readingspec> can be a single reading name, a list separated by comma (,) or a regexp.

2017.05.15 15:33:30 5: exec at command Niederschlag_schreiben
2017.05.15 15:33:30 3: Niederschlag_schreiben: Usage: setreadingdesc <devspec> <readingspec> [noCheck] <key>=[<value>|?]
where <devspec> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
<readingspec> can be a single reading name, a list separated by comma (,) or a regexp.
2017.05.15 15:33:30 5: redefine at command Niederschlag_schreiben as *15:33:30 {
my $aktuell = ReadingsVal('Beregnung', 'Menge', '0');
my $niederschlag = ReadingsVal('wu_conditions', 'current_observation_precip_today_metric', '0') + $aktuell;
my $tage = ReadingsVal('Beregnung', 'Tage', '0') + 1;
# wenn Niederschlagsmenge >= 10, dann Werte zurücksetzen
{if ($niederschlag >= 10) {
    $niederschlag = 0;
    $tage = 1;
}}
fhem "setReading Beregnung Menge $niederschlag";
fhem "setReading Beregnung Tage $tage";
}
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 15 Mai 2017, 21:59:09
Hi,

ändere den letzten Teil mal bitte in...

fhem "setreading Beregnung Menge $niederschlag";
fhem "setreading Beregnung Tage $tage";
}

Hab grad nochmal in die CommandRef geschaut und gesehen, dass setreading komplett klein geschrieben werden muss. Im letzten Sommer hat es bei mir noch problemlos mit der Ursprungsvariante geklappt, in der aktuellen Version scheint FHEM da etwas genauer "hinzuschauen". Hab's bei mir auch gleich mal geändert. Hab in dieser Saison die Bewässerung noch nicht in Betrieb genommen. Gerade läuft noch das "Ansaat-Programm" (ausgewählte Kreise für 1...3 min alle 2h), da ich etwas nachgesät habe.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: carlos am 31 Mai 2017, 09:31:46
Hallo,
Dann will ich euch mal zeigen, wie ich das gemacht habe.
Wie ihr an dem Bild seht sind es 2 Bewässerungskreise, einer für die Beete(mit Perlschlauch) einer für den Rasen.
Verwendet habe ich folgende Komponenten:


Dazu habe ich noch einen 3. Bewäserungskreis der genau so aufgebaut ist für die andere Seite des Hauses auch mit Beet und Rasen(mit Beregner) zusammen. Der wird aber auch noch aufgeteilt in 2 Kreise.
Funktioniert seit ca. 2 Wochen bestens mit einem doif in FHEM jeweils Abends mit on-for-timer.

Gruß

Carlos


Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Jewe am 31 Mai 2017, 12:37:58
Hallo,
Dann will ich euch mal zeigen, wie ich das gemacht habe.

Hallo,
ist schon Ideenreich umgesetzt, aber leider auch ohne Einhaltung einer Norm. Nach VDE ist es nicht zulässig, 230V und Wasser in einem
Gehäuse zusammen unterzubringen. Es ist auch grob Fahrlässig.
Die restlichen Fehler mal ausgenommen...

Grüssle, Jens
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: MegaData am 31 Mai 2017, 12:49:20
Definitiv !
Ich würde Ventile und Steuerung jeweils separat in eine wasserdichte Box packen - so wird es auch vom Profi angeboten :)

VG
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: carlos am 31 Mai 2017, 13:20:08
Hi,
Da habt ihr natürlich recht. Ich hatte mir das auch schon überlegt.
Das werde ich auf jeden Fall auch noch so machen.
Gruß

Carlos
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: tante ju am 16 Juni 2017, 00:16:49
Muß nächste Tage mal Fotos machen. Hab leider keine Fotos vom Aufbau gemacht. Reicht das? Sind aber nicht spannend. Eine UVT mit Sicherung, dem Steuermodul, 24V Netzteil für die Ventile und 3 Koppelrelais.

Ich wollte ja noch ein paar Bilder posten. Das erste ist die Unterverteilung im Gartenhaus. Man sieht in der oberen Reihe das Steuergerät, welches im nächsten Bild in Großaufnahme zu sehen ist. In der zweiten Reihe sind Koppelrelais, über die zum Beispiel die Pumpe oder Außenversorgung am Gartenhaus gesteuert wird. Daneben ist das 24V Netzteil für die Ventile. Die werden direkt vom Steuergerät geschaltet. Daneben noch die Sicherung.

Zweite Bild, wie gesagt, ist das Steuergerät in Großaufnahme. Man sieht die Struktur der Frontplatte, die ich gedruckt habe. Jeder Schaltausgang hat eine Taste, um auch bei Bedarf direkt am Gerät schalten zu können. Die LED zeigt an, ob der Ausgang eingeschaltet ist und ob eine Schaltzeit abläuft (dann blinkt die LED). Rechts das OLED zeigt nochmal die Schaltausgänge an und welche Restzeit gesteuerte Ausgänge noch haben. Es zeigt auch die MySensor Id des Gerätes und des Uplinks an, damit man sehen kann, wo sich das Gerät eingebucht hat. Da es ja mit Signatur arbeitet, kann es sich eigentlich nicht falsch einbuchen. Aber am Anfang fand ich das ganz hilfreich. Die aktuelle Zeit und die Temperatur im Gerät sind weitere Gimmicks auf dem Display. Die grüne LED zeigt an, daß das Steuergerät Funkverbindung hat und flackert mit jedem Datagram. Ich hätte da nur nicht einen extra hellen Typen nehmen sollen. Im Arbeitszimmer war das in Ordnung, aber im Gartenhaus bei Nacht sieht man jetzt immer einen grünen Lichtschein unter der Tür :)

Das nächste Bild zeigt die Ventilbox. Nix spannendes. Drei 24V Ventile. Vielleicht sollte ich erwähnen, daß über das Steuergerät die Ventilbox komplett freigeschaltet werden kann. Es sind also 4 Relais für 3 Ventile, so daß im Winter auch keinerlei Kriechstrom fließen kann. Ist zwar alles nur 24V und galvanisch getrennt, aber ich wollte galvanisieren der Klemmen soweit möglich verhindern.

Das letzte Bild habe ich noch gemacht, als ich den Druckminderer für das MicroDrip austauschen musste. Der ursprüngliche war nicht für Unterflur geeignet und hatte auch zu wenig Durchfluß. Da kann man erahnen, wie das ganze verrohrt ist.

Mittlerweile läuft das alles super. Ich suche aber nun "Wassersteckdosen" für das MicroDrip, da auch Blumen auf den Terrassen angeschlossen werden sollen. Wenn da jemand Ideen hat, immer her damit.
Titel: Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Tom71 am 16 Juni 2017, 09:54:09
Ich benutze die Wassersteckdosen von Gardena, die im Boden eingelassen werden. Davor hab ich ein Hunter-Ventil gesetzt. An der Wassersteckdose hab ich z.Zt. einen Tropfschlauch angeschlossen. Den konnte ich mit einem Ventil am Schlauch einstellen.

Als MikroDrip hab ich mir was bei Lidl bestellt aber noch nicht eingebaut.

Gesendet von iPhone mit Tapatalk
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: CQuadrat am 16 Juni 2017, 10:20:25
Was ist denn das für eine  Ventilbox?
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: tante ju am 16 Juni 2017, 13:18:20
Was ist denn das für eine  Ventilbox?

Ventilbox:
https://smile.amazon.de/gp/product/B0001E3S2W

Ventile:
https://smile.amazon.de/gp/product/B001P0N3UI

Ich benutze die Wassersteckdosen von Gardena, die im Boden eingelassen werden. Davor hab ich ein Hunter-Ventil gesetzt. An der Wassersteckdose hab ich z.Zt. einen Tropfschlauch angeschlossen. Den konnte ich mit einem Ventil am Schlauch einstellen.

Als MikroDrip hab ich mir was bei Lidl bestellt aber noch nicht eingebaut.

Diese hier?
https://smile.amazon.de/Gardena-Anschlussdose-entnehmbares-Schmutzsieb-versenkbare/dp/B0035WWDAU/ref=sr_1_2?ie=UTF8&qid=1497611836&sr=8-2&keywords=wassersteckdose

Die habe ich auch, aber für Mikrodrip funktioniert das nicht. Habe ja einen zentralen Druckminderer.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: CQuadrat am 16 Juni 2017, 18:31:32
Vielen Dank.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: leachim200 am 21 Juli 2017, 13:38:45
Jetzt brauch ich eure hilfe
ich hab mich eingelsen und ich glaub auch alles richtig geändert aber irgendwas passt nicht.

Ich hab das define zur Niederschlag_schreiben in die DEF eingefügt. sprich zuerst definiert mit zwei {} und jetzt füg ich den restlichen programm code ein aber irgendwo hängt was

{\
my $aktuell = ReadingsVal('Beregnung', 'Menge', '0');;\
my $niederschlag = ReadingsVal('Wetter_Home', 'statRainHour24', '0') + $aktuell;;\
my $tage = ReadingsVal('Beregnung', 'Tage', '0') + 1;;\
# wenn Niederschlagsmenge >= 10, dann Werte zurücksetzen\
{if ($niederschlag >= 10) {\
$niederschlag = 0;;\
$tage = 1;;\
}}\
fhem "setreading Beregnung Menge $niederschlag";;\
fhem "setreading Beregnung Tage $tage";;\
}

Bekomme folgende Fehlermeldung
Missing right curly or square bracket at (eval 737321) line 1, at end of line
syntax error at (eval 737321) line 1, at EOF

Wo liegt mein Fehler?
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 24 Mai 2020, 23:35:05
Hallo Christian,
ich habe mich in den letzten Tagen mit Deiner Bewässerungssteuerung beschäftigt und diese mit ein paar Erweiterungen (Einbindung von Hardwareschaltern über Shelly input --> MQTT) auch umgesetzt. Vielen Dank für Deine tolle Art zu schreiben und die Bereitstellung Deiner Arbeit.

Eine Frage:
Der letzte Beitrag ist aus 2017. Bevor ich jetzt anfange das Rad für mich weiterzuentwickeln/anzupassen: Hast Du bereits weitergemacht?

Aus meiner Sicht:

ein einzelner Bewässerungskreis lässt sich manuell aktivieren inkl. Auswahl der Intensität
--> mit setreading Beregnung:Aktiver_Regner ????

Aktoren zum Schalten der Magnetventile können beliebige Schalter sein, set-extensions erleichtern erheblich die Arbeit da on-for-timer für die Bewässerungsdauer genutzt werden kann
--> hier will ich per httmod meinen Shellys (die ich für die Aktoren der Ventile nutze) den "Auto-off"-Wert zusätzlich als Sicherheit setzten. Bin dran ;-)


einsetzender Niederschlag unterbricht einen laufenden Bewässerungsvorgang sofort
--> ist das schon aktiv??? Habe ich nicht gefunden


einzelne Bewässerungskreise lassen sich deaktivieren und werden im Automatikmodus "übersprungen"
--> kannst Du mir sagen, wie???


automatische Erkennung aller definierten Bewässerungskreise/-aktoren z.B. anhand von userreadings inkl. einfacher Vorgabe der Einschaltreihenfolge -> mittlerweile lassen sich mehrer Aktoren/Ventile zu Kreisen zusammenfassen
--> wo denn? DEF von Beregnung_starten?

das Ganze in ein Modul implementieren -> wird wohl nie werden (mir fehlt einfach die Zeit)
--> so gut wie das läuft muss das auch nicht ;-)

Danke für Deine Rückmeldung & Viele Grüße
Stefan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: JHo am 28 Mai 2020, 10:16:55
Hallo Stefan,

ich habe den Thread im letzten Sommer gefunden und die Lösung nachgebaut. An ein paar Stellen bin ich gehangen, und nachdem hier lange nichts mehr war, habe ich funclass angeschrieben. Daraufhin hat er den Eingangspost nochmal überarbeitet und ein paar Ankündigungen zusätzlich eingebaut (29.07.2019). In meiner Erinnerung alles das, was du jetzt fragst (Fragen 1 und 3-5).
Allerdings ist mehr als das dann nicht mehr passiert, d.h. der jetzige Eingangspost und Screenshot passen nicht mehr zum Code danach.

Ich habe mich mit meinen rudimentären Programmierkenntnissen hingesetzt und den Code für mich angepasst. Mir ging es zum einen darum, den Niederschlag aus meiner Wetterstation mit auszulesen und damit die Bewässerungsdauer anzupassen. Zum anderen habe ich eine sehr einfache Verlängerung/Verkürzung der Dauer aufgrund der Evapotranspiration eingebaut. Die Daten kommen aus dem DWD-Modul. Meine Magnetventile steuere ich via Tasmota/MQTT und übergebe das on-for-timer als pulsetime, d.h. auch hardwarebasiertes Aus.
Die Regelungen von Niederschlag und ETo sind verbesserungswürdig, da muss ich mal ran, aber leider fehlt gerade komplett die Zeit. Zwischenzeitlich war ich schon kurz davor, mir einen Opensprinkler zu kaufen... :-/

Kann gerne meine Anpassungen teilen und dann gemeinsam optimieren. Oder funclass meldet sich doch nochmal... Aktiv ist er ja hier noch. Das wäre wirklich großartig!

Viele Grüße,
Jan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 28 Mai 2020, 11:19:10
Hallo zusammen,
sorry für die fehlenden Reaktionen. Bei mir ist aktuell auch kaum Zeit mich um dieses Thema zu kümmern. Grundsätzlich habe ich diese Lösung aber noch im Einsatz und bin bis auf Kleinigkeiten auch weiterhin zufrieden.
Nach dem letzen FHEM-update habe ich ein paar Probleme, die ich aus Zeitmangel noch nicht behoben hab. Auch der Zugriff auf die Wetterdaten aus Wunderground funktioniert seit der Abschaltung der API leider nicht mehr. Bis auf die Entwicklung eines eigenständigen Moduls ist eigentlich mittlerweile bei mir alles umgesetzt.

Also auch der manuelle Start einer Bewässerungszone und das Deaktiveren einzelner Zonen für den Automatikmodus.
Ich kann meinen Code gern in rohform zur Verfügung stellen und freue mich auf Mitstreiter. Nur die Zeit um akribisch zu Dokumentieren fehlt mir leider komplett.

VG Christian
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: JHo am 28 Mai 2020, 11:27:57
Hallo Christian,

das wäre doch super, wenn du deinen aktuellen Code posten könntest. Deine Erläuterungen und Erklärungen sind zwar Extraklasse, aber nachvollziehbar zeitraubend zu erstellen. Vielleicht ist dafür ja irgendwann wieder Zeit, oder wir Interessenten kommen alleine mit dem Code klar und können darauf aufbauen, z.B. mit einem alternativen Wetterdienst wie DWD_openData.

Viele Grüße,
Jan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: leachim200 am 02 Juni 2020, 11:18:39
Hallo
Ich habe mich auch intensiev mit deiner Bewässerung beschäftigt und habe sie nach meinen bedürfnissen agepasst.
Einige dinge wurde rausprogramiert bzw. ergenzt.

Wenn es eine neue Version gibt würde mich diese auch brenend interessieren
lg michi
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 08 Juni 2020, 00:26:47
Hallo Jan, Hallo Christian,
war ein paar Tage damit beschäftigt dem Gras beim wachsen zuzugucken ;-)

Also auch der manuelle Start einer Bewässerungszone und das Deaktiveren einzelner Zonen für den Automatikmodus.
Ich kann meinen Code gern in rohform zur Verfügung stellen und freue mich auf Mitstreiter. Nur die Zeit um akribisch zu Dokumentieren fehlt mir leider komplett.

--> Mach das gern mit dem Bereitstellen. Wenn das Wetter mal wieder schlechter wird halte ich es nicht für ausgeschlossen, nen Part hier zu dokumentieren.

Viele Grüße
Stefan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 08 Juni 2020, 02:03:48
Hallo nochmal,

Ein Bild meiner Anlage. (IMG_4396.jpeg)
Ich habe wie geschrieben Shelly1 genutzt. Hier habe ich den Eingang und das Relais entkoppelt. (Detached Switch)
Den Eingang steuere ich mit den Sicherungselementen, die auf dem Kopf eingebaut sind an. Dann greife ich den Status mit einem Dummy ab und kann dann Aktionen in Fhem starten. (on-for-timer x zur Zeit).
Unten sieht man das genutzte 24V Netzteil aus dem Weihnachtsbeleuchtungs-/ bzw. Aussenbeleuchtungsbereich.
Die grünen Kabel gehen zu den 24V Ventilen. Ich habe 6 Kreise und zusätzlich ein HV. (also 7 SI-Elemente). Das achte SI-Element nutze ich um den Verteilerkasten weitestgehend spannungsfrei zu schalten und das System im Winter abschalten zu können.
Mit dem ersten Shelly (zweite SI-Element) schalte ich die 230V des Netzteils, damit dieses nicht dauerhaft unter Spannung steht. Mit den anderen Shellys schalte ich die 24V für die 6 Ventilkreise.
Die Halter für die Shelly habe ich in der Bucht als 3D-Druck gekauft.

Im Bild IMG_3956.jepg seht ihr den "geschlossenen" Verteilerschrank. Allerdings kann ich die Blechtür nicht nutzen, da dann die Shelly nicht mehr vernünftig ins WLAN kommen.

In den Shellys ist der Auto-off-Timer fest gesetzt, damit auch ohne FHEM nach Zeit x abgeschaltet wird.
Zusätzlich ist im Keller ein Shelly-Flood installiert, der bei Alarm das Hauptventil abschaltet und per Telegram sowie Sonos alarmiert

P.S.: Da Shelly oben rechts in der Verteilerdose ist für's Licht und gehört hier nicht her  ;)
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Tobias am 08 Juni 2020, 09:55:43
Hi Stefan,
das sieht ganz gut aus :)
Ich arbeite auch mit ESP´s, aber nicht mit Shellies (230V) sondern mit reinen ESP8266 und einer 5V Stromversorgung. Diese sind sowohl in der Hauptverteilung zentral als auch in Unterverteilungen im Garten verteilt. In den Unterverteilungen im Garten sind dann ganz kleine, billige Impulsventile (5,50€ aus China) in einer 10x10cm kleinen Verteilerdose verbaut
Eventuell hilft dir das bei deinen Erweiterungen im Garten.

https://github.com/tobiasfaust/ESP8266_PumpControl/wiki
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 08 Juni 2020, 11:15:11
Hallo zusammen,

ich habe meinen Code bisher noch nicht gepostet, da ich grad noch einige Umbauarbeiten vornehme. Grundsätzlich geht es mir darum die „Portabilität“ zu verbessern, sodass möglichst viel konfigurierbar ist. Außerdem möchte ich von den vielen einzelnen Devices weg und möglichst viel bündeln. Die Hauptsteuerelemente möchte ich alle in das „Beregnungs-Device“ integrieren (inkl. Startzeiten usw.). Die Devices für die Zonen habe ich auch komplett geändert, sodass die zugehörigen Daten (Ausgänge für Ventile, Zeiten je Zone) dort direkt gepflegt und angezeigt werden können.
Ein paar neue Ideen habe ich auch noch (z.B. eigene Presets festlegen um bestimmte Zonen per Klick starten zu können).
Ich hoffe, dass ich bis Ende der Woche soweit bin, dass ich einen funktionsfähigen Stand hier veröffentlichen kann. Es spricht eigentlich vieles für „ein“ eigenes Modul, hierfür fehlt mir aber definitiv die Zeit.

VG Christian
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 08 Juni 2020, 22:04:01
Hi Stefan,
das sieht ganz gut aus :)
Ich arbeite auch mit ESP´s, aber nicht mit Shellies (230V) sondern mit reinen ESP8266 und einer 5V Stromversorgung. Diese sind sowohl in der Hauptverteilung zentral als auch in Unterverteilungen im Garten verteilt. In den Unterverteilungen im Garten sind dann ganz kleine, billige Impulsventile (5,50€ aus China) in einer 10x10cm kleinen Verteilerdose verbaut
Eventuell hilft dir das bei deinen Erweiterungen im Garten.

https://github.com/tobiasfaust/ESP8266_PumpControl/wiki

Hallo Tobias,
Dein Projekt habe ich bei meinen "Recherchen" natürlich auch gefunden ;-). Es war letzenendes auch der Anstoss was eigenes, FHEM-kompatibles zu bauen und nichts vom Hersteller zu nehmen.
Gibt ein paar Dinge, die bei mir für die Shellys gesprochen haben:
1.) ich bastel und löte nicht sooo gern. (wobei ich das bei meinen Uralt Gurt-Rollo-Motoren auch gemacht habe um sie Smart umzubauen.)
2.) läuft out of the box und ich habe nur gute Erfahrungen
3.) ich hatte (bisher) die Möglichkeit alle Shellys innen einzubauen und brauche mir daher um Kleinspannungen keinen Kopf machen

Danke für Deinen Tipp bzgl. der Erweiterung :)

P.S.: an Deiner "Zisterne" / Trinkwasser-Kombi arbeite ich noch. Leider ist mein alter Brunnen verreckt/versandet, weshalb ich mich erst um eine neuen kümmern muss, aber wenn das so weit ist, dann habe ich es ähnlich vor (in Bezug auf das 3-fach Ventil)

BG Stefan

Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 08 Juni 2020, 22:05:24
Hallo zusammen,

ich habe meinen Code bisher noch nicht gepostet, da (...)
Ich hoffe, dass ich bis Ende der Woche soweit bin, dass ich einen funktionsfähigen Stand hier veröffentlichen kann. Es spricht eigentlich vieles für „ein“ eigenes Modul, hierfür fehlt mir aber definitiv die Zeit.

VG Christian

Also ich bleib dabei - ich bin gespannt und würde mich sehr freuen davon zu partizipieren.
BG Stefan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 14 Juni 2020, 15:21:06
Hallo Leute,

aus den kleinen, geplanten Änderungen ist nun doch ein Komplettumbau geworden. Deshalb hat es auch etwas länger gedauert. Ich habe nun die komplette Logik in eine eigene Datei ausgelagert und die FHEM-Devices soweit wie möglich zusammengefasst. Ich habe die meisten Szenarien durchgetestet, nur einsetzenden Regen hab ich noch nicht getestet (ist im Coding aber umgesetzt). Ich post hier erstmal den Code, werde später mal noch einiges dazu dokumentieren.

Ich habe auch eine Methode integriert, die die Devices selbst anlegt (für die Beregungszonen wird ein Beispiel angelegt, der Rest muss per Copy „gecloned“ werden).

Ich werde Abend nochmal ein paar Zeilen dazu schreiben.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 14 Juni 2020, 20:48:57
Wie schon erwähnt, habe ich im Grunde alles nochmal neu geschrieben. Readings und Befehle hab ich versucht konsequent in englisch zu benennen, das macht es evtl. später einfacher ein Modul draus zu bauen. Ebenso hab ich versucht alle relevanten Befehle in die Set-List zu integrieren. Durch die massiven Änderungen gibt es bestimmt noch ein paar Bugs oder Verbesserungsbedarf, hierbei freue ich mich natürlich über Feedback bzw. Unterstützung.
Wie fängt man nun an? Zuerst muss die Datei 99_sprinkleUtils.pm ins FHEM-Verzeichnis kopiert werden. Anschießend kann mit dem Befehl {generateSprinkleDevices()} das Anlegen der Devices angestoßen werden. Hier ließe sich noch etwas individualisieren, hab aber aus Zeitmangel erstmal etwas spartanisch zusammengeschrieben. Alle Devices werden im Room „Außen“ angelegt. Es wird nur eine Beregnungszone als Beispiel angelegt (Beregnung_Zone09). Ich nutze derzeit 8 Zonen, diese können per copy erzeugt werden und müssen am Ende des Namens durchnummeriert sein, beginnend bei 01. Theoretisch lassen sich bis zu 99 Zonen definieren, hierzu muss bei Bedarf im Hauptdevice die Setlist so erweitert werden, dass im Befehl „activeZone“ die entsprechende Anzahl hinterlegt wird.

Nun werde ich zu den einzelnen Devices ein paar Dinge schreiben...
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 14 Juni 2020, 21:01:37
Beregnung_Zone01 ... Beregnung_Zone08:

Verknüpfung der Steuerung zu den eigentlichen Steuerventilen. Es ist möglich von hier aus eine einzelne Zone direkt zu starten, hierzu ist es derzeit nicht notwendig, dass das Hauptdevice oder die Zone den Status „on“ hat.

Befehle:

Readings:

bis auf die Readings zu den oben genannten Befehlen gibt es noch ein weiteres (pctDuration), welches die Beregnungsdauer bezogen auf die aktuelle Prozenteinstellung im Hauptdevice angibt.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 14 Juni 2020, 21:30:29
Beregnung (Hauptdevice):

Um die automatische Berechnung anhand des bisherigen Niederschlags und die Abschaltung bei Regen nutzen zu können, müssen von (irgendeinem) vorhandenem Wetterdevice folgende Daten in die benannten Readings geschrieben werden:


Befehle:

Readings:

viele Readings erklären sich aus den Befehlen, darüber hinaus gibt es folgende...

Alle Befehle werden über das notify_Beregnung Device an die entsprechenden Methoden weitergeleitet.
Die 3 Zeitsteuerungen werden über das doif de_Beregnung realisiert.
Sicherlich hätte man das auch alles in einem DoIf bündeln können, ich vertraue für einfache Dinge dem Notify-Device aber irgendwie mehr.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 14 Juni 2020, 21:36:49
Ich habe mir zusätzlich noch eine Readingsgroup zur Anzeige der echten Ventilstati eingerichtet. Dies ist aber nicht zwingend notwendig. Hiermit sieht man nur sehr schön welche Ventile tatsächlich grad eingeschaltet sind.

Sieht bei mir so aus:

defmod Beregungskreise readingsGroup Relais0(1|2|3|4|5|6|7|8|9):value
attr Beregungskreise mapping %ALIAS
attr Beregungskreise valueIcon {'value.on' => 'sani_sprinkling@0000FF', 'value.off' => 'sani_sprinkling'}

Das Ventil 9 steuert meine Tropfbewässerung, für welche ich eine etwas „einfachere“ Zeitsteuerung für die tägliche Aktivierung nutze.

Diese Infos sollten eigentlich erstmal ausreichen um das ganze besser zu verstehen und nutzen zu können. Ich habe noch ein paar Ideen wie z.B. Presets für eigene Beregnungs-Zonen-Gruppen. Wann ich das integriere kann ich aber noch nicht sagen. Wer mag kann das Ganze auch gern mal als Wiki-Eintrag verfassen, dann lassen sich die Infos besser aktuell halten und wir/ich müllen diesen Thread hier nicht so zu.

Nun erstmal viel Spaß damit.
VG Christian
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 15 Juni 2020, 00:11:30
Guten Abend Christian,

Erstmal "sieht schick aus", rein optisch und Dein herangehen:

Erste Rückmeldung:

Wie schon erwähnt, habe ich im Grunde alles nochmal neu geschrieben. (...) hierbei freue ich mich natürlich über Feedback bzw. Unterstützung.[/code]

Zuerst muss die Datei 99_sprinkleUtils.pm ins FHEM-Verzeichnis kopiert werden. --> Check
Anschießend kann mit dem Befehl {generateSprinkleDevices()} das Anlegen der Devices angestoßen werden. --> Check
Es wird nur eine Beregnungszone als Beispiel angelegt (Beregnung_Zone09). --> Check
Ich nutze derzeit 8 Zonen, diese können per copy erzeugt werden und müssen am Ende des Namens durchnummeriert sein, beginnend bei 01.-->OK

Beregnung_Zone01 ... Beregnung_Zone08: Verknüpfung der Steuerung zu den eigentlichen Steuerventilen. UND valve - Name des Devices für das/die zugehörigen Ventile setzen, bei mehreren Ventilen sind die Namen kommagetrennt zu speichern --> okay, habe ich gemacht. Ja ich starte immer das Hauptventil mit, daher sieht das Readings bei mir so aus:

setstate Beregnung_Zone01 2020-06-15 00:28:41 valve Relais01,Relais09
Zitat
start/stop - Zone im Single-Mode starten bzw. stoppen
--> das klappt bei mir (noch nicht). Das notify wird getriggert (sichtbar an der Uhrzeit)
Auszug Eventmonitor
2020-06-15 00:07:01 dummy Beregnung activeZone: 01
2020-06-15 00:07:01 dummy Beregnung_Zone01 action: start
2020-06-15 00:07:01 dummy Beregnung_Zone01 action: none

sub sprinkleSingleMode($) {
my ($zoneName) = @_;
my $mode = ReadingsVal("Beregnung", "mode", "standby");
my $zoneNumber = substr($zoneName,length($zoneName)-2,2);
if ($mode eq "standby") {
$zoneNumber = $zoneNumber + 0;
fhem ("setreading Beregnung mode single");
fhem ("setreading Beregnung activeZone $zoneNumber");
} elsif ($mode eq "single") {
fhem ("setreading Beregnung activeZone $zoneNumber");
}
fhem ("set $zoneName action none");
}

--> hier komme ich momentan noch nicht weiter....

Auch die Aktive Zone im Hauptdevice wird gesetzt "activeZone"

kann es sein, dass das Notify nicht passt?

defmod notify_Beregnungszone notify Beregnung_Zone.*:.* {\
my $zone = $NAME;;\
my $action = $EVTPART0;;\
if ($action eq "action:") {\
# Einzel-Beregnung gestartet oder gestoppt\
if ($EVTPART1 eq "start") {\
sprinkleSingleMode($zone);;\
} else {\
sprinkleStopSingleMode($zone);;\
}\
} elsif ($action eq "on") {\
# Zone aktiviert\
} elsif ($action eq "off") {\
# Zone deaktiviert\
} else {\
# andere Aktion\
}\
}
attr notify_Beregnungszone group Beregnung
attr notify_Beregnungszone room Außen

Fehlt bei on und off nicht die Aktion?

Grüße Stefan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 15 Juni 2020, 08:56:19
Hallo Stefan,

soweit ich das beurteilen kann, klingt deine Einrichtung erstmal ganz gut.

Die Notifys machen auch das was sie sollen (die fehlende Aktion bei on/off ist nicht relevant, da das bei state nicht notwendig ist). Wenn im Hauptdevice die aktive Zone gesetzt wird, klappt das auch alles. Die Ursache bei dir scheint in der Methode „ sprinkleChangeActiveZone($)“ zu liegen. Diese wird aufgerufen, sobald sich die aktive Zone ändert. In Zeile 163 wird der eigentliche Schaltbefehl gegeben. Du kannst ja mal versuchen diesen manuell auszulösen z.B. so:

set $zoneValve on-for-timer $seconds  ->

set Relais01,Relais09 on-for-timer 60
Du kannst auch mal direkt Testen die Zone zu setzen, dann aber anschließend manuell wieder auf 0 setzen, weil bei Direktzugriff kein Timer geschrieben wird.

set Beregnung activeZone 1

Was ich grad noch sehe ist, dass in der Methode „sprinkleSingleMode()“ die Bereinigung der Vornull evtl. über das IF könnte. Im event-Monitor ist zu sehen, dass deine aktive Zone mit Vornull angegeben ist. Das könnte zu Problemen führen. Mach mal bitte aus:

...
if ($mode eq "standby") {
$zoneNumber = $zoneNumber + 0;
...

das:
...
$zoneNumber = $zoneNumber + 0;
if ($mode eq "standby") {
...

Das ändere ich bei mir auch gleich mal.

VG Christian
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 15 Juni 2020, 10:26:16
Mooooin,

Wenn im Hauptdevice die aktive Zone gesetzt wird, klappt das auch alles.
Es wird activeZone 1-6 und 9 gesetzt. (ohne führende Null)

Zitat
Die Ursache bei dir scheint in der Methode „ sprinkleChangeActiveZone($)“ zu liegen. Diese wird aufgerufen, sobald sich die aktive Zone ändert.
--> genau, durch das notify

In Zeile 163 wird der eigentliche Schaltbefehl gegeben. Du kannst ja mal versuchen diesen manuell auszulösen z.B. so:

set $zoneValve on-for-timer $seconds  ->

set Relais01,Relais09 on-for-timer 60--> geht on   off  on-for-timer 60 alles ok


Du kannst auch mal direkt Testen die Zone zu setzen, dann aber anschließend manuell wieder auf 0 setzen, weil bei Direktzugriff kein Timer geschrieben wird.

set Beregnung activeZone 1

Was ich grad noch sehe ist, dass in der Methode „sprinkleSingleMode()“ die Bereinigung der Vornull evtl. über das IF könnte. Im event-Monitor ist zu sehen, dass deine aktive Zone mit Vornull angegeben ist. Das könnte zu Problemen führen. Mach mal bitte aus:

...
if ($mode eq "standby") {
$zoneNumber = $zoneNumber + 0;
...

das:
...
$zoneNumber = $zoneNumber + 0;
if ($mode eq "standby") {
...

2020-06-15 10:23:36 dummy Beregnung activeZone: 1
2020-06-15 10:23:36 dummy Beregnung_Zone01 action: start
2020-06-15 10:23:36 dummy Beregnung_Zone01 action: none
--> nun ist ohne Null, aber leider keine Änderung

Aber eine generelle Frage....die 99_sprinkleUtils.pm muss nach einer Änderung neu geladen werden oder ähnliches?

VG Christian
[/quote]
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 15 Juni 2020, 11:25:14
Das klingt irgendwie danach, dass die Methode „ sprinkleChangeActiveZone($)“ entweder gar nicht getriggert wird, oder bei dir nicht sauber funktioniert. Passiert etwas wenn du im Hauptdevice manuell eine Zone setzt?

Solange du die Utils mit dem internen FHEM-Editor bearbeitest muss nichts neu geladen werden.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: JHo am 15 Juni 2020, 14:52:44
Stefan, ist bei dir das notify_Beregnung angelegt? Das klappt bei mir nicht, und daher (?) funktioniert die Einschaltung auch nicht.

Edit: Log hilft sicher:
2020.06.15 14:50:24 3: define notify_Beregnung notify Beregnung:.* {
my $action = $EVTPART0;;
if ($action eq "pct:") {
# Intensität geändert
my $last = OldReadingsVal($NAME,"pct",100);;
fhem "setreading Beregnung lastPct $last";;
sprinklePctDuration();;
} elsif ($action eq "on:") {
# Beregnung eingeschaltet
fhem "setreading Beregnung mode standby";;
} elsif ($action eq "off:") {
# Beregnung ausgeschaltet
if (ReadingsVal("Beregnung", "mode", "standby") ne "standby") {
sprinkleStop("mainswitch");;
}
} elsif ($action eq "activeZone:") {
# aktive Beregnungszone geändert
sprinkleChangeActiveZone($EVTPART1);;
} elsif ($action eq "action:") {
# manueller Befehl
my $command = $EVTPART1;;
if ($command eq "start") }
sprinkleStart("manual");;
} elsif ($command eq "stop") {
sprinkleStop("manual");;
} elsif ($command eq "delay") {
sprinkleDelay();;
} elsif ($command eq "reset") {
sprinkleReset();;
}
} elsif ($action eq "isRaining:") {
# aktive Beregnungszone geändert
if (($EVTPART1 == 1) && (ReadingsVal("Beregnung", "mode", "standby") eq "auto")) {
sprinkleStop("rain");;
}
} else {
# unbekannte Aktion
}
} : syntax error at (eval 391966) line 22, at EOF
syntax error at (eval 391966) line 24, near "} elsif"
Global symbol "$command" requires explicit package name (did you forget to declare "my $command"?) at (eval 391966) line 24.
syntax error at (eval 391966) line 26, near "} elsif"
Global symbol "$command" requires explicit package name (did you forget to declare "my $command"?) at (eval 391966) line 26.
Global symbol "$command" requires explicit package name (did you forget to declare "my $command"?) at (eval 391966) line 28.
Global symbol "$action" requires explicit package name (did you forget to declare "my $action"?) at (eval 391966) line 31.
Unmatched right curly bracket at (eval 391966) line 39, at end of line
Unmatched right curly bracket at (eval 391966) line 39, at end of line
VG, Jan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: JHo am 15 Juni 2020, 15:20:30
... und nochmal ich: Danke Christian für die erneut viele Arbeit, die du da rein gesteckt hast.
Wenn ich den Code bei mir zum Laufen bekommen habe, versuche ich, dort hinein meine Anpassungen reinzueditieren und das hier zu dokumentieren.
Was habe ich gemacht:
Ob ein Wiki-Eintrag übersichtlicher wird...? Zumindest jetzt, bis alle Bugs "raus" sind, kann ich mir das nicht vorstellen.

Viele Grüße, Jan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 15 Juni 2020, 17:51:40
... und nochmal ich: Danke Christian für die erneut viele Arbeit, die du da rein gesteckt hast.
Wenn ich den Code bei mir zum Laufen bekommen habe, versuche ich, dort hinein meine Anpassungen reinzueditieren und das hier zu dokumentieren.
Was habe ich gemacht:
  • Einbezug der Regenmengen nicht nur des letzten, sondern der letzten 3 Tage: wenn's eine Woche geschüttet hat, muss nicht am nächsten oder übernächsten Tag wieder bewässert werden. Hast du vielleicht durchs Nullen der $daysLeft einfacher erledigt?
  • Einbezug der Evapotranspirationsprognose. Berücksichtigt die vorhergesagte Verdunstung für die kommenden 3 Tage, wenn sie eine längere (heiß, sonnig, trocken) oder kürzere (kühler, bedeckt) Bewässerung nötig machten könnte. Die PEvap-Prognosen sind immer ziemlich spekulativ und sehr von den lokalen Bedingungen abhängig, aber m.E. doch besser als nichts.
  • Einbezug der prognostizierten Regenmenge (simpel aus Regenmenge x Wahrscheinlichkeit) am nächsten Tag. Falls Mengenprognose > Grenzwert, wird der Tageszähler (jetzt $daysLeft) um eins verringert.
Ob ein Wiki-Eintrag übersichtlicher wird...? Zumindest jetzt, bis alle Bugs "raus" sind, kann ich mir das nicht vorstellen.

Viele Grüße, Jan
Hallo Jan,

zu deinen 3 Punkten:

VG Christian
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 15 Juni 2020, 21:01:47
Stefan, ist bei dir das notify_Beregnung angelegt? Das klappt bei mir nicht, und daher (?) funktioniert die Einschaltung auch nicht.

Edit: Log hilft sicher:
2020.06.15 14:50:24 3: define notify_Beregnung notify Beregnung:.* {
my $action = $EVTPART0;;
if ($action eq "pct:") {
# Intensität geändert
my $last = OldReadingsVal($NAME,"pct",100);;
fhem "setreading Beregnung lastPct $last";;
sprinklePctDuration();;
} elsif ($action eq "on:") {
# Beregnung eingeschaltet
fhem "setreading Beregnung mode standby";;
} elsif ($action eq "off:") {
# Beregnung ausgeschaltet
if (ReadingsVal("Beregnung", "mode", "standby") ne "standby") {
sprinkleStop("mainswitch");;
}
} elsif ($action eq "activeZone:") {
# aktive Beregnungszone geändert
sprinkleChangeActiveZone($EVTPART1);;
} elsif ($action eq "action:") {
# manueller Befehl
my $command = $EVTPART1;;
if ($command eq "start") }
sprinkleStart("manual");;
} elsif ($command eq "stop") {
sprinkleStop("manual");;
} elsif ($command eq "delay") {
sprinkleDelay();;
} elsif ($command eq "reset") {
sprinkleReset();;
}
} elsif ($action eq "isRaining:") {
# aktive Beregnungszone geändert
if (($EVTPART1 == 1) && (ReadingsVal("Beregnung", "mode", "standby") eq "auto")) {
sprinkleStop("rain");;
}
} else {
# unbekannte Aktion
}
} : syntax error at (eval 391966) line 22, at EOF
syntax error at (eval 391966) line 24, near "} elsif"
Global symbol "$command" requires explicit package name (did you forget to declare "my $command"?) at (eval 391966) line 24.
syntax error at (eval 391966) line 26, near "} elsif"
Global symbol "$command" requires explicit package name (did you forget to declare "my $command"?) at (eval 391966) line 26.
Global symbol "$command" requires explicit package name (did you forget to declare "my $command"?) at (eval 391966) line 28.
Global symbol "$action" requires explicit package name (did you forget to declare "my $action"?) at (eval 391966) line 31.
Unmatched right curly bracket at (eval 391966) line 39, at end of line
Unmatched right curly bracket at (eval 391966) line 39, at end of line
VG, Jan

Seltsam, dass bei dir das Notify nicht angelegt werden kann. Evtl. hab ich nen Copy&Paste Fehler in der Methode (hab das Anlegen danach nicht mehr getestet).

Versuche mal bitte ein leeres Notify anzulegen und kopiere danach folgenden Code in die def:

Beregnung:.* {
my $action = $EVTPART0;
if ($action eq "pct:") {
# Intensität geändert
my $last = OldReadingsVal($NAME,"pct",100);
fhem "setreading Beregnung lastPct $last";
sprinklePctDuration();
} elsif ($action eq "on:") {
# Beregnung eingeschaltet
fhem "setreading Beregnung mode standby";
} elsif ($action eq "off:") {
# Beregnung ausgeschaltet
if (ReadingsVal("Beregnung", "mode", "standby") ne "standby") {
sprinkleStop("mainswitch");
}
} elsif ($action eq "activeZone:") {
# aktive Beregnungszone geändert
sprinkleChangeActiveZone($EVTPART1);
} elsif ($action eq "action:") {
# manueller Befehl
my $command = $EVTPART1;
if ($command eq "start") {
sprinkleStart("manual");
} elsif ($command eq "stop") {
sprinkleStop("manual");
} elsif ($command eq "delay") {
sprinkleDelay();
} elsif ($command eq "reset") {
sprinkleReset();
}
} elsif ($action eq "isRaining:") {
# aktive Beregnungszone geändert
if (($EVTPART1 == 1) && (ReadingsVal("Beregnung", "mode", "standby") eq "auto")) {
sprinkleStop("rain");
}
} else {
# unbekannte Aktion
}
}

Ohne dieses Notify kann das Hauptdevice nicht mit der Logik „kommunizieren“
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 15 Juni 2020, 21:21:21
Hab eben noch einen Fehler in der Vorabbenachrichtigung gefunden. Anbei die korrigierte Fassung:

sub sprinklePrenotification() {
my $daysLeft = ReadingsVal("Beregnung", "daysLeft", 0);
my $prenotification = ReadingsVal("Beregnung", "prenotification", 0);
my $state = ReadingsVal("Beregnung", "state", "off");
my $totalPrecipitation = ReadingsVal("Beregnung", "totalPrecipitation", 0) + ReadingsVal("Beregnung", "rainDay", 0);
my $defaultIntervalPrecipitation = ReadingsVal("Beregnung", "defaultIntervalPrecipitation", 0);
if (($prenotification == 1) && ($daysLeft < 2) && ($state eq "on") && ($totalPrecipitation < $defaultIntervalPrecipitation)) {
sendMessage("Morgen wird voraussichtlich der Rasen bewässert.");
}
}
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 15 Juni 2020, 21:38:34
Hallo Christian, Hallo Jan,

Stefan, ist bei dir das notify_Beregnung angelegt? Das klappt bei mir nicht, und daher (?) funktioniert die Einschaltung auch nicht.
Edit: Log hilft sicher:

--> Quickcheck: Ihr beide habt 100 Punkte. Das notify war nicht angelegt.
Log: so weit war ich gestern Nacht noch nicht  ;)
Habe das notify angelegt und Zone 1 gestartet. Geht, auch in Verbindung mit zwei Ventilen (Hauptventil)

Ich schau jetzt mal weiter. Danke ihr Beiden!!!!

Wiki: Wenn damit begonnen wird müsste auf jeden Fall (temporär) ein Hinweis auf den Status und ein Link zu diesen Posts mit rein.

Beste Grüße und bis gleich ;)
Stefan


Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: FunkOdyssey am 15 Juni 2020, 21:59:35
Ich bin irritiert beim Begriff "Daylie" in deinem Code. Ist das ein Tippfehler oder hast du das ganz bewusst in dieser Form gewählt?

Das hat natürlich nichts mit der Programmierung zu tun. Ist mir nur beim Durchscrollen aufgefallen.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: JHo am 15 Juni 2020, 22:00:45
Versuche mal bitte ein leeres Notify anzulegen und kopiere danach folgenden Code in die def:
[...]
Ohne dieses Notify kann das Hauptdevice nicht mit der Logik „kommunizieren“
Ja, das war's. Meine Dummies schalten ein und ich bekomme Pushmessages. Danke!

Dein Update der Vorabbenachrichtigung erinnert mich an meinen vierten Punkt, den ich in deinem ursprünglichen Code noch gepimpt hatte: Die Pushbenachrichtigungen: warum soll am nächsten Tag nicht bewässert werden bzw. warum wird wie viel bewässert (Pause nicht abgelaufen; zu viel geregnet, zu hoher Niederschlag prognostiziert). Das hatte mir geholfen, zu verstehen, was warum passiert und damit auch, wo die Fehler in meinen Anpassungen liegen.

Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 15 Juni 2020, 22:09:43
Ich bin irritiert beim Begriff "Daylie" in deinem Code. Ist das ein Tippfehler oder hast du das ganz bewusst in dieser Form gewählt?

Das hat natürlich nichts mit der Programmierung zu tun. Ist mir nur beim Durchscrollen aufgefallen.

Ja stimmt, schwieriges Wort. Daily sieht besser aus, werd es mal fixen.
Danke.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 15 Juni 2020, 22:19:20
Seltsam, dass bei dir das Notify nicht angelegt werden kann. Evtl. hab ich nen Copy&Paste Fehler in der Methode (hab das Anlegen danach nicht mehr getestet).

Missing right curly or square bracket at (eval 369289) line 1, at end of line syntax error at (eval 369289) line 1, at EOF...bekomme ich, wenn ich den Block direkt als notify anlegen möchte
mit dummy notify und dann die DEF Einfügen hat's geklappt.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 15 Juni 2020, 22:22:18
Dann kann ich auch nicht wirklich sagen was FHEM da nicht gefällt. Da ich das Notify auch Stück für Stück aufgebaut hab, hatte ich dieses „Problem“ nicht.
Wenn’s so klappt, ist es ja auch erstmal gut.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 15 Juni 2020, 22:37:51
Dann kann ich auch nicht wirklich sagen was FHEM da nicht gefällt. Da ich das Notify auch Stück für Stück aufgebaut hab, hatte ich dieses „Problem“ nicht.
Wenn’s so klappt, ist es ja auch erstmal gut.

Ich glaube das liegt an den Backslashs...so sieht mein RAW Export aus.

define notify_Beregnung notify Beregnung:.* {\
my $action = $EVTPART0;;\
if ($action eq "pct:") {\
# Intensität geändert\
my $last = OldReadingsVal($NAME,"pct",100);;\
fhem "setreading Beregnung lastPct $last";;\
sprinklePctDuration();;\
} elsif ($action eq "on:") {\
# Beregnung eingeschaltet\
fhem "setreading Beregnung mode standby";;\
} elsif ($action eq "off:") {\
# Beregnung ausgeschaltet\
if (ReadingsVal("Beregnung", "mode", "standby") ne "standby") {\
sprinkleStop("mainswitch");;\
}\
} elsif ($action eq "activeZone:") {\
# aktive Beregnungszone geändert\
sprinkleChangeActiveZone($EVTPART1);;\
} elsif ($action eq "action:") {\
# manueller Befehl\
my $command = $EVTPART1;;\
if ($command eq "start") {\
sprinkleStart("manual");;\
} elsif ($command eq "stop") {\
sprinkleStop("manual");;\
} elsif ($command eq "delay") {\
sprinkleDelay();;\
} elsif ($command eq "reset") {\
sprinkleReset();;\
}\
} elsif ($action eq "isRaining:") {\
# aktive Beregnungszone geändert\
if (($EVTPART1 == 1) && (ReadingsVal("Beregnung", "mode", "standby") eq "auto")) {\
sprinkleStop("rain");;\
}\
} else {\
# unbekannte Aktion\
}\
}\

attr notify_Beregnung group Beregnung
attr notify_Beregnung room Bewässerungsautomatik
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 15 Juni 2020, 22:40:58
Sind die noch drin? Ja, das wird‘s sein. Hab die RAW-Definitions meiner Devices kopiert und eigentlich alle Backslashes entfernt. Da ist bei dem Notify wohl was schiefgegangen.

Muss mir wohl doch mal wieder nen Notebook zulegen. Am iPad sind solche größeren Aktionen irgendwie noch ziemlich umständlich.

Nachtrag: im FHEM-Editor sieht es eigentlich gut aus... :o
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 15 Juni 2020, 22:55:17
Sind die noch drin? Ja, das wird‘s sein. Hab die RAW-Definitions meiner Devices kopiert und eigentlich alle Backslashes entfernt. Da ist bei dem Notify wohl was schiefgegangen.

Muss mir wohl doch mal wieder nen Notebook zulegen. Am iPad sind solche größeren Aktionen irgendwie noch ziemlich umständlich.

Nachtrag: im FHEM-Editor sieht es eigentlich gut aus... :o

Entschuldige, ich glaube die Backslashs müssen drin sein. Damit läuft das Define vom Notify rein. Ohne läuft es nicht rein.
die Backslashs sind aus meinem RAW

Gerade nochmal die RAW kopiert, das notify gelöscht und wieder neu eingerichtet...mit Backslashs geht es definitv.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 15 Juni 2020, 23:11:43
Sind die noch drin? Ja, das wird‘s sein. Hab die RAW-Definitions meiner Devices kopiert und eigentlich alle Backslashes entfernt. Da ist bei dem Notify wohl was schiefgegangen.

Muss mir wohl doch mal wieder nen Notebook zulegen. Am iPad sind solche größeren Aktionen irgendwie noch ziemlich umständlich.

Nachtrag: im FHEM-Editor sieht es eigentlich gut aus... :o

So sieht es bei mir aus:
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 15 Juni 2020, 23:23:15
Hi Christian,

Du hattest um Rückmeldung gebeten:

1.) Es wäre cool, wenn Du Deinen ersten Beitrag editierst und auf den Eintrag #60 verweist, wo Du von den Neuerungen sprichst.
2.) Wenn man eine Zone manuell startet kommt die Meldung
Ventil01 Rasen vorne für 0.25 Minuten eingeschaltet.
nächste Zone: 2 in 00:00:16 Modus ist single

--> bei Single kommt doch aber gar keine "nächste Zone". Ich hab daher Zeile 177 geändert in:
if ($mode ne "single") {fhem ("set xxxxx_home_Bot message \@-xxxxxxxxxxxx nächste Zone: $nextZone in $time Modus ist $mode");}
if ($mode eq "single") {fhem ("set xxxxx_home_Bot message \@-xxxxxxxxxxxx nächste Zone: Keine nächste Zone - Modus ist $mode");}
/code]

siehst Du hier Nebenwirkungen?

Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: JHo am 16 Juni 2020, 10:10:20
Ich hab daher Zeile 177 geändert in:
if ($mode ne "single") {fhem ("set xxxxx_home_Bot message \@-xxxxxxxxxxxx nächste Zone: $nextZone in $time Modus ist $mode");}
if ($mode eq "single") {fhem ("set xxxxx_home_Bot message \@-xxxxxxxxxxxx nächste Zone: Keine nächste Zone - Modus ist $mode");}

Hallo Stefan, warum nicht direkt per sendMessage? Bei mir funktioniert das dann so (Zeile 177 ersetzen):
if ($mode ne "single") {sendMessage("nächste Zone: $nextZone in $time Modus ist $mode");}
if ($mode eq "single") {sendMessage("nächste Zone: Keine nächste Zone - Modus ist $mode");}

Frage an Christian: ist die grundsätzliche Logik vergleichbar mit den ursprünglichen Ideen geblieben? Würde (mir) viele Fragen sparen, weil du ja vorne einiges erklärt hast... Mir fällt z.B. auf: gestern hat es heftig geregnet (>> defaultIntervalPrecipitation), d.h. der Tageszähler ist unverändert auf 3. Wäre er schon niedriger gewesen (z.B. 1), hätte der Regen ihn dann einen Tag hochgesetzt (2) oder gleich wieder auf den Wert der intervalDays (3) - komplettes Überspringen des Zyklus oder "nur" verschieben um einen Tag?
Im Device finde ich auch noch die "menge_soll" als Reading - das ist ein vergessenes Überbleibsel aus der ursprünglichen Version und kann gelöscht werden, oder?

Danke! Jan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 16 Juni 2020, 10:43:06
Hallo,

die Benachrichtigung sendMessage("nächste Zone: $nextZone in $time Modus ist $mode") hatte ich eigentlich nur zu debugging-zwecken drin. Kann aus meiner Sicht raus, oder einfach nur auskommentieren. Hier wollte ich prüfen ob die Ermittlung der nächsten Zone welche auf on steht funktioniert sowie ob die Formatierung für den Timer passt.

Die Grundsätzliche Logik ist gleich geblieben, einziger (gravierender) Unterschied zur Ursprungsversion ist, dass der Tageszähler nun runter und nicht mehr rauf zählt. D.h. wenn die gewünschte Bewässerungsmenge in totalPrecipitation erreicht ist (also größer oder gleich defaultIntervalPrecipitation ist), dann wird der Tageszähler auf den eingestellten Interval gesetzt (intervalDays) und zählt täglich runter, solange die Sollmenge nicht wieder erreicht ist. Wenn der Tageszähler auf 0 steht und die startTime erreicht ist, dann wird Bewässert. Das hat den Vorteil, dass an dem Reading intervalDays sofort ablesbar ist, wie viele Tage noch bis zum nächsten Automatikmodus vergehen.
An dem Tag, an dem ein voller Zyklus (also 100%) bewässert wurde ohne, dass durch irgend einen Grund (manueller Stopp, oder Regen) unterbrochen wurde, wird im Anschluss der Wert totalPrecipitation um den Betrag defaultIntervalPrecipitation erhöht. Somit wird Abends beim Update der Zähler festgestellt, dass die gewünschte Menge erreicht ist und der Tageszähler wird wieder auf den eingestellten Intervall hochgesetzt. In diese Berechnung (sprinklePrecipitationUpdate) könnten nun auch andere Daten wie Verdunstung und Regenprognose ect. einfließen.

Dass die Berechnung korrekt funktioniert, müsst ihr noch ein eigenes Notify anlegen, was die beiden Readings rainfall und rainDay füttert. Ich habe das z.B. so gelöst, dass bei jeder Aktualisierung meines Wetterdevices diese beiden Werte in die Beregnungssteuerung gepushed werden (alle 2 Minuten). Somit weiß die Steuerung jederzeit was Sache ist und muss sich nicht selbst um das holen der Wetterdaten kümmern. Das könnte man sicherlich auch noch konfigurierbar machen, aber das hängt immer von der lokalen Einrichtung der Wetterdaten usw. ab.

Die alten, deutsch benannten Readings wie z.B. tage_soll und menge_soll können alle raus. Diese wurden komplett durch neue ersetzt. Über die setList lassen sich die neuen Sollwerte nun auch endlich komfortabel pflegen.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 16 Juni 2020, 11:26:13
Hallo Stefan, warum nicht direkt per sendMessage? Bei mir funktioniert das dann so (Zeile 177 ersetzen):
if ($mode ne "single") {sendMessage("nächste Zone: $nextZone in $time Modus ist $mode");}
if ($mode eq "single") {sendMessage("nächste Zone: Keine nächste Zone - Modus ist $mode");}
Danke! Jan

OMG - ich Schussel. Weil ich in der commandref nach „sendmessage“ gesucht hatte und nicht kapiert habe das es eine Subroutine ist.... da muss ich wohl gerade mal n paar Zeilen zurückandern  ::)

Dank Dir *winkmitdemzaunpfahl*
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: JHo am 16 Juni 2020, 11:55:42
Die Grundsätzliche Logik ist gleich geblieben, einziger (gravierender) Unterschied zur Ursprungsversion ist, dass der Tageszähler nun runter und nicht mehr rauf zählt. D.h. wenn die gewünschte Bewässerungsmenge in totalPrecipitation erreicht ist (also größer oder gleich defaultIntervalPrecipitation ist), dann wird der Tageszähler auf den eingestellten Interval gesetzt (intervalDays) und zählt täglich runter, solange die Sollmenge nicht wieder erreicht ist. Wenn der Tageszähler auf 0 steht und die startTime erreicht ist, dann wird Bewässert. Das hat den Vorteil, dass an dem Reading intervalDays sofort ablesbar ist, wie viele Tage noch bis zum nächsten Automatikmodus vergehen.
Wunderbar, das spart eine Menge Code (den ich damals mit reingebaut hatte). Und damit wird es ja auch wirklich unnötig, den Regen über mehrere Tage aufzusummieren.
Zitat
Dass die Berechnung korrekt funktioniert, müsst ihr noch ein eigenes Notify anlegen, was die beiden Readings rainfall und rainDay füttert. Ich habe das z.B. so gelöst, dass bei jeder Aktualisierung meines Wetterdevices diese beiden Werte in die Beregnungssteuerung gepushed werden (alle 2 Minuten).
Frage an der Stelle zum Reading rainfall. Du schreibst in deiner Erläuterung von Sonntag abend, dass das die aktuelle Regenrate in l/m² angegeben sein soll. Nur zum Verständnis, da ich dachte, Regenrate wäre in mm/h oder l/h: es geht hier weniger um den Wert an sich, sondern nur um die Feststellung, ob es gerade jetzt regnet oder eben nicht? Die Menge an sich kommt ja im rainDay unter?
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 16 Juni 2020, 12:47:21
Wunderbar, das spart eine Menge Code (den ich damals mit reingebaut hatte). Und damit wird es ja auch wirklich unnötig, den Regen über mehrere Tage aufzusummieren.
....
Frage an der Stelle zum Reading rainfall. Du schreibst in deiner Erläuterung von Sonntag abend, dass das die aktuelle Regenrate in l/m² angegeben sein soll. Nur zum Verständnis, da ich dachte, Regenrate wäre in mm/h oder l/h: es geht hier weniger um den Wert an sich, sondern nur um die Feststellung, ob es gerade jetzt regnet oder eben nicht? Die Menge an sich kommt ja im rainDay unter?

Naja, genaugenommen wird der Momentanwert für den Niederschlag meistens in mm/qm/h angegeben, also wie viele Liter würden bei dieser Intensität in einer Stunde je Quadratmeter runterkommen. Genau so ist der Wert auch zu interpretieren.
Das Reading rainfall nutze ich tatsächlich auch nur um den "Schalter" isRaining ab einem bestimmten Schwellwert umzulegen. Wie hoch diese Schwelle ist, kann jeder für sich festlegen.

Der Wert rainDay ist wichtiger, da dieser ja kummuliert und irgendwann mit der gewünschten Menge verglichen werden soll. Aber auch hier gilt: mm/qm bzw. l/qm passt zum Rest der Logik.

VG Christian
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 16 Juni 2020, 13:04:45
Hallo Christian,
sub sprinkleStart($) ....
my $startDelay = 3;

in der sprinkleStart ist der "startDelay" mit 3 Sekunden eingetragen. Was hältst Du davon diesen als Reading in die Beregnung zu nehmen?
Dann könnte der Wert individuell und einfach angepasst werden.
BG Stefan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 16 Juni 2020, 13:17:10
Hallo Christian,
sub sprinkleStart($) ....
my $startDelay = 3;

in der sprinkleStart ist der "startDelay" mit 3 Sekunden eingetragen. Was hältst Du davon diesen als Reading in die Beregnung zu nehmen?
Dann könnte der Wert individuell und einfach angepasst werden.
BG Stefan

Hi Stefan,

hätte ich kein Problem mit. Potenziell müssten wir evtl. zwei Readings anlegen. Ich hatte bisher immer eine Verzögerung von 60 Sek. im Automatikmodus (im aktuellen Code sind es 10 Sek.) und 10 Sek. im manuellen Modus (derzeit die von dir erwähnten 3 Sek.). Grund für mich war es, bei ungewolltem/versehentlichem Start noch reagieren und ggf. stoppen zu können. Es kommt ja direkt die Benachrichtigung, dass in xy Sekunden gestartet wird. Sicherlich könnte man auch mit einem einheitlichen Wert für alle Modi leben.

Vorschlag: neues Reading startDelay in welches der gewünschte Wert in Sekunden eingetragen werden muss.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 16 Juni 2020, 15:31:47
setList
attr Beregnung setList state:on,off pct:slider,5,1,100 intervalDays:1,2,3,4,5,6,7 defaultIntervalPrecipitation:slider,1,1,20 activeZone:00,01,02,03,04,05,06,09 rainThreshold:0,0.5,1,1.5,2,2.5,3 startTime updateDaylieRainTime prenotifcationTime action:start,stop,delay,reset notifications:0,1 prenotification:0,1 startDelay:3,5,10,20--> oder ähnlich  ;)

readingList
attr Beregnung readingList state pct intervalDays daysLeft defaultIntervalPrecipitation rainfall rainThreshold isRaining rainDay totalPrecipitation activeZone startTime updateDaylieRainTime prenotifcationTime mode action notifications prenotification startDelay
sub sprinkleStart
my $startDelay = (ReadingsVal("Beregnung", "startDelay", "10"));-->sonst noch irgendwo?
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: FunkOdyssey am 16 Juni 2020, 22:06:08
Ich musste bei mir das Notify auch manuell anlegen.

Doch ich habe mit dem anderen Notify noch ein Problem. Sobald ich eine Beregnungszone deaktivieren will, habe ich folgende Zeilen im Log:

2020.06.16 22:01:42.817 1:  ERROR evaluating my $EVTPART0='on';my $TYPE='dummy';my $SELF='notify_Beregnungszone';my $NAME='Beregnung_Zone01';my $EVENT='on';{
my $zone = $NAME;
my $action = $EVTPART0;
if ($action eq "action:") {
# Einzel-Beregnung gestartet oder gestoppt
if ($EVTPART1 eq "start") {
sprinkleSingleMode($zone);
} else {
sprinkleStopSingleMode($zone);
}
} elsif ($action eq "on") {
# Zone aktiviert
} elsif ($action eq "off") {
# Zone deaktiviert
} else {
# andere Aktion
}
}: Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 291169) line 6.

2020.06.16 22:01:42.817 3:  notify_Beregnungszone return value: Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 291169) line 6.

Mir ist aufgefallen, dass ich bei $action EVTPART0 und EVTPART1 zur Verfügung habe.
Aber wenn ich direkt mit den Settern ON oder OFF arbeite, so gibt es kein EVTPART1

2020-06-16 22:04:56.671 dummy Beregnung_Zone01 off
2020-06-16 22:05:00.584 dummy Beregnung_Zone01 on
2020-06-16 22:05:02.120 dummy Beregnung_Zone01 action: start
2020-06-16 22:05:02.120 dummy Beregnung_Zone01 action: none

Kann es sein, dass das Notify noch nicht korrekt ist? Danke.

Sehe gerade. Also die gleiche Frage wie hier: https://forum.fhem.de/index.php/topic,59872.msg1064493.html#msg1064493



Ein ähnliches Problem habe ich, wenn ich im globale Beregnungsdevice mit ON oder OFF arbeite:

2020.06.16 22:11:02.657 1:  ERROR evaluating my $NAME='Beregnung';my $EVENT='off';my $SELF='notify_Beregnung';my $TYPE='dummy';my $EVTPART0='off';{
my $action = $EVTPART0;
if ($action eq "pct:") {
# Intensität geändert
my $last = OldReadingsVal($NAME,"pct",100);
fhem "setreading Beregnung lastPct $last";
sprinklePctDuration();
} elsif ($action eq "on:") {
# Beregnung eingeschaltet
fhem "setreading Beregnung mode standby";
} elsif ($action eq "off:") {
# Beregnung ausgeschaltet
if (ReadingsVal("Beregnung", "mode", "standby") ne "standby") {
sprinkleStop("mainswitch");
}
} elsif ($action eq "activeZone:") {
# aktive Beregnungszone geändert
sprinkleChangeActiveZone($EVTPART1);
} elsif ($action eq "action:") {
# manueller Befehl
my $command = $EVTPART1;
if ($command eq "start") {
sprinkleStart("manual");
} elsif ($command eq "stop") {
sprinkleStop("manual");
} elsif ($command eq "delay") {
sprinkleDelay();
} elsif ($command eq "reset") {
sprinkleReset();
}
} elsif ($action eq "isRaining:") {
# aktive Beregnungszone geändert
if (($EVTPART1 == 1) && (ReadingsVal("Beregnung", "mode", "standby") eq "auto")) {
sprinkleStop("rain");
}
} else {
# unbekannte Aktion
}
}: Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 296170) line 18.
Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 296170) line 21.
Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 296170) line 33.

2020.06.16 22:11:02.657 3:  notify_Beregnung return value: Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 296170) line 18.
Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 296170) line 21.
Global symbol "$EVTPART1" requires explicit package name (did you forget to declare "my $EVTPART1"?) at (eval 296170) line 33.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 17 Juni 2020, 21:23:34
setList
attr Beregnung setList state:on,off pct:slider,5,1,100 intervalDays:1,2,3,4,5,6,7 defaultIntervalPrecipitation:slider,1,1,20 activeZone:00,01,02,03,04,05,06,09 rainThreshold:0,0.5,1,1.5,2,2.5,3 startTime updateDaylieRainTime prenotifcationTime action:start,stop,delay,reset notifications:0,1 prenotification:0,1 startDelay:3,5,10,20--> oder ähnlich  ;)

readingList
attr Beregnung readingList state pct intervalDays daysLeft defaultIntervalPrecipitation rainfall rainThreshold isRaining rainDay totalPrecipitation activeZone startTime updateDaylieRainTime prenotificationTime mode action notifications prenotification startDelay
sub sprinkleStart
my $startDelay = (ReadingsVal("Beregnung", "startDelay", "10"));-->sonst noch irgendwo?

Das sollten alle relevanten Stellen gewesen sein. Ich hab‘s in der setlist per Slider gelöst, nun lässt es sich in 5 Sekunden-Schritten bis max 120 einstellen.

Hab außerdem noch nen Tippfehler gefunden. Anstatt prenotifcationTime muss es prenotificationTime lauten. Muss in readingList, setList und im doif geändert werden.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 17 Juni 2020, 22:00:45
Ich hab mir die notify-Problematik mal eben angesehen und tatsächlich auch in meinem Log die Warnmeldungen, wenn ich den status on/off ändere. Laut folgendem Artikel lässt sich das auch nicht grundsätzlich verhindern:
 https://forum.fhem.de/index.php?topic=102350.0 (https://forum.fhem.de/index.php?topic=102350.0)

Ich habe den Vorschlag von Rudi mit dem evenarray mal getestet und bekomme nun keine Fehler mehr. Könnt ihr ja auch mal versuchen.

Hierzu ganz oben im notify erstmal das array erstellen:

Beregnung:.* {
my @eventarray = split(" ", $EVENT);
my $action = $eventarray[0];
        .....

und dann überall wo vorher $EVTPARTx stand $eventarray[x] einsetzen. x steht hierbei für den Index der vorher auch dahinterstand.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 21 Juni 2020, 21:12:55
Ich bin grad dabei den (derzeit) letzten Punkt meiner Feature-Liste umzusetzen. Damit soll die Möglichkeit gegeben werden, eine bestimmte Kombination von Beregnungszonen inkl. eingestellter Intensität als Preset zu speichern. Diese Presets können dann später entweder manuell gestartet werden oder dem Auto-Modus wird ein Preset zugewiesen, sodass immer die dort hinterlegten Zonen berücksichtigt werden, unabhängig des aktuellen Ein-/Ausschaltstatus. Die Intensität für den Automatikmodus wird weiterhin über die übliche Logik berechnet.

Wofür kann das gut sein?

Beispiel 1: Von meinen insgesamt 8 Zonen starte ich die Zonen im Vorgarten in langen Trockenperioden gern hin und wieder von Hand. Um nicht jede Zone einzeln starten zu müssen bzw. nicht ständig die Zonen hinterm Haus deaktivieren zu müssen (für einen manuellen Zyklus), speichere ich die betroffenen Zonen in einem Preset. Ebenso kann ich so gleich die gewünschte Intensität hinterlegen. Somit kann ich künftig einfach den Preset starten und die Anlage spricht nur die Regner im Vorgarten an...

Beispiel 2: Ich habe irgendwo etwas Rasen nach- bzw. neu gesät und möchte nun diese Stelle vor dem Austrocknen schützen. Also speichere ich die betroffene Zone(n) in einem Preset mit geringer Intensität. Nun kann ich über einen Timer mehrmals täglich genau diese Zone(n) beregnen lassen. Für den Automatikmodus lege ich entweder ein anderes Preset mit den restlichen Zonen an oder ich deaktiviere einfach die Zone(n) in denen nachgesät worden ist.

Sicherlich gibt es noch weitere Anwendungsfälle. Insgesamt habe ich erstmal 3 Presets vorgesehen. Grundsätzlich könnten aber auch hier noch weitere problemlos ergänzt werden.

Falls jemand noch hinweise/Ideen hat, bin ich ganz Ohr.

Sobald der Code fertig und lauffähig ist, werde ich mal ein neues File (inkl. der bisherigen Bugfixes) hochladen.

VG Christian
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 21 Juni 2020, 21:52:07
Das ist ja Klasse.
Habe auch gerade nachgesät und mir für die Fläche ein doif gebaut.
Aber das mit den Presets ist natürlich klasse.

Das mit den Notifys werde ich hoffentlich nächste Woche mal testen können.

Beste Grüsse
Stefan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: FunkOdyssey am 21 Juni 2020, 23:51:32
Ich arbeite mich gerade in deine Lösung ein. Wie kann man denn über die Zone oder dem Hauptdevice einen bereits gestarteten "on-for-timer" Beim Valve abbrechen? Habe ich evtl. noch ein Bug bei mir oder ist dieser Weg nicht implementiert?

Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 22 Juni 2020, 00:04:57
Ich arbeite mich gerade in deine Lösung ein. Wie kann man denn über die Zone oder dem Hauptdevice einen bereits gestarteten "on-for-timer" Beim Valve abbrechen? Habe ich evtl. noch ein Bug bei mir oder ist dieser Weg nicht implementiert?

meinst Du:
set Beregnung_Zone01 stopBG Stefan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: FunkOdyssey am 22 Juni 2020, 00:32:03
meinst Du:
set Beregnung_Zone01 stopBG Stefan

Ja, das hatte ich auch angenommen. Klappt bei mir aber nicht.
Dann gehe ich mal auf Suche.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: JHo am 22 Juni 2020, 09:24:05
Hallo Christian,

eine Frage und Anregung hätte ich noch. Bin aber fast sicher, dass dasnur mit richtig viel Aufwand, fast erst als Modul möglich wird:

Für die Bewässerung meiner Beete verwende ich andere Grundeinstellungen als für den Rasen. Alle 2 statt alle 3 Tage und mit abweichenden Soll-Liter/m², d.h. auch unterschiedlicher Reaktion auf Niederschlag. Wenn ich das richtig verstanden habe, ist das mit der aktuellen Version so nicht abzubilden: Ich könnte nur die Beregnungsdauer anpassen, wenn ich die Beetebewässerung mit in das "Device" aufnehme.
In der "alten" Variante von der ersten Seite habe ich einfach die internen Logiken (Readings und Code) so geändert, dass ich jetzt einen Satz notifies, doifs etc. für Rasen- und einen für Beetebewässerung habe. Also 2 getrennte, zentrale Steuerungen.
Um das mit der aktuellen Variante machen zu können, müsste ich nun auch die 99_myGiessenUtils mit geänderten Namen "duplizieren" (z.B. suchen und ersetzen "Beregnung" durch "Beeteberegnung" - das ist wenig Aufwand, aber nicht besonders schön). Mein Wunsch wäre, das jeweilige "Hauptdevice" als Variable übergeben zu können und damit mit einer myGiessenUtils mehrere separate Steuerungslogiken umzusetzen.

Zweite Frage: wie würdest du einen "Hauptschalter" integrieren (bei mir ein Hauptventil, dass den Strang zum Ventilverteiler überhaupt erst freigibt, oder eine Pumpe o.ä.)? Einfach per DOIF auf die einzelnen Beregnungskreise?

Viele Grüße, Jan
Oder wie würdest du solche unterschiedlichen Anforderungen an das Beregnungsintervall umsetzen?
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 22 Juni 2020, 11:08:47
Ja, das hatte ich auch angenommen. Klappt bei mir aber nicht.
Dann gehe ich mal auf Suche.

Grundsätzlich sollte das Ventil selbst erstmal unterstützen via set ventilname off auch einen laufenden Timer zu unterbrechen. Geht das nicht, müsste erstmal ergründet werden wie das Device selbst geschaltet werden kann.

Im Code wird bei jeder Änderung der aktiven Zone im Hauptdevice eigentlich dafür gesorgt, dass evtl. noch eingeschaltete Ventile ausgeschaltet werden.

...
# erstmal alle aktiven Ventile ausschalten
my $itemvalve = "";
foreach my $item (devspec2array('NAME=Beregnung_Zone.*')) {
$itemvalve = ReadingsVal($item,"valve","none").":FILTER=STATE=on";
fhem ("set $itemvalve off");
}

:) ich stelle grad fest, dass ich recht oft den Begriff „erstmal“ verwende :)
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 22 Juni 2020, 11:51:13
1.
Für die Bewässerung meiner Beete verwende ich andere Grundeinstellungen als für den Rasen. Alle 2 statt alle 3 Tage und mit abweichenden Soll-Liter/m², d.h. auch unterschiedlicher Reaktion auf Niederschlag

2.
....Mein Wunsch wäre, das jeweilige "Hauptdevice" als Variable übergeben zu können und damit mit einer myGiessenUtils mehrere separate Steuerungslogiken umzusetzen.

3.
Zweite Frage: wie würdest du einen "Hauptschalter" integrieren (bei mir ein Hauptventil, dass den Strang zum Ventilverteiler überhaupt erst freigibt, oder eine Pumpe o.ä.)? Einfach per DOIF auf die einzelnen Beregnungskreise?

Hallo Jan,

1.
wenn es „nur“ darum geht die Zonen für die Beete in abweichendem Zyklus, mit fixer Intensität und nicht bei Regen usw. einzuschalten, so ließe sich das vermutlich künftig mit den Presets lösen. Den Startimpuls müsste man dann jedoch von außen z.B. via DOIF geben.
Wenn auch dafür die Bewässerungsmengen weggeschrieben und irgendwelche Berechnungen durchgeführt werden sollen, dann wird vermutlich ein Duplikat der kompletten Steuerung die bessere Entscheidung sein.

2.
Sicherlich sollte es möglich sein, die Lösung soweit zu flexibilisieren, dass in den Methoden der Zugriff auf die Devices per Variable erfolgt. Das heißt, bei jedem Aufruf einer Methode müsste zusätzlich der „Präfix“ der Steuerungslogik übergeben werden (z.B. Beregnung oder Tropfbewaesserung o.ä.). Dann gäbe es eben mehrere Hauptdevices und zugehörige Zonen, die mit dem gleichen Namen beginnen wie das Hauptdevice.
Wenn ich herausgefunden habe, warum die Notify nicht selbstständig angelegt werden und das fixen kann, würde ich mal versuchen eine Variable Version vorzubereiten.

3.
Solange es unkritisch ist, dass das Hauptventil ohne Verzögerung zeitgleich mit den Zonenventilen schaltet, ist die Integration in die Zonen (so wie du es jetzt gelöst hast) das einfachste.
Man könnte das Hauptventil auch über das Reading „mode“ des Hauptdevice lösen. Dieser ist ja nur standby wenn nicht beregnet wird. Somit könnte in das Hauptdevice beispielsweise ein neues Reading „mainValve“ aufgenommen werden, in das der Devicename des Hauptventils bzw. der Pumpe eingetragen wird. Zusätzlich würde ich noch ein Reading für die maximale Einschaltdauer des Hauptventils gut finden, sodass dieses immer via on-for-timer geschaltet wird. Somit wäre sichergestellt, dass auch im Falle eines Fehlers nach dieser hinterlegten Zeit zumindest das Hauptventil selbstständig wieder ausschaltet. Kann ich mir ja mal ansehen.

VG Christian
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: JHo am 22 Juni 2020, 12:08:03
3.
Solange es unkritisch ist, dass das Hauptventil ohne Verzögerung zeitgleich mit den Zonenventilen schaltet, ist die Integration in die Zonen (so wie du es jetzt gelöst hast) das einfachste.
Man könnte das Hauptventil auch über das Reading „mode“ des Hauptdevice lösen. Dieser ist ja nur standby wenn nicht beregnet wird. Somit könnte in das Hauptdevice beispielsweise ein neues Reading „mainValve“ aufgenommen werden, in das der Devicename des Hauptventils bzw. der Pumpe eingetragen wird. Zusätzlich würde ich noch ein Reading für die maximale Einschaltdauer des Hauptventils gut finden, sodass dieses immer via on-for-timer geschaltet wird. Somit wäre sichergestellt, dass auch im Falle eines Fehlers nach dieser hinterlegten Zeit zumindest das Hauptventil selbstständig wieder ausschaltet. Kann ich mir ja mal ansehen.
Natürlich - Danke für den Schubser! Es spricht zumindest in meinem Fall überhaupt nichts dagegen, das ohne Vorlauf zu schalten. Die Millisekunde, die der Druck später am zweiten Ventil anliegt, dürfte egal sein. On-for-timer ist natürlich wichtig, und damit ist dann wohl sinnvoll, für jede Zone sowohl das Haupt- als auch das eigentliche Zonenventil als "valve" anzugeben und zu schalten. Für eine Pumpe wäre sicher die "große" Variante sinniger.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: FunkOdyssey am 22 Juni 2020, 22:52:29
Ich habe noch ein Verständnisproblem mit der Berücksichtigung des Regens.
Hat hier jemand ein Praxisbeispiel? Nutzt jemand dazu ein Wettermodul oder Ähnliches?
Danke für die Hilfe.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: Stefan_Hvr am 23 Juni 2020, 08:14:42
Ich habe noch ein Verständnisproblem mit der Berücksichtigung des Regens.
Hat hier jemand ein Praxisbeispiel? Nutzt jemand dazu ein Wettermodul oder Ähnliches?
Danke für die Hilfe.
Moin,
bisher noch nichts "schickes" gefunden. Die Wetterdaten bei uns in der Nähe weichen zu stark vom wirklichen Zustand ab. (Proplanta).
Über historische Daten habe ich mir aus zeitgründen noch keinen Kopf machen können.
Ich denke ich werde mich im Herbst mal damit beschäftigen  oder die Bodenfeuchte messen oder ne lokale Wetterstation einzubauen o.ä.
Zumindest die Meldung "israining" verspreche ich mir ab nächste Woche aus meinem Rasenmäher abfragen zu können.
BG Stefan
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: JHo am 23 Juni 2020, 09:31:25
Ich habe noch ein Verständnisproblem mit der Berücksichtigung des Regens.
Hat hier jemand ein Praxisbeispiel? Nutzt jemand dazu ein Wettermodul oder Ähnliches?
Ich nutze für den Landroid das DWD-Modul und für die Bewässerung noch nach dem "alten" Code von den ersten Seiten meine eigene Wetterstation (also den Regenmesser der TFA Nexus --> weewx --> FHEM), und reingefrickelt für die Evapotranspiration und eine Regenprognose auch wieder das DWD-OpenData-Modul.
DWD liefert natürlich für den jeweiligen Ort recht schwankend zuverlässige Angaben, ist ja regional alles interpoliert. Je klarer die Wetterlage, umso besser sind die "Treffer" - Gewitter sind z.B. meist viel zu lokal, um mit mehreren Stunden Vorlauf recht zuverlässig für einen Ort angesagt zu werden. Das muss man immer im Hinterkopf behalten.

Zu deiner Frage: was ist denn genau unklar?
- Wenn es aktuell regnet und eine Bewässerung läuft, wird sie unterbrochen. Man weiß ja nicht, wie viel es noch regnen wird. Als Sensor habe ich aktuell meinen Regenmesser, der aber erst ab einer gewissen Menge anschlägt (hat eine Wippe, jeder Wechsel bedeuten 0,7 l/m²). Denkbar sind natürlich die Regenerkennung vom Rasenmäher (da der bei mir aber mit bewässert wird, kann ich ihn nicht nehmen) oder ein simpler Regenmelder z.B. über Jeelink.
- Wenn es bereits messbar geregnet hat, wird dieser natürliche Niederschlag von der zu bewässernden Menge abgezogen, d.h. entsprechend weniger bis nichts bewässert. Dafür ist der Regenmesser mit Wippe natürlich gut geeignet; Rasenmäher oder reinen Regenmelder kann man nicht gebrauchen.

Wie erwähnt, habe ich mir in den alten Code noch zwei Erweiterungen auf Basis der DWD-Prognose gebaut:
- Ist für den Tag der Bewässerung Regen (Menge > definierter Sollwert) angesagt, wird die Bewässerung noch einen Tag verschoben. Dabei rechne ich simpel "Regenmenge laut Prognose = Niederschlagswahrscheinlichkeit * Vorhersagemenge". Hier bin ich ein manueller Stopper: wird zu viele Tage geschoben, und es regnet doch nicht, dann schalte ich halt per Hand ein. Könnte man auch automatisieren.
- Als zweiten Wert für die Bewässerungs-% habe ich die Verdunstung, genauer Evapotranspiration, ins Boot geholt. Das ist ein sehr theoretischer Wert, der für "idealtypisches Grünland" berechnet wird. Die Werte im Hausgarten werden in real sehr stark schwanken, aber so Pi mal Daumen...
Der Evap.-Prognosewert für den Tag wird mit dem Bewässerungs-Sollwert pro Tag verglichen. Liegt PEvap unter Soll pro Tag (d.h. die Pflanzen "verbrauchen" weniger, als "nachgefüllt" wird), wird die Bewässerungsdauer entsprechend verkürzt. Liegt PEvap höher (z.B. sehr heiß, oder sehr geringe Luftfeuchte plus Wind), wird die Bewässerungsdauer verlängert.
ich habe jeweils einen Faktor für positive und negative Änderungen der Gesamtbewässerungsdauer eingeführt, weil ich das Gefühl (!) hatte, das niedrigere PEvap-Werte (Bewässerung soll gekürzt werden) zu starken Einfluss auf die Menge nehmen, also für in meinem Ort zu arg übertrieben sind.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: FunkOdyssey am 28 Juni 2020, 16:05:47
Ich habe die Lösung immer noch im reinen Beobachtungsmodus.
Mir fiel auf, dass gar nicht täglich gewässert wird.
Ist das richtig, dass ich bei täglicher Bewässerung intervalDays auf 0 setzen muss?
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 28 Juni 2020, 16:45:59
Ja, der Wert gibt an wie viele Tage zwischen zwei automatischen Bewässerungszyklen liegen. Ein strapazierfähiger Rasen sollte z.B. nur alle 3 bis 5 Tage gewässert werden. Bei täglicher Bewässerung ist er zwar schön grün, hat aber keine tiefen Wurzeln. Somit würde er bei der ersten Trockenperiode ohne künstliche Bewässerung sofort leiden.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: FunkOdyssey am 29 Juni 2020, 18:01:54
Grundsätzlich sollte das Ventil selbst erstmal unterstützen via set ventilname off auch einen laufenden Timer zu unterbrechen. Geht das nicht, müsste erstmal ergründet werden wie das Device selbst geschaltet werden kann.

Im Code wird bei jeder Änderung der aktiven Zone im Hauptdevice eigentlich dafür gesorgt, dass evtl. noch eingeschaltete Ventile ausgeschaltet werden.

...
# erstmal alle aktiven Ventile ausschalten
my $itemvalve = "";
foreach my $item (devspec2array('NAME=Beregnung_Zone.*')) {
$itemvalve = ReadingsVal($item,"valve","none").":FILTER=STATE=on";
fhem ("set $itemvalve off");
}

:) ich stelle grad fest, dass ich recht oft den Begriff „erstmal“ verwende :)

Ich habe alle Notifys etc. geprüft und massenhaft Log3-Zeilen zum Debuggen ergänzt.
Ganz am Ende komme ich zu deinen Zeilen. Es scheitert wirklich genau an deiner Schleife.

Die Kombination mit deinem Filter macht mir Probleme:
$itemvalve = ReadingsVal($item,"valve","none").":FILTER=STATE=on";
Bei einem Dummy ist in STATE der Wert "on-for-timer" enthalten. Somit funktioniert der Filter nicht.
Ich bin nun auf Nummer sicher gegangen und haben den Filter entfernt. Es geht natürlich auch mit stateformat oder ähnlich, aber das ist mir auf Dauer auch zu gefährlich.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: FunkOdyssey am 14 Juli 2020, 17:47:25
@funclass:
Wie weit bist du mit deiner neuen Überarbeitung? Ich weiß derzeit nicht, ob ich den alten Code vollumfänglich in Betrieb nehmen soll oder ob ich noch warten soll. Vielen Dank.



Beim Einarbeiten in diese Lösung habe ich diverse Logs angelegt.
Dabei wunderte ich mich, dass ich in den Readings neue Werte sehe, die aber im Filelog fehlten.
Ich weiß nicht, ob das wirklich stimmt. Aber im Forum habe ich etwas darüber gelesen, dass ein setreading, welches aus einem Notify getriggert wird, nicht ins Log schreiben kann.

Ich habe dein Skript nun vollständig auf readingsSingleUpdate umgestellt und beobachte das mal.



Nachtrag:
Das können wir wohl verwerfen. Das hat nicht geklappt.
Ich frage mich, warum die Funktion sub sprinkleChangeActiveZone($) zwar das Reading totalPrecipitation setzt, aber im Filelog dazu nichts ankommt.

In der CommandRef habe ich dazu folgendes gefunden:
Zitat
Achtung: setreading generiert kein Event für ein Gerät X, falls es aus einem notify für Gerät X aufgerufen wurde. In so einem Fall könnte man auf "sleep 0.1; setreading X Y Z" ausweichen.

Außerdem auch diverse Threads wie https://forum.fhem.de/index.php/topic,28017.0.html.

Jedoch klappt es auch nicht, wenn ich in der Util ein sleep ergänze.

Hat jemand eine Idee?
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 14 Juli 2020, 22:39:34
Hallo,

die Umsetzung der Presetfunktion ist nun m.E. fertig. Habs ein wenig getestet und konnte nun keine Fehler mehr feststellen. Anpassungen gab es im Hauptdevice, im zugehörigen Notify und in der Utils-Datei. Ich werde den Code hier kurzfristig posten. Damit ist für mich alles Relevante erstmal umgesetzt. Die Integration weiterer Features schließe ich nicht aus, kann aufgrund der knappen „Freizeit“ aber durchaus etwas länger dauern.

Bezüglich des Loggings hab ich mir ehrlich gesagt noch gar keine Gedanken gemacht. Durch die Benachrichtigung via Telegramm bin ich eigentlich immer gut informiert. Eine Option (wenn auch nicht sehr elegant) wäre sicherlich nach oder vor jedem setreading noch selbst einen Logeintrag zu schreiben. Das wäre mir aber zu viel Aufwand. Ich denke hier stoßen wir langsam an die Grenzen der „offenen Lösung“ und bräuchten tatsächlich ein „echtes Modul“.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: FunkOdyssey am 15 Juli 2020, 12:18:16
Ich versuche nun seit Tagen, die Readings ins Log zu bekommen.
Das ich ein sleep nutzen muss, hatte ich ja schnell herausgefunden.

Problem Nr.1
Ich habe leider ein Perl-Sleep und nicht ein FHEM-Sleep genutzt.

Problem Nr.2
Meine Syntax war falsch. Ich hatte immer zwei Semikolons genutzt. Dann hatte ich Fehler "Last parameter must be quiet" im FHEM-Log. Aber mit dem "sleep 0 quiet" hatte es auch nicht funktioniert. Der Grund lag in den Semikolons, da der Befehl nicht richtig erkannt wurde (https://forum.fhem.de/index.php/topic,91054.msg835512.html#msg835512).

Lösung:
Könntest du deine setreading-Aufrufe bitte mit einem Sleep 0 erweitern?

fhem ("sleep 0;setreading Beregnung totalPrecipitation $precipitation");
Dann funktioniert alles perfekt.

Ich freue mich schon auf deine neue Version. Danke.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 15 Juli 2020, 12:41:55
Also wenn das des Rätsels Lösung ist, sollte es kein Problem sein. Würde es in das Skript integrieren, bevor ich es hier hochlade.
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: networker am 02 August 2020, 00:29:48
Ich hänge mich hier mal rein zum mitlesen, klingt interessant
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: laurello am 13 August 2020, 01:04:45
@funclass: Erstmal danke für die reingesteckte Arbeit!

Ich hab das ganze bei mir jetzt auch am Laufen (noch im simulierten Betrieb) und hab mich durch die Beiträge und die Änderungen gearbeitet - läuft jetzt sehr gut.
Ich kann auch das "sleep 0" vor dem jeweilgien "setreading" bestätigen - wie von FunkOdyssey rausgefunden - das wäre wohl des Rätsels Lösung  ;) - prima!

Jetzt habe ich noch ein Problem bei der Ermittlung des "bisherigen Niederschlags". Ich hab mir schon den Kopf zerbrochen dazu und bräuchte jetzt bitte mal eure Gedanken/Meinungen, ob ich hier komplett falsch liege und ich einen groben Schnitzer im Denkansatz habe:
Der "bisherige Niederschlag" wird doch errechnet und dann in das Reading totalPrecipitation zurück geschrieben über die sub sprinkleChangeActiveZone() mit dieser Zeile:
Zitat
my $precipitation = (ReadingsVal("Beregnung", "totalPrecipitation", 0) + ((ReadingsVal("Beregnung", "pct", 100)) / (ReadingsVal("Beregnung", "defaultIntervalPrecipitation", 10))));

Idee dahinter ist, daß die bisherige Niederschlagsmenge & die Menge des Niederschlags durch die Bewässerung aufaddiert wird - korrekt soweit?

Müsste die Formel zur Berechnung des Niederschlags dann nicht eigentlich heißen:
my $precipitation = (ReadingsVal("Beregnung", "totalPrecipitation", 0) + ((ReadingsVal("Beregnung", "pct", 100)) * (ReadingsVal("Beregnung", "defaultIntervalPrecipitation", 10))) / 100 );                                                                                                                                                             ^                                                                                        ^^^^
also bisherige Niederschlagsmenge + Liter Wasser aus der Bewässerung bezogen auf die momentane, prozentuale Laufzeit der Bewässerung?

Ich hoffe, ich konnte das verständlich in Worte fassen - ich hab schon einen Knoten im Hirn vom Durchdenken und Aufschreiben  ;D
Kann das jemand bitte bestätigen oder mir evtl. meinen Denkfehler erklären?

Viele Grüße,
laurello
Titel: Antw:Bewässerungssteuerung - Vorstellung und Ideensammlung
Beitrag von: funclass am 13 August 2020, 20:04:16
Hallo laurello,

Hab grad ne „ellenlange“ Beschreibung aufgeschrieben, nur um eben festzustellen, dass du Recht hast. Vielen Dank für den Hinweis. Bei mir hat die Berechnung zufällig funktioniert, da ich 10 Liter erwarte. Deine Formel ist aber genau das, was eigentlich passieren soll. Passe ich im Code an und poste es dann mit der letzten Version hier nochmal (die Presets sind im Grunde fertig, bin nur noch nicht zum exportieren gekommen).
Nun dennoch zur Sicherheit die schon aufgeschriebene Erläuterung.


Im Reading totalPrecipitation wird nach einem vollständigen (automatischen) Beregnungszyklus die beregnete Menge gespeichert.
Ebenso wird bei mir jede Nacht mittels einem eigenen at der Niederschlagswert des gesamten Tages aufaddiert. Dieses Reading speichert also die gesamte Wassermenge welche auf den Rasen fällt.
Das Reading defaultIntervalPrecipitation gibt an, welche Wassermenge im hinterlegten Zeitraum (intervalDays) gewünscht ist.
Wenn nun Nachts beim Addieren des täglichen Niederschlags (Regen) der Wert totalPrecipitation den gewünschten Wert Übersteigt, dann wird sowohl totalPrecipitation, als auch der Tageszähler zurückgesetzt.

Beispiel 1:

Beispiel 2:

VG Christian