Neuling -> IPS_SetScriptTimer

Hallo Zusammen,

ich bin ganz neu mit IPS und php (18.08.). (und ich hoffe an der stelle richtig)
ich fummel jetzt schon seid einigen Stunden herum… :wink:
folgendes hab ich mir vorgenommen:
wenn die haustür auf geht, soll das flurlicht „vorn“ und „hinten“ an gehen.
natürlich nur wenn es entspechend dunkel ist…

soweit klappt das auch alles…
hier das script dazu:

<?
//wenn ereignis "Haustür geöffnet" und es zu dunkel ist -> Flur licht an
$id_HM_flur_hinten = 24183 /*[Komponenten\OG\Flur\Aktor.UP.01:1]*/;
$id_HM_flur_vorn = 25734
/*[Komponenten\OG\Flur\Aktor.UP.01:2] "Taster" 1x an / 2te x aus*/;
$id_HM_flur_hell_hinten = GetValue(14144 /*[Komponenten\OG\Flur\MOTION_DETECTOR\BRIGHTNESS]*/);
$zeit=1; //(Warte) Zeit in Minuten
if($id_HM_flur_hell_hinten<=34)
{
echo 'der wert ist ';
echo  "$id_HM_flur_hell_hinten";
HM_WriteValueFloat($id_HM_flur_hinten,'ON_TIME',1*90);
HM_WriteValueBoolean($id_HM_flur_hinten, 'STATE', true);
			HM_WriteValueBoolean($id_HM_flur_vorn, 'STATE', true);
			HM_WriteValueBoolean($id_HM_flur_vorn, 'STATE', false);
			IPS_Sleep(28500);
			HM_WriteValueBoolean($id_HM_flur_vorn, 'STATE', true);
			HM_WriteValueBoolean($id_HM_flur_vorn, 'STATE', false);			}
		else
		   {
				echo 'es ist hell genug ';
				echo  "$id_HM_flur_hell_hinten";
				}
?>

nun hab ich gelesen das die sleep funtion nicht die glücklichste ist (zudem auch die max. zeit bist das script abbricht ausgereizt ist), aber es hat erstmal funktionier…
ich würde das ganze jetzt gern mit „IPS_SetScriptTimer($_IPS[‚SELF‘], 60);“ | „IPS_SetScriptTimer($_IPS[‚SELF‘], 0);“ machen (oder eine andere, bessere Lösung).
ich hab es hin bekommen, das in „Ereignisse“ ein timer angelegt wird, der „alle“ 60 sekunden gestartet wird.
aber an sich scheitere ich irgendwie.

an welche stelle mus das:

if ($_IPS['SENDER'] <> "TimerEvent"){
IPS_SetScriptTimer($_IPS['SELF'], $zeit*20); // Timer setzen
HM_WriteValueBoolean($id_HM_flur_hinten, 'STATE', true);
HM_WriteValueBoolean($id_HM_flur_hinten, 'STATE', false);
			

if($_IPS['SENDER'] == "TimerEvent"){
IPS_SetScriptTimer($_IPS['SELF'], 0);             // Timer deaktivieren
HM_WriteValueBoolean($id_HM_flur_hinten, 'STATE', true);
HM_WriteValueBoolean($id_HM_flur_hinten, 'STATE', false);

damit es „richtig“ funktioniert.

Herzlichen Dank im Voraus

grüße fbueller76

Hi!

Du machst das mit ON_TIME eigentlich schon richtig. Mit ON_TIME wird die Lampe für X Sekunden eingeschaltet und danach automatisch wieder ausgeschaltet.

Ich habe dein Skript mal ein wenig überarbeitet:

<?
//wenn ereignis "Haustür geöffnet" und es zu dunkel ist -> Flur licht an
$id_HM_flur_hinten = 24183 /*[Komponenten\OG\Flur\Aktor.UP.01:1]*/;
$id_HM_flur_vorn = 25734 /*[Komponenten\OG\Flur\Aktor.UP.01:2] "Taster" 1x an / 2te x aus*/;
$id_HM_flur_hell_hinten = GetValue(14144 /*[Komponenten\OG\Flur\MOTION_DETECTOR\BRIGHTNESS]*/);
$zeit=1; //(Warte) Zeit in Minuten (1 Minute = 60 Sekunden)

if ($id_HM_flur_hell_hinten <= 34) {
	echo "Die Helligkeit im Flur beträgt > $id_HM_flur_hell_hinten ... Licht wird eingeschaltet!";
	HM_WriteValueFloat($id_HM_flur_hinten, 'ON_TIME', $zeit*60); // Beleuchtungsdauer festlegen
	HM_WriteValueBoolean($id_HM_flur_hinten, 'STATE', true); // Lampe einschalten (mit vorher festgelegter ON_TIME)
	HM_WriteValueFloat($id_HM_flur_vorn, 'ON_TIME', $zeit*60); // Beleuchtungsdauer festlegen
	HM_WriteValueBoolean($id_HM_flur_vorn, 'STATE', true); // Lampe einschalten (mit vorher festgelegter ON_TIME)
}
else {
	echo "Die Helligkeit im Flur beträgt > $id_HM_flur_hell_hinten ... deshalb keine Beleuchtung notwendig!";
}
?>

Eine Alternative mit Timer würde wie folgt aussehen:

<?
//wenn ereignis "Haustür geöffnet" und es zu dunkel ist -> Flur licht an
$id_HM_flur_hinten = 24183 /*[Komponenten\OG\Flur\Aktor.UP.01:1]*/;
$id_HM_flur_vorn = 25734 /*[Komponenten\OG\Flur\Aktor.UP.01:2] "Taster" 1x an / 2te x aus*/;
$id_HM_flur_hell_hinten = GetValue(14144 /*[Komponenten\OG\Flur\MOTION_DETECTOR\BRIGHTNESS]*/);
$zeit=1; //(Warte) Zeit in Minuten (1 Minute = 60 Sekunden)


if ($_IPS['SENDER'] != "TimerEvent") {
	if ($id_HM_flur_hell_hinten <= 34) {
		echo "Die Helligkeit im Flur beträgt > $id_HM_flur_hell_hinten ... Licht wird eingeschaltet!";
		HM_WriteValueBoolean($id_HM_flur_hinten, 'STATE', true); // Lampe einschalten
		HM_WriteValueBoolean($id_HM_flur_vorn, 'STATE', true); // Lampe einschalten
		IPS_SetScriptTimer($_IPS['SELF'], $zeit*60); // Timer auf voreingestellte Zeit setzen
	}
	else {
		echo "Die Helligkeit im Flur beträgt > $id_HM_flur_hell_hinten ... deshalb keine Beleuchtung notwendig!";
	}
}
else {
   IPS_SetScriptTimer($_IPS['SELF'], 0); // Timer ausschalten
	HM_WriteValueBoolean($id_HM_flur_hinten, 'STATE', false); // Lampe ausschalten
	HM_WriteValueBoolean($id_HM_flur_vorn, 'STATE', false); // Lampe ausschalten
}
?>

>> Bei beiden Skripten musst du ein Ausgelöstes Ereignis (Trigger Event) anlegen, mit Ziel auf die Variable der Haustür-Öffnung oder eines Bewegungsmelders. Damit das Skript immer dann aufgerufen wird, wenn entweder die Haustür geöffnet wird, oder ein Bewegungsmelder eine Bewegung erkannt hat.

Das Event darf das Skript dann z.B. nur Triggern, wenn Haustür == true. Oder du triggerst einfach auf Variablenänderung und du prüfst im Skript noch mit einem IF, ob die Haustür offen ist.

Edit: Hier in der Lang-Version, habe ich auch noch ein Beispiel mit Dunkelheit/Nacht und Bewegungsmeldern. Lässt sich aber auch auf eine Türöffnung übernehmen. Und ein Fall mit Timer ist dort auch beschrieben.
IP-Symcon - Wie kann ich… 2.0 - Seite 3

Grüße,
Chris

cool herzlichen dank,
nun weiß ich was ich „alles“ falsch gemacht hab…

DANKE

Ach was, das Skript war doch fast komplett. Nur ein paar Feinheiten. Und bekanntlich führen ja viele Wege nach Rom :wink:

Du wirst sehen, je mehr du dich mit IPS befasst, um so leichter fallen dir nachher solche Skripte. Mit dem was du jetzt in PHP programmiert hast, kann man schon fast ein komplettes Haus automatisieren :slight_smile: Da kommen immer wieder die selben Befehle auf dich zu :slight_smile:

Für Einsteiger sehr zu empfehlen ist diese Sammlung aus kleinen Skripten, die man immer wieder mal benötigt:
IP-Symcon - Wie kann ich… 2.0

Viel Erfolg weiterhin und Grüße,
Chris