Hallo,
ich erhalte die Fehlermeldung „Undefined Variable $IPS_EVENT“ (in Zeile 4) wenn ich folgendes kleines Skript manuell ausführe:
<?
$Uhrzeit = GetValue(13483 /*[HMI_Dashboard\Stunde]*/);
IPS_LogMessage($IPS_SENDER,$IPS_EVENT);
if (($IPS_SENDER == "TimerEvent") and ($IPS_EVENT == "30871"))
{
FS20_SwitchMode(42493 /*[Haus 52A\Garten\SSD_Licht\FS20_Licht]*/ , false); //Gerät ausschalten
}
if (((($Uhrzeit >= "20") and ($Uhrzeit <= "23")) or (($Uhrzeit >= "0") and ($Uhrzeit < "9")) and ($IPS_EVENT == "56457")))
{
FS20_SwitchMode(42493 /*[Haus 52A\Garten\SSD_Licht\FS20_Licht]*/ , false); //Gerät ausschalten
}
?>
Der Code ist nicht sehr schön, es geht mir aber erstmal nur um die Funktion, Schönheit kommt später! ![:wink: :wink:](https://community.symcon.de/images/emoji/win10/wink.png?v=9)
Was soll das Skript tun? Ein Gerät über ein Timer ausschalten (erstes if), oder in der Zeit von 20:00UHR bis 09:00 Uhr) auf eine Änderung einer Variable reagieren und auch ausschalten (zweites if).
IPS_LogMessage dient nur zur Kontrolle, da die zweite if-Bedingung nicht abgearbeitet wird!
Was mache ich Falsch? Wie muß ich die Systemvariable $IPS_EVENT abfragen um die ID des aufrufenden Ereignisses zu ermitteln?
Viele Grüße und Danke schon mal für eure Hilfe
Tommy
ich erhalte die Fehlermeldung „Undefined Variable $IPS_EVENT“ (in Zeile 4) wenn ich folgendes kleines Skript manuell ausführe:
Ist klar, diese ist hier ja nicht definiert, weil nicht durch ein Event sondern manuell gestartet wurde.
Warum brauchst Du die ID überhaupt, die Abfrage nach einem Timeraufruf reicht doch und warum nicht 1 x if?
Machen doch beide das Selbe. Ein or sollte dazu. Wo wird der Timer gesetzt?
Hallo Ferengi-Master,
okay dann ist das klar, dachte nur das die Variable immer (global)verfügbar ist.
die zwei if dienen eigentlich nur der besseren Übersichtlichkeit, da die Zeile sonst zu lang wird.
Der Timer wird als tägliches Ereigniss gestartet und liegt immer außerhalb der Zeitgrenze 20:00Uhr bis 09:00Uhr. In diesem Zeitbereich kommt das Ereigniss von einer Variablen, die von einem Bewegungsmelder gesteuert wird (TrueFalse-Flanke).
Wie kann ich den Zeitbereich besser und einfacher definieren (Mitternachtsgrenze 00:00Uhr)?
Gruß Tommy
if (((($Uhrzeit >= "20") and ($Uhrzeit <= "23")) or (($Uhrzeit >= "0") and ($Uhrzeit < "9"))
Besser so:
$time = time();
$hrs = (integer)date("H", $time);
If($hrs > 19 or $hrs < 9)
{
//was machen
}
Danke, manchmal stehe ich wirklich im Wald und seh die Bäume nicht!
Gruß Tommy (Thomas)