Frage zur Funktion "IsTimeBetween"

Hallo,
Ich wollte mir einen Timer programmieren, der die Weihnachsbeleuchtung zwischen 2 bestimmten Uhrzeiten einschaltet.
Dazu habe ich einen Timer erstellt und das Script mit der Funktion „IsTimeBetween“ wurde automatisch generiert. Wenn ich dieses Script jedoch manuell starte, kommt die folgende Fehlermeldung:

<br />
<b>Fatal error</b>:  Call to undefined function IsTimeBetween() in
<b>D:\Programme\IP-Symcon\scripts\.currentscript</b>
on line <b>13</b><br />

was mache ich da falsch, bzw. wie kann ich diese Funktion einbinden?
verwirrte Grüße
Thorsten :confused:

moin…

wie waere es, wenn du das script dazu auch posten würdest?
weil imo waeren es alles spekulationen…

So wies aussieht, hast du die funktion istimebetween gar nicht erstellt…

das ergab bei mir mal ein kurzes google:

function isTimeBetween($time1, $time2) {
if(!($lowerBound = date(‚U‘, $time1)) { return false; }
if(!($upperBound = date(‚U‘, $time2)) { return false; }
$curTime = mktime();
if($curTime > $lowerBound && $curTime < $upperBound) {
return true;
} else { return false; }
}

habs jetzt nicht getestet, aber bei deiner fehlermeldung, schaetze ich mal, versuchst du nur die funktion aufzurufen und hast diese nicht definiert!

Hallo,
hier mal das Script:

$InputTime=IsTimeBetween(strtotime("16:00"), strtotime("22:30"));
if($InputTime) { FS20_SwitchMode(58646, TRUE); } else { FS20_SwitchMode(58646, FALSE); }

Abgeleitet habe ich das aus dem mit dem Macroeditor erstellten Script (welches auch nicht läuft):

 IP-SYMCON Event Scripting
*******************************
THIS IS AN AUTOMATIC GENERATED SCRIPT
DO NOT CHANGE ANYTHING OR IT MAY MALFUNCTION
*******************************
File     : Unknown
Trigger  : 
Interval : None
*/

//THIS SCRIPT MAY ONLY BE TRIGGERED BY A VARIABLE
if($IPS_SENDER != "Variable") { exit; }

function IsTimeBetween($from, $to, $span=-1)
{
   if ($span == -1)
   {
      $span = time();
   }
   if($from > $to)
   {
      $ds = strtotime("00:00:00");
      $de = strtotime("23:59:59");
      return IsTimeBetween($from, $de, $span) || IsTimeBetween($ds, $to, $span);
   } else {
      return ($span >= $from) && ($span <= $to);
   }
}

$InputTime11908016=IsTimeBetween(strtotime("16:00"), strtotime("22:30"));
SetValueBoolean("Funksteckdose_Weihnachtsstern.Status", $InputTime11908016);

Also ohne die Funktion geht da nix. Sag mal hast Du V1 oder V2. Ich denke das Problem geht einfacher zu lösen.

Hmm, mach es mal so.

 IP-SYMCON Event Scripting 
******************************* 
THIS IS AN AUTOMATIC GENERATED SCRIPT 
DO NOT CHANGE ANYTHING OR IT MAY MALFUNCTION 
******************************* 
File     : Unknown 
Trigger  :  
Interval : None 
*/ 
 
//THIS SCRIPT MAY ONLY BE TRIGGERED BY A VARIABLE 
if($IPS_SENDER != "Variable") 
return; 
 
function IsTimeBetween($from, $to, $span=-1) 
{ 
   if ($span == -1) 
   { 
      $span = time(); 
   } 
   if($from > $to) 
   { 
      $ds = strtotime("00:00:00"); 
      $de = strtotime("23:59:59"); 
      return IsTimeBetween($from, $de, $span) || IsTimeBetween($ds, $to, $span); 
   } else { 
      return ($span >= $from) && ($span <= $to); 
   } 
} 
 
$InputTime11908016=IsTimeBetween;
SetValueBoolean("Funksteckdose_Weihnachtsstern.Status", $InputTime11908016);  

Die entsprechenden Zeiten in der Funktion einsetzen !!!

@ferengi-master:
ich arbeite mit V1

@RWN
ich bekomme leider die folgende Fehlermeldung:

<br />
<b>Parse error</b>: parse error, unexpected T_STRING in <b>D:\Programme\IP-Symcon\scripts.currentscript</b> on line <b>38</b><br />

Zeile 38:

SetValueBoolean("Funksteckdose_Weihnachtsstern.Status", $InputTime11908016);

Gruß und viele Dank für Eure Antworten
Thorsten

Hallo Thorsten,

nicht das wir uns falsch verstehen.

Time in/out steht in der Funktion IsTimeBetween,.

Hallo Rainer,
um

SetValueBoolean("Funksteckdose_Weihnachtsstern.Status", $InputTime11908016);

auszuführen müsste „$InputTime11908016“ doch einen Boolschen Wert enthalten, oder?
Ich vermute aber aufgrund der Fehlermeldung, dass die Funktion „IsTimeBetween“ einen String zurückliefert. Die Funktion habe ich aus Deinem obigen Beitrag kopiert.

Gruß
Thorsten

So müßte es gehen.
Für „Script“ den Namen des Scripts eintragen.



 $an_h = 16;
 $an_min = 00;
 
 $aus_h = 22;
 $aus_min = 30;

 $timer_wert = IPS_GetScriptTimer("Script");  //prüfen ob Timer aktiv
 if($timer_wert != 0)
 {
   //Timer aktiv
 }
 else
 {
   IPS_SetScriptTimer("Script",60); //Timer jede Minute starten
 }

 $time = time();
 $hrs = (integer)date("H", $time);
 $min = (integer)date("i", $time);

 if ($hrs == $an_h and $min == $an_min)
 {
   //hier anschalten
 }
 
 if ($hrs == $aus_h and $min == $aus_min)
 {
   //hier ausschalten
 }


Ist zwar nicht ganz so Galant wie mit einer Funktion, aber das Script ist noch für viele Zeitsteuerungsaufgaben zu gebrauchen.:wink:

Ich wollte mir einen Timer programmieren, der die Weihnachsbeleuchtung zwischen 2 bestimmten Uhrzeiten einschaltet.

Das hab ich übersehen und noch mehr :frowning:

Ich dachte…aber das denken soll man…

Thorsten wir bekommen das schon hin.

Da Thomas da kompetender ist wie ich, geb ich mal an ihn ab.

Hallo Thorsten,

bevor wir uns hier in Details verlieren…

Vergiss erst einmal die IsTimeBetween() Funktion. Du solltest vorher immer erst eine genaue Vorstellung vom Ablauf Deines Skripts erlangen.

Natürlich gehst Du davon aus, dass Deine Lampe im Zeitraum von X bis Y eingeschaltet sein soll. Dieser Bereich ist ein Zeitraum. Jetzt ist die Frage: Soll in diesem Zeitraum etwas geschehen, im Sinne von: soll sich etwas ändern?

Natürlich nicht! Es soll sich nur am Beginn und am Ende des Zeitraums etwas ändern (EIN- und AUS-schalten).

Dein Skript muss sich also nicht mit einem Zeitraum sondern mit zwei Zeitpunkten (Terminen) befassen!

Der Ablauf sieht ungefähr so aus:

  1. Zeitpunkt 1: Lampe einschalten
  2. Zeitpunkt 2: Lampe ausschalten
  3. Ablauf täglich wiederholen

Für diesen Zweck ist der Scheduler (TWZ, Timer Wizard) bestens geeignet. Du erreichst ihn in der V1 mit der Taste F6.
Hier kannst Du eintragen wann welches Skript getriggert werden soll.

Die beiden Skripts tun nichts anderes, als die Lampe ein- und wieder auszuschalten. Es handelt sich dabei um zwei simple Einzeiler.

Alle anderen hier vorgestellten Lösungen sind nur Verschwendung von Rechenzeit. :rolleyes:

Gruß
HJH

@ Rainer,
ein paar Kleinigkeiten habe ich noch geändert, aber es läuft jetzt" :smiley:

hier das Script mit der Funktion:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Funksteckdose_Weihnachtsstern.ips.php
Trigger  : 
Interval : 
*/



function IsTimeBetween($from, $to, $span=-1)
{
   if ($span == -1)
   {
      $span = time();
   }
   if($from > $to)
   {
      $ds = strtotime("00:00:00");
      $de = strtotime("23:59:59");
      return IsTimeBetween($from, $de, $span) || IsTimeBetween($ds, $to, $span);
   } else {
      return ($span >= $from) && ($span <= $to);
   }
}

$InputTime11908016=IsTimeBetween(strtotime("16:30:00"),strtotime("22:59:59"),$span=-1);


FS20_SwitchMode(58646,$InputTime11908016);
?>

das

if($IPS_SENDER != "Variable") 
return; 

habe ich entfernt unddie Funktion mit den Zeiten und dem $span=-1 aufgerufen.
Vielen Dank!!!

@Thomas
Viele Dank auch für Dein Script, ich habe es gerade auch ausprobiert und es läuft ebenfalls einwandfrei. Vielen Dank!!!
Jetzt habe ich also die Qual der Wahl welches Script ich laufen lasse:D

Viele Grüße
Thorsten

Alle anderen hier vorgestellten Lösungen sind nur Verschwendung von Rechenzeit

Natürlich ist nur für das ein und auschalten einer Lampe mein Script zu viel des guten. Da hat HJH natürlich Recht und der Timer Wizard ist da genau richtig, aber ich hatte auch geschrieben:

…aber das Script ist noch für viele Zeitsteuerungsaufgaben zu gebrauchen.

Und das sollte durchaus nur eine Anregung für weitere Schaltaufgaben sein.:wink:

Im Übrigen macht der Timer Wizard nix anderes als jede Minute zu prüfen ob ein Event anliegt. Und das braucht auch Rechenzeit.:slight_smile:

Hallo Thomas,

Im Übrigen macht der Timer Wizard nix anderes als jede Minute zu prüfen ob ein Event anliegt. Und das braucht auch Rechenzeit.

da hast Du natürlich Recht. Aber diese Rechenzeit verbraucht er auch dann, wenn man ihn nicht nutzt, also ist es besser ihn zu nutzen (zumindest in diesem Fall).

Gruß
HJH

Stimmt.:wink: Ich bastle aber so gern selber mit Scripten, da lernt man mehr dabei. Ach wie ich dieses Formum liebe. (Hoffentlich liest das meine Frau nicht…)

Ja…hab mich wieder verleiten lassen.

HJH hat natürlich recht, nichts anderes mach ich auch in der V1 zu unterschiedlichen Zeiten. Viele Wege führen nach Rom.

Thorsten schön das es läuft , wenn auch umständlich :slight_smile:

@HJH
Danke für Deinen Hinweis!
Mal sehen wie ich es letztlich mache. Aber gelernt habe ich durch die Aktion heute abend auf alle Fälle einiges. Danke!

Gruß
Thorsten

Naja, bei V1 würd ichs auch über den TimerWizard machen… ist die sauberste lösung, meiner meinung nach…
Hatte ich gar nimmer dran gedacht, liegt wohl an der V2, mit der ich schon „soooo“ lange arbeite ^^

so, und weitermachen…
ginge auch im timer über einen script alla if/else …