Licht in schalten wenn es dunkel ist...

Hallo Leute,

ich habe im Hausfur einen Bewegungsmelder (FS20) installiert und ihn so eingestellt, dass wenn es dunkel ist das Licht eingeschaltet wird. Das problem ist, dass das oft nicht funktioniert (Wenn z.B. Licht in der Küche an ist.

Ich würde gerne den Helligkeitswert im Bewegungsmelder ausschalten und das Licht einschalten wenn der Dämmerungssensor im Garten von Tag auf Nacht schaltet. Also der Bewegungsmelder meldet immer, es wird aber nur geschaltet wenn der Dämmerungssensor auf fals steht.
Für Zeitabfrage kenn ich den Befehl nur nicht für die Abfrage eines Aktors.

Bestimmt wurde sowas schon öfters gefragt, kann aber nichts brauchbares finden.

Gruß…der Hüsi

GetValue: IP-Symcon :: Automatisierungssoftware

Danke für die Info,

MeinScript Sieht jetzt so aus:
<?
$Tag_Nacht = GetValue(35237 /[Sensoren\Sensor Tag / Nacht\Status]/); // true oder false
FS20_SwitchDuration(48688 /[Räume\Hausflur\Licht Eingang]/, true, 120);
?>

Auslösendes Ereignis habe ich auch hinzugefügt…wenn Bewegungsmelder true dann Script starten.

Irgendwie muss ich doch noch sagen wenn true dann mach nichts und wenn false mach das Licht für 120 sec an.

Bin leider „noch“ nicht so fitt was die Befehle und denn Syntax betrifft.

Gruß…der Hüsi

Da fehlt dir eine Bedingung, ein sogenannter if-Block.

Gruß,

Toni

Danke Toni,

genau da shabe ich gesucht. Das Script sieht nun so aus:

<?
$Tag_Nacht = GetValue(35237 /[Sensoren\Sensor Tag / Nacht\Status]/); // true oder false
if ($Tag_Nacht == false)
{
DoSomething(FS20_SwitchDuration(48688 /[Räume\Hausflur\Licht Eingang]/, true, 120));
}
?>

Leider bekomme ich die Fehlermeldung:Fatal error: Call to undefined function DoSomething() in [Script\Bewegungsmelder] on line 5

Die Meldung kommt natürlich nur wenn der Lichtsensor auf false steht. Wenn der Lichtsensor true ist, pasiert nichts weiter.(So wie es soll)

Wo passt den der Syntax da nicht?

Hihi… Tja, DoSomething…

Das war nur ein Beispiel dafür, dass an der Stelle Etwas gemacht wird. Du ersetzt einfach „DoSomething“ durch etwas sinnvolles, wie zu Beispiel FS20_SwitchDuration, und dann wird es, das Sinnvolle, auch passieren. :wink:

Gruß,

Toni

Toni´s Antwort ein wenig ausführlicher :smiley:

<?
$Tag_Nacht = GetValue(35237 /*[Sensoren\Sensor Tag / Nacht\Status]*/); // true oder false
if ($Tag_Nacht == false)
{
   FS20_SwitchDuration(48688 /*[Räume\Hausflur\Licht Eingang]*/, true, 120);
}
?>
 

Und die PHP-Tags nicht vergessen beim fragen im Forum, dann sieht es auch leserlicher aus.

Na dann,

<?
$Tag_Nacht = GetValue(35237 /*[Sensoren\Sensor Tag / Nacht\Status]*/); // true oder false
if ($Tag_Nacht)
    {
      FS20_SwitchDuration(48688 /*[Räume\Hausflur\Licht Eingang]*/, true, 120);
      
    }    
    // Ereigniss hinzufügen getriggert durch Sensoren\Sensor Tag / Nacht\Status bei Änderung
?>

Ups da war Werner schneller

:cool: Wie peinlich…Danke für Deine Hilfe. Funktioniert jetzt.

Gruß…der Hüsi

PS: Vieleicht kann es ja jemand gebrauchen:

 
<?
$Tag_Nacht = GetValue(35237 /*[Sensoren\Sensor Tag / Nacht\Status]*/); // true oder false
if ($Tag_Nacht == true)
{
   FS20_SwitchDuration(48688 /*[Räume\Hausflur\Licht Eingang]*/, true, 120);
}
?>

Noch so als kleiner Tip am Rande:

Wenn man Variablennamen wie $tag_nacht hat und dann mit true und false arbeitet ist das manchmal recht verwirrend. Ist true nun Tag? Oder Nacht? Oder ist false Nacht?

Man kann das ganze mit Konstanten lesbarer machen; das ist bei so einem kleinen Script zwar noch nicht wirklich notwending aber am besten sollte man sich sowas angewöhnen.

Hier mal als Beispiel:

<?
define("TAG",true);
define("NACHT",false);

define("AN",true);
define("AUS",false);

$Tag_Nacht = GetValue(35237 /*[Sensoren\Sensor Tag / Nacht\Status]*/); // true oder false
if ($Tag_Nacht == NACHT)
{
   FS20_SwitchDuration(48688 /*[Räume\Hausflur\Licht Eingang]*/, AN, 120);
}
?> 

Stimmt, passiert immer wieder. Auch den vermeintlichen Profis. :smiley:

Ich mag es gern so:


$isDay = GetValue(12345);
if ($isDay)
{
   DoSomething(); // ;)
}
else // Night
{
   DoSomethingElse();
}

Danke für Eure Unterstüzung.

Also Tag ist true und nacht ist false. Funktioniert jetzt auch.
Ich glaube kürzer als das Beispiel von Tonic gehts nicht.
Aber gut zu wissen, dass man sich das Leben auch leichter machen kann :wink:

Mal sehen was ich mit dem neuen Wissen so alles anstellen kann… :rolleyes:

Funktion ist nicht die Frage. Funktionieren wird das immer. Nur in 2 Jahren hast du vergessen das True = Nacht bedeutet oder war jetzt Nacht = false oder machen wir den Tag zur Nacht wenn true = false?!? Das Problem liegt dann fast immer zwischen den Ohren. :wink: Dem kann man mit dem Beispiel von sysrun und mir dann direkt vorbeugen.

Das darfst du nem Programmierer nie sagen. Sonst fühlt er sich herausgefordert. :cool:


<? FS20_SwitchDuration(48688, !GetValue(35237), 120);  // beat THIS! ?>

Aber kürzer ist nicht immer auch gleich einfacher, gell? :wink:

Edit:

Das soll als schlechtes Beispiel dienen. Nicht, dass da Mißverständnisse auftreten… :smiley:

Toni

Da fehlen mir die Worte…sehr geil!

… oder mit GetValueFormatted für Dummies wie mich - Beispiel:

$soll_status = GetValueFormatted(43931 /*[Heizung Strom Wasser Gas\Wärmepumpe\WP Soll Status]*/);
$ist_status = GetValueFormatted(43160 /*[Heizung Strom Wasser Gas\Wärmepumpe\WP Ist Status]*/);

// Aus-Schalten
if (($soll_status == "Soll Aus") and (($ist_status == "Betrieb") or ($ist_status == "Störung"))){
	IPS_SetScriptTimer($IPS_SELF, 5 * 10);
	SetValue(43160 /*[Heizung Strom Wasser Gas\Wärmepumpe\WP Ist Status]*/, 3);  // runter fahren
	HM_WriteValueBoolean(16594 /*[OG\Lager\Wärmepumpe StandBy Out#4]*/ , "STATE" , False);
}