Automatische Bewässerung von Gewächshaus und Rasen

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
wighdeas
Beiträge: 26
Registriert: 30. Dez 2019 18:01
Answers: 1

Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von wighdeas »

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.
Openhabian/Openhab 2.4.0.
RasPi4 4B
HomeMaticIP (CCU3, Firmware 3.51.6)
Dezcon-Zigbee-Adapter

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von int5749 »

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

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
Items

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"}
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
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

wighdeas
Beiträge: 26
Registriert: 30. Dez 2019 18:01
Answers: 1

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von wighdeas »

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 :D

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

martin_aus_Ddorf
Beiträge: 56
Registriert: 2. Apr 2018 15:45

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von martin_aus_Ddorf »

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

wighdeas
Beiträge: 26
Registriert: 30. Dez 2019 18:01
Answers: 1

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von wighdeas »

Hi Martin,
Wenn du das also doch lieber per UI realisieren willst, kannst du mich gerne ansprechen.
ich @martin_aus_Ddorf freue mich wenn du mir deine Lösung zukommen lässt, hilft mir so oder so die meine zu realisieren.

Vielen Dank für das Angebot!
Openhabian/Openhab 2.4.0.
RasPi4 4B
HomeMaticIP (CCU3, Firmware 3.51.6)
Dezcon-Zigbee-Adapter

martin_aus_Ddorf
Beiträge: 56
Registriert: 2. Apr 2018 15:45

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von martin_aus_Ddorf »

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

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von int5749 »

martin_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
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 gebrauchen 8-)

Viele Grüße
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

martin_aus_Ddorf
Beiträge: 56
Registriert: 2. Apr 2018 15:45

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von martin_aus_Ddorf »

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:
ScreenShot 353 openHAB - Google Chrome.png



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

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:

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

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:

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

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 :P ). 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.

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von udo1toni »

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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

wighdeas
Beiträge: 26
Registriert: 30. Dez 2019 18:01
Answers: 1

Re: Automatische Bewässerung von Gewächshaus und Rasen

Beitrag von wighdeas »

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 :D Es hat mir auf jeden fall sehr geholfen ein Verständnis für den Sachverhalt aufzubauen und hoffentlich meine Rule zu erstellen.

Übrigens -->
(ich bin natürlich Projektmanager für Software Projekte von Beruf :P
Same here :lol: :lol:

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
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!)
Openhabian/Openhab 2.4.0.
RasPi4 4B
HomeMaticIP (CCU3, Firmware 3.51.6)
Dezcon-Zigbee-Adapter

Antworten