ich denke da kann ich helfen, genau das habe ich im Einsatz.
Vielleicht ist mein Skript-Syntax nicht der Beste (habs auch nur durch Zusammenbasteln was ich hier so finde) aber es geht
-
Ich habe 2 Variablen, ein Boolean und ein Integer
1.a. Boolean - Name: Automatic mit An/Aus Profil
1.b. Integer - Name: Duration mit Werten und einem Profil mit " Min", eine Eintelung von 0-60 in 5-er Schritten
1.c. Diese beiden Variablen habe ich für jeden Kreis (also je Magnetventil das einen Kreis steuert)
-
3 weitere Variablen
2.a. Boolean - Name: Automatik Status mit An/Aus Profil
2.b. Integer - Name: Bewässerung: Eigenes Profil mit zB. „Kreis1“,„Kreis2“,„Kreis3“ … Nutze ich im Wesentlichen zur Anzeige
2.c. Integer - Name: Bewässerung_Step ohne Profil, ist nur eine Zahl (ganzzahlig)
-
je Bewässerungskreis ein Skript das z.B. folgendermaßen aussieht (Ich habe das ganze hauptsächlich in KNX)
<?
$id = 50820; // siehe 2.b.
$SwitchTrafo = 39483; //Trafo der Magnetventile
$SwitchRasenVorgarten = 31143; //Magenetventil 1
$SwitchRasenNord = 28279; // Magnetventil 2 usw, für die nächsten Einträge
$SwitchRasenHaupt1 = 20440;
$SwitchRasenHaupt2 = 43457;
$SwitchRasenSued = 27586;
$SwitchPflanzenSpirale = 26233;
$SwitchPflanzenTerasse = 37762;
$SwitchVentilkasten2 = 23893;
$SwitchFassSchlauchhalter = 14158;
$SwitchFass1 = 55367;
$SwitchSchlauchhalter2 = 45115;
EIB_Switch($SwitchTrafo, true);
SetValue($id, 0); // siehe 2.b. ist natürlich in jedem Ventilskript eine andere Zahl
//Bewässerung Rasen Giebelseite Ost (Ventilkasten 1; Ventil 1 öffnen)
EIB_Switch($SwitchRasenVorgarten, true);
EIB_Switch($SwitchPflanzenSpirale, false);
EIB_Switch($SwitchRasenNord, false);
EIB_Switch($SwitchVentilkasten2, false);
EIB_Switch($SwitchPflanzenTerasse, false);
EIB_Switch($SwitchRasenSued, false);
EIB_Switch($SwitchRasenHaupt1, false);
EIB_Switch($SwitchRasenHaupt2, false);
EIB_Switch($SwitchFassSchlauchhalter, false);
EIB_Switch($SwitchFass1, false);
EIB_Switch($SwitchSchlauchhalter2, false);
?>
- Ein Automatikskript, das die einzelnen Ventilskripte nacheinander ansteuert entsprechend ob die Kreise als „zu bewässern“ (siehe boolean 2.a.) eingeschaltet sind und dann welche Zeit für die jeweiligen Kreise eingestellt ist.
<?
$id = 50820; // siehe 2.b.
$AutomatikStatus = 30573; // siehe 2.a.
$SwitchTrafo = 39483;
$ScriptVentil1 = 19770;
$ScriptVentil2 = 36231;
$ScriptVentil3 = 37934;
$ScriptVentil5 = 57378;
$ScriptVentil6 = 25431;
$ScriptVentil7 = 26833;
$ScriptVentil8 = 28864;
$ScriptVentil9 = 55747;
$ScriptVentil9b = 41429;
$ScriptVentilAus = 26357;
$stepread = GetValue(59549); // siehe 2.c.
$step = 59549; // siehe 2.c.
$AutomatikRasenVorgarten = GetValueBoolean(15449); // Abfrage Automatik Status ein/aus
$AutomatikRasenNord = GetValueBoolean(37541);
$AutomatikRasenHaupt = GetValueBoolean(49132);
$AutomatikRasenSued = GetValueBoolean(10403);
$AutomatikPflanzenSpirale = GetValueBoolean(37204);
$AutomatikPflanzenTerrasse = GetValueBoolean(47180);
$timeRasenVorgarten = GetValue(39693); // Abfrage der Zeiten je Kreis in min
$timeRasenNord = GetValue(59372);
$timeRasenHaupt = GetValue(50460);
$timeRasenSued = GetValue(38956);
$timePflanzenSpirale = GetValue(32880);
$timePflanzenTerrasse = GetValue(17938);
$timeRasenVorgartenSek = $timeRasenVorgarten * 60; // Umrechnung in sek
$timeRasenNordSek = $timeRasenNord * 60;
$timeRasenHauptSek = $timeRasenHaupt * 60;
$timeRasenSuedSek = $timeRasenSued * 60;
$timePflanzenSpiraleSek = $timePflanzenSpirale * 60;
$timePflanzenTerrasseSek = $timePflanzenTerrasse * 60;
// - - Bewässerung Gesamt-Laufzeitermittlung - - // Ich lasse mir noch die Gesamtlaufzeit errechnen der Übersicht wegen
$GesamtLaufzeit = 59688;
if($AutomatikRasenVorgarten == true){$timevalue_timeRasenVorgarten = $timeRasenVorgarten;} else{$timevalue_timeRasenVorgarten = 0;};
if($AutomatikRasenNord == true){$timevalue_timeRasenNord = $timeRasenNord;} else{$timevalue_timeRasenNord = 0;};
if($AutomatikRasenHaupt == true){$timevalue_timeRasenHaupt = $timeRasenHaupt;} else{$timevalue_timeRasenHaupt = 0;};
if($AutomatikRasenSued == true){$timevalue_timeRasenSued = $timeRasenSued;} else{$timevalue_timeRasenSued = 0;};
if($AutomatikPflanzenSpirale == true){$timevalue_timePflanzenSpirale = $timePflanzenSpirale;} else{$timevalue_timePflanzenSpirale = 0;};
if($AutomatikPflanzenTerrasse == true){$timevalue_timePflanzenTerrasse = $timePflanzenTerrasse;} else{$timevalue_timePflanzenTerrasse = 0;};
$timevalue_Summe_min = $timevalue_timeRasenVorgarten + $timevalue_timeRasenNord + (2 * $timevalue_timeRasenHaupt) + $timevalue_timeRasenSued + $timevalue_timePflanzenSpirale + $timevalue_timePflanzenTerrasse;
SetValue($GesamtLaufzeit, $timevalue_Summe_min);
IPS_RunScript(49549);
// - - Skriptstart - -
if(($IPS_SENDER <> "TimerEvent")and($stepread == 0)){
SetValue($id, 8);
SetValue($step, 1);
IPS_SetScriptTimer($IPS_SELF, 5);
EIB_Switch($SwitchTrafo, true);
SetValueBoolean($AutomatikStatus, true);
HM_WriteValueBoolean(36876, "STATE", true); //Pumpe einschalten
SetValue(58575, time()); // zusätzliche Variable, die eine Startzeit angibt, wird hier auf "jetzt" gesetzt
IPS_SetEventActive(10149,true); //Ereignis, das an einem weiteren Skript hängt zur Ermittlung der Restlaufzeit, wird während das Programm läuft jede Minute ausgeführt, nicht zwingend erforderlich
return;
}
if($IPS_SENDER == "TimerEvent"){
switch($stepread) { // hier wird der jeweilige "step" ausgelesen
case 1:
if($AutomatikRasenVorgarten == true){ //wenn die Variable Automatic für diesen Kreis auf "true/an" steht wird dder Teil ausgeführt...
SetValue($step, 2); // dies ist step 1, der unter case 1 abläuft, damit bei der nächsten Ausführung dieses Skriptes der nächste "case" läuft, wird "step" hier um +1 erhöht
IPS_SetScriptTimer($IPS_SELF, $timeRasenVorgartenSek); //An diesem Skript hängt ein ScriptTimer, der dann nach der eingestellten Zeit dieses Script wieder ausführt und dann zum nächsten "Step" geht.
SetValue($id, 0);
IPS_RunScript($ScriptVentil1); // hier wird der das Skript wie unter 3. beschrieben gestartet
}
else{ //falls die Variable Automatic für diesen Kreis "false/nein" ist, wird der "step" um +1 erhöht, der eigene Skripttimer auf 1 sek gestellt, worduch das Skript nach 1 sek wieder startet und dann zu "case 2" springt, so geht das dann hier immer weiter bis man am Ende ankommt
SetValue($step, 2);
IPS_SetScriptTimer($IPS_SELF, 1);
};
break;
case 2:
if($AutomatikRasenNord == true){
SetValue($step, 3);
IPS_SetScriptTimer($IPS_SELF, $timeRasenNordSek);
SetValue($id, 1);
IPS_RunScript($ScriptVentil3);
}
else{
SetValue($step, 3);
IPS_SetScriptTimer($IPS_SELF, 1);
};
break;
case 3:
if($AutomatikRasenHaupt == true){
SetValue($step, 4);
IPS_SetScriptTimer($IPS_SELF, $timeRasenHauptSek);
SetValue($id, 2);
IPS_RunScript($ScriptVentil7);
}
else{
SetValue($step, 4);
IPS_SetScriptTimer($IPS_SELF, 1);
};
break;
case 4:
if($AutomatikRasenHaupt == true){
SetValue($step, 5);
IPS_SetScriptTimer($IPS_SELF, $timeRasenHauptSek);
SetValue($id, 3);
IPS_RunScript($ScriptVentil8);
}
else{
SetValue($step, 5);
IPS_SetScriptTimer($IPS_SELF, 1);
};
break;
case 5:
if($AutomatikRasenSued == true){
SetValue($step, 6);
IPS_SetScriptTimer($IPS_SELF, $timeRasenSuedSek);
SetValue($id, 4);
IPS_RunScript($ScriptVentil6);
}
else{
SetValue($step, 6);
IPS_SetScriptTimer($IPS_SELF, 1);
};
break;
case 6:
if($AutomatikPflanzenSpirale == true){
SetValue($step, 7);
IPS_SetScriptTimer($IPS_SELF, $timePflanzenSpiraleSek);
SetValue($id, 5);
IPS_RunScript($ScriptVentil2);
}
else{
SetValue($step, 7);
IPS_SetScriptTimer($IPS_SELF, 1);
};
break;
case 7:
if($AutomatikPflanzenTerrasse == true){
SetValue($step, 8);
IPS_SetScriptTimer($IPS_SELF, $timePflanzenTerrasseSek);
SetValue($id, 6);
IPS_RunScript($ScriptVentil5);
}
else{
SetValue($step, 8);
IPS_SetScriptTimer($IPS_SELF, 1);
};
break;
case 8:
// Ablauf fertig
SetValue($step, 0);
IPS_SetScriptTimer($IPS_SELF, 0);
HM_WriteValueBoolean(36876, "STATE", false);
SetValue($id, 8);
SetValueBoolean($AutomatikStatus, false);
IPS_RunScript($ScriptVentilAus);
SetValueBoolean(15449, false);
SetValueBoolean(37541, false);
SetValueBoolean(49132, false);
SetValueBoolean(10403, false);
SetValueBoolean(37204, false);
SetValueBoolean(47180, false);
EIB_Switch(39503, false);
EIB_Switch(22778, false);
IPS_SetEventActive(10149,false);
}
}
?>