Bewässerung nur ein Kreis zeitgleich (ActionScript?)

Nabend zusammen,

ich habe eine vermutlich einfache Frage. Über KNX steuere ich alle meine Aktoren, das funktioniert ohne Probleme. Im Bereich der Bewässerung darf ich jedoch aufgrund von Wasserdruck und Netzteillast nur ein Ventil gleichzeitig schalten, deshalb dachte ich mir sowas im Actionscript der der jeweiligen Variablen zu lösen.
Funktioniert aber irgendwie noch nicht, hat jemand einen Tipp für mich?

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);
    }
}  
?>

Hi, nutze aktuell eine variable zur eingabe der Bewässerungszeit und dann pro Regnerkreis das Modul „Eieruhr“ (Timer) sobald Zeit abgelaufen und Timer auf 00:00 weiterschaltung auf Kreis 2 usw. Ausgelößt wird das ganze derzeit mit einer Variable (regenzähler Stunden/Woche) sobald diese erreicht ist ist der Regenerkreis Mittwoch Nachts selbständig aktiv, Derzeit mit 6 Kreisen im Einsatz und musss sagen läuft bestens. Warte gerade auf Miflora Bodenfeuchtesensoren, werde diese diesen Sommer in Betrieb nehmen, dann ist die umständliche Zählerei vorbei…

Achja Steuerung lief zuvor auch über Script aber bei einer Bewässerungsdauer von 30 min pro Kreis, blieb ständig das Script hängen schaltete nicht mehr weiter und srpenkler lief die ganze Zeit, keine Ahnung wie lange ein Script laufen darf? Aktuell setze ich Ereignisse ein.

Hi zusammen,

bin die Tage zu nichts gekommen (zumindest im Bereich der Hausautomation) :slight_smile:
Danke für die Antworten @MarcoF so hatte ich es ursprünglich in den Aktionsskripten der jeweiligen Regnerkreise hinterlegt, aber da irgendwann nicht mehr ganz durchgesehen.
Habe nun ein wenig umgebaut. Die Automation über IP-Watering @andreasw, statt über Zeit zukünftig über Meßwerte aus dem Boden zu steuern wäre auch mein Ziel. Bin gespannt auf deine Erfahrungen.

Die Absicherung der Kreise (nur einer zur Zeit), läuft nun über auslösende Ereignisse. Habe je Kreis ein Skript, was die jeweils anderen Kreise abschaltet bei Auslösung durch den jeweils eingeschalteten Kreis. Das klappt stabil. Die Absicherung der nächtlichen Überflutung habe ich durch KNX Treppenlichtfunktionen im Aktor hinterlegt, nach spätestens 30min schaltet ein Kreis und das Hauptventil automatisch ab.

Viele Grüße