Bewässerung via KNX

Hallo,

ich habe mir eine Bewässerung aufgebaut und steuere die Magnetventile mit einem KNX Aktor an.

Ich würde hierbei gerne aus Sicherheitsgründen die Treppenlichtfunktion des Aktors nutzen.
Leider kann die Zeit nicht extern parametriert werden.

Ich habe mir deshalb überlegt diese auf 5 Minuten zu stellen und je nach Sollzeit der Bewässerung entsprechend oft „Nachzutriggern“.

Allerdings habe ich mit dem Script so meine Probleme da ich über ein Timerevent nicht nachtriggern kann oder ?
Ich habe das Timerevent zwar mehrfach schon verwendet aber immer als „Scriptschnitzel“ für meine Zwecke modifiziert ohne genau die Funktion zu hinterfragen.

Aber von meinem Verständnis bleibt er nach dem Starten des Timerevents im script immer an dieser Stelle stehen und warten einfach bis abgelaufen, oder wie ist das Verhalten ?

OK, ich antworte mir dann auch nochmal selbst.

Ich könnte natürlich auch ein Timerevent mit ebenfalls 5 Minuten einstellen und dieses dann anhand der Sollzeit entsprechend oft durchlaufen lassen. Also quasi bei z.b 20 Minuten ergibt die Berechnung 20 Minuten/5Minuten = 4 und über einen Zähler der entsprechend hoch läuft würde dann der Eventtimer dann entsprechend oft gesetzt.

Aber ist das ein elegantes Vorgehen oder gibts eine bessere Möglichkeit ?

Ich würde zwei Script Timer aufs selbe Script setzen und entsprechend auswerten, welcher Timer gestartet wird.
Pseudocode:


wenn ausgelöst durch irgendein timerEvent{
  switch TimerID{
    5minTimer {
        schalteKnxEin();
    }
    "20"minTimer{
        schalteKnxAus();
        schalte"20"minTimerAus();
        schalte5minTimerAus();
    }
 }
}else (ausgelöst durch extern "starte Bewässerung"){
    setze"20"minTimerAuf(externeZeit - z.B. aus IPSvariable);
    starte"20"minTimer();
    starte5minTimer();
}

Es hat den großen Vorteil, daß die Ventile automatisch per KNX schliessen, auch wenn IPS tot ist.

Schöner wäre natürlich ein Aktor, wo man die Nachlaufzeit per KO setzen kann.

Mir fällt gerade noch ein: Manche Aktoren können auch eine Ausschaltverzögerung, bei der ggf. im Gegensatz zur Treppenhausfunktion der Wert extern vorgegeben werden kann. Dann muss man halt beim Einschalten sofort den Ausschaltbefehl hinterher senden.

Danke für die Antworten.

Ich habe wie ich in meinem zweiten Post geschrieben habe etwas mit der Anzahl der Durchläufe experimentiert aber ohne Erfolg.

@tobiasr: So ganz habe ich dein Idee noch nicht verstanden muss ich zugeben.

Mir fehlt was das Timerevent angeht noch Hintergrundwissen:

Wenn ich ein Timerevent setze:

z.b

IPS_SetScriptTimer($_IPS['SELF'], $Eventzeit)

Was passiert dann genau?

Ich bin immernoch meinen alten Basic Kenntnissen verhaftet, bei dem quasi jede Zeile nach und nach abgearbeitet wird.
Demnach würde beim o.g Setzen das Script an dieser Stelle stehen bleiben und warten bis das ganze abgelaufen ist, bzw dann an der Stelle weiter laufen.
So ist es aber wohl nicht, sondern die Zeit wird quasi gesetzt und anschließend das Script beendet um bei Ablauf der Zeit neu gestartet zu werden ???

Kann ich irgendwie abfragen (in einem anderen Script) ob der Scripttimer am laufen ist ?
Ich habe nochmal in der ETS am Aktor geschaut. Dieser gibt auch einen Vorwarnung vor dem Schliessen auf einer separaten GA aus.

Ich könnte doch einen Scripttimer in meinem eigentliches Bewässerungs-Script über die gesamte Zeit (20min) setzen und ein zweites ausgelöstes Script anhand der Vorwarn GA starten. In diesem Script wird dann abgefragt ob der Scripttimer des Bewässerungsscriptes aktiv ist und retriggert nur einmalig das Ventil.

Im Bewässerungsscript sind dann alle anderen Dinge wie Traffo einschalten etc und halt auch das Timerevent.

Gruss und Danke für Eure Hilfe

Also ich habe es nach den im letzten Post hin bekommen.
Ob das eine elegante Weise in der Skriptprogrammierung ist kann ich nicht beurteilen. Aber um den Threat abzuschliessen und evtl. als Vorlage bzw. Idee für andere poste ich mal die Scripte:

Ich habe aus KNX (vom Schaltaktoren) folgende Variabeln/GA´s ins IPS geholt:

  1. Traffo an/aus + RM Adresse
  2. Timer Ansteuerung Magnetventil + RM Adresse
  3. Vorwarnobjekt

In Ips habe ich folgende Variabeln angelegt:

  1. Bewässerung 1 Start (Startet das Bewässerungsscript)
  2. Bewässerung 1 Zeitvorgabe (Zeit für die Bewässerung)
  3. Bewässerung Läuft (Zeigt an ob das Bewässerungsscript läuft)

Ereignis auf Variabel Bewässerung 1 Start „true“ startet das Bewässerungsscript: (siehe Variabel Pkt 4)

 

$Lauf = 40637; // Variabel von Pkt 6
$Zeitvorgabe = Getvalueinteger(34035); // Variabel von Pkt 5
$Timerset= $Zeitvorgabe * 60; 

$BewTraffo = 35200;  //  Instanz siehe Pkt 1

$Magnetventil = 24569;  // Instanz siehe Pkt 2


if($_IPS['SENDER'] == "TimerEvent")
{
   
KNX_WriteDPT1($Magnetventil, false);
KNX_WriteDPT1($BewTraffo, false);
setvalueboolean ($Lauf, false);

    IPS_SetScriptTimer($_IPS['SELF'], 0);
 
} 

else {

setvalueboolean ($Lauf, true);
KNX_WriteDPT1($BewTraffo, true);
KNX_WriteDPT1($Magnetventil, true);
  
IPS_SetScriptTimer($_IPS['SELF'], $Timerset);      
}

Getriggert (bei Änderung) vom Vorwarnobjekt (Variabel aus Pkt 3) startet folgendes „Retrigger“ Script

$ScriptID = 12140; // ScriptID des Bewässerungsscriptes
$Magnetventil = 24569; //(Instanz siehe Pkt 2)

$TimerWert = IPS_GetScriptTimer($ScriptID);  // ermittelt den Wert des ScriptTimers

If ($TimerWert > 1) { 

KNX_WriteDPT1($Magnetventil, true);
}

else {}

So scheints bei mir jetzt zu laufen, werde aber noch intensiver Testen.

Für jedes Magnetventil werde ich nun beide Scripte einfügen. Ich möchte aber als nächstes mit einem weiteren Übergeordnetem Script die Berieselung nacheinander am Stück in einer Ablaufkette starten. Dazu gibt es im Forum ja schon Beispiele. Hierzu mehr nächste Woche

Gruss