Aktuelle Zeit überprüfen ob sie in einen Festgelegten Zeitraum liegt

Hallo,

muss doch noch einmal aktiv werden. Die If Abfragen überblicke ich noch nicht in Ihren Auswirkungen…

Mein Problem ist, das die Tür nachts auch mal selbstständig aufgeht, ohne das die Bewegungsmelder Aktivität melden. Das schafft Verunsicherung wenn mann im Bett liegt und denkt " Da kommt jemand :D".

Das Script zum Öffnen wird nur von den beiden Bewegungsmeldern getriggert (wenn die auf True springen).

<?
echo "=============================================================================
";
echo "===== UG Kellertür öffnen  ==================================================
";
echo "=============================================================================
";

 // Trigger einschalten über den BMI UG Treppenhaus bei Variablenänderung
 
 //Fuer Testzwecke koennen Debugausgaben aktiviert werden
 // Debug-Modus an=true / aus=false
 $debug = true;

  // Variablen
 $time = date("H:i");
 $SperrzeitVon = "23:00";
 $SperrzeitBis = "07:45";

 $UgTuerSoftSwitch = GetValue(48725 /*[31 UG Türsteuerung\UG Tür]*/  );
 // $TuerSchalterUG = GetValue(46869 /*[05 LCN\LCN Binäreingänge\B5B7 UG Tür\B5B7 UG Tür]*/  );
 $BmiUgFlur = GetValue(56690 /*[05 LCN\LCN BMIs\M201 UG Kellertür BMI5\M201 UG Kellertür BMI5 Status]*/ );
 $BmiEUgTreppe = GetValue(27206 /*[05 LCN\LCN BMIs\M11 EGUG Treppenhaus BMI5\M11 EGUG Treppenhaus BMI5 Status]*/ );
 
if($debug) {echo " 
";}
if($debug) {echo "time: $time 
";}
if($debug) {echo "SperrzeitVon:  $SperrzeitVon 
";}
if($debug) {echo "SperrzeitBis:  $SperrzeitBis 
";}
if($debug) {echo "UgTuerSoftSwitch:  $UgTuerSoftSwitch 
";}
if($debug) {echo "BmiUgFlur:  $BmiUgFlur 
";}
if($debug) {echo "BmiEUgTreppe:  $BmiEUgTreppe 
";}

if((($time >= $SperrzeitBis) And ($UgTuerSoftSwitch == 0) || ($time <= $SperrzeitVon) && ($UgTuerSoftSwitch == 0)) And (($BmiUgFlur = True) Or ($BmiEUgTreppe = True)))

 	{
	 	// 1. Tür öffnen
	if($debug) {echo "If erfüllt! 
";}
	LCN_SwitchRelay(25703 /*[05 LCN\LCN Relais real\R75S Kellertür]*/ ,true); //Tür öffnen
	$Sender = "UG Tür öffnen";
   $Meldung = "UG Tür geöffnet, UGTürSoftswitch: $UgTuerSoftSwitch, SperrzeitVon:  $SperrzeitVon, SperrzeitBis:  $SperrzeitBis, BmiUgFlur:  $BmiUgFlur, BmiEUgTreppe:  $BmiEUgTreppe";
   ATN_SetValueEreignisListe(51159 /*[00 generische Scripte\Systeminfo v2\SInfo2]*/  ,$Sender,$Meldung); // ID der HTMLVariablen, Sender , Meldung die angezeigt wird

	}
else
if($debug) {echo "Else erfüllt! 
";}
	$Sender = "UG Tür öffnen";
   $Meldung = "UG Tür nicht geöffnet, If Bed. nicht erfüllt! UGTürSoftswitch: $UgTuerSoftSwitch, SperrzeitVon:  $SperrzeitVon, SperrzeitBis:  $SperrzeitBis, BmiUgFlur:  $BmiUgFlur, BmiEUgTreppe:  $BmiEUgTreppe";
   ATN_SetValueEreignisListe(51159 /*[00 generische Scripte\Systeminfo v2\SInfo2]*/  ,$Sender,$Meldung); // ID der HTMLVariablen, Sender , Meldung die angezeigt wird

?>

Ausgabe vom Script:

===== UG Kellertür öffnen ==================================================

time: 10:42
SperrzeitVon: 23:00
SperrzeitBis: 07:45
UgTuerSoftSwitch: 0
BmiUgFlur:
BmiEUgTreppe:
If erfüllt!

Während die Scriptausgabe beim manuellen Aufruf des Scriptes korrekt keine Aktivität bei den Bewegungsmeldern zeigt, ist die Ausgabe im Webfront mit BmiUgFlur = 1 eigentlich falsch.

Darüber hinaus sollte die IF Bedingung nicht erfüllt sein. Bin gerade etwas konfus, wie ich diese Situation eingrenzen kann?

Was meint Ihr,
Gr, Stromer

Fehlt nach dem else nicht ein { und am Ende vom Skript vor ?> ein }

Hallo Smudo,

zufällig hab ich mir gestern auch etwas für diesen Zweck fertig gemacht, da ich so einen Zeitvergleich auch an verschiedenen Stellen mal nutze. Herausgekommen ist folgendes.

gleich in meine Toolsammlung kopiert. Danke. Kann man mit Sicherheit öfters an verschiedenen Stellen brauchen.

Wie kann ich dieses Script erweitern, so dass nur an bestimmten Wochentagen (Mo,Mi,Fr) zwischen Sonnenuntergang und 22:30 Uhr die Hofbeleuchtung (HM Schaltaktor) leuchtet
Danke!

Schau mal hier. Du kannst die Unix-Time time() über date in Wochtagnummern formatiert ausgeben und dann entsprechend auswerten.

Aber wie füge ich den Sonnenuntergang ein? Könntest du evtl. ein Beispiel schrieben? Ich habs nicht so mit php:rolleyes:

Das wäre ein Beispiel.

Da gabs mal was:

Ich habe für Sunrise/sunset folgendes Programm im Einsatz. Hab ich abgekupfert und weiss leider weiss nicht mehr, wer das damals gebaut hat, oder wo es im Forum zu finden ist.

<?
/*
Ich habe daher etwas "gebastelt". Ich setzte mit folgendem Skript täglich das Uhrzeit
von 2 vorhandenen Events neu.
Voraussetzung: 2 Skripte (Sonnenaufgang und -Untergang) mit jeweils einem zyklischen Event
(tägliche Ausführung) sind angelegt. Dieses Skript sollte täglich einmal um kurz
nach Mitternacht laufen:
*/
$longitude = 8.xx; //Gibst Du deine Länge ein 
$latitude = 50.32; //Gibst Du deine Breite ein
$eventId_sunrise = 54557 /*[Sonne\Sunrise-Sunset setzen\SetTag\]*/;
$eventId_sunset = 25109 /*[Sonne\Sunrise-Sunset setzen\SetNacht\]*/;
$SUNRISE_OFFSET = 0;
$SUNSET_OFFSET = 0;


$day_offset = ($SUNRISE_OFFSET+(date("I")*60))/60+1;
$night_offset = ($SUNSET_OFFSET+(date("I")*60))/60+1;

$var_sunrise = date_sunrise(time(), SUNFUNCS_RET_DOUBLE, $latitude, $longitude, 90, $day_offset);
$var_sunrise = $var_sunrise * 3600; // In Sekunden seit Mitternacht umrechnen
// Aktuelles Datum hinzuaddieren
$var_sunrise = $var_sunrise + mktime(0, 0, 0, idate("m"), idate("d"), idate("Y"));

$var_sunset = date_sunset(time(), SUNFUNCS_RET_DOUBLE, $latitude, $longitude, 90, $night_offset);
$var_sunset = $var_sunset * 3600; // In Sekunden seit Mitternacht umrechnen
// Aktuelles Datum hinzuaddieren
$var_sunset = $var_sunset + mktime(0, 0, 0, idate("m"), idate("d"), idate("Y"));

// Uhrzeit der Events aktualisieren
IPS_SetEventCyclicTimeBounds($eventId_sunrise, $var_sunrise, 0);
IPS_SetEventCyclicTimeBounds($eventId_sunset, $var_sunset, 0);
SetValueString(57175 /*[Sonne\Sunset]*/, date("H:i",$var_sunset)); //als String z.B. 20:14
SetValue(50866 /*[Sonne\SunsetInt]*/, $var_sunset); //Falls als Integer gebraucht wird
SetValueString(14654 /*[Sonne\Sunrise]*/, date("H:i",$var_sunrise));
?>

Dann musst Du dein Programm etwa so aufbauen:

<?
 $time = date("H:i");
 $tagw = date("w") ;

$sunset = GetValue(57175 /*[Sonne\Sunset]*/);   //ID aus deinem Astro-Script übernehmen
 //$sunset = date("H:i", (GetValue(50866 /*[Sonne\SunsetInt]*/)+30*60));  //30 min nach Sunset
//$sunset = "15:35"; //Test
// echo $sunset . "
";

if( ($tagw >= 2) && ($tagw <= 6) && ($time <= "22:00") && ($time >= $sunset))
                                    // Mittwoch bis Freitag, 16:00 bis Sonnenuntergang
{
   echo "Trifft zu";
}
else
{echo "Trifft nicht zu";}

?>