Problem mit if/else Schleife - mittels Aeon Multisensor per Helligkeit steuern

Hallo ich hab ein kleines Verständnisproblem…

meine if/else schleifen sind irgendwie durcheinander :slight_smile:

Ich möchte über einen Aeon Labs Multisensor aussen bei Bewegung einen Fibaro Relay Switch schalten
(daran hängt eine Aussenleuchte).

Da der Aeon Labs auch tagsüber Bewegung meldet, kann ich die beiden nicht in eine Alarmklasse zusammenführen.
D.h. IPS muss anhand eines gewisses Wertes entscheiden ob geschaltet werden darf.

Da der AEON Labs Helligkeit in Lux misst, dachte ich mir ich lasse es auf basis der Helligkeit schalte.

d.h. unter 150 Lux (=Dunkel) darf geschaltet werden…
und ob mein Scripttimer funzt kann ich auch nicht so recht sagen… d.h. nach 4 Minuten = 240 Sekunden solls wieder ausgehen.

hier mein Skript:
In den schleifen passt was nicht… es wird auch tagsüber geschalten:

<?
$bewegung=GetValueBoolean (36209 /*[Haus\Licht\Bewegungsmelder aussen\Data (Boolean)]*/);
$dunkelheit=GetValueInteger(15871 /*[Haus\Licht\Bewegungsmelder aussen\Value\Helligkeit]*/);

// AUf Basis der Helligkeit unter 150 Lx
if ($dunkelheit < 150)
	{
	goto lampe_schalten;
	}
	else
	{
	goto sprung_exit_zu_hell;
	}
lampe_schalten:
if(($IPS_SENDER == "Variable")and($bewegung == TRUE)){
		  IPS_SetScriptTimer($IPS_SELF, 4 * 60);      // 4 Minuten
        ZW_SwitchMode(10762 /*[Haus\Licht\Schalter Aussenlampe]*/, True);
        // echo "Skript ausgefuehrt";
        // Befehle: z.B Licht An
    }else{
		echo "goto sprung_exit1
";
		goto sprung_exit;
}
sprung_exit:
echo "goto sprung_exit2
";
if($IPS_SENDER == "TimerEvent"){
     IPS_SetScriptTimer($IPS_SELF, 0);
     ZW_SwitchMode(10762 /*[Haus\Licht\Schalter Aussenlampe]*/, False);
     // Befehle: z.B Licht Aus
return;

sprung_exit_zu_hell:
echo "goto sprung_exit_zu_hell
";
return;
}
?>

Hallo,

der erste Teil deines Scriptes wird ja gar nicht ausgeführt (Beginnt erst bei „if(($IPS_SENDER…“) wenn ich das richtig sehe.

Du solltes das ganze so gestalten, dass du mit dieser Abrage beginnst, so nach dem Motto:

[ul]
[li]Wenn Bewegung erkannt wird ("…if(($IPS_SENDER…")
[/li][li]dann werte Helligkeit aus,
[/li][li]ist es zu hell
[/li][li]dann mache nix
[/li][li]ist es nicht zu hell
[/li][li]dann setze den Scripttimer und schalte das Licht ein
[/li][/ul]

Abend!

Ich hab das Skript mal etwas abgekürzt :slight_smile:

<?
$bewegung=GetValue(36209 /*[Haus\Licht\Bewegungsmelder aussen\Data (Boolean)]*/);
$dunkelheit=GetValue(15871 /*[Haus\Licht\Bewegungsmelder aussen\Value\Helligkeit]*/);


if ($bewegung == true) {

   // AUf Basis der Helligkeit unter 150 Lx
	if ($dunkelheit < 150) {
   	IPS_SetScriptTimer($IPS_SELF, 4 * 60);   // 4 Minuten
   	ZW_SwitchMode(10762 /*[Haus\Licht\Schalter Aussenlampe]*/, true);
	}
}


if ($IPS_SENDER == "TimerEvent") {
     IPS_SetScriptTimer($IPS_SELF, 0);
     ZW_SwitchMode(10762 /*[Haus\Licht\Schalter Aussenlampe]*/, false);
}

?>

Das Skript wird aufgerufen (egal wie), wenn Helligkeit unter 150, dann Licht und Timer an. Ansonsten passiert nichts. Wenn das Skript durch den Timer aufgerufen wird, wird der Timer wieder abgeschaltet und das Licht ausgeschaltet. Ende der Geschichte :slight_smile:

Wird innerhalb der 4 Minuten erneut Bewegung erkannt und das Skript aufgerufen, dann verlängert sich der Timer natürlich dementsprechend…ist das nicht gewünscht oder anders gewünscht, dann muss das natürlich noch angepasst werden.

Grüße,
Chris

boah… super…:slight_smile: Vielen Dank…
Unseren Nachwuchs ins bett gebracht, aufgeräumt, Christbaum aufgestellt und nun wollte ich mich an das Skript machen :slight_smile: … wie cool. In dem Fall - Copy & Paste…Mein Sofa - freut sich:D

Gewöhne dich nicht ans fertige „Vorkauen“ :smiley: :wink: :stuck_out_tongue:

Aber immerhin hast du es, im Gegensatz zu anderen, selbst versuchst und so musste ja nur ein wenig bearbeitet/entfernt werden und schon war das Ergebnis fertig :slight_smile:

Dann mal schöne Feiertage und Grüße auch an dein Sofa :smiley:
-Chris-