Ablaufsteuerung Probleme

Hallo, ich hoffe Ihr könnt mir helfen.

Ich habe für meine Beregnungsanlage eine Ablaufsteuerung die bisher funktionierte, seit dem einbau des ESERA Ethernet-Controllers aber Probleme macht.

Das Script sieht so aus:


<?

SetValueInteger(38294 /*[Garten\Wasser\Bewässerung\Regner Hinten\Zähler]*/ , 0);   // Zählervariable setzen

IPS_Sleep(500);

$folge = GetValueInteger(38294 /*[Garten\Wasser\Bewässerung\Regner Hinten\Zähler]*/); // Zählervariable muss vorher angelegt werden
$zeit = GetValueFloat(10123 /*[Garten\Wasser\Bewässerung\Zeitsteuerung\Automatik\Zeit]*/); // Zeitauswahl im WF 0,25-1,5



switch($folge) {

case 0: // *** Ventil 1 einschalten ***
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,3,1); // Pumpe AN
IPS_Sleep(500);
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,1,1); // Ventil 1 AN
SetValueInteger(38294 /*[Garten\Wasser\Bewässerung\Regner Hinten\Zähler]*/ , 1);   // Zählervariable setzen
IPS_SetScriptTimer($IPS_SELF,$zeit *3600);  // Laufzeit (s) für Ventil 1
break;

case 1: // *** Ventil 2 einschalten***
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,3,1); // Pumpe AN
IPS_Sleep(500);
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,1,0); // Ventil 1 AUS
IPS_Sleep(500);
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,2,1); // Ventil 2 AN
SetValueInteger(38294 /*[Garten\Wasser\Bewässerung\Regner Hinten\Zähler]*/ , 2);   // Zählervariable setzen
IPS_SetScriptTimer($IPS_SELF,$zeit *3600);  // Laufzeit (s)  für Ventil 2
break;

case 2: // *** Ventil 2 ausschalten***
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,3,0); // Pumpe AUS
IPS_Sleep(500);
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,1,0); // Ventil 1 AUS
IPS_Sleep(500);
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,2,0); // Ventil 2 AUS
SetValueInteger(38294 /*[Garten\Wasser\Bewässerung\Regner Hinten\Zähler]*/ , 0);   // Zählervariable setzen
IPS_SetScriptTimer($IPS_SELF,0);  // Scripttimer stoppen
break;
}

?>


Das Script wird durch ein Wochenplan-Ereignis aktiviert.

Das Problem sieht so aus:

In der Konsole sieht man auch die Ausgänge von True auf False ständig hin-und-herschalten - am Modul selbst (Esera, 8x Digital Out, 11228) bleiben die Ausgänge aber aktiv.

Gestern Abend wurde die Beregnung aktiviert, blieb aber die ganze Zeit bei Case 1 aktiviert, also lief 8 Stunden durch … :wink: Der Rasen ist dort jetzt wirklich gut gewässert … :slight_smile:

Schalte ich die Pumpe/Ventile manuell, bleibt alles dauerhaft auf „high“.

Hallo Namenloser. :wink:

Kenne den Controller nicht.

[ol]
[li]ist er richtig eingebunden (1-Wire Controller ESERA Modul)[/li][li]würde ich das ganze Script nochmal überdenken (IPS_SLEEP) ist suboptimal)[/li][li]kein Regensensor vorhanden mit Regenmenge[/li][li]wie sieht deine Webfrontsteuerung dafür aus[/li][/ol]

Bei Bedarf, kann ich dir gerne ein Script hierein posten. Muss allerdings angepasst werden.
Wertet Regen und Menge aus. Hand/Automatik Steuerung

Ansonsten wäre auch einige Gedankengänge von dir hilfreich wie Du es dir vorstellst.

Hallo Rainer,
erstmal sorry für den fehlenden Anstand meinen Namen nicht drunterzusetzen.

Zu1: Ja über das Modul eingebunden.
Zu2: IPS_Sleep habe ich erst mit dem Modul eingebunden, vorher als es über das Installations-Script eingebunden war, konnte man super Mehrere Ausgänge sehr zuverlässig über „RegVar…Set,owd,outh“ gleichzeitig setzen, da brauchte ich kein sleep. Wenn man diese Funktion jetzt nutzt (CSCK_Send… Set,owd,outh) kann man in den Meldungen sehen, wie er jeden Befehl einzeln absendet, und das funktioniert leider nicht zuverlässig, d.h. Befehle werden teilweise „verschluckt“.
Zu3: Regensensor wollte ich nicht, da ich mit dieser „Halbautomatik“ sehr zufrieden bin, und dies auch mehrere Jahre mit dem blauen USB-1wire-Stick einwandfrei funktionierte.
Zu3:

Liebe Grüße Timmy

Hallo Timmy,

ok. Alles kein Problem.

Wie setzt Du die Zählvariable?

Anderts gefragt. Du setzt bei jedem Scriptaufruf deine Zählvariable auf 0…wartest einen Moment und holst dir die gesetzte 0 wieder.
Jetzt kommt case: Ausführung mit 0…Scripttimer…Ablauf…Neustart Script…mit 0 ?

Hallo Rainer,
ja das hab ich dann auch gemerkt … :wink: Das war schon mal der Grund warum die Bewässerung lief ohne zu stoppen, blieb halt immer im Case0 gefangen …

Die Zeile ist wieder raus.

Heute morgen dann leider wieder: Um 23 Uhr wurde für 1 Stunde nur das eine Ventil angesteuert (Case1),
es gibt aber nichts in meiner Konfiguration was um 23 Uhr aktiviert wird …
Vorgestern war es auch um 23 Uhr - Case0

Hier mal die Bilder dazu (die häufigen Schaltvorgänge am Tag sind Versuche):

Danke das Du Dir die Zeit nimmst …

Timmy

Guten Morgen Timmy,

ich würde dir ja gerne weiter helfen, mir erschliesst sich allerdings immer noch nicht wie und wo die Zählvariable gesetzt wird.
Du hast doch auch 2 Scripts. Was macht das andere?

Mal eine Anregung. Pack alles in ein Script und sichere deine Vorgänge ab.

<?
if($_IPS['SENDER'] == "WebFront")
{
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
}


//if(GetValue(19844 /*[Eltako Enocean\Multisensor\Regensensor]*/)) return;


//$rvt = GetValue(13926 /*[Wetter\Regenvortag]*/);
//$ra = GetValue(23905 /*[Wetter\Liter Heute]*/);
//$niederschlag = $rvt + $ra;


$steuerung = GetValue(54018 /*[Bewässerung\Bewässerung\0-1-2]*/);


if(date("j") % 2 != 0)
{
    $laufzeit = 300;
}
else
{
    $laufzeit = 600;
}


if($steuerung == 3) return;


if(($_IPS['SENDER'] == "WebFront") && ($steuerung == 4))
{
    //HM_WriteValueBoolean(21435 /*[Homematic CCU wired\Aussensteckdose unter Balkon]*/, "STATE", true);
    IPS_SetScriptTimer($_IPS['SELF'], 300);
}


if(($_IPS['SENDER'] == "TimerEvent") && ($steuerung == 4))
{
    if($_IPS['EVENT'] == 24288 /*[Bewässerung\Microdrip\]*/)
    {
       //HM_WriteValueBoolean(21435 /*[Homematic CCU wired\Aussensteckdose unter Balkon]*/, "STATE", false);
       IPS_SetScriptTimer($_IPS['SELF'], 0);
       SetValue(54018 /*[Bewässerung\Bewässerung\0-1-2]*/, 3);
    }
}


if(($_IPS['SENDER'] == "TimerEvent") && ($steuerung == 5))
{
    if($_IPS['EVENT'] == 24288 /*[Bewässerung\Microdrip\]*/)
    {
       //HM_WriteValueBoolean(21435 /*[Homematic CCU wired\Aussensteckdose unter Balkon]*/, "STATE", false);
       SetValue(47391 /*[Bewässerung\Bewässerungslinien\Balkon Hofseite]*/, false);
       IPS_SetScriptTimer($_IPS['SELF'], 0);
    }
   if(($_IPS['EVENT'] == 38642 /*[Bewässerung\Microdrip\]*/) && ($niederschlag <= 2) || ($_IPS['EVENT'] == 59229 /*[Bewässerung\Microdrip\]*/) && ($niederschlag <= 2))
    {
      BewaesserungEin($laufzeit);
      SetValue(47391 /*[Bewässerung\Bewässerungslinien\Balkon Hofseite]*/, true);
      SetValue(23325 /*[Bewässerung\Bewässerungslinien\Letzte Bewässerung]*/, date("d.m.Y H:i:s"));
    }
}


function BewaesserungEin($laufzeit)
{
   //HM_WriteValueBoolean(21435 /*[Homematic CCU wired\Aussensteckdose unter Balkon]*/, "STATE", true);
   IPS_SetScriptTimer($_IPS['SELF'], $laufzeit);
}
?>



Steuerung.PNG

Dein Script mal angepasst. Zählvariable neuer Wert 3…wie auch immer Du diese setzt!

<?
$folge = GetValueInteger(38294 /*[Garten\Wasser\Bewässerung\Regner Hinten\Zähler]*/); // Zählervariable muss vorher angelegt werden
$zeit = GetValueFloat(10123 /*[Garten\Wasser\Bewässerung\Zeitsteuerung\Automatik\Zeit]*/); // Zeitauswahl im WF 0,25-1,5


if($folge == 3) return;


switch($folge) {


case 0: // *** Ventil 1 einschalten ***
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,3,1); // Pumpe AN
IPS_Sleep(500);
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,1,1); // Ventil 1 AN
SetValueInteger(38294 /*[Garten\Wasser\Bewässerung\Regner Hinten\Zähler]*/ , 1);   // Zählervariable setzen
IPS_SetScriptTimer($IPS_SELF,$zeit *3600);  // Laufzeit (s) für Ventil 1
break;


case 1: // *** Ventil 2 einschalten***
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,3,1); // Pumpe AN
IPS_Sleep(500);
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,1,0); // Ventil 1 AUS
IPS_Sleep(500);
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,2,1); // Ventil 2 AN
SetValueInteger(38294 /*[Garten\Wasser\Bewässerung\Regner Hinten\Zähler]*/ , 2);   // Zählervariable setzen
IPS_SetScriptTimer($IPS_SELF,$zeit *3600);  // Laufzeit (s)  für Ventil 2
break;


case 2: // *** Alles Aus!***
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,3,0); // Pumpe AUS
IPS_Sleep(500);
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,1,0); // Ventil 1 AUS
IPS_Sleep(500);
ESERA_SetDigitalOutput(28669 /*[Garten\Wasser\Bewässerung]*/,2,0); // Ventil 2 AUS
SetValueInteger(38294 /*[Garten\Wasser\Bewässerung\Regner Hinten\Zähler]*/ , 3);   // Zählervariable setzen
IPS_SetScriptTimer($IPS_SELF,0);  // Scripttimer stoppen
break;
}


?>

Mit dem anderen Script aktiviere/deaktiviere ich die Zeitplansteuerung.
Habe jetzt damit die Variable(Zähler) mitgesetzt, 0 oder 3.

Ich kriege es nicht hin alles in ein Script zu schreiben, deswegen habe ich meistens mehrere für ein Anliegen …:frowning:

<?

$status = GetValueInteger (37113 /*[Garten\Wasser\Bewässerung\Zeitsteuerung\Automatik]*/);

if ($status == 0)

{

IPS_SetEventActive(16541 /*[Garten\Wasser\Bewässerung\Zeitsteuerung\Automatik\Automatisch\Alle 1 Woche(n) am Sa um 08:01:00]*/, true);
SetValueInteger(37113 /*[Garten\Wasser\Bewässerung\Zeitsteuerung\Automatik]*/, 1); // Zeitplan eingeschaltet
SetValueInteger(38294 /*[Garten\Wasser\Bewässerung\Regner Hinten\Zähler]*/, 0); // Ausführung durch Zeitplan 1x freigegeben

}

if ($status == 1)

{

IPS_SetEventActive(16541 /*[Garten\Wasser\Bewässerung\Zeitsteuerung\Automatik\Automatisch\Alle 1 Woche(n) am Sa um 08:01:00]*/, false);
SetValueInteger(37113 /*[Garten\Wasser\Bewässerung\Zeitsteuerung\Automatik]*/, 0); // Zeitplan ausgeschaltet
SetValueInteger(38294 /*[Garten\Wasser\Bewässerung\Regner Hinten\Zähler]*/, 3); // Erneute Ausführung durch Zeitplan verhindert

}

?>

Timmy

Hallo Timmy,

Ich kriege es nicht hin alles in ein Script zu schreiben, deswegen habe ich meistens mehrere für ein Anliegen …:frowning:

Das ist ja alles kein Problem, dafür hast Du ja sicherlich auch gefragt.

Das Problem, ist nur, das Angaben gemacht werden es hat schon immer funktioniert und man dann ein Script sieht…„WAS NIE funktioniert haben kann“ zumindest nicht so.!

Für mich persönlich, ist immer noch der Weg das Ziel…man kann sich aber auch andere Wege zeigen lassen. Ob man diese dann beschreitet ist jedem selber überlassen.

Als kleiner Tipp für die Zukunft.
Nimm dir ein Blatt Papier…überlege was Du machen willst und male dir den Ablauf auf.

Steuerungstechnisch gibt es 0 und 1 oder 0…1…2. Also entweder Ein oder Aus. Oder Aus…Hand… Automatik
Im Zustand 0 geht gar nix. Zustand…Hand kann ich per Hand bedienen…Automatik über z.B. Timer usw.

Das ganze kann man in einem Script mit einpaar Zeilen Code machen und auch gegenseitig abfragen/verriegeln, wie gewünscht.

Ist halt Steuerung.:slight_smile:

Das ist nicht böse gemeint. Bilder, Script, Profile usw. helfen aber demjenigen der dir helfen will ungemein.

Ps: in der Regel schaltet man erst das Ventil…dann die Pumpe.