Flurlicht schalten mit Piri und Dämmerungssensor

Hallo IPSler,

möchte mein Flurlicht einschalten lassen, wenn der Dämmerungssensor sagt es ist dunkel und der Piri eine Bewegung registriert. Natürlich soll das licht nach 2 min wieder ausgeschaltet werden und der Piri Status auf false gesetzt werden. Das Script soll dazu dienen, das ich nicht immer Nachts aufstehen muss, wenn meine kleinen Nachts auf die Toilette müssen.

Habe also versucht ein Script zu schreiben. :confused: Bitte nicht lachen. Ist warscheinlich ein absolutes Chaos für PHP Freaks. :eek: :eek: Habe es also wie folgt probiert.

File : flurlicht.ips.php
Trigger : flurlicht
Interval : 
*/
// Wenn Bewegung im Flur und Dämmerungsssensor Kanal 1 true
// dann Gerät mit der InstanceID 65510 für 2 Minuten
// ( 60 * 2 = 120 ) einschalten
 
$bewegung = GetValueBoolean("piri_flur_1");
$dunkel = GetValueBoolean ("dsensor_1");
 
if ($bewegung == true)
if ($dunkel == true)

echo "Flurlicht an";

{
FS20_SwitchDuration (65510, True, 120);
}
{
if ($bewegung == "TimerEvent")
echo "Flurlicht aus";
IPS_SetScriptTimer ("piri_flur_1" ,0);}
?>

Leider bringt es nicht den gewünschten Erfolg. Entweder ergibt das komplette Sckript keinen Sinn, oder ich habe nur Fehler drin. Könnte eure Hilfe gebrauchen.

Grüße Mirco

Also was mir nun ersteinmal pauschal auffällt… Zähl mal deine Klammern… Das kommt niemals auf. zu jeder Geöffneten gehört eine Geschlossene. Und solche Konstrukte „} {“ geben IMHO niemals sinn…

Und als Tip: Wenn du im IPS oben rechts von deinem Script Execute klickst, steht unten in der Box was du falsch gemacht hat. Die Engine ist zwar nicht allwissend, aber liefert gute Anhaltspunkte…

Dann nochwas: Verwende bitte hier im Forum den kleinen Button wo PHP drauf steht (Im Editor - Erweitert - oben, rechts). Dann kann man auch vernünftig lesen was du schreibst. Würdest du also bitte den Moderatoren die Arbeit abnehmen und deinen Beitrag selbst korrigieren?

Toni

Ok Klammern. Habe das Sckript ein wenig über arbeitet.

File     : nachtschaltung_flurlicht.ips.php
Trigger  : flurlicht
Interval : 
*/
$bewegung = GetValueBoolean("piri_flur_1");
$dunkel = GetValueBoolean ("dsensor_1");

if ($bewegung == true)
    if ($dunkel == true)

   echo "Flurlicht an";
{
FS20_SwitchDuration (65510, True, 120);}

if ($bewegung == "TimerEvent")

echo "Flurlicht aus";
{
IPS_SetScriptTimer ("piri_flur_1" ,0);}
?>

Im Execute Fenster steht leider nichts. :confused:

Gutes oder schlechtes Zeichen?

Grüße Mirco


$bewegung = GetValueBoolean("piri_flur_1"); 
$dunkel = GetValueBoolean ("dsensor_1");

if($IPS_SENDER == "Variable") {
  if ($bewegung && $dunkel)
  {
     echo "Flurlicht an";
     FS20_SwitchDuration (65510, True, 120);
     IPS_SetScriptTimer ("nachtschaltung_flurlicht", 120); 
  } 
} else {
  echo "Flurlicht aus"; 
  IPS_SetScriptTimer ("nachtschaltung_flurlicht" ,0);
  SetValueBoolean("piri_flur_1", false);
} 

So könnte es klappen. Alles ohne Gewähr…

Bachte, dass das Script nur funktioniert, wenn du die Variable änderst… Per Execute wirst du nichts erreichen können.

paresy

Hallo paresy,

habe das Script geändert und werde es heute nacht sehen ob ich liegen bleiben kann, oder ob ich aufstehen muss um das Licht aus zu schalten. :smiley:

Grüße Mirco

@paresy

wie die Variable änder? In was ? :confused:

Mirco

mit SetValueSowiso kannst du variablen ändern. Echo allein macht nix weiter als ne Message beispielsweise zum debuggen (fehlersuchen) rauszuwerfen.

paresy setzt in seinem Script die Piri-Variable zurück auf false. Damit ist sichergestellt, dass es kein Einweg-Script wird. Denn wenn einmal true ist, true bleibt und wieder true kommt kannst du nicht auf eine Änderung reagieren… Klar, oder?

Toni

Klingt logisch. Leider läuft das Script aus unerklärbaren Gründen leider nicht.
Habe die Variablen neu angelegt und es noch einmal probiert. Der Dämmerungssensor steht auf True und der Piri registriert auch eine Bewegung wenn ich durch den Flur gehe. Leider aktiviert sich das Flurlicht nicht.

Hat einer eine Idee? Fehler im Script?

File     : nachtschaltung_flurlicht.ips.php
Trigger  : flurlicht
Interval : 
*/
$bewegung = GetValueBoolean("piri_flur_1");
$dunkel = GetValueBoolean ("dsensor_1");

if($IPS_SENDER == "Variable") {
  if ($bewegung && $dunkel)
  {
     echo "Flurlicht an";
     FS20_SwitchDuration (65510, True, 120);
     IPS_SetScriptTimer ("nachtschaltung_flurlicht", 120);
  }
} else {
  echo "Flurlicht aus";
  IPS_SetScriptTimer ("nachtschaltung_flurlicht" ,0);
  SetValueBoolean("piri_flur_1", false);
}
?>

Hallo Mirco,

schmeiß erstmal : „if($IPS_SENDER == „Variable“) {“ raus und teste mit „Execute“.
und arbeite mit ECHO’s z.B.: echo (int) $dunkel; !!!

MST

PS: (int) damit FALSE als 0 anzezeigt wird - sonst „nuscht nichts“ :rolleyes:

sagt der Dämmerungssensor wirklich TRUE, wenn es Dunkel=kein Licht ist?
Ich kenne das eigentlich nur umgedreht, d.h False wenn Dunkel, True wenn Licht…

Tommi

oder TRUE wenn es dunkel wird:


$lux = GetValueInteger("IN_FS10_Helligkeit");
$flagtag = GetValueBoolean("Flag_Tag");

if (($lux <= 300 ) && ( $flagtag == True)) {
   echo "Es wird Abend";
   SetValueBoolean("Abend", True);
   IPS_RunScript("Abend");
}

sobald es dunkel wird sagt er bei mir true. Er könnte auch False anzeigen. Ich müsste nur den internen Jumper umsetzen. Ist gehopst wie gespungen. Bei mir also true.

Hallo Mirco,

schmeiß erstmal : „if($IPS_SENDER == „Variable“) {“ raus und teste mit „Execute“.
und arbeite mit ECHO’s z.B.: echo (int) $dunkel; !!!

habe ich gemacht. Es kommt immer Licht aus.

Zum verrückt werden.:confused:

Mirco

„Ok Klammern. Habe das Sckript ein wenig über arbeitet.“


File     : nachtschaltung_flurlicht.ips.php
Trigger  : flurlicht
Interval :
*/
$bewegung = GetValueBoolean("piri_flur_1");
$dunkel = GetValueBoolean ("dsensor_1");

if ($bewegung == true)
    if ($dunkel == true)

   echo "Flurlicht an";
{
FS20_SwitchDuration (65510, True, 120);}

if ($bewegung == "TimerEvent")

echo "Flurlicht aus";
{
IPS_SetScriptTimer ("piri_flur_1" ,0);}
?>

… sieht nicht danach aus …

:o

Sorry, altes Script. :o

$bewegung = GetValueBoolean("piri_flur_1");
$dunkel = GetValueBoolean ("dsensor_1");

if($IPS_SENDER == "Variable") {
  if ($bewegung && $dunkel)
  {
     echo "Flurlicht an";
     FS20_SwitchDuration (65510, True, 120);
     IPS_SetScriptTimer ("nachtschaltung_flurlicht", 120);
  }
} else {
  echo "Flurlicht aus";
  IPS_SetScriptTimer ("nachtschaltung_flurlicht" ,0);
  SetValueBoolean("piri_flur_1", false);
}
?>

$bewegung = GetValueBoolean("piri_flur_1");
$dunkel = GetValueBoolean ("dsensor_1");

//if($IPS_SENDER == "Variable") {
  if ($bewegung && $dunkel)  {
     echo "Flurlicht an";
     FS20_SwitchDuration (65510, True, 120);
     IPS_SetScriptTimer ("nachtschaltung_flurlicht", 120);
  }
//} else {
  echo "Flurlicht aus";
  IPS_SetScriptTimer ("nachtschaltung_flurlicht" ,0);
  SetValueBoolean("piri_flur_1", false);
//}
?> 

Ja, so ist es richtig: es kommt so immer: echo „Flurlicht aus“;

Vielleicht ist $bewegung längst wieder FALSE wenn du den Wert abfragst. Mach doch mal ein echo $bewegung vor dem IF…

hab es mal mit

File     : test_piri.ips.php
Trigger  : 
Interval : 
*/
$bewegung = GetValueBoolean("piri_flur_1");
if($bewegung== true)
{
 echo "Flurlicht an";}
 


?>

überprüft. Scheint in Ordnung zu sein.

Mirco

Steiner hat schon recht: es kommt so immer „Flurlicht aus“.

Da Du das else auskommentiert hast, wird der gesamte untere Funktionsblock

//} else { 
  echo "Flurlicht aus"; 
  IPS_SetScriptTimer ("nachtschaltung_flurlicht" ,0); 
  SetValueBoolean("piri_flur_1", false); 

immer abgearbeitet.

Somit kommt immer am Ende „Flurlicht aus“.

Allerdings solltest Du mal alle in der if-Bedingung stehenden Vars mit ausgeben. So mache ich das zu debug-Zwecken auch. Ev. erlebst Du da eine Überraschung… :eek:

Gruß
Fabian

OK. Es geht. War der Meinung es ist egal ob ich dsensor triggere oder piri_flur_1. Dem war nicht so.:o

Danke an alle
Grüße Mirco

… oder probiere mal den IP-Symcon MacroEditor aus …