Hier das Skript.
<?
$ID_Evapotranspiration = 37909 /*[Bewässerung\Verdunstung (Evapotranspiration)\Evapotranspiration (Rasen)]*/;
//---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_aktuel = CreateVariableByName($IPS_SELF, "Laufzeit Dauer aktuel", 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_status_reglung = CreateVariableByName($IPS_SELF, "Status Reglung", 1, "Status_Reglung", 0);
//---Ereignis ZEIT erstellen--------------------------------------
$IDe_zeit1 = @IPS_GetEventIDByName("Startzeit 1", $IPS_SELF); //Üperprüfen ob Ereignis gibt
if ($IDe_zeit1 === false){
$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); //Üperprüfen ob Ereignis gibt
if ($IDe_zeit2 === false){
$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
}
//---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);
//---Tastatur / Bottom abfrage-------------------------------------
If (!isset($IPS_COMPONENT)) $IPS_COMPONENT ="";
//---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, +20, 500);
SetValue($ID_laufzeit_faktor, $laufzeit_faktor);
}
If($IPS_COMPONENT == "Faktor -"){ //Faktor tiefer
$laufzeit_faktor = WertEdit($ID_laufzeit_faktor, -20, 10);
SetValue($ID_laufzeit_faktor, $laufzeit_faktor);
}
If($IPS_COMPONENT == "Laufzeit MIN +"){ //Laufzeit Minimum höher
$laufzeit_MIN = WertEdit($ID_laufzeit_MIN, +1, 60);
SetValue($ID_laufzeit_MIN, $laufzeit_MIN);
}
If($IPS_COMPONENT == "Laufzeit MIN -"){ //Laufzeit Minimum tiefer
$laufzeit_MIN = WertEdit($ID_laufzeit_MIN, -1, 1);
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, 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);
}
//---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);
//---Ereignis ZEIT setzten----------------------------------------
If ($zeit1_aktiv == true){ //StartZeit 1
IPS_SetEventActive($IDe_zeit1, true);
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
}
Else{
IPS_SetEventActive($IDe_zeit1, false);
}
If ($zeit2_aktiv == true){ //StartZeit 2
IPS_SetEventActive($IDe_zeit2, true);
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
}
Else{
IPS_SetEventActive($IDe_zeit2, false);
}
//---Nächste Startzeit auslesen---------------------------------
$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 nach (Evapotranspiration)--------
$laufzeit_ges_SEC = $laufzeit_faktor * $Evapotranspiration;
SetValue($ID_laufzeit_ges_SEC, $laufzeit_ges_SEC);
SetValue($ID_laufzeit_ges_MIN, $laufzeit_ges_SEC / 60);
//---Berechung Laufzeit bei 2mal Täglich------------------------
If ($zeit1_aktiv == true and $zeit2_aktiv == true)
{
$laufzeit_ges_SEC = $laufzeit_ges_SEC / 2;
}
//---Laufzeit ZEIT Steuern über (IPS TIMER EREIGNIS)------------
If($IPS_SENDER == "TimerEvent")
{
If ($IPS_EVENT != $IDe_zeit1 and $IPS_EVENT != $IDe_zeit2) // Ausschalten
{
IPS_SetScriptTimer($IPS_SELF, 0);
HM_WriteValueBoolean(36897 /*[Bewässerung\Strang 1 (Vorgarten)]*/, "STATE", false);
}
If (($IPS_EVENT == $IDe_zeit1 and $zeit1_aktiv == true) or
($IPS_EVENT == $IDe_zeit2 and $zeit2_aktiv == true)) // Einschalten
{
HM_WriteValueBoolean(36897 /*[Bewässerung\Strang 1 (Vorgarten)]*/, "STATE", true);
SetValue($ID_laufzeit_letzte, (date(("d.m.Y H:i"),Time())));
IPS_SetScriptTimer($IPS_SELF, $laufzeit_ges_SEC);
}
}
//================================================================
//---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 > 24){
$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, füllen
//IPS_SetScriptTimer($IPS_SELF, 60); //Triger anlegen
}
return $vid;
}
?>