Licht bleibt nicht eingeschaltet bei Bewegung mit Fibaro Motion Sensor (Z-Wave)

Hallo zusammen,

leider habe ich immer wieder das Problem, dass z.B. das Küchenlicht bei dauerhafter Bewegung in der Küche nicht eingeschaltet bleibt:confused:

Folgendes habe ich versucht zu realisieren:
Wenn ich in die Küche gehe, soll das Küchenlicht eingeschaltet werden und bei nicht Bewegung nach 5 Minuten ausschalten bzw. die nächste Lichtszene aktivieren. Wenn jedoch dauerhaft Bewegung in der Küche ist, soll der Timer quasi jedesmal von vorne starten, sprich die 5 Minuten erneut runterzählen. Das Skript wird über ein Ereignis bei Variablenaktualisierung gestartet.

// Skript wird ausgeführt zum Steuern des Flurlichts zu bestimmten Uhrzeiten und Luminance
<?
$varLuminanceKueche = GetValue (15914 /*[Erdgeschoss\Küche\Fibaro Motion Sensor 01 (NodeID 033)\Wert\Luminance]*/);		// auslesen der Helligkeit
$varBewegungKueche = GetValue (52119 /*[Erdgeschoss\Küche\Fibaro Motion Sensor 01 (NodeID 033)\Status]*/);				// auslesen der Bewegung
 
$varAktuelleZeit = time();				// ermitteln der aktuellen Zeit im Unix-Format  
 
$startint1 = strtotime("00:00");		// Startzeit Intervall 1
$endint1 = strtotime("01:59");			// Endzeit Intervall 1

$startint2 = strtotime("02:00");		// Startzeit Intervall 2
$endint2 = strtotime("16:59");			// Endzeit Intervall 2
 
$startint3 = strtotime("17:00");		// Startzeit Intervall 3
$endint3 = strtotime("23:59");			// Endzeit Intervall 3
 
if (($varLuminanceKueche <= 30) and ($varBewegungKueche = true))	 
{																										                                                                                                       
	{                                                                                                      
    if (($varAktuelleZeit >= $startint1) and ($varAktuelleZeit <= $endint1))												// Start Intervall 1
		IPS_RunScript (25474 /*[Erdgeschoss\Küche\Skripte\Küche_Deckenbeleuchtung\Küche_Deckenbeleuchtung_Lichtszene_1]*/);	// Skript wird ausgeführt
	}
	{
	if (($varAktuelleZeit >= $startint2) and ($varAktuelleZeit <= $endint2))												// Start Intervall 2
		IPS_RunScript (51929 /*[Erdgeschoss\Küche\Skripte\Küche_Deckenbeleuchtung\Küche_Deckenbeleuchtung_Lichtszene_2]*/);	// Skript wird ausgeführt
	}
	{
	if (($varAktuelleZeit >= $startint3) and ($varAktuelleZeit <= $endint3))												// Start Intervall 3
		IPS_RunScript (42141 /*[Erdgeschoss\Küche\Skripte\Küche_Deckenbeleuchtung\Küche_Deckenbeleuchtung_Lichtszene_3]*/);	// Skript wird ausgeführt
	}
}
?>

Wie aus dem Skript zu entnehmen ist, soll das Küchenlicht sich auch erst bei einer Luminance von <= 30 einschalten.

Kann es sein, dass der Timer nicht von erneut startet, weil wenn das Licht eingeschaltet ist und die Bedingung von Luminance <=30 nicht mehr erfüllt wird?

Wie ist denn dein Fibaro konfiguriert? Der geht im Standard auf True und bleibt dort für 5 Minuten und dann wieder auf false… das heisst du bekommst innerhalb von 5 MInuten kein neues Signal

Das Wake up Intervall stand bei mir auf 7200 Sek.

Habe es jetzt auf 240 Sek. herab gesetzt

Das Wake Up Intervall hat damit nichts zu tun. Der entscheidende Parameter ist Parameter 6 „Motion Alarm Cancellation Delay“.
Default ist der auf 30 eingestellt (30sec).

Wenn du den auf 300sec stellst, dann geht der Sensor 300sec nach der letzten erkannten Bewegung wieder auf false.

Wird das Licht den in den Scripten fuer die Lichtszenen den ausgeschaltet ?
Neu gestartet wird auf alle Faelle kein Script wenn Luminance > 30.
Und

if (($varLuminanceKueche <= 30) and ($varBewegungKueche = true))	 

sollte wohl eher so heissen

if (($varLuminanceKueche <= 30) and ($varBewegungKueche == true))

Du musst die Trägheit des Bewegungssensor (Parameter 2 in der Anleitung) und die Abschaltverzögerung (Parameter 6) anpassen.

Wenn die Bedingunen erfüllt sind wird ein Skript mit folgendem Inhalt gestartet:

// Skript zum Steuern der Deckenbeleuchtung in der Küche zu bestimmten Uhrzeiten und Luminance
<?
if ($_IPS['SENDER'] <> "TimerEvent")
{ 
IPS_SetScriptTimer($_IPS['SELF'], 300); // Timer mit 300 Sekunden aktivieren 
ZW_DimSet (18679 /*[Erdgeschoss\Küche\Fibaro Dimmer 01 Deckenbeleuchtung rechts (NodeID 019)]*/,90);  // Licht wird auf 80% eingeschaltet
ZW_DimSet (16216 /*[Erdgeschoss\Küche\Fibaro Dimmer 02 Deckenbeleuchtung links (NodeID 021)]*/,30);  // Licht wird auf 80% eingeschaltet
} 
else 
{ 
IPS_SetScriptTimer($_IPS['SELF'], 0);  // Timer deaktivieren 
IPS_RunScript (44554 /*[Erdgeschoss\Küche\Skripte\Küche_Deckenbeleuchtung\Küche_Deckenbeleuchtung_Lichtszene_3\Küche_Deckenbeleuchtung_Lichtszene_3.1]*/);			// Skript wird ausgeführt 
}			        
?>

und? geht es immer noch nicht?

Sorry zunächst mal für die späte Rückmeldung, aber ich war eine Woche im Urlaub.

Mit frischen Nerven bin ich die ganze Sache erneut angegangen.

Zunächst mal habe ich mein Skript völlig entschlagt, so dass das Küchenlicht bei Status ‚true‘ eingeschaltet wird und bei ‚false‘ wieder ausgeschaltet. Durch anpassen der Parameter im MotionSensor konnte ich nun eine Trägheit der Statusvariable erstellen. Läuft soweit und Danke dafür.

Im nächsten Schritt wollte ich eigentlich, dass das Küchenlicht sich nicht direkt ausschaltet sondern per Timer für 5 Minuten auf 20% läuft. Wenn es in dieser Phase wieder Bewegung gibt, schaltet sich das Küchenlicht wieder ein. Wenn nicht, eben nach 5 Minuten aus. Hierbei komme ich leider nicht weiter :banghead:

Wenn mir hier jemand Hilfestellung geben kann, wäre ich euch sehr dankbar.

Beste Grüße

Du kannst ein zweites Skript erstellen, welches das Licht ausschaltet. Läuft also der erste Timer ab, schaltest du das Licht auf 20% und startest einen zweiten Timer, welcher bei Ablauf das zweite Skript startet. Wird das zweite Skript gestartet, dann schaltest du das Licht einfach aus.

Du musst dann lediglich noch dafür sorgen, dass das zweite Skript (also das Ausschalt-Skript) nicht ausgeführt wird, wenn in der Zwischenzeit noch einmal der Bewegungsmelder getriggert wird. Das kannst du machen, indem du beispielsweise bei Auslösen des Bewegungsmelders den Timer für das Ausschalt-Skript wieder deaktivierst.

Alternativ könntest du eine Zustandsvariable einführen oder sogar den aktuellen Dimmstand der Lampe dafür verwenden und dann alles mit einem Skript und einem Timer lösen. Das wäre möglicherweise eleganter, auf jeden Fall aber komplizierter.

Wie kann ich den Timer integrieren?

Aktuell sieht mein Skript so aus:

// Skript wird ausgeführt zum einschalten des Küchenlichts
<?
$varLuminanceKueche = GetValue (56383 /*[Erdgeschoss\Küche\Z-Wave Notification (NodeID 052)\Wert\Luminance]*/);									// Ermittelt die Helligkeit in der Küche
$varBewegungKueche = GetValue (54835 /*[Erdgeschoss\Küche\Z-Wave Notification (NodeID 052)\Status]*/);											// Ermittelt die Bewegung in der Küche

if (($varBewegungKueche == true) and ($varLuminanceKueche <= 35))																				// Wenn Bendingungen erfüllt werden...
	{
	ZW_DimSet (18679 /*[Erdgeschoss\Küche\Fibaro Dimmer 01 Deckenbeleuchtung rechts (NodeID 019)]*/,90);  										// Licht wird auf 90% eingeschaltet
	ZW_DimSet (16216 /*[Erdgeschoss\Küche\Fibaro Dimmer 02 Deckenbeleuchtung links (NodeID 021)]*/,20);  										// Licht wird auf 20% eingeschaltet
	}

if ($varBewegungKueche == false)																												// Sonst...
	{  				
	ZW_DimSet (18679 /*[Erdgeschoss\Küche\Fibaro Dimmer 01 Deckenbeleuchtung rechts (NodeID 019)]*/,0);  										// Licht wird auf 0% eingeschaltet
	ZW_DimSet (16216 /*[Erdgeschoss\Küche\Fibaro Dimmer 02 Deckenbeleuchtung links (NodeID 021)]*/,0); 											// Licht wird auf 0% eingeschaltet
	} 		
?>

In der aktuellen Variante hast du ja gar keinen Timer drin. Das kannst du natürlich so lassen, dann würdest du aber runterdimmen (bzw. aktuell sogar ausschalten), sobald der Bewegungsmelder nicht mehr getriggert ist. Das könntest du ähnlich wie in deiner vorherigen Version des Skripts (mit IPS_SetScriptTimer) lösen.

So oder so kannst du im else- bzw. false-Fall das Licht abdimmen anstatt es auszuschalten und den Skript-Timer für ein weiteres Skript einschalten, welches das Licht ausschaltet. Das ganze könnte grob so aussehen:



// Hauptskript
<? 
$varLuminanceKueche = GetValue (56383 /*[Erdgeschoss\Küche\Z-Wave Notification (NodeID 052)\Wert\Luminance]*/);                                    // Ermittelt die Helligkeit in der Küche 
$varBewegungKueche = GetValue (54835 /*[Erdgeschoss\Küche\Z-Wave Notification (NodeID 052)\Status]*/);                                            // Ermittelt die Bewegung in der Küche 

if (($varBewegungKueche == true) and ($varLuminanceKueche <= 35))                                                                                // Wenn Bendingungen erfüllt werden... 
    { 
    IPS_SetScriptTimer(12345 /* ID vom Ausschalt-Skript */, 0); //Ausschalt-Timer für den Moment deaktivieren  <=== NEU
    ZW_DimSet (18679 /*[Erdgeschoss\Küche\Fibaro Dimmer 01 Deckenbeleuchtung rechts (NodeID 019)]*/,90);                                          // Licht wird auf 90% eingeschaltet 
    ZW_DimSet (16216 /*[Erdgeschoss\Küche\Fibaro Dimmer 02 Deckenbeleuchtung links (NodeID 021)]*/,20);                                          // Licht wird auf 20% eingeschaltet 
    } 

if ($varBewegungKueche == false)                                                                                                                // Sonst... 
    {              
    IPS_SetScriptTimer(12345 /* ID vom Ausschalt-Skript */, 300); //Ausschalt-Timer auf 300s = 5 Minuten schalten  <=== NEU     
    ZW_DimSet (18679 /*[Erdgeschoss\Küche\Fibaro Dimmer 01 Deckenbeleuchtung rechts (NodeID 019)]*/,20);                                          // Licht wird auf 20% eingeschaltet 
    ZW_DimSet (16216 /*[Erdgeschoss\Küche\Fibaro Dimmer 02 Deckenbeleuchtung links (NodeID 021)]*/,5);                                             // Licht wird auf 5% eingeschaltet 
    }          
?>


// Ausschalt-Skript
<? 
    IPS_SetScriptTimer($_IPS['SELF'], 0); //Ausschalt-Timer deaktivieren
    ZW_DimSet (18679 /*[Erdgeschoss\Küche\Fibaro Dimmer 01 Deckenbeleuchtung rechts (NodeID 019)]*/,0);                                          // Licht wird auf 0% geschaltet 
    ZW_DimSet (16216 /*[Erdgeschoss\Küche\Fibaro Dimmer 02 Deckenbeleuchtung links (NodeID 021)]*/,0);                                          // Licht wird auf 0% geschaltet 
   
?>

Wenn der Bewegungsmelder ausgelöst wird, würdest du das Licht also einschalten und den Timer für das Ausschalt-Skript deaktivieren, damit der nicht vorzeitig schaltet, falls er aktiv war.

Schaltet der Bewegungsmelder auf false, dann dimmst du das Licht und aktivierst den Skript-Timer für ein zusätzliches Ausschalt-Skript. Hier müsstest du noch die ID an dein Ausschalt-Skript anpassen.

Läuft der Timer von Ausschalt-Skript ab, dann wird alles ausgeschaltet und der Timer vom Ausschalt-Skript deaktiviert sich wieder.

Funktioniert. 1.000 Dank