Wie kann ich Uhrzeiten vergleichen?

wenn du mitteilst, was nicht funktioniert, könnte man evtl. helfen

:wink:

vielleicht noch ein Tipp zur Fehlersuche: lass dir im Script die Werte der Variablen per echo oder print_r() ausgeben. So kannst du überprüfen, ob Deine Annahmen stimmen. Das hilft sehr , man erlebt hier durchaus die ein oder andere Überaschung

hei raketenschnecke,
der tipp mit echo is echt genial. jetzt seh ich entlich was da so drin steht.:slight_smile:

der fehler: also das problem ist, ich weis nicht wie ich eine Uhrzeit („18:00“) in eine Varieble ($nach6) bekomme um sie mit der aktuellen zeit ($time = date(„H:i“) oder $time = time() ) zu vergleichen.:confused:

jetzt kann ich dir grad nicht folgen :wink:

du hast doch oben im Script schon eine Zuweisung vorgenommen. In den Vars müssten doch jetzt die Unix-Timestamps drinstehen?!

oder erwartest du hier „nur“ die Uhrzeit (z.b. 2345)?

Hab wohl den Kasten Bier auch auf die leitung gestellt wo ich drauf steh.:smiley:

also in meinem ersten script oben, kann ich da denn $nach6 = („18:00“) mit $time = („H:i“) so vergleichen oder is des schon total falsch?

wenn du in diesem Falle nur vergleichen (und nicht rechnen) willst, solltest du Integer-Werte nehmen:

$nach6 = 1800;          // Timestamp "ab..."
$time = date("Hi", time());   // Uhrzeit jetzt

Dennoch ist ein UNIX-Timestamp immer vorzuziehen

@basti

Im Prinzip war Dein Code im 1. Post auch bereits in Ordnung, viele Wege führen nach Rom - auch „String“ Vergleiche von Uhrzeiten


	$time        = date('H:i');
	$tueroeffner = true;
	$nach6       = '18:00';
	$vor8        = '08:00';
	if ($tueroeffner == true and ($time >= $nach6 or  $time <= $vor8)) {
	   echo 'Action ...';
	}

Wodurch wird denn der Code ausgeführt?

Log Meldungen helfen in so einem Fall auch immer mal …

so :slight_smile: harter kampf aber es sieht schon recht gut aus.
hab sehr viel dazugelernt heute. :o

nur der homematic aktor lässt sich noch nicht an steuern.
aber jetzt brauch ich erst mal ne portion schlaf.

vielen dank an euch alle, es ist schön zu merken das es hier so viele hilfsbereite leute giebt.

@Brownson: das script startet sobald eine variablenänderung am türöffner vorliegt
Log Meldungen weis ich leider nicht wo ich bruchbare finde

die fehlermeldung für Line 12 sagt, dass dein HM-Steuerbefehl noch nicht richtig ist.
versuchs mal damit:

HM_WriteValueBoolean(44311, "STATE", true);

vielen dank jetzt funktioniert es:)

so hier noch einmal mein fertiges script

<?

// Treppenhauslicht geht Abends mit an wenn der Türöffner betätigt wird

$time = date("H:i");//Aktuelle Uhrzeit
$tueroeffner = getvalue(30649);
$nach6 = date("18:00");//ab 18:00 Uhr
$vor8 = date("08:00");//bis 8:00 Uhr


if      (($tueroeffner == true) and (($time >= $nach6) or ($time <= $vor8)))
	  
{
 HM_WriteValueBoolean(44311 , "STATE", true);
 sleep (120);//Zeit in sekunden wie lange das Treppenhauslicht an bleiben soll
 HM_WriteValueBoolean(44311 , "STATE", false);
}


?>

und noch ein dankeschön an alle mitwirkenden;)

prima, schön, dass es funktioniert :wink:

aber hierzu noch eine Anmerkung:

sleep (120);//Zeit in sekunden wie lange das Treppenhauslicht an bleiben soll

das solltest du auf keinen Fall machen. Das führt dazu, dass dieses Script als PHP-Task mindestens 120 Sekunden offen bleibt und erst nach Abarbeitung des Scripts geschlossen wird. Die Anzahl der max. möglichen PHP-Tasks ist aber begrenzt (IPS-Standard = 10). Sind alle 10 möglichen Tasks belegt, wandert der nächste IPS-Scriptaufruf (oder andere PHP-Aktivität) in die Warteschleife - bis wieder ein Task frei wird.
Die Folge ist: Dein System arbeitet die Befehle sehr stark verzögert ab.

Daher sollte man darauf achten, dass die Ressourcen (=PHP-Tasks) möglichst kurzfristig wieder freigegeben werden.
In diesem Fall würde ich dir ein Timer-Event empfehlen, welches nach Ablauf das Script erneut ansteuert.

Achtug bau möglichst keine so langen Sleep Befehle in die Skripte.
Das was Du erreichen willst kannst Du wie folgt eleganter hin bekommen

HM_WriteValueFloat(44311, "ON_TIME",  1200); 
HM_WriteValueBoolean(44311 , "STATE", true); 

Damit steuert der HM Aktor die Einschaltzeit und Dein Skript läuft nur so lange wie nötig.

Edit:

Da war rakete schneller und die Lösung mit dem Timer ist zwar universeller aber bei HM Funkaktoren nicht unbedingt nötig.

oh ja gute tipps danke.

hab den aktor im homematic konfigurator gesagt das er ein treppenhauslicht ist und 2 min an sein soll.
das macht er dann wenn ich direkt den taster drücke. giebt es da auch einen befehl von der ips aus das er des gleiche macht. oder geht des dann nur über „ON_TIME“? giebt es irgend wo eine liste was für befehle ich denn alles so bei homematic ausführen kann?

Genau das macht ON_TIME vor dem Schaltbefehl.
Damit sagst Du dem Aktor wie lange er an bleiben soll.
Geht aber nicht mit den Wired Aktoren soviel ich weiß.

giebt es irgend wo eine liste was für befehle ich denn alles so bei homematic ausführen kann?

http://www.eq-3.de/tl_files/eq3/Downloads_2/PDFs/Dokumentation_und_Tutorials/HM_Script_Teil_4_Datenpunkte_1_503.pdf

Hier findest Du alle möglichen Befehle (Datenpunkte) die der entsprechende Aktor beherrscht.

ihr seit echt spitze so viele gute ideen und tipps, ich habe schon fast keine zeit mehr für meine frau :slight_smile:

wir haben noch gar nicht angefangen :wink:

das wird sich ändern: streiche „fast“ :smiley:

zur not schreib ich mir ein script das mich einmal täglich erinnert " 5 min. um Frau kümmern" :smiley:

für solche User die noch welche haben ist es ähnlich. Bei Anderen ist es dann egal :smiley:

so nun mal ein ende

// Treppenhauslicht geht Abends mit an wenn der Türöffner betätigt wird

$time = date("H:i");//Aktuelle Uhrzeit
$tueroeffner = getvalue(30649 /*[Unsortiertes und im hintergrund arbeitendes	reppenhauslicht\kanal 1 türöffner\STATE]*/ );
$nach6 = date("12:00");//ab 18:00 Uhr
$vor8 = date("08:00");//bis 8:00 Uhr


if      (($tueroeffner == true) and (($time >= $nach6) or ($time <= $vor8)))
	  
{
 HM_WriteValueFloat(44311, "ON_TIME",  120);
 HM_WriteValueBoolean(44311 /*[Unsortiertes und im hintergrund arbeitendes	reppenhauslicht\Treppenhauslicht]*/, "STATE", true);
}

ich hoffe das ich nícht noch etwas übersehen habe, ansonsten soll es so für die nächste zeit so laufen

i mog di :loveips: