BennyS
7. April 2017 um 09:00
#1
Hallo zusammen,
ich möchte gerne mein Flurlicht etwas in „Szene“ setzen und folgendes umsetzen:
Von 00:00 Uhr bis 05:00 Uhr soll bei Bewegung und entsprechender Luminance, das Flurlicht auf 20% schalten.
Nach kurzer Zeit geht das Licht dann wieder auf aus.
Von 05:00 Uhr bis 20:00 Uhr soll bei Bewegung und entsprechender Luminance, das Flurlicht auf 80% schalten.
Nach kurzer Zeit geht das Licht dann wieder auf aus.
Von 20:00 Uhr bis 00:00 Uhr soll bei Bewegung und entsprechender Luminance, das Flurlicht auf 80% schalten.
Nach kurzer Zeit geht das Licht auf 10%.
Nun zu meinem Skript:
<?
$varLuminanceFlureingang = GetValue (51944 /*[Erdgeschoss\Flur\Fibaro Motion Sensor 01 (NodeID 034)\Wert\Luminance]*/);
$varBewegungFlureingang = GetValue (20690 /*[Erdgeschoss\Flur\Fibaro Motion Sensor 01 (NodeID 034)\Status]*/);
$varAktuelleZeit = date("H:i");
echo $varAktuelleZeit."
";
echo $varLuminanceFlureingang;
if ($varLuminanceFlureingang < 220 and $varBewegungFlureingang == true)
{
if
($varAktuelleZeit > "00:00" and $varAktuelleZeit <= "05:00")
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,20);
else
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,0);
}
{
if
($varAktuelleZeit > "05:00" and $varAktuelleZeit <= "20:00")
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,80);
else
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,0);
}
{
if
($varAktuelleZeit > "20:00" and $varAktuelleZeit <= "00:00")
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,80);
else
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,10);
}
?>
Das Skript wird durch ein Event gesteuert, welches es ausführen lässt bei Bewegung.
Es wird kein Fehler beim Ausführen ausgeworfen, aber leider schaltet sich das Flurlicht auch nicht ein.
Fonzo
7. April 2017 um 09:32
#2
Du vergleichst die Uhrzeit hier als String da kannst Du kein größer oder so verwenden das funktioniert nicht. In dem Fall musst Du Integer also den Unixtime nutzten. Date ist nur dazu da um das als Nutzer im normalen Format lesen zu können.
Die Uhrzeit die Du schalten willst kannst Du mit
$currenttime = time();
$value = "2016-12-12T19:33:54"; // Zeitpunkt
$timestamp = strtotime($value); // Timestamp berechnen
berechnen. Den aktuellen Zeitwert $currenttime kannst Du dann auch mit größer und kleiner mit $timestamp vergleichen das ist eine Zahl.
BennyS
7. April 2017 um 17:12
#3
Leider stehe ich auf dem Schlauch…
Was ich verstanden habe ist, dass ich die Zeit als String angegeben habe und so nicht vergleichen kann.
Wie genau kann ich jetzt dein Skript einbinden?
Da du nur ganze Stunden benutzt, kannst du statt
$varAktuelleZeit = date("H:i");
$varAktuelleZeit = date("H");
benutzen.
Das könnte helfen
bumaas
7. April 2017 um 18:17
#5
Hallo BennyS,
grundsätzlich kannst du auch Strings vergleichen. Ist sicherlich auch leichter lesbar
Du solltest aber bei Bedingungen lieber die Operatoren && und || statt and und or verwenden und Klammern setzen. Das ist gebräuchlicher und eindeutiger:
if (($varLuminanceFlureingang < 220) && ($varBewegungFlureingang == true))
Ansonsten müssen nach einer If Bedingung die mehrzeiligen Anweisungen in {} gesetzt werden. Das hast du vergessen. So kann es noch nicht funktionieren
if (Bedingung){
Anweisung;
Anweisung;
} else {
Anweisung;
Anweisung;
}
Gruß
Burkhard
Fonzo
7. April 2017 um 19:19
#6
BennyS:
Was ich verstanden habe ist, dass ich die Zeit als String angegeben habe und so nicht vergleichen kann.
Wie genau kann ich jetzt dein Skript einbinden?
Probier es mal so:
<?
$varLuminanceFlureingang = GetValue (51944 /*[Erdgeschoss\Flur\Fibaro Motion Sensor 01 (NodeID 034)\Wert\Luminance]*/);
$varBewegungFlureingang = GetValue (20690 /*[Erdgeschoss\Flur\Fibaro Motion Sensor 01 (NodeID 034)\Status]*/);
$varAktuelleZeit = time();
// Intervall 1
$startint1 = strtotime("00:00");
$endint1 = strtotime("05:00");
// Intervall 2
$startint2 = strtotime("05:00");
$endint2 = strtotime("20:00");
// Intervall 3
$startint3 = strtotime("20:00");
$endint3 = strtotime("+1 day 00:00");
if ($varLuminanceFlureingang < 220 and $varBewegungFlureingang == true)
{
if($varAktuelleZeit > $startint1 and $varAktuelleZeit <= $endint1)
{
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,20);
}
else
{
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,0);
}
if ($varAktuelleZeit > $startint2 and $varAktuelleZeit <= $endint2)
{
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,80);
}
else
{
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,0);
}
if($varAktuelleZeit > $startint3 and $varAktuelleZeit <= $endint3)
{
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,80);
}
else
{
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,10);
}
}
?>
BennyS
12. April 2017 um 13:56
#7
Danke.
Habe noch ein paar kleine Anpassungen vorgenommen und bspw. die einzelnen Timer und Lichtszenen in separate Skripts ausgelagert.
// Skript wird ausgeführt zum Steuern des Flurlichts zu bestimmten Uhrzeiten und Luminance
<?
$varLuminanceFlureingang = GetValue (51944 /*[Erdgeschoss\Flur\Fibaro Motion Sensor 01 (NodeID 034)\Wert\Luminance]*/); // auslesen der Helligkeit
$varBewegungFlureingang = GetValue (20690 /*[Erdgeschoss\Flur\Fibaro Motion Sensor 01 (NodeID 034)\Status]*/); // auslesen der Bewegung
$varAktuelleZeit = time(); // ermitteln der aktuellen Zeit im Unix-Format
$startint1 = strtotime("00:00"); // Startzeit Intervall 1
$endint1 = strtotime("04:59"); // Endzeit Intervall 1
$startint2 = strtotime("05:00"); // Startzeit Intervall 2
$endint2 = strtotime("19:59"); // Endzeit Intervall 2
$startint3 = strtotime("20:00"); // Startzeit Intervall 3
$endint3 = strtotime("+1 day 00:00"); // Endzeit Intervall 3
echo $varLuminanceFlureingang;
if (($varLuminanceFlureingang <= 20) and ($varBewegungFlureingang === true))
{
{
if (($varAktuelleZeit >= $startint1) and ($varAktuelleZeit <= $endint1)) // Start Intervall 1
IPS_RunScript (51220 /*[Erdgeschoss\Flur\Skripte\Flureingang_Lichtszene\Flureingang_Lichtszene_1]*/); // Skript wird ausgeführt
}
{
if (($varAktuelleZeit >= $startint2) and ($varAktuelleZeit <= $endint2)) // Start Intervall 2
IPS_RunScript (10452 /*[Erdgeschoss\Flur\Skripte\Flureingang_Lichtszene\Flureingang_Lichtszene_2]*/); // Skript wird ausgeführt
}
{
if (($varAktuelleZeit >= $startint3) and ($varAktuelleZeit <= $endint3)) // Start Intervall 3
IPS_RunScript (54976 /*[Erdgeschoss\Flur\Skripte\Flureingang_Lichtszene\Flureingang_Lichtszene_3]*/); // Skript wird ausgeführt
}
}
?>
Ein separates Skript micht Lichtszene sieht dann so aus:
// Skript zum Steuern des Flurlichts zu bestimmten Uhrzeiten und Luminance
<?
if ($_IPS['SENDER'] <> "TimerEvent")
{
IPS_SetScriptTimer($_IPS['SELF'], 120); // Timer mit 120 Sekunden aktivieren
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,20); // Flurlicht wird auf 20% eingeschaltet
}
else
{
IPS_SetScriptTimer($_IPS['SELF'], 0); // Timer deaktivieren
ZW_DimSet (28663 /*[Erdgeschoss\Flur\Qubino Dimmer 01 (NodeID 026)]*/,0); // Flurlicht wird auf 0% geschaltet
}
?>