Morgen cyrox,
ich nutze auch einen KNX Schaltaktor um Ventile zu öffnen/zu schließen und ich lasse die Ventile auch nacheinander laufen.
Ich habe für jedes Ventil noch zsätzliche Variablen angelegt: pro Ventil noch eine „Automatic“ Variable (Ja/Nein) und eine Dauer/Duration Variable mit einer Zahl (in min).
Jedes Ventil/jeder Kreis hat ein eigenes Skript das wie folgt aussieht:
<?
$id = 50820; // eigene Variable die den aktuell laufenden Kreis anzeigt
$SwitchTrafo = 39483; //Trafo für die Ventile
$SwitchRasenVorgarten = 31143;
$SwitchRasenNord = 28279;
$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);
//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);
?>
Wie du dir denken kannst, gibt es dieses Skript für jedes Ventil entsprechend.
Dazu habe ich noch ein Gesamtskript, über die Einzelvariablen der Ventile kann ich bestimmen welche Ventile wie lange geöffnet werden. So kann ich mehrere Kreise nacheinander ablaufen lassen, ohne manuell einzugreifen.
Hier also das Hauptskript:
<?
$id = 50820; // eigene Variable die den aktuell laufenden Kreis anzeigt
$AutomatikStatus = 30573; // Variable für den generellen Automatik-Modus
$SwitchTrafo = 39483; // Tafo der Ventile
$ScriptVentil1 = 19770; //ID des jeweiligen Ventil-Skripts
$ScriptVentil2 = 36231;
$ScriptVentil3 = 37934;
$ScriptVentil5 = 57378;
$ScriptVentil6 = 25431;
$ScriptVentil7 = 26833;
$ScriptVentil8 = 28864;
$ScriptVentil9 = 55747;
$ScriptVentil9b = 41429;
$ScriptVentilAus = 26357;
$stepread = GetValue(59549); // Step-ID, wird entsprechend hochgezählt, damit das Programm weiß, welches Ventilskript zu starten ist
$step = 59549;
$AutomatikRasenVorgarten = GetValueBoolean(15449); //Ja/Nein Variable ob ein Ventil geöffnet werden soll
$AutomatikRasenNord = GetValueBoolean(37541);
$AutomatikRasenHaupt = GetValueBoolean(49132);
$AutomatikRasenSued = GetValueBoolean(10403);
$AutomatikPflanzenSpirale = GetValueBoolean(37204);
$AutomatikPflanzenTerrasse = GetValueBoolean(47180);
$timeRasenVorgarten = GetValue(39693); //Zeit der Ventilöffnung in min
$timeRasenNord = GetValue(59372);
$timeRasenHaupt = GetValue(50460);
$timeRasenSued = GetValue(38956);
$timePflanzenSpirale = GetValue(32880);
$timePflanzenTerrasse = GetValue(17938);
$timeRasenVorgartenSek = $timeRasenVorgarten * 60; // Umrechnung der Zeit in Sekunden
$timeRasenNordSek = $timeRasenNord * 60;
$timeRasenHauptSek = $timeRasenHaupt * 60;
$timeRasenSuedSek = $timeRasenSued * 60;
$timePflanzenSpiraleSek = $timePflanzenSpirale * 60;
$timePflanzenTerrasseSek = $timePflanzenTerrasse * 60;
// - - Bewässerung Gesamt-Laufzeitermittlung - -
$GesamtLaufzeit = 59688; // Variable in min für die Gesamtkaufzeit
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); //berechnet die Restlaufzeit der Bewässerung
// - - Skriptstart - -
if(($IPS_SENDER <> "TimerEvent")and($stepread == 0)){
SetValue($id, 8);
SetValue($step, 1);
IPS_SetScriptTimer($IPS_SELF, 5); //kurze Wartezeit, war bei mir notwendig, weil es sonst etwas hakte
EIB_Switch($SwitchTrafo, true);
SetValueBoolean($AutomatikStatus, true);
HM_WriteValueBoolean(36876, "STATE", true); // Wasserpumpe wird eingeschaltet
SetValue(58575, time()); //Variable die den Start des Skriptes schreibt, benutzt ich nur in einer Anzeige
IPS_SetEventActive(10149,true); // aktiviert ein Ereignis das minütlich die Restlaufzeit aktualisiert
return;
}
if($IPS_SENDER == "TimerEvent"){
switch($stepread) {
case 1:
if($AutomatikRasenVorgarten == true){
SetValue($step, 2); //step -ID schon mal auf 2 setzen, für den nächsten Durchlauf des Skripts
IPS_SetScriptTimer($IPS_SELF, $timeRasenVorgartenSek); //Timer Event dieses Skripts auf die Laufzeit des Ventils setzen
SetValue($id, 0); //meine Variable zur Anzeige welches Ventil läuft
IPS_RunScript($ScriptVentil1); //Ventilskript ausführen
}
else{
SetValue($step, 2); //step-ID auf 2 setzen
IPS_SetScriptTimer($IPS_SELF, 1); //Timer Event dieses Skripts auf 1 sek setzen, nach 1 sek wird es wieder ausgeführt und springt dann zu case 2, das geht dann in den nächsten Blöcken so weiter
};
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);
}
}
?>