Gartenbewässerung mit IPS

ist das Script öffentlich erhältlich ?? :rolleyes:

Ich kann es dir gerne heute Abend einstellen.
Im Moment komme ich nicht an meine Sourcecodes ! Weil nicht zu hause !

Wäre super !!! Vielen Dank schon mal…

Noch eilt es nicht, da die Magnetvertile auch noch im Keller liegen :))

Ich habe gestern Abend mal auf die Schnelle ein Script geschnitzt, um die Werte von Wettermeldungen Boden auszuwerten.

Scheinbar werden die Daten „etwas“ verzögert bereitgestellt :(. Erst vor wenigen Minuten gab es die 06 UTC Werte.

Dagegen war „Deutschland stündlich“ schon um kurz nach 8:00 auf dem aktuelle Stand.

Ich passe heute Abend mal an und werte „Deutschland stündlich“ aus. Mal sehen, wie sich die Werte entwickeln und wann sie aktualisiert werden.

Hallo,

was genau berechnet Ihr mit dem Niederschlag?

In etwa so. Einen Virtuellen Eimer füllen und dann pro Tag den (Evapotranspiratiosfaktor) abziehen ? Und wenn der Eimer dann den Wert 0 hat wieder bewässern?

Gruß Uwe

Mit der Formel aus dem Forum berechne ich erst die Verdunstung, die je in mm ist. Davon ziehe ich die Regenmenge, ebenfalls in mm ab. Und dann kommt abhängig von min und max Zeiten eine Dauer in Minuten raus.

Die Beobachtung während der „warmen Phase“ war relativ i.O., aktuell kommt ja ausreichend Feuchtigkeit runter :).

Ich habe 3 Kübelpflanzen, die auf einem Untersetzer stehen. Die Pflanze saugt und wenn Teller leer, dann Wasser notwendig.

Das hat sich in den letzen Jahren bewährt, gestern sind die Ventile gelandet und Samstag wird automatisiert :D.

Hallo,

so jetzt will ich auch mal mein Bewässerungs Script hier einstellen, Danke alle denn, die mir geholfen haben. Jetzt brauche ich nur noch eine vernüftige Möglichkeit den Niederschlag zu messen.

Gruß Uwe


<?

$ID_HMInstanz 					= 36897 /*[Bewässerung\Strang 1 (Vorgarten)]*/;
$ID_HMInstanz_Status       = 45163 /*[Bewässerung\Strang 1 (Vorgarten)\STATE]*/;
$ID_Evapotranspiration		= 37909 /*[Bewässerung\Verdunstung (Evapotranspiration)\Evapotranspiration (Rasen)]*/;
$ID_Regenmelder				= 10545 /*[Bewässerung\Regenmelder (Nachlaufzeit)\Regen]*/;
$ID_Niederschlag           = 19692 /*[Wetter\Niederschlags Menge\Niederschlags Menge]*/;

//================================================================
//---Variable erstellen-------------------------------------------
$ID_zeit1_aktiv 			= CreateVariableByName($IPS_SELF, "Zeit 1 aktiv", 0, "", "false");
$ID_zeit2_aktiv 			= CreateVariableByName($IPS_SELF, "Zeit 2 aktiv", 0, "", "true");
$ID_zeit1 					= CreateVariableByName($IPS_SELF, "Zeit 1", 3, "", "07:00");
$ID_zeit2 					= CreateVariableByName($IPS_SELF, "Zeit 2", 3, "", "19:00");
$ID_laufzeit_MIN     	= CreateVariableByName($IPS_SELF, "Laufzeit Minimum", 1, "Zeit_MIN", 1);
$ID_laufzeit_MAX     	= CreateVariableByName($IPS_SELF, "Laufzeit Maximum", 1, "Zeit_MIN", 15);
$ID_laufzeit_tage    	= CreateVariableByName($IPS_SELF, "Laufzeit Wiederholung Tage", 1, "", 1);
$ID_laufzeit_ges_SEC 	= CreateVariableByName($IPS_SELF, "Laufzeit Dauer gesamt (sec)", 1, "Zeit_SEC", 0);
$ID_laufzeit_ges_MIN 	= CreateVariableByName($IPS_SELF, "Laufzeit Dauer gesamt (min)", 1, "Zeit_MIN", 0);
$ID_laufzeit_aktuell 	= CreateVariableByName($IPS_SELF, "Laufzeit Dauer aktuell", 1, "Zeit_SEC", 0);
$ID_laufzeit_faktor 		= CreateVariableByName($IPS_SELF, "Laufzeit Faktor", 1, "", 150);
$ID_laufzeit_letzte 		= CreateVariableByName($IPS_SELF, "Laufzeit Letzte", 3, "", "");
$ID_laufzeit_next 		= CreateVariableByName($IPS_SELF, "Laufzeit Nächste", 3, "", "");
$ID_Regenmelder_aktiv 	= CreateVariableByName($IPS_SELF, "Regenmelder Überwachung aktiv", 0, "~Switch", "true");

//---Variable einlesen---------------------------------------------
$zeit1_aktiv 			= getValue($ID_zeit1_aktiv);
$zeit2_aktiv 			= getValue($ID_zeit2_aktiv);
$laufzeit_MIN        = getValue($ID_laufzeit_MIN);
$laufzeit_MAX        = getValue($ID_laufzeit_MAX);
$laufzeit_tage       = getValue($ID_laufzeit_tage);
$Evapotranspiration 	= getValue($ID_Evapotranspiration);
$laufzeit_faktor     = getValue($ID_laufzeit_faktor);
$laufzeit_ges_SEC    = getValue($ID_laufzeit_ges_SEC);
$HMInstanz_Status		= getValue($ID_HMInstanz_Status);
$Regenmelder       	= getValue($ID_Regenmelder);
$Regenmelder_aktiv   = getValue($ID_Regenmelder_aktiv);
$Niederschlag        = (INT)getValue($ID_Niederschlag);

//---Ereignis erstellen-----------------------------------------
$IDe_zeit1 = @IPS_GetEventIDByName("Startzeit 1", $IPS_SELF);                    // == Startzeit 1 ==
If ($IDe_zeit1 === false){                                              			// Üperprüfen ob Ereignis gibt
  	$IDe_zeit1 = IPS_CreateEvent(1);           		 										// Ausgelöstes Ereignis
  	IPS_SetName($IDe_zeit1, "Startzeit 1");       											// Namen zuordenen
	IPS_SetParent($IDe_zeit1, $IPS_SELF);   													// Eregnis zuordnen
	IPS_SetEventActive($IDe_zeit1, true);       												// Ereignis aktivieren
}
$IDe_zeit2 = @IPS_GetEventIDByName("Startzeit 2", $IPS_SELF);                    // == Startzeit 2 ==
If ($IDe_zeit2 === false){                                              			// Üperprüfen ob Ereignis gibt
  	$IDe_zeit2 = IPS_CreateEvent(1);           		 										// Ausgelöstes Ereignis
  	IPS_SetName($IDe_zeit2, "Startzeit 2");       											// Namen zuordenen
	IPS_SetParent($IDe_zeit2, $IPS_SELF);   													// Eregnis zuordnen
	IPS_SetEventActive($IDe_zeit2, true);       												// Ereignis aktivieren
}
$IDe_Laufzeit = @IPS_GetEventIDByName("STOP Laufzeit", $IPS_SELF);               // == Laufzeit ==
If ($IDe_Laufzeit === false){                                              		// Üperprüfen ob Ereignis gibt
  	$IDe_Laufzeit = IPS_CreateEvent(1);           		 									// Ausgelöstes Ereignis
  	IPS_SetName($IDe_Laufzeit, "STOP Laufzeit");       									// Namen zuordenen
	IPS_SetParent($IDe_Laufzeit, $IPS_SELF);   												// Eregnis zuordnen
	IPS_SetEventActive($IDe_Laufzeit, true);       											// Ereignis aktivieren
}
$IDe = @IPS_GetEventIDByName("Überwachung EVA Wert", $IPS_SELF);        			// == Überwachung ==
If ($IDe === false){
	$IDe = IPS_CreateEvent(0);        															// Ausgelöstes Ereignis
	IPS_SetName($IDe, "Überwachung EVA Wert");       										// Namen zuordenen
	IPS_SetEventTrigger($IDe, 1, $ID_Evapotranspiration); 								// Bei Änderung von Variable
	IPS_SetParent($IDe, $IPS_SELF); 																// Ereignis zuordnen
	IPS_SetEventActive($IDe, true);    															// Ereignis aktivieren
}
$IDe = @IPS_GetEventIDByName("Überwachung Regenmelder", $IPS_SELF);        		// == Überwachung ==
If ($IDe === false){
	$IDe = IPS_CreateEvent(0);        															// Ausgelöstes Ereignis
	IPS_SetName($IDe, "Überwachung Regenmelder");       									// Namen zuordenen
	IPS_SetEventTrigger($IDe, 1, $ID_Regenmelder); 													// Bei Änderung von Variable
	IPS_SetParent($IDe, $IPS_SELF); 																// Ereignis zuordnen
	IPS_SetEventActive($IDe, true);    															// Ereignis aktivieren
}

//---Tastatur / Bottom abfrage-------------------------------------
If (!isset($IPS_COMPONENT)) $IPS_COMPONENT ="";                                  // Dashboard Bottom abfrage
//---Zeiten ändern-------------------------------------------------
If($IPS_COMPONENT == "Zeit1 AUS"){
	If ($zeit1_aktiv == true){                   											// Zeit 1 AUS
      $zeit1_aktiv = false;
	}
	ElseIf ($zeit1_aktiv == false){            												// Zeit 1 EIN
      $zeit1_aktiv = true;
	}
	SetValue($ID_zeit1_aktiv,$zeit1_aktiv);
}
If($IPS_COMPONENT == "Zeit2 AUS"){
	If ($zeit2_aktiv == true){                   											// Zeit 2 AUS
      $zeit2_aktiv = false;
	}
	ElseIf ($zeit2_aktiv == false){           												// Zeit 2 EIN
      $zeit2_aktiv = true;
	}
	SetValue($ID_zeit2_aktiv,$zeit2_aktiv);
}

If($IPS_COMPONENT == "Zeit1 +" and $zeit1_aktiv == true){      						// Zeit 1 höher
   $zeit1 = ZeitEdit($ID_zeit1, +15);
   SetValue($ID_zeit1, $zeit1);
}
If($IPS_COMPONENT == "Zeit1 -" and $zeit1_aktiv == true){   							// Zeit 1 tiefer
   $zeit1 = ZeitEdit($ID_zeit1, -15);
   SetValue($ID_zeit1, $zeit1);
}
If($IPS_COMPONENT == "Zeit2 +" and $zeit2_aktiv == true){      						// Zeit 2 höher
   $zeit2 = ZeitEdit($ID_zeit2, +15);
   SetValue($ID_zeit2, $zeit2);
}
If($IPS_COMPONENT == "Zeit2 -" and $zeit2_aktiv == true){   							// Zeit 2 tiefer
   $zeit2 = ZeitEdit($ID_zeit2, -15);
   SetValue($ID_zeit2, $zeit2);
}

If($IPS_COMPONENT == "Faktor +"){      														// Faktor höher
   $laufzeit_faktor = WertEdit($ID_laufzeit_faktor, +10, 700);
   SetValue($ID_laufzeit_faktor, $laufzeit_faktor);
}
If($IPS_COMPONENT == "Faktor -"){   															// Faktor tiefer
   $laufzeit_faktor = WertEdit($ID_laufzeit_faktor, -10, 10);
   SetValue($ID_laufzeit_faktor, $laufzeit_faktor);
}

If($IPS_COMPONENT == "Laufzeit MIN +"){      												// Laufzeit Minimum höher
   $laufzeit_MIN = WertEdit($ID_laufzeit_MIN, +1, $laufzeit_MAX - 1);
   SetValue($ID_laufzeit_MIN, $laufzeit_MIN);
}
If($IPS_COMPONENT == "Laufzeit MIN -"){      												// Laufzeit Minimum tiefer
   $laufzeit_MIN = WertEdit($ID_laufzeit_MIN, -1, 0);
   SetValue($ID_laufzeit_MIN, $laufzeit_MIN);
}
If($IPS_COMPONENT == "Laufzeit MAX +"){      												// Laufzeit Maximum höher
   $laufzeit_MAX = WertEdit($ID_laufzeit_MAX, +1, 60);
   SetValue($ID_laufzeit_MAX, $laufzeit_MAX);
}
If($IPS_COMPONENT == "Laufzeit MAX -"){      												// Laufzeit Maximum tiefer
   $laufzeit_MAX = WertEdit($ID_laufzeit_MAX, -1, $laufzeit_MIN + 1);
   SetValue($ID_laufzeit_MAX, $laufzeit_MAX);
}

If($IPS_COMPONENT == "Laufzeit Tage +"){      												// Laufzeit Wiederholong Tage höher
   $laufzeit_tage = WertEdit($ID_laufzeit_tage, +1,14);
   SetValue($ID_laufzeit_tage, $laufzeit_tage);
}
If($IPS_COMPONENT == "Laufzeit Tage -"){      												// Laufzeit Wiederholong Tage tiefer
   $laufzeit_tage = WertEdit($ID_laufzeit_tage, -1, 1);
   SetValue($ID_laufzeit_tage, $laufzeit_tage);
}

If($IPS_COMPONENT == "Start"){      															// Manueller Start
   $manuell_start = true;}
Else {$manuell_start = false;}

If($IPS_COMPONENT == "Ein"){      																// Manuelle Dauer
   $manuell_ein = true;}
Else {$manuell_ein = false;}

If($IPS_COMPONENT == "Stop"){      																// Manueller Stop
   $manuell_stop = true;}
Else {$manuell_stop = false;}


//---Variable einlesen--------------------------------------------
$zeit1_STD 	= (INT) SubStr(GetValue($ID_zeit1),0,2);
$zeit1_MIN 	= (INT) SubStr(GetValue($ID_zeit1),3,2);
$zeit2_STD  = (INT) SubStr(GetValue($ID_zeit2),0,2);
$zeit2_MIN  = (INT) SubStr(GetValue($ID_zeit2),3,2);

//---Zeit Ereignis setzten---------------------------------------------
If ($zeit1_aktiv == true){                                                       // StartZeit 1
	IPS_SetEventCyclic($IDe_zeit1, 2, $laufzeit_tage, 0, 0, 0, 0);   					// Zeittyp einstellen
	IPS_SetEventCyclicTimeBounds($IDe_zeit1, mktime($zeit1_STD, $zeit1_MIN, 0),0);// Startzeit
	IPS_SetEventActive($IDe_zeit1, true);
	}
Else{
	IPS_SetEventActive($IDe_zeit1, false);
}

If ($zeit2_aktiv == true){                                                     	// StartZeit 2
	IPS_SetEventCyclic($IDe_zeit2, 2, $laufzeit_tage, 0, 0, 0, 0);   					// Zeittyp einstellen
	IPS_SetEventCyclicTimeBounds($IDe_zeit2, mktime($zeit2_STD, $zeit2_MIN, 0),0);// Startzeit
	IPS_SetEventActive($IDe_zeit2, true);
	}
Else{
	IPS_SetEventActive($IDe_zeit2, false);
}

//---Nächste Startzeit (INFO)------------------------------------
If ($Regenmelder_aktiv == true and $Regenmelder == true)
	{
	$Regen_AUS = true;
	SetValue($ID_laufzeit_next, "Regen AUS");
}
Else
	{
	$Regen_AUS = false;
	If ($zeit1_aktiv == false and $zeit2_aktiv == false)
		{
		SetValue($ID_laufzeit_next, "AUS");
	}
	Else
		{
		$EreignisZeitInfo1 = IPS_GetEvent($IDe_zeit1);                             // Ereignis Zeit1(Nächste Startzeit) auslesen
		$EreignisZeitInfo2 = IPS_GetEvent($IDe_zeit2);                             // Ereignis Zeit2(Nächste Startzeit) auslesen
		If (($EreignisZeitInfo1['NextRun']-time()) > ($EreignisZeitInfo2['NextRun']-time()))
			{
			$laufzeit_next = (date(("d.m.Y  H:i"),$EreignisZeitInfo1['NextRun']+1));
			SetValue($ID_laufzeit_next, $laufzeit_next);
		}
		Else
			{
			$laufzeit_next = (date(("d.m.Y  H:i"),$EreignisZeitInfo2['NextRun']+1));
			SetValue($ID_laufzeit_next, $laufzeit_next);
		}
	}
}

//---Berechung Laufzeit gesamt----------------------------------

If ($ID_Regenmelder_aktiv == true)
	{
	$laufzeit_ges_SEC = $laufzeit_faktor * ($Evapotranspiration - $Niederschlag);	// Berechung Laufzeit gesamt nach (Evapotranspiration)
}
Else
	{
	$laufzeit_ges_SEC = $laufzeit_faktor * $Evapotranspiration;    					// Berechung Laufzeit gesamt nach (Evapotranspiration)
}

If ($zeit1_aktiv == true and $zeit2_aktiv == true)                               // Berechung Laufzeit bei 2mal Täglich
	{
	$laufzeit_ges_SEC = $laufzeit_ges_SEC / 2;
	}

If ($laufzeit_ges_SEC < $laufzeit_MIN * 60)                                      //Berechnung Laufzeit MIN / MAX überwachen
	{
   $laufzeit_ges_SEC = $laufzeit_MIN * 60;
}
If ($laufzeit_ges_SEC > $laufzeit_MAX * 60)
	{
   $laufzeit_ges_SEC = $laufzeit_MAX * 60;
}

SetValue($ID_laufzeit_ges_SEC, $laufzeit_ges_SEC);                               // Laufzeit speichern
SetValue($ID_laufzeit_ges_MIN, $laufzeit_ges_SEC / 60);

//---START über (IPS TIMER EREIGNIS)---------------------------
If($IPS_SENDER == "TimerEvent")                          								// Start über Stratzeiten
	{
	If (($IPS_EVENT == $IDe_zeit1 and $zeit1_aktiv == true) or                    // == Ventil EIN ==
		 ($IPS_EVENT == $IDe_zeit2 and $zeit2_aktiv == true) and
		 ($Regen_AUS == false))
		{
		HM_WriteValueBoolean($ID_HMInstanz, "STATE", true);
		IPS_SetEventCyclic($IDe_Laufzeit, 1, 0, 0, 0, 0, 0);   							// Zeittyp einstellen
		IPS_SetEventCyclicDateBounds($IDe_Laufzeit,time()+$laufzeit_ges_SEC,0); 	// Startdatum
		IPS_SetEventCyclicTimeBounds($IDe_Laufzeit,time()+$laufzeit_ges_SEC,0); 	// Startzeit
		IPS_SetEventActive($IDe_Laufzeit, true);
		IPS_SetScriptTimer($IPS_SELF, 30);                                         // Dieses Skript nach ablauf der Zeit neu starten
		setValue($ID_laufzeit_letzte,(date(("d.m.Y  H:i"),Time())));               // Letzte Laufzeit speichern
		setValue($ID_laufzeit_aktuell, 1);                                         // Aktuelle Laufzeit 0 setzen
	}
	If ($HMInstanz_Status == true)                                                // == Aktuelle Laufzeit ==
		{
		$Variable = IPS_GetVariable($ID_HMInstanz_Status);
		$Variable = $Variable['VariableChanged'];
      $laufzeit_aktuell = round((time()- $Variable)) + 1;                        // Aktuelle Laufzeit berechnen speichern
		setValue($ID_laufzeit_aktuell, $laufzeit_aktuell);
	}
	If ($IPS_EVENT == $IDe_Laufzeit or $laufzeit_aktuell > $laufzeit_ges_SEC)   	// == Ventil AUS ==
		{
		HM_WriteValueBoolean($ID_HMInstanz, "STATE", false);
		IPS_SetEventActive($IDe_Laufzeit, false);
		IPS_SetScriptTimer($IPS_SELF, 0);
		setValue($ID_laufzeit_aktuell, $laufzeit_ges_SEC);
	}
}

//---Manueller Start mit Auto STOP------------------------------
If($manuell_start == true and $HMInstanz_Status == false)
	{
	HM_WriteValueBoolean($ID_HMInstanz, "STATE", true);
	IPS_SetEventCyclic($IDe_Laufzeit, 1, 0, 0, 0, 0, 0);   								// Zeittyp einstellen
	IPS_SetEventCyclicDateBounds($IDe_Laufzeit,time()+$laufzeit_ges_SEC,0); 		// Startdatum
	IPS_SetEventCyclicTimeBounds($IDe_Laufzeit,time()+$laufzeit_ges_SEC,0); 		// Startzeit
	IPS_SetEventActive($IDe_Laufzeit, true);
	IPS_SetScriptTimer($IPS_SELF, 30);                                         	// Dieses Skript nach ablauf der Zeit neu starten
	setValue($ID_laufzeit_letzte,(date(("d.m.Y  H:i"),Time())));               	// Letzte Laufzeit speichern
   setValue($ID_laufzeit_aktuell, 1);                                            // Aktuelle Laufzeit 0 setzen
}

//---Manuelle EIN-----------------------------------------------
If($manuell_ein == true and $HMInstanz_Status == false)
	{
	HM_WriteValueBoolean($ID_HMInstanz, "STATE", true);
	IPS_SetEventActive($IDe_Laufzeit, false);
	IPS_SetScriptTimer($IPS_SELF, 0);
}

//---Manueller AUS ---------------------------------------------
If($manuell_stop == true and $HMInstanz_Status == true)
	{
	HM_WriteValueBoolean($ID_HMInstanz, "STATE", false);
	IPS_SetEventActive($IDe_Laufzeit, false);
	IPS_SetScriptTimer($IPS_SELF, 0);
}

//================================================================
//---Zahlen Wert ändern +/- --------------------------------------
function WertEdit($ID, $wert, $endwert){           // ID=ZeitString Wert(INT) , Wert(INT)= Änderungs Wert "+1" oder "-1" , Endwert(INT)
	$zahl = GetValue($ID);

	If ($wert > 0){                              											// Wert änder (höher)
		$zahl = $zahl + $wert;
		If ($zahl > $endwert) {
		   $zahl = $endwert;
		}
	}

	If ($wert < 0){                                 										// Wert änder (tiefer)
		$zahl = $zahl + $wert;
		If ($zahl < $endwert) {
		   $zahl = $endwert;
		}
	}

  	return $zahl;
}

//---Zeitwert ändern +/- -----------------------------------------
function ZeitEdit($ID, $wert){                     // ID=ZeitString "14:00" , Wert(INT)= Änderungs Wert "+1" oder "-1"
	$zeit_STD  = (INT) SubStr(GetValue($ID),0,2);
	$zeit_MIN  = (INT) SubStr(GetValue($ID),3,2);

	If ($wert > 0){                              											// Zeit änder (höher)
		$zeit_MIN = $zeit_MIN + $wert;
		If ($zeit_MIN > 59){
			$zeit_MIN 	= $zeit_MIN - 60;
			$zeit_STD	= $zeit_STD + 1;
		}
		If ($zeit_STD > 23){
			$zeit_MIN 	= 0;
			$zeit_STD 	= 0;
		}
	}
	If ($wert < 0){                                 										// Zeit änder (tiefer)
		$zeit_MIN = $zeit_MIN + $wert;
		If ($zeit_MIN < 0){
			$zeit_MIN 	= 60 + $zeit_MIN;
			$zeit_STD 	= $zeit_STD - 1;
		}
		If ($zeit_STD < 0){
			$zeit_MIN 	= 60 + $wert;
			$zeit_STD 	= 23;
		}
	}

   $zeit = STR_PAD($zeit_STD,2,"0",STR_PAD_LEFT).":".STR_PAD($zeit_MIN,2,"0",STR_PAD_LEFT);
	return $zeit;
}


//---Funktion Variablen anlegen ----------------------------------
function CreateVariableByName($id, $name, $type, $profile = "", $wert){
   global $IPS_SELF;
   $vid = @IPS_GetVariableIDByName($name, $id);
   If($vid === false)
   	{
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
      IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
      If($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }

      SetValue($vid, $wert);  																	// Variabel, mit WERT füllen
      }
	return $vid;
}

?>

Wenn du in der Nähe einer der Messstationen vom DWD wohnst kannst du „bald“ mein Script nutzen.

Meine Auswerteversuche laufen gerade und der vereinzelte Regen hilft beim Testen :).

Wie macht Ihr das mit der Mindestlaufzeit?

Die berechnete Zeit auf mindestens den Wert setzten, oder wenn die Mindestlaufzeit unterschreiten wird nicht bewässern?

Gruß Uwe

wenn die Mindestlaufzeit unterschritten wird nicht bewässern :slight_smile: