Seit dem 5.12 schaltet er nicht mehr, finde aber den Fehler in Bezug auf „<=06.01.“ nicht.
Wo denke ich bei den Datumangaben falsch?
<?
/*
IP-SYMCON Event Scripting
File : Weihnachtsbeleuchtung_Schaltuhr.ips.php
Trigger : Läuft zwischen dem 1.Advent und 6.1 eines Jahres
Schaltzeiten: Vorgegebene Uhrzeit bis Sonnenaufgang
und Sonnenuntergang bis zur vorgegebenen Uhrzeit.
Interval :
*/
$einschaltzeit = „07:00“; //Uhrzeit wann Lichter Morgens angehen sollen immer mit führender 0 und :
$ausschaltzeit = „22:00“; //Uhrzeit wann Lichter Abends ausgehen sollen immer mit :
//Ab hier nichts mehr ändern
$sunrise = GetValueString(„Sonnenaufgang“);
$sunset = GetValueString(„Sonnenuntergang“);
$jahr = date(„Y“);
$Advent = date(‚d.m.Y‘, mktime(0, 0, 0, 11, 26+(7-date(‚w‘, mktime(0, 0, 0, 11, 26, $jahr))), $jahr));
If (((date(„d.m.Y“) >= $Advent) and (date(„d.m.“) <= „06.01.“))
and (((date(„H:i“) >= $einschaltzeit) and (date(„H:i“) < $sunrise))
or ((date(„H:i“) > $sunset) and (date(„H:i“) < $ausschaltzeit))))
{
SetValueBoolean(„Weihnachtsbeleuchtung_Schaltuhr_Flag“, true);
echo "Weihnachtsbeleuchtung an
";
TMEX_F29_SetPin(35787, 7, false);
} else {
SetValueBoolean(„Weihnachtsbeleuchtung_Schaltuhr_Flag“, false);
echo "Weihnachtsbeleuchtung aus
";
TMEX_F29_SetPin(35787, 7, true);
}
echo "sunrise = „.$sunrise.“
";
echo "sunset = „.$sunset.“
";
echo "1. Advent = „.$Advent.“
";
echo date ( 'd.m.Y - ');
echo date ( ‚H:i‘);
Du kannst ein Datum schon als String vergleichen, nur ist das Ergebnis anders als erwartet.
Beim Stringvergleich wird die lexikographische Ordnung angewendet, d.h. Zeichen für Zeichen von links verglichen.
Also ist 05.12. < 06.01.
Aber 06.12. > 06.01
Besser Paresys Tipp beherzigen und Zeitstempel statt Strings vergleichen.
Das Skript ist ein bisschen knifflig, weil es über den Jahreswechsel geht. Ab 01.01. wird etwas anderes schieflaufen, dann berechnet es nämlich $advent für das neue Jahr und somit ist das aktuelle Datum < $advent. Du solltest die beiden Datumsvergleiche mit „oder“ verknüpfen;).
Wodurch wird das Skript getriggert und wie häufig passiert das? Mir ist noch aufgefallen, dass du dann jedesmal deinen Aktor schaltest, ist aber möglicherweise egal. Eigentlich musst du ja nur morgens und abends jeweils einmal ein- bzw. ausschalten.
Danke für das fertige Script, ich hatte gestern Abend schon nach paresy Hinweis angefangen umzuschreiben.
Aber der Hinweis auf mktime fehlte mir erst noch, damit spart man einige Zeilen.
docM’s Version ist natürlich noch viel kürzer als mein Gestammel,
durch die Raffung bin ich erst auf die Kürzungsmöglichkeiten gekommen.
Danke!
Ich hoffe ich kann das bei meinen Versuchen als Lernstoff einfließen lassen.