Timer, der 3 Stunden läuft, einbauen

Hallo,

Folgendes: Ich möchte gerne 2 Ausgänge meiner Heizungssteuerung UVR1611 auf Hand (ein)schalten. Ich möchte aber, dass diese Ausgänge nach 3 Stunden automatisch wieder auf Auto gestellt werden. Ich mache das alles mit der Snoopy Klasse.

Ich weiß bloß nicht, wie ich diese 3 Stunden hinbekomme?
Kann mir jemand den richtigen Befehl geben?

danke und schönen Gruß
Heiko

<?php
if ($IPS_SENDER == "TimerEvent")
{
     // Automatik deaktivieren
    IPS_SetScriptTimer(0);
}
else
{
    // Automatik wieder aktivieren
    IPS_SetScriptTimer(3*3600);
}
?>

das ging ja schnell.

Dankeschön! Ich werde es gleich ausprobieren

Hallo,

Ich habe eben im IPS Tutorial auch diese Funktion gefunden:

IPS_SetScriptTimer(3*3600); das sagt doch, dass das darauffolgende Skript in 3 Stunden gestartet wird.

Bei mir funktioniert das bloß nicht so einfach…:frowning:
Ich habe zu Beispeilzwecken mal die Zeit auf 60 Sekunden gestellt.

<?
include ‚Snoopy.class.php‘;
$Pumpe1 = GetValueBoolean (55464/[Heizung\UVR1611\UVR_Out_6]/);
$Pumpe2 = GetValueBoolean (52809/[Heizung\UVR1611\UVR_Out_7]/);
If ($Pumpe1 and $Pumpe2)
{
$snoopy = new Snoopy;
//an (Hand on):
$snoopy->fetch(‚http://xxxx.dyndns.org/580600.htm?wA12006=<>‘);
$snoopy->fetch(‚http://xxxx.dyndns.org//580600.htm?t91v03A12006=02‘);

    $snoopy-&gt;fetch('http://xxxx.dyndns.org/580600.htm?wA12007=%3C%3E');
    $snoopy-&gt;fetch('http://xxxx.dyndns.org/580600.htm?t91v03A12007=02');
  print ($snoopy-&gt;results);
  
    IPS_SetScriptTimer('Autoschaltung',60);
  
 }

return;

Im zweiten Skript mit dem Namen Autoschaltung steht dann folgendes

<?
include ‚Snoopy.class.php‘;
{

  $snoopy = new Snoopy;
    //an (Auto):

  $snoopy-&gt;fetch('http://xxxx.dyndns.org/580600.htm?wA12006=%3C%3E');
  $snoopy-&gt;fetch('http://xxxx.dyndns.org/580600.htm?t91v02A12006=03');

  $snoopy-&gt;fetch('http://xxxx.dyndns.org/580600.htm?wA12007=%3C%3E');
  $snoopy-&gt;fetch('http://xxxx.dyndns.org/580600.htm?t91v02A12007=03');

}
return;

das bedeutet doch,dass nach 60 Sekunden das 2te Skript gestartet wird oder? Theoretisch zumindest… oder mache ich etwas grundlegendes falsch?

Ich kam leider nicht ganz mit deiner Hilfe zurecht

Probiers mal mit der ID des Skripts, was du über Timer starten willst:

IPS_SetScriptTimer(12345,60);

Hy, probiere es mal so. Ungetestet.

<?
include 'Snoopy.class.php';
$Pumpe1 = GetValueBoolean (55464/*[Heizung\UVR1611\UVR_Out_6]*/);
$Pumpe2 = GetValueBoolean (52809/*[Heizung\UVR1611\UVR_Out_7]*/);
If ($Pumpe1 and $Pumpe2)
{
$snoopy = new Snoopy;
//an (Hand on):
$snoopy->fetch('http://xxxx.dyndns.org/580600.htm?wA12006=%3C%3E');
$snoopy->fetch('http://xxxx.dyndns.org//580600.htm?t91v03A12006=02');

$snoopy->fetch('http://xxxx.dyndns.org/580600.htm?wA12007=%3C%3E');
$snoopy->fetch('http://xxxx.dyndns.org/580600.htm?t91v03A12007=02');
print ($snoopy->results);

IPS_SetScriptTimer($IPS_SELF, 60);

}
if($IPS_SENDER == "TimerEvent")


{
include 'Snoopy.class.php';

$snoopy = new Snoopy;
//an (Auto):

$snoopy->fetch('http://xxxx.dyndns.org/580600.htm?wA12006=%3C%3E');
$snoopy->fetch('http://xxxx.dyndns.org/580600.htm?t91v02A12006=03');

$snoopy->fetch('http://xxxx.dyndns.org/580600.htm?wA12007=%3C%3E');
$snoopy->fetch('http://xxxx.dyndns.org/580600.htm?t91v02A12007=03');

IPS_SetScriptTimer($IPS_SELF, 0);
}
<?

Hallo bmwm3,
Es funktioniert fast.

leider bekommt das skript es nicht hin, beide Ausgänge von AUTO AUS auf HAND EIN zu schalten. Es bricht nach 30 Sekunden ab. Vielleicht zu viel für den Bootloader-NET? oder könnte man as Problem beheben, indem man sagt, dass der zweite Ausgang 10 Sekunden später geschaltet werden soll?

Ich habe die erste if Bedingung noch so umgeschrieben, dass sie nur anläuft, wenn beide Pumpen aus sind: Also so: If (!$Pumpe1 and !$Pumpe2)

Ich habe es dann mit nur einem Ausgang probiert.
Der Ausgang wird jetzt ordnungsgemäß auf HAND EIN geschaltet. Aber es funktioniert nicht, dass er sich nach der eingestellten zeit automatisch wieder auf AUTO stellt.

Woran es liegt, weiß ich leider nicht…:frowning:

Heiko

Ich habe es jetzt geschafft, dass beide Ausgänge gleichzeitig geschaltet werden. Mit diesem befehl: set_time_limit(60); 30 Sekunden waren wohl zu kurz.

Aber trotzdem werden die Ausgänge nach einer bestimmten Zeit nicht wieder auf Auto geschaltet.

Im Objektbaum entsteht auch nach dem Starten des Skriptes ein Ereignis. Ein Skript Timer, der zyklisch auf die eingestellte Zeit (beispielsweise 60 Sekunden) eingestellt ist. Jetzt startet das Skript alle 60 Sekunden. Theoretsich wird der Timer aber doch am ende mit dem Befehl IPS_SetScriptTimer($IPS_SELF, 0); angehalten. Anscheinend kommt er aber nciht bis dahin, da ja nichteinmal die Augänge wieder auf Auto geschaltet werden
hmmm…bin ratlos

hy,
was passiert denn wenn Du nur das ausführst.

$snoopy = new Snoopy;
//an (Auto):

$snoopy->fetch('http://xxxx.dyndns.org/580600.htm?wA12006=%3C%3E');
$snoopy->fetch('http://xxxx.dyndns.org/580600.htm?t91v02A12006=03');

$snoopy->fetch('http://xxxx.dyndns.org/580600.htm?wA12007=%3C%3E');
$snoopy->fetch('http://xxxx.dyndns.org/580600.htm?t91v02A12007=03'); 

sind die Befehle richtig?

Die Befehle sind richtig. Habs eben ausprobiert.

Das ist doch richtig, dass alles in einem Skript abläuft oder?
Ich frage nur, weil 2 mal die Klasse Snoopy aufgerufen wird…

Probier mal ein wenig mit umstellen.

<? 
include 'Snoopy.class.php'; 
 
 
if($IPS_SENDER == "TimerEvent") 
{ 
   $snoopy = new Snoopy; 
   //an (Auto): 
 
   $snoopy->fetch('http://xxxx.dyndns.org/580600.htm?wA12006=%3C%3E'); 
   $snoopy->fetch('http://xxxx.dyndns.org/580600.htm?t91v02A12006=03'); 
 
   $snoopy->fetch('http://xxxx.dyndns.org/580600.htm?wA12007=%3C%3E'); 
   $snoopy->fetch('http://xxxx.dyndns.org/580600.htm?t91v02A12007=03'); 
 
   IPS_SetScriptTimer($IPS_SELF, 0); 
   return;
} 
 
 
$Pumpe1 = GetValueBoolean (55464/*[Heizung\UVR1611\UVR_Out_6]*/); 
$Pumpe2 = GetValueBoolean (52809/*[Heizung\UVR1611\UVR_Out_7]*/); 
If ($Pumpe1 and $Pumpe2) 
{ 
   $snoopy = new Snoopy; 
   //an (Hand on): 
   $snoopy->fetch('http://xxxx.dyndns.org/580600.htm?wA12006=%3C%3E'); 
   $snoopy->fetch('http://xxxx.dyndns.org//580600.htm?t91v03A12006=02'); 
 
   $snoopy->fetch('http://xxxx.dyndns.org/580600.htm?wA12007=%3C%3E'); 
   $snoopy->fetch('http://xxxx.dyndns.org/580600.htm?t91v03A12007=02'); 
   print ($snoopy->results); 
 
   IPS_SetScriptTimer($IPS_SELF, 60); 
 
} 
<? 

Wichtig hier ist das return; in der Schleife vom Timer_Event damit er das Skript beendet wenn der Timer abgelaufen ist, ansonsten würde er unten wieder die Pumpen überprüfen.

Es funktioniert! Vielen dank für eure Mühe.

Wenn ich das Skript über die Verwaltungskonsole direkt ausführe funktioniert es einwandfrei
Ein Problem tritt aber leider noch auf, wenn ich es über das Webfront starten möchte.

Dort bekomme ich nach ca 20 Sekunden eine Fehlermeldung ( Es ist ein KOmmunikationsproblem aufgetreten. Bitte laden sie die Seite erneut.)
nach weiteren 12 Sekunden kommt diese Fehlermeldung noch einmal.
Ich kann beide Meldungen problemlos wegdrücken und das Skript wird auch ausgeführt.

Aber trotzdem nerven mich diese Meldungen. Kann ich diese irgendwie wegbekommen?

Hallo Heiko,

über dieses Verhalten haben sich bereits mehrere Benutzer unterhalten, denke das ist derzeit ein Problem von WebFront.

@ Heiko:

sieher hier:

Deine Systemlast müsste danach etwas höher sein und die Box etwas träger auf normale Befehle im Webfront reagieren (Schalter an/aus Visualisierung wird z.B. langsamer)

Ich habe dies schon seit der Version 2.1 und leider war ich immer alleine…das ist wohl aktuell nun nicht mehr so…:smiley: :loveips:

Gruss
Bernd