mktime, was mache ich falsch?

Ich habe folgenden Code für eine FS20 Schaltstecksdose in ein script eingefügt.

<?
//IPS;-1;Warmwasserpumpe anschalten;62486;09:45;Warmwasserpumpe_ON;
$timestamp = mktime(9, 45, 0, date(„m“), date(„d“), date(„Y“));
$days = Array(0, 1, 2, 3, 4, 5, 6);
if(in_array(date(„w“), $days) && ($timestamp) && (time() > $timestamp)) {
echo „Timer [Warmwasserpumpe anschalten] Triggered“;
IPS_RunScript(„Warmwasserpumpe_ON“);}
?>

Wenn ich den Trigger auf 60 sek. stelle, schaltet die Pumpe alle 60 sek. an.
Und zwar für 20 sek. ( zum Test)

Eigentlich sollte die Pumpe aber nur um 9:45 Uhr für 20 Sek. anlaufen.

könnt Ihr mir weiterhelfen?

Gruß Willi

Hallo Willi,

warum benutzt Du nicht den Timer-Wizard / F6 ?
Das Skript ist OK!!! nach 9:45 ist die Bedingung „True“ und wird alle 60 Sekunden ausgeführt.

Grus MST

Hallo Willi,

Wenn du dir deine Werte ausgeben läßt, siehst du,
daß dein errechneter Timestamp immer kleiner ist
als die aktuelle Zeit.

 
print "Time() => ".time()." > ".$timestamp." <= errechneter Timestamp<br>";

Das heißt, ab 9.45 wird dieses Skript immer ausgeführt.
Gruß
Kollaps

Das Problem ist, dass ich die Pumpe nur einmal um 9:45 starten möchte und dann wieder z.B. um 11:00 einmal und 17:00 Uhr einmal.
nicht alle 60 sek.

Gruß Willi

Das bedeutet dann, daß
dieses Skript


 
$timestamp = mktime(9, 45, 0, date("m"), date("d"), date("Y"));

$days = Array(0, 1, 2, 3, 4, 5, 6);

if(in_array(date("w"), $days) && ($timestamp) && (time() > $timestamp)) {
  echo "Timer [Warmwasserpumpe anschalten] Triggered";
  IPS_RunScript("Warmwasserpumpe_ON");
}
  

alle 60 Sekunden ausgeführt wird. Oder?
Dann mußt du deine if schleife halt begrenzen auf einen Zeitraum!

 
 

//IPS;-1;Warmwasserpumpe anschalten;62486;09:45;Warmwasserpumpe_ON;
$timestamp = mktime(9, 45, 0, date("m"), date("d"), date("Y"));
$timestamp_1 = mktime(9, 46, 0, date("m"), date("d"), date("Y"));

$days = Array(0, 1, 2, 3, 4, 5, 6);
if(in_array(date("w"), $days) && ($timestamp) && (time() > $timestamp) && time() < $timestamp_1) {
echo "Timer [Warmwasserpumpe anschalten] Triggered";
IPS_RunScript("Warmwasserpumpe_ON");}
?>

 

Jetzt hat dein Script 1 Minute Zeit ausgeführt zu werden.
In diesem Zeitraum muß es natürlich auch mal aufgerufen werden.

Gruß
Kollaps

Ich habe deinen Code mit der Schleife eingebaut.
Wenn ich nun das Script manuell Starte, geht die Pumpe ein, obwohl der Start
außerhalb des Zeitbereiches ist.

Nochne Frage :confused:

Wie Starte ich das Script einmalig?
Wenn ich ja den Triggeret mit 60 sek. nehem, startet mir die Pumpe wieder alle 60 sek.

Sorry, aber ich habe noch sehr wenig Ahnung von PHP und tue mir im Moment noch sehr Schwer damit.

Ich hoffe das sich das bald ändert :rolleyes:

Gruß Willi

Hallo Willi,

wenn Du Dich strickt weigerst den Wizard zu benutzen, sollest Du Dir wenigstens mal
ansehen wie es dort gemacht ist:

//Write back new LastTimer Value
SetValueInteger(„LastTimer“, time());

dass macht „das Script einmalig“ – der Wert ändert sich bei jedem Durchlauf.

Gruß MST

ich hab mir das nochmal angesehn.
Probiers jetzt mal.
Du mußt aber zuvor eine Variable anlegen mit dem Namen „wasserpumpe_lauf“ und als Typ „Integer“.

 
<?
/*
*******************************
IP-SYNCOM Event Scripting
*******************************
*/
//File: Zeitsteuerung.ips.php
 
## Aktuelle Zeit
$aktuelle_zeit = time();
## Letzter Lauf der Pumpe
$pumpe_lauf = GetValueInteger("wasserpumpe_lauf");
## 1. Startseit
$time_beginn[] = mktime(9, 45, 0, date("m"), date("d"), date("Y"));
## 2. Startseit
$time_beginn[] = mktime(11, 45, 0, date("m"), date("d"), date("Y"));
## 3. Startseit
$time_beginn[] = mktime(12, 05, 0, date("m"), date("d"), date("Y"));
 
$days = Array(0, 1, 2, 3, 4, 5, 6);
 
foreach ( $time_beginn as $schluessel => $timer_beginn_wert) {
if(in_array(date("w"), $days) && ($aktuelle_zeit >= $timer_beginn_wert) && $timer_beginn_wert > $pumpe_lauf ) {
echo "Timer [Warmwasserpumpe anschalten] Triggered";
IPS_RunScript("Warmwasserpumpe_ON");
SetValueInteger("wasserpumpe_lauf", time());
}
}
?>
 

In diesem Script kannst du soviel Startzeiten deiner Pumpe angeben, wie du willst. Einfach einen neuen Eintrag hinzufügen!

 
## 3. Startseit
$time_beginn[] = mktime(12, 05, 0, date("m"), date("d"), date("Y"));

Gruß
Kollaps

Hallo Steiner,
ich habe den Wizzard benutzt und das script mit der Schleife von Kollaps eingebaut.
Es funtzt :o
Wahrscheinlich hats am
&Lasttimer=GetValueInteger(„LastTimer“);
gelegen.

Hallo Kollaps
Suuupeeeer Script
Funtzt einwandfrei :smiley:

vielen Dank an Alle

… Gott sei Dank :slight_smile:

MST

Jeder hat mal klein angefangen :o

Willi