Automatische Bewässerung von Gewächshaus und Rasen
-
- Beiträge: 26
- Registriert: 30. Dez 2019 18:01
Automatische Bewässerung von Gewächshaus und Rasen
Hallo zusammen,
ich habe mal wieder was vor was bei weitem meine Fähigkeiten überschreitet:
Aktuell habe ich:
- eine Rasen- und Gewächshausbewässerung (separat) mit Hunter-Ventilen, die über ein Homematic 4-Fach-Hutschienenrelais angesteuert werden
- eine Gardena-Pumpe, die über das selbe Homematic 4-Fach-Hutschienenrelais angesteuert werden
- einen Gardena-Sensor 19040 für Bodenfeuchte, Temperatur und Helligkeit
- ein Openweather-Binding
- Whats-App-Call-me-Bot
Was ich realisieren möchte:
1. Bewässerung Gewächshaus
-Wenn der Sensor detektiert dass die Feuchtigkeit unter 50% fällt
- dann das Bewässerungs-Ventil und die Pumpe für 5 Minuten einschalten
- Die Bewässerung soll nur stattfinden zwischen 19 und 20 Uhr
- von März bis Oktober
2. Bewässerung Rasen:
- Jeden zweiten Tag
- das Bewässerungs-Ventil und die Pumpe für 20 Minuten einschalten
- Die Bewässerung soll nur stattfinden zwischen 19 und 20 Uhr
- Wenn es die nächsten zwei Tage nicht regnen wird (laut Openweather)
- von Mai bis Oktober
- Zusatz: wenn diese Regel ausgeführt wird, soll eine Nachricht via Whatsapp-Call-me-Bot
Nun die Frage - wie ich diese zwei Rules erstelle. Ich bin mit dem Regelwerk nicht so firm dass ich es selbst schreiben könnte - ich freue mich wenn mir jemand hilft mir selbst zu helfen.
ich habe mal wieder was vor was bei weitem meine Fähigkeiten überschreitet:
Aktuell habe ich:
- eine Rasen- und Gewächshausbewässerung (separat) mit Hunter-Ventilen, die über ein Homematic 4-Fach-Hutschienenrelais angesteuert werden
- eine Gardena-Pumpe, die über das selbe Homematic 4-Fach-Hutschienenrelais angesteuert werden
- einen Gardena-Sensor 19040 für Bodenfeuchte, Temperatur und Helligkeit
- ein Openweather-Binding
- Whats-App-Call-me-Bot
Was ich realisieren möchte:
1. Bewässerung Gewächshaus
-Wenn der Sensor detektiert dass die Feuchtigkeit unter 50% fällt
- dann das Bewässerungs-Ventil und die Pumpe für 5 Minuten einschalten
- Die Bewässerung soll nur stattfinden zwischen 19 und 20 Uhr
- von März bis Oktober
2. Bewässerung Rasen:
- Jeden zweiten Tag
- das Bewässerungs-Ventil und die Pumpe für 20 Minuten einschalten
- Die Bewässerung soll nur stattfinden zwischen 19 und 20 Uhr
- Wenn es die nächsten zwei Tage nicht regnen wird (laut Openweather)
- von Mai bis Oktober
- Zusatz: wenn diese Regel ausgeführt wird, soll eine Nachricht via Whatsapp-Call-me-Bot
Nun die Frage - wie ich diese zwei Rules erstelle. Ich bin mit dem Regelwerk nicht so firm dass ich es selbst schreiben könnte - ich freue mich wenn mir jemand hilft mir selbst zu helfen.
Openhabian/Openhab 2.4.0.
RasPi4 4B
HomeMaticIP (CCU3, Firmware 3.51.6)
Dezcon-Zigbee-Adapter
RasPi4 4B
HomeMaticIP (CCU3, Firmware 3.51.6)
Dezcon-Zigbee-Adapter
-
- Beiträge: 1165
- Registriert: 4. Nov 2019 22:08
Re: Automatische Bewässerung von Gewächshaus und Rasen
Hola und guten Start in die Woche,
bist Du auf OH 2 oder bereits auf OH 3?? Möchtest Du - wenn OH 3 - über die Main UI oder per Datei die Regel erstellen.
Eine genaue Regel nach Deinen Wünschen kann ich so ad-hoc nicht liefern, aber ich kann Dir gerne meine Bewässerungsregel (danke an Udo für die Unterstützung damals) mit einem Gardena Irrigation Control in Verbindung mit einem Bewässerungscomputer (für die Terrasse) und einem Bodensensor als Grundlage geben. Evtl. kannst Du davon einiges als Grundlage gebrauchen um eine Regel zu erstellen und bei Fragen/Problemen mit Deiner Regel kann man dann gezielt helfen
Bewässerungssteuerung
Items
Auch bei mir ist noch ein keiner Fehler drin: Die Bewässerung wird - wenn diese komplett durch gelaufen ist - nicht "beendet" und kann somit nicht manuell gestartet werden. Dazu muss ich einmal die Bewässerung manuell stoppen, dann kann ich diese starten. Da hatte ich aber noch nicht die Ruhe, danach zu schauen.
Viele Grüße und Spaß beim Umbau
bist Du auf OH 2 oder bereits auf OH 3?? Möchtest Du - wenn OH 3 - über die Main UI oder per Datei die Regel erstellen.
Eine genaue Regel nach Deinen Wünschen kann ich so ad-hoc nicht liefern, aber ich kann Dir gerne meine Bewässerungsregel (danke an Udo für die Unterstützung damals) mit einem Gardena Irrigation Control in Verbindung mit einem Bewässerungscomputer (für die Terrasse) und einem Bodensensor als Grundlage geben. Evtl. kannst Du davon einiges als Grundlage gebrauchen um eine Regel zu erstellen und bei Fragen/Problemen mit Deiner Regel kann man dann gezielt helfen
Bewässerungssteuerung
Code: Alles auswählen
var Timer t_green = null //Timer, für Rasen Bewässerung
var Timer tWater = null //Timer, für Rasen Bewässerung
var Integer iWater = 0
rule GreenIrrigation
when
Time cron "0 05 06 ? * MON-SAT" or
Time cron "0 30 06 ? * SUN" or
Item Sw_ManIrrigation received command
then
val mailActions = getActions("mail","mail:smtp:m6311345")
if(receivedCommand == OFF) { //OFF-Teil
tWater?.cancel // timer beenden, falls vorhanden
tWater = null // Zeiger löschen
//gVentile.members.forEach[ v | v.sendCommand(0)] // und alle Ventile schließen
gVentStop.members.forEach[ v | v.sendCommand(OFF)] // und alle Ventile schließen
myIrrigationSwitchVis.postUpdate(ON)
mailActions.sendMail("WhatsApp Bot", "Bewässerung manuell beendet", "Stop: " + OffsetDateTime.now().toString)
return; // nur zur Sicherheit; der nachfolgende Code wird gar nicht durchlaufen.
} else {
if((Sensor_SoilHumidity.state as Number).intValue < (Sensor_Level.state as Number)) { //if(Sensor_humidity.state < Sensor_Level.state) // eigentlich: if((Sensor_humidity.state as Number) < (Sensor_Level.state as Number)) {
if(receivedCommand == ON) {
logInfo("Gardena", "Manuelle Bewässerung - Start.")
mailActions.sendMail("WhatsApp Bot", "Manuelle Bewässerung", "Start: " + OffsetDateTime.now().toString)
} else if(Sw_Bewaesserung.state == ON && Holiday.state == OFF) {
logInfo("Gardena", "Automatische Bewässerung - Start.")
mailActions.sendMail("WhatsApp Bot", "Automatische Bewässerung", "Bodenfeuchtigkeit: " + Sensor_SoilHumidity.state + " - Start: " + OffsetDateTime.now().toString)
} else if(Sw_Bewaesserung.state == ON && Holiday.state == ON) {
logInfo("Gardena", "Bewässerung Start abgebrochen, heute ist: {}", SpecialDay.state)
mailActions.sendMail("WhatsApp Bot", "Automatische Bewässerung", "Bewässerung Start abgebrochen, heute ist " + SpecialDay + " " + OffsetDateTime.now().toString)
return; // nur zur Sicherheit; der nachfolgende Code wird gar nicht durchlaufen.
} else {
logInfo("Gardena", "Bewässerung Start abgebrochen!")
myIrrigationSwitchVis.postUpdate(ON) // nur zur Sicherheit, sollte eigentlich ON sein
return; // nur zur Sicherheit; der nachfolgende Code wird gar nicht durchlaufen.
}
// Beregnungsroutine starten
myIrrigationSwitchVis.postUpdate(OFF)
iWater = 0 // Zähler mit 0 initialisieren
tWater = createTimer(now, [ | // timer mit code initialisieren und ausführen
var Number nTime = 10 // Default Einschaltzeit definieren
iWater = iWater +1 // Zähler erhöhen
var gVent = gVentile.members.filter[ i | i.name.contains(iWater.toString)] // Ventil bestimmen
var gTime = gVentTimer.members.filter[ i | i.name.contains(iWater.toString)] // Zeit bestimmen
if(gTime.size > 0) { // Zeit existiert
if(gTime.head.state instanceof Number) // und ist eine gültige Zahl
nTime = gTime.head.state as Number // Defaultwert überschreiben
if(gVent.size > 0) { // Ventil existiert
if(gVentEnable.members.filter[ i | i.name.contains(iWater.toString)].head.state == ON) { // und soll aktiviert werden
gVent.head.sendCommand(nTime) // Gardena Timer setzen
gVentStart.members.filter[ s | s.name.contains(iWater.toString)].head.sendCommand(ON)
mailActions.sendMail("WhatsApp Bot", "Bewässerung", gVent.head.label + " für " + nTime + " Min.")
if (gVent.head.label == "Hecke" && Sw_TerrasseIrrigation.state == ON) {
if (nTime <= (WC_Valve_Cmd_Duration.state as Number).intValue) {
WC_Valve_Cmd_Duration.sendCommand(nTime.intValue)
mailActions.sendMail("WhatsApp Bot", "Automatische Bewässerung", "Wert angeglichen an Hecke: " + nTime + " Min.")
}
WC_Valve_Cmd_Start.sendCommand(ON)
mailActions.sendMail("WhatsApp Bot", "Automatische Bewässerung", "Terrasse ab jetzt für " + WC_Valve_Cmd_Duration.state + " Min.")
} else if (gVent.head.label == "Hecke" && Sw_TerrasseIrrigation.state == OFF) {
mailActions.sendMail("WhatsApp Bot", "Automatische Bewässerung", "Terrasse nicht aktiviert")
}
tWater.reschedule(now.plusMinutes(nTime.intValue).minusSeconds(10)) // und 10 Sekunden vor Ablauf Gardena Timer nächster Schritt
} else {
tWater.reschedule(now.plusSeconds(5)) //falls Ventil inaktiv aber Wert gesetzt
}
} else { // kein weiterer Timer vorhanden, also
tWater = null // Zeiger löschen
//gVentile.members.forEach[ v | v.sendCommand(0)] // und alle Ventile explizit schließen
myIrrigationSwitchVis.postUpdate(ON)
mailActions.sendMail("WhatsApp Bot", "Automatische Bewässerung", "Beendet um: {}.", now.toString)
}
}
])
} else {
logInfo("Gardena", "Bewässerung Start abgebrochen, da Bodenfeuchte mit {} ausreichend!", Sensor_SoilHumidity.state.toString)
mailActions.sendMail("WhatsApp Bot", "Bewässerung", "Start abgebrochen, da Bodenfeuchte mit " + Sensor_SoilHumidity.state + " ausreichend!")
}
}
end
Code: Alles auswählen
Group:Contact:AND(CLOSED, OPEN) gVentActivity "Ventil Status"
Group:Switch gVentEnable "Ventil erlauben"
Group:Number gVentile "Ventile"
Group:Switch gVentNames "Ventilbezeichnung"
Group:Switch gVentStart "Alle Ventile - Start"
Group:Switch gVentStop "Alle Ventile - Stop"
Group:Number gVentTimer "Einschaltdauer"
Switch Sw_Bewaesserung "Bewässerungsautomatik" <tap>
Switch Sw_ManIrrigation "Manuelle Bewässerung" <faucet> {autoupdate="false"}
Switch Sw_TerrasseIrrigation "Terrassenbewässerung" <faucet>
Switch myIrrigationSwitchVis
String IC_Valve1_Name "[%s]" (gVentNames) {channel="gardena:irrigation_control:home:Irrigation:valveOne#name"}
String IC_Valve1_State "[%s]" {channel="gardena:irrigation_control:home:Irrigation:valveOne#state"}
String IC_Valve1_Activity "[%s]" (gVentActivity) {channel="gardena:irrigation_control:home:Irrigation:valveOne#activity"}
String IC_Valve1_LastErrorCode "[%s]" {channel="gardena:irrigation_control:home:Irrigation:valveOne#lastErrorCode"}
Number:Time IC_Valve1_Duration "[]" {channel="gardena:irrigation_control:home:Irrigation:valveOne#duration"}
Irrigation Control
//Ventil 1 Befehle
Number:Time IC_Valve1_Cmd_Duration "Aqua Contour" <time> (gVentile) {channel="gardena:irrigation_control:home:xxx:valveOne_commands#commandDuration"}
Switch IC_Valve1_Cmd_Start "Starte Bewässerung []" <faucet> (gVentStart) {channel="gardena:irrigation_control:home:xxx:valveOne_commands#start_seconds_to_override"}
Switch IC_Valve1_Cmd_Stop "Stoppe Bewässerung []" <faucet> {channel="gardena:irrigation_control:home:xxx:valveOne_commands#stop_until_next_task"}
etc. für die Ventile. Diese werden 1 -x hoch gezählt. Vorteil: Ein neues Ventil wird als Item angelegt und es bedarf keiner Änderung der Regel.
Water Control
Number:Time WC_Valve_Cmd_Duration "Command Duration [%d min]" {channel="gardena:water_control:home:yyy:valve_commands#commandDuration"}
Switch WC_Valve_Cmd_Start "Watering Timer [%d min]" {channel="gardena:water_control:home:yyy:valve_commands#start_seconds_to_override"}
Sensor
Number:Dimensionless Sensor_SoilHumidity "Bodenfeuchtigkeit [%d %%]" <water> (Gardena, Humidity_Chart) ["Measurement", "Humidity"] {channel="gardena:sensor:home:Sensor:zzz#soilHumidity"}
Viele Grüße und Spaß beim Umbau
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3
-
- Beiträge: 26
- Registriert: 30. Dez 2019 18:01
Re: Automatische Bewässerung von Gewächshaus und Rasen
Servus und allem voran vielen Dank!
Bin mittlerweile auf OH3 und würde das ganze gerne als .rules-Datei anlegen. in der Main UI finde ich es etwas unergonomisch und ich würde gerne dabei auch etwas nachhaltig lernen
Ich werde mir mal deine Vorlage schnappen und umbasteln, in der Hoffnung damit was hinzubekommen. Update folgt (hoffentlich bald).
Bin mittlerweile auf OH3 und würde das ganze gerne als .rules-Datei anlegen. in der Main UI finde ich es etwas unergonomisch und ich würde gerne dabei auch etwas nachhaltig lernen
Ich werde mir mal deine Vorlage schnappen und umbasteln, in der Hoffnung damit was hinzubekommen. Update folgt (hoffentlich bald).
Openhabian/Openhab 2.4.0.
RasPi4 4B
HomeMaticIP (CCU3, Firmware 3.51.6)
Dezcon-Zigbee-Adapter
RasPi4 4B
HomeMaticIP (CCU3, Firmware 3.51.6)
Dezcon-Zigbee-Adapter
-
- Beiträge: 56
- Registriert: 2. Apr 2018 15:45
Re: Automatische Bewässerung von Gewächshaus und Rasen
Hi!
Wenn du (doch lieber) eine Lösung unter der UI sucht, dann kann ich dir weiter helfen. Ich habe zudem openweathermap eingebunden und so eine regelbasierte Bewässerung (Wassermenge heute, gestern, zur Zeit und in den nächsten drei Stunden plus Temperatur) gebaut. Lediglich die Timer sind direkt in den .rules untergebracht.
Wenn du das also doch lieber per UI realisieren willst, kannst du mich gerne ansprechen.
Grüße
Martin
Wenn du (doch lieber) eine Lösung unter der UI sucht, dann kann ich dir weiter helfen. Ich habe zudem openweathermap eingebunden und so eine regelbasierte Bewässerung (Wassermenge heute, gestern, zur Zeit und in den nächsten drei Stunden plus Temperatur) gebaut. Lediglich die Timer sind direkt in den .rules untergebracht.
Wenn du das also doch lieber per UI realisieren willst, kannst du mich gerne ansprechen.
Grüße
Martin
-
- Beiträge: 26
- Registriert: 30. Dez 2019 18:01
Re: Automatische Bewässerung von Gewächshaus und Rasen
Hi Martin,
Vielen Dank für das Angebot!
ich @martin_aus_Ddorf freue mich wenn du mir deine Lösung zukommen lässt, hilft mir so oder so die meine zu realisieren.Wenn du das also doch lieber per UI realisieren willst, kannst du mich gerne ansprechen.
Vielen Dank für das Angebot!
Openhabian/Openhab 2.4.0.
RasPi4 4B
HomeMaticIP (CCU3, Firmware 3.51.6)
Dezcon-Zigbee-Adapter
RasPi4 4B
HomeMaticIP (CCU3, Firmware 3.51.6)
Dezcon-Zigbee-Adapter
-
- Beiträge: 56
- Registriert: 2. Apr 2018 15:45
Re: Automatische Bewässerung von Gewächshaus und Rasen
Oki, gib mir ein oder zwei Tage.
Kennst du schon openweathermap? Das wäre schon mal ein guter Einstieg, wenn du da mit den Items ein wenig rumspielst. Current und forecast.
Grüße
Martin
Kennst du schon openweathermap? Das wäre schon mal ein guter Einstieg, wenn du da mit den Items ein wenig rumspielst. Current und forecast.
Grüße
Martin
-
- Beiträge: 1165
- Registriert: 4. Nov 2019 22:08
Re: Automatische Bewässerung von Gewächshaus und Rasen
Wäre schön, wenn Du dies "einfach" hier postest, dann hat die gesamte Community etwas davon und evtl. kann der einen oder andere Teile davon gebrauchenmartin_aus_Ddorf hat geschrieben: ↑27. Jul 2021 20:43 Oki, gib mir ein oder zwei Tage.
Kennst du schon openweathermap? Das wäre schon mal ein guter Einstieg, wenn du da mit den Items ein wenig rumspielst. Current und forecast.
Grüße
Martin
Viele Grüße
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3
-
- Beiträge: 56
- Registriert: 2. Apr 2018 15:45
Re: Automatische Bewässerung von Gewächshaus und Rasen
Mein Ziel war es eine unbeaufsichtigte Bewässerung des Gartens hinzubekommen, ohne Systeme von Gardena, Hunter usw. zu nutzen und den Programmieraufwand so gering wie möglich zu halten.
Wie die Hardware für zwei unabhängig steuerbare Wasserkreisläufe aussieht, könnt ihr hier nachlesen:
viewtopic.php?p=36328#p36328
Im Wesentlichen schalten zwei SONOFF SV (SV für „schwach Volt“ ) je ein magnetisches Ventil. Damit kann ich den Kreislauf „Versekungsregner“ für den Rasen und die Beete und einen kleineren Bereich „Schattenrasen“ steuern.
Die Steuerung sollte regelbasiert sein und mit möglichst wenig Programmierung auskommen. Das liegt vor allem daran, weil mir die entsprechenden Kenntnisse fehlen und ich keine Möglichkeit habe mich dort einzuarbeiten.
Daher geht, bis auf eine Kleinigkeit komplett über die OH3 Oberfläche ohne Programmierung.
Im Ergebnis wird nun jeden Tag die Außentemperatur und Regenmenge für verschiedene Zeiträume ermittelt und nach bestimmten Regeln bewässert, bzw. eben nicht.
Los geht´s:
1.) Regen und Temperaturinformationen
Um das hier nicht zu groß werden zu lassen, setzte ich voraus, dass bekannt ist wozu Things (quasi Geräte oder Informationsquellen), Items (Eigenschaften oder Zustände der Things) und Rules (regelbasierte Ereignisse, die die Eigenschaften auswerten und je nach dem andere Eigenschaften von Items ansteuern oder auslösen) gut sind und wie sie funktionieren.
Für die Steuerung benötige ich die folgenden standortbezogenen Informationen:
• Regen aktuell
• Regen in drei Stunden
• Regen heute 24 Stunden
• Regen gestern
• Regensumme heute und gestern
• Heutige maximale Temperatur
Diese Werte (bis auf die Regensumme) kann man sich recht einfach über das Thing openweathermap besorgen. Dazu geht ihr zunächst auf deren Web Site und holt euch einen sog. gen. API Schlüssel, den ihr in das Bridge-Thing eintragen müsst. Danach könnt ihr die beiden Items One Call Api Forecast bzw. Historical einbinden und daraus Items erstellen.
Normalerweise sollte es so sein, dass ihr für die Vorhersage Items nur jeweils einmal das entsprechende Thing einbinden müsst. Das war bei mir nicht so und so habe ich für die vier Forecast Informationen, jeweils einmal das entsprechende Thing bemühen müssen. Nicht elegant, aber selten.
Meine Itemliste sieht als Auszug nun so aus:
Die Regensumme (Regen heute plus gestern in mm) ist manuell, durch Klick auf das „Plus-Symbol / add Item“ unten rechts bei den Items erzeugt worden. Dann gebt ihr „type = group“, „Members Base Type = Number:Length“ und bei “aggregation Function = SUM” an. Ihr könnt ja noch einen Namen vergeben, ein Icon wählen usw.
Wenn ihr auf „create“ klickt, kommt ihr wieder in die Übersicht des Items, wählt die Regensumme gleich wieder an und fügt durch Klick auf „Direct Group Members / change / Members“ die Items aus, die hier aufsummiert werden sollen (also Regen gestern (24h) und Regen heute (24)).
Nur der Vollständigkeit halber: Ich habe mir noch ein Item „Rasenzeitsteuerung“ mit den Zuständen an und aus erstellt (neues Item, „type = switch“,), damit ich die komplette Anlage mit einem Klick abschalten kann.
2.) Die Ventile als Items
Wie gesagt, gibt es zwei Ventile für die Wasserkreise „Versekungsregner“ und „Schattenrasen“. Die wiederum werden mit den SONOFF SVs ein- und ausgeschaltet. Die SONOFFS (Tasmota geflashed – anderes Thema, schaut mal bei Youtube vorbei) werden per MQTT als Things eingebunden (ebenfalls anders Thema - > Youtube) und über die Things Channels konfiguriert. Beispielsweise ist der Schattenrasen SONOFF bei mir wie folgt unter Things / Code zu finden:
Au weh, wie man von dort aus dann zu einem Item kommt, welches später angesteuert wird, weiß ich gar nicht mehr genau… Ich meine mir ein Switch-Item angelegt zu haben und mit dem o.g. Channel des Things verlinkt zu haben, um später ein ON oder OFF an das SONOFF SV Bauteil senden zu können.
Dieses Item heißt bei mir „SchattenrasenAnAus“ und wird gleich für den Mini-Programmierausflug benötigt.
3.) Der Teil mit der Programmierung – die Timer
Wenn ihr nun eine ganze Latte Items erstellt habt, dann könnt ihr in den Regeln sehr einfach die einzelnen Werte abfragen und mit Aktionen hinterlegen. Es ist immer das gleiche Muster: Wenn (Zeit), dann mache irgendwas (Schalte das Ventil A ein), es sei denn irgendwas (Regensumme > 2 mm – oder so.)
Und jetzt kommt der ganz kleine Ausflug in die Programmierung, weil nur so ein Timer (lasse Ventil 5 Minuten auf und mach dann wieder zu) realisierbar ist. Alternativ hatte ich zum Start eine Regel, die ein Ventil unter bestimmten Voraussetzungen aufgemacht hat und eine weitere Regel, die das Ventil x Minuten später wieder zu gemacht hat. Nicht schön.
Hier hatte ich Hilfe von peter-pan (danke noch mal) und mir den folgenden Code geben lassen:
Hier wird also das oben erwähnte Item „SchattenrasenAnAus“ angesprochen, welches eben ein „sendCommand(ON)“ geschickt bekommt, dann wartet die Rule 3 Minuten und schickt ein „sendCommand(OFF)“ hinterher.
In der Regel steht noch was von „Item Timer3_SR“. Das ist nur ein weiteres Switch-Items, welches ich nutze, wenn ich die Bewässerung per Hand mal 3 Minuten starten will, bzw. das ist der Schalter, der in der späteren eigentlichen Regel umgelegt wird.
Systematik ist also wie folgt:
Eine Regel zündet (z.B. weil es 15 Uhr und trocken ist). Dann wird das Switch-Item „Timer3_SR“ auf ON gestellt. Das bekommt die Rule "Schattenrasen 3 Minuten" mit und sendet ein ON Kommando an das Switch-Item SchattenrasenAnAus. Dieses Item ist mit dem Channel zum entsprechenden Thing (also dem tatsächlichen Gerät) verbunden und überträgt „sendCommand(ON)“ dorthin. Nach 3 Minuten wird dann ein OFF ans Gerät und ein OFF an das erste Switch-Item (Timer3_SR) gesendet. Damit ist dann im Übrigen wieder auf der Oberfläche von OH das Item auf aus gestellt.
DIESE Timer Rules müssen nun leider im Dateisystem von OH gespeichert werden. Das ist eine einfache Textdatei, die ihr die Endung .rules verpassen müsst und im Verzeichnis „rules“ liegen muss. Bei mir heißt die Datei z.B. timer.rules.
DIESE Rules könnt ihr auf er OH Oberfläche unter Rules auch ansehen, aber nicht bearbeiten.
4.) Die eigentlichen Regeln des Systems
Jetzt ist Erntezeit, weil nun muss nur noch zusammen geklickt werden. Beispielsweise startet mein Wasserkreis „Schattenrasen“ jeden Tag von 7:00 Uhr bis 19:00 Uhr alle zwei Stunden und ruft den Timer3_SR auf – beregnet also 3 Minuten. ABER NUR WENN: Die Rasensteuerung = On ist (ihr erinnert euch, das ist der Switch (Item), der die komplette Anlage an oder ausmacht), in den letzten 24 Stunden weniger als 1 mm Regen gefallen ist, derzeit weniger als 0,1 mm Regen fällt, in den nächsten 3 Stunden weniger als 0,2 mm fallen werden, es heute wärmer als 15°C wird und die Regensumme (Regen gestern plus heute) kleinergleich 2 ist.
Als Rule Code sieht das dann so aus:
Is klar, nä?
Die restlichen Regeln für den Versenkungsregner ersparen wir uns nun. Es sind drei: Eine wird täglich geprüft und zündet, wenn es unter anderem über 30°C sind und die andern beiden im Tageswechsel mit unterschiedlichen Außentemperaturen und Regenkonstellationen. So wird alles zwei Tage bei Trockenheit und mäßiger Wärme beregnet, ist es etwas wärmer, dann jeden Tag und ist es richtig heiß, dann noch mal 15 Minuten zusätzlich.
Und was soll ich sagen? Es klappt!
Einzige Schwachstelle sind leider die historischen Wetterdaten. Da wird dann und wann für „Regen gestern (24h)“ null Millimeter angezeigt, obwohl es geschüttet hat. Heute ist das der Fall: API zeigt Null, Wetterdienst sagt 13,3 mm für gestern (27.07.2021 in Düsseldorf). Das habe ich allerdings über die Regensumme einigermaßen austarieren können.
Das war mein Sommerprojekt und es hat richtig Spaß gemacht, obwohl ich handwerklich ungeschickt bin und nicht programmieren kann (ich bin natürlich Projektmanager für Software Projekte von Beruf ). Die Anlage lief nun drei Wochen ohne Aufsicht, als wir im Urlaub waren. Alles perfekt, wenn nicht am letzten Tag der Schattenrasen mit der letzten Beregnung das ON Signal, wegen des schwachen WLANs aber nicht das OFF Signal bekommen hätte. Aua. Ein Mesh mehr und gut ist.
Wenn ihr Fragen habt, kommt gerne auf mich zu. Wenn beispielsweise der Abschnitt mit den Things und Channels zu ungenau oder diffus ist, hoffe ich hier auf die Scharmintelligenz, denn ich hab jetzt mindestens zwei Wochen keine Zeit mehr, mich da noch mal reinzufuchsen.
Fragen?
Fragen!
Liebe Grüße
Martin
Wie die Hardware für zwei unabhängig steuerbare Wasserkreisläufe aussieht, könnt ihr hier nachlesen:
viewtopic.php?p=36328#p36328
Im Wesentlichen schalten zwei SONOFF SV (SV für „schwach Volt“ ) je ein magnetisches Ventil. Damit kann ich den Kreislauf „Versekungsregner“ für den Rasen und die Beete und einen kleineren Bereich „Schattenrasen“ steuern.
Die Steuerung sollte regelbasiert sein und mit möglichst wenig Programmierung auskommen. Das liegt vor allem daran, weil mir die entsprechenden Kenntnisse fehlen und ich keine Möglichkeit habe mich dort einzuarbeiten.
Daher geht, bis auf eine Kleinigkeit komplett über die OH3 Oberfläche ohne Programmierung.
Im Ergebnis wird nun jeden Tag die Außentemperatur und Regenmenge für verschiedene Zeiträume ermittelt und nach bestimmten Regeln bewässert, bzw. eben nicht.
Los geht´s:
1.) Regen und Temperaturinformationen
Um das hier nicht zu groß werden zu lassen, setzte ich voraus, dass bekannt ist wozu Things (quasi Geräte oder Informationsquellen), Items (Eigenschaften oder Zustände der Things) und Rules (regelbasierte Ereignisse, die die Eigenschaften auswerten und je nach dem andere Eigenschaften von Items ansteuern oder auslösen) gut sind und wie sie funktionieren.
Für die Steuerung benötige ich die folgenden standortbezogenen Informationen:
• Regen aktuell
• Regen in drei Stunden
• Regen heute 24 Stunden
• Regen gestern
• Regensumme heute und gestern
• Heutige maximale Temperatur
Diese Werte (bis auf die Regensumme) kann man sich recht einfach über das Thing openweathermap besorgen. Dazu geht ihr zunächst auf deren Web Site und holt euch einen sog. gen. API Schlüssel, den ihr in das Bridge-Thing eintragen müsst. Danach könnt ihr die beiden Items One Call Api Forecast bzw. Historical einbinden und daraus Items erstellen.
Normalerweise sollte es so sein, dass ihr für die Vorhersage Items nur jeweils einmal das entsprechende Thing einbinden müsst. Das war bei mir nicht so und so habe ich für die vier Forecast Informationen, jeweils einmal das entsprechende Thing bemühen müssen. Nicht elegant, aber selten.
Meine Itemliste sieht als Auszug nun so aus:
Die Regensumme (Regen heute plus gestern in mm) ist manuell, durch Klick auf das „Plus-Symbol / add Item“ unten rechts bei den Items erzeugt worden. Dann gebt ihr „type = group“, „Members Base Type = Number:Length“ und bei “aggregation Function = SUM” an. Ihr könnt ja noch einen Namen vergeben, ein Icon wählen usw.
Wenn ihr auf „create“ klickt, kommt ihr wieder in die Übersicht des Items, wählt die Regensumme gleich wieder an und fügt durch Klick auf „Direct Group Members / change / Members“ die Items aus, die hier aufsummiert werden sollen (also Regen gestern (24h) und Regen heute (24)).
Nur der Vollständigkeit halber: Ich habe mir noch ein Item „Rasenzeitsteuerung“ mit den Zuständen an und aus erstellt (neues Item, „type = switch“,), damit ich die komplette Anlage mit einem Klick abschalten kann.
2.) Die Ventile als Items
Wie gesagt, gibt es zwei Ventile für die Wasserkreise „Versekungsregner“ und „Schattenrasen“. Die wiederum werden mit den SONOFF SVs ein- und ausgeschaltet. Die SONOFFS (Tasmota geflashed – anderes Thema, schaut mal bei Youtube vorbei) werden per MQTT als Things eingebunden (ebenfalls anders Thema - > Youtube) und über die Things Channels konfiguriert. Beispielsweise ist der Schattenrasen SONOFF bei mir wie folgt unter Things / Code zu finden:
Code: Alles auswählen
UID: mqtt:topic:7270ff151e:652a197864
label: SONOFF-SV-Schattenrasen
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:systemBroker:7570ee151e
location: Garten
channels:
- id: SONOFFSVSchattenrasenONOFF
channelTypeUID: mqtt:switch
label: SONOFF-SV Schattenrasen ON-OFF
description: ""
configuration:
commandTopic: cmnd/Schattenrasen/POWER
off: OFF
on: ON
Dieses Item heißt bei mir „SchattenrasenAnAus“ und wird gleich für den Mini-Programmierausflug benötigt.
3.) Der Teil mit der Programmierung – die Timer
Wenn ihr nun eine ganze Latte Items erstellt habt, dann könnt ihr in den Regeln sehr einfach die einzelnen Werte abfragen und mit Aktionen hinterlegen. Es ist immer das gleiche Muster: Wenn (Zeit), dann mache irgendwas (Schalte das Ventil A ein), es sei denn irgendwas (Regensumme > 2 mm – oder so.)
Und jetzt kommt der ganz kleine Ausflug in die Programmierung, weil nur so ein Timer (lasse Ventil 5 Minuten auf und mach dann wieder zu) realisierbar ist. Alternativ hatte ich zum Start eine Regel, die ein Ventil unter bestimmten Voraussetzungen aufgemacht hat und eine weitere Regel, die das Ventil x Minuten später wieder zu gemacht hat. Nicht schön.
Hier hatte ich Hilfe von peter-pan (danke noch mal) und mir den folgenden Code geben lassen:
Code: Alles auswählen
rule "Schattenrasen 3 Minuten"
when
Item Timer3_SR changed to ON
then
SchattenrasenAnAus.sendCommand(ON)
createTimer(ZonedDateTime.now.plusMinutes(3), [ |
SchattenrasenAnAus.sendCommand(OFF)
Timer3_SR.sendCommand(OFF)
])
end
In der Regel steht noch was von „Item Timer3_SR“. Das ist nur ein weiteres Switch-Items, welches ich nutze, wenn ich die Bewässerung per Hand mal 3 Minuten starten will, bzw. das ist der Schalter, der in der späteren eigentlichen Regel umgelegt wird.
Systematik ist also wie folgt:
Eine Regel zündet (z.B. weil es 15 Uhr und trocken ist). Dann wird das Switch-Item „Timer3_SR“ auf ON gestellt. Das bekommt die Rule "Schattenrasen 3 Minuten" mit und sendet ein ON Kommando an das Switch-Item SchattenrasenAnAus. Dieses Item ist mit dem Channel zum entsprechenden Thing (also dem tatsächlichen Gerät) verbunden und überträgt „sendCommand(ON)“ dorthin. Nach 3 Minuten wird dann ein OFF ans Gerät und ein OFF an das erste Switch-Item (Timer3_SR) gesendet. Damit ist dann im Übrigen wieder auf der Oberfläche von OH das Item auf aus gestellt.
DIESE Timer Rules müssen nun leider im Dateisystem von OH gespeichert werden. Das ist eine einfache Textdatei, die ihr die Endung .rules verpassen müsst und im Verzeichnis „rules“ liegen muss. Bei mir heißt die Datei z.B. timer.rules.
DIESE Rules könnt ihr auf er OH Oberfläche unter Rules auch ansehen, aber nicht bearbeiten.
4.) Die eigentlichen Regeln des Systems
Jetzt ist Erntezeit, weil nun muss nur noch zusammen geklickt werden. Beispielsweise startet mein Wasserkreis „Schattenrasen“ jeden Tag von 7:00 Uhr bis 19:00 Uhr alle zwei Stunden und ruft den Timer3_SR auf – beregnet also 3 Minuten. ABER NUR WENN: Die Rasensteuerung = On ist (ihr erinnert euch, das ist der Switch (Item), der die komplette Anlage an oder ausmacht), in den letzten 24 Stunden weniger als 1 mm Regen gefallen ist, derzeit weniger als 0,1 mm Regen fällt, in den nächsten 3 Stunden weniger als 0,2 mm fallen werden, es heute wärmer als 15°C wird und die Regensumme (Regen gestern plus heute) kleinergleich 2 ist.
Als Rule Code sieht das dann so aus:
Code: Alles auswählen
triggers:
- id: "1"
configuration:
cronExpression: 0 0 7,9,11,13,15,17,19 * * ? *
type: timer.GenericCronTrigger
conditions:
- inputs: {}
id: "9"
configuration:
itemName: Rasenzeitsteuerung
state: ON
operator: =
type: core.ItemStateCondition
- inputs: {}
id: "3"
label: weniger als 1 mm in den letzten 24 h
configuration:
itemName: OneCallAPIhistorydata_Regen
state: "1"
operator: <=
type: core.ItemStateCondition
- inputs: {}
id: "4"
label: derzeit weniger als 0,1 mm Regen
configuration:
itemName: Wetterinformationen_Regen
state: "0.1"
operator: <=
type: core.ItemStateCondition
- inputs: {}
id: "5"
label: in den nächsten 3 Stunden weniger als 0,2 mm Regen
configuration:
itemName: Localweatherandforecast_VorhergesagterRegen
state: "0.2"
operator: <=
type: core.ItemStateCondition
- inputs: {}
id: "6"
configuration:
itemName: Wetterinformationen_Aussentemperatur
state: "15"
operator: ">="
type: core.ItemStateCondition
- inputs: {}
id: "7"
configuration:
itemName: Regensumme
state: "2"
operator: <=
type: core.ItemStateCondition
actions:
- inputs: {}
id: "2"
configuration:
itemName: Timer3_SR
command: ON
type: core.ItemCommandAction
Die restlichen Regeln für den Versenkungsregner ersparen wir uns nun. Es sind drei: Eine wird täglich geprüft und zündet, wenn es unter anderem über 30°C sind und die andern beiden im Tageswechsel mit unterschiedlichen Außentemperaturen und Regenkonstellationen. So wird alles zwei Tage bei Trockenheit und mäßiger Wärme beregnet, ist es etwas wärmer, dann jeden Tag und ist es richtig heiß, dann noch mal 15 Minuten zusätzlich.
Und was soll ich sagen? Es klappt!
Einzige Schwachstelle sind leider die historischen Wetterdaten. Da wird dann und wann für „Regen gestern (24h)“ null Millimeter angezeigt, obwohl es geschüttet hat. Heute ist das der Fall: API zeigt Null, Wetterdienst sagt 13,3 mm für gestern (27.07.2021 in Düsseldorf). Das habe ich allerdings über die Regensumme einigermaßen austarieren können.
Das war mein Sommerprojekt und es hat richtig Spaß gemacht, obwohl ich handwerklich ungeschickt bin und nicht programmieren kann (ich bin natürlich Projektmanager für Software Projekte von Beruf ). Die Anlage lief nun drei Wochen ohne Aufsicht, als wir im Urlaub waren. Alles perfekt, wenn nicht am letzten Tag der Schattenrasen mit der letzten Beregnung das ON Signal, wegen des schwachen WLANs aber nicht das OFF Signal bekommen hätte. Aua. Ein Mesh mehr und gut ist.
Wenn ihr Fragen habt, kommt gerne auf mich zu. Wenn beispielsweise der Abschnitt mit den Things und Channels zu ungenau oder diffus ist, hoffe ich hier auf die Scharmintelligenz, denn ich hab jetzt mindestens zwei Wochen keine Zeit mehr, mich da noch mal reinzufuchsen.
Fragen?
Fragen!
Liebe Grüße
Martin
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- udo1toni
- Beiträge: 14850
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Automatische Bewässerung von Gewächshaus und Rasen
Tipp am Rande: Die Rule für den Timer brauchst Du nicht
Die Funktion ist etwas versteckt in den Metadaten der Items zu finden und heißt dort Expiration Timer. Du wählst also das Item Timer3_SR aus und ergänzt in den Metadaten den Timer. Du stellst dort den Timeout von drei Minuten ein und definierst, dass der Status auf OFF wechseln soll (alternativ kannst Du auch ein Kommando OFF erzeugen).
Nun kannst Du einfach über die UI ein Rule erstellen, welche bei einem Change auf ON den ON-Befehl an das Magnetventil sendet, bei einem Change auf OFF den OFF-Befehl an das Magnetventil sendet. Fertig.
Wenn das Magnetventil immer nach drei Minuten ausgeschaltet werden soll, reicht es sogar, den Timer im Item SchattenrasenAnAus einzubauen (dann halt mit Command OFF statt State OFF). dann sendest Du einfach den ON-Befehl direkt an das Item und es wird von selbst wieder auf OFF wechseln. Du kannst Dir dann sogar die UI Rule sparen.
Die Funktion ist etwas versteckt in den Metadaten der Items zu finden und heißt dort Expiration Timer. Du wählst also das Item Timer3_SR aus und ergänzt in den Metadaten den Timer. Du stellst dort den Timeout von drei Minuten ein und definierst, dass der Status auf OFF wechseln soll (alternativ kannst Du auch ein Kommando OFF erzeugen).
Nun kannst Du einfach über die UI ein Rule erstellen, welche bei einem Change auf ON den ON-Befehl an das Magnetventil sendet, bei einem Change auf OFF den OFF-Befehl an das Magnetventil sendet. Fertig.
Wenn das Magnetventil immer nach drei Minuten ausgeschaltet werden soll, reicht es sogar, den Timer im Item SchattenrasenAnAus einzubauen (dann halt mit Command OFF statt State OFF). dann sendest Du einfach den ON-Befehl direkt an das Item und es wird von selbst wieder auf OFF wechseln. Du kannst Dir dann sogar die UI Rule sparen.
openHAB4.3.0 stable in einem Debian-Container (bookworm) (Proxmox 8.3.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 26
- Registriert: 30. Dez 2019 18:01
Re: Automatische Bewässerung von Gewächshaus und Rasen
Allem voran einen Riesen Dank an Martin für die exorbitante Ausarbeitung.
Da habe ich ja fast ein schlechtes Gewissen meinen dürftigen Versuch der Rule zu posten Es hat mir auf jeden fall sehr geholfen ein Verständnis für den Sachverhalt aufzubauen und hoffentlich meine Rule zu erstellen.
Übrigens -->
Mir hat es auf jedenfall mal geholfen. Ich habe mal eine draft der Rule erstellt:
Mein Plan ist es die Rule nach und nach auszubauen, hier in dem Fall die für das Gewächshaus.
Meine Fragen - ist das nun richtig - habe ich irgendwelche formalen Fehler drin oder grundsätzlich nicht begriffen wie ich das machen soll?
Ich freu mich auf Feedback. Basierend darauf werde ich dann die Rule hoffentlich fertigstellen und die zweite für den Rasen erstellen (das wird spannend mit dem Openweather-Binding aber mit den Infos von Martin habe ich eine überragende Grundlage, tausend Dank für den Support!)
Da habe ich ja fast ein schlechtes Gewissen meinen dürftigen Versuch der Rule zu posten Es hat mir auf jeden fall sehr geholfen ein Verständnis für den Sachverhalt aufzubauen und hoffentlich meine Rule zu erstellen.
Übrigens -->
Same here(ich bin natürlich Projektmanager für Software Projekte von Beruf
Mir hat es auf jedenfall mal geholfen. Ich habe mal eine draft der Rule erstellt:
Code: Alles auswählen
when
Time cron "0 0 6-7 ? 5-10 1/2 *" //von 6-7uhr, Mai bis Oktober jeden Zweiten Tag
Item GardenaSensor1_Bodenfeuchtigkeit < 50 % // Seonsorschwellwert Feuchtigkeit < 50%
Item GardenaSensor1_Bodentemperatur > 1 °C // Seonsorschwellwert Temperatur > 1°
then
Item Pumpe.sendCommand(ON) // Einschalten der Pumpe
Item Gewaechshaus.sendCommand(ON) // Einschalten des Ventils für Gewächshaus
createTimer(now.plusSeconds(300)) // Timer für Bewässerungsdauer
Item Pumpe.sendCommand(OFF) // Ausschalten der Pumpe
Item Gewaechshaus.sendCommand(OFF) // Ausschalten des Ventils für Gewächshaus
end
Meine Fragen - ist das nun richtig - habe ich irgendwelche formalen Fehler drin oder grundsätzlich nicht begriffen wie ich das machen soll?
Ich freu mich auf Feedback. Basierend darauf werde ich dann die Rule hoffentlich fertigstellen und die zweite für den Rasen erstellen (das wird spannend mit dem Openweather-Binding aber mit den Infos von Martin habe ich eine überragende Grundlage, tausend Dank für den Support!)
Openhabian/Openhab 2.4.0.
RasPi4 4B
HomeMaticIP (CCU3, Firmware 3.51.6)
Dezcon-Zigbee-Adapter
RasPi4 4B
HomeMaticIP (CCU3, Firmware 3.51.6)
Dezcon-Zigbee-Adapter