Türkontakt Licht ein mit Timer, Bewegunsmelder verlängert den Timer

Hallo zusammen,

nachdem ich nun den Grossteil meiner Aktoren mit einigen Kopfschmerz im IPS eingebunden habe und einfachere Schaltungen auch ohne Skripte hinbekommen habe, nun meine erste komplexere Aufgabe. Da meine PHP Kenntnisse fast gegen null laufen ich mich aber gerne damit auseinandersetzen würde hier mal eine grundsätzliche Anfrage. Leider habe ich kein Beispielskript in dieser From hier gefunden, vielleicht kann aber doch einer weiter helfen. Über einen HM Türkontakt würde ich gerne einen Merten Dimmer auf 100% einschalten. Dieser soll nach einer Zeit von 60 Sek. wieder ausschalten, es sei den mein EZ Motion erkennt eine Bewegung. In diesem Fall soll das Licht weitere 120 Sek. eingeschaltet bleiben (nach der letzten Bewegungserkennung). Keine Bewegung über 120Sek. dann licht wieder aus. Wird erneut Bewegung erkannt soll das Licht sofort wieder eingeschaltet werden für 120 Sek. … das war es dann eigetnlich auch schon :slight_smile: wäre für jede Hilfe dankbar …

Beste grüße

Marko

Zum Schalten: http://www.ip-symcon.de/service/dokumentation/modulreferenz/z-wave/zw-switchmode/
Für die Timer: http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/skriptverwaltung/ips-setscripttimer/

Wenn du nach dem zweiten Befehl suchst, dann kannst du bestimmt ein paar guten Beispiele finden :slight_smile:

paresy

Genau so habe ich meine Kellerausgangsbeleuchtung realisiert.

Werde das Script nochmal ein wenig auf-hübschen und kann es dir dann zur Verfügung stellen.

Hallo Frank,

das wäre mega perfekt. Zumindest würde ich darüber auch mal den Ablauf mitbekommen. Zur Zeit hangel ich mich hier durchs Forum und diverse Skripte, wo ich bei den meisten aber schon den Grundsatz nicht so recht nachvollziehen kann.

gruss marko

Schau mal ob du damit schon klar kommst, ansonsten erläutere ich dir den Ablauf noch genauer…

Denke aber das durch die IPS Kommentare es recht gut verständlich ist.

Ich schalte über Bewegungsmelder oder Türkontakt den Timer auf 3min (3*60sec) und schalte das Licht ein
Wenn der Timer abläuft schaltet er das Licht aus.

Das ganze mache ich nur zwischen 17 Uhr abend und morgens 9 Uhr ansonsten ist es hell genug (kannst du gerne rausnehmen)


<?
$aktTime=date("Hi"); 
// aktuelle Uhzeit im Format 1200 für 12:00Uhr
$id_Bewegungsmelder_Motion=16026 
/*[Keller\Waschkeller\Bewegungsmelder Kellerausgang\Bewegungserkennung\MOTION]*/;
$id_Kellerausgang_tuer=11672 
/*[Keller\Waschkeller\Kellerausgang\STATE]*/;
$id_timer_event=55823 /
*[Keller\Waschkeller\Beleuchtung_Waschkeller\]*/;
$id_Beleuchtung=39899 
/*[Keller\Hobbyraum\Bewässerungsventile\VENTIL 4 derzeit noch für Waschkellerlicht]*/;

if ( $aktTime <= 900 || $aktTime >= 1700 ) {

if(@$_IPS['VARIABLE'] == $id_Bewegungsmelder_Motion ) {    

IPS_SetScriptTimer($IPS_SELF, 60*3); // Timer um 3 Minuten verlängern   
HM_WriteValueBoolean($id_Beleuchtung,"STATE",true); //Licht einschalten

} else if (GetValueBoolean( $id_Kellerausgang_tuer/*[Keller\Waschkeller\Kellerausgang\STATE]*/)){    
IPS_SetScriptTimer($IPS_SELF, 60*3); // Timer um 3 Minuten verlängern    
HM_WriteValueBoolean($id_Beleuchtung,"STATE",true);

}else 
{
IPS_SetScriptTimer($IPS_SELF, 0);
HM_WriteValueBoolean($id_Beleuchtung ,"STATE",false);
}
}
if (@$_IPS['EVENT'] ==  $id_timer_event )
{
IPS_SetScriptTimer($IPS_SELF, 0);
HM_WriteValueBoolean($id_Beleuchtung ,"STATE",false);
}
//ENDE
?>

auf den ersten Blick sieht es schonmal verständlich aus. Auf Grund des allgemeinen Weltfriedens (oder auch Familienfriedens), komme ich leider erst morgen früh dazu mir das ganze in Ruhe anzuschauen. Puhh und es kribbelt wirklich in den Fingern … naja mal schauen vielleicht dann auch noch heute zu etwas späterer Stunde :slight_smile:

Besten Dank

Marko

so den Teil mit der Uhrzeit habe ich entfernt den Rest soweit möglich auf meinen Objektbaum angepasst. Allerdings fehlt mir so ein wenig das Verständnis für die Zeile $id_timer_event=55823 … ansonsten wenn ich das skript manuell ausführe bekomme ich einen Fehler aus der Zeile ZW_SwitchMode($id_Beleuchtung, false); mit der Fehlermeldung :warning: ZW_SwitchMode: Instance #33709 not found! in F:\IP-Symcon\scripts\38740.ips.php on line 21
[0] in function ZW_SwitchMode in F:\IP-Symcon\scripts\38740.ips.php on line 21
aber die id ist vorhanden und stimmt auch ???


<?
$id_Bewegungsmelder_Motion=13110 /*[Install\ZWave\Keller Serverraum - Bewegungsmelder (NodeID 009)\Data(Boolean)]*/;
$id_Kellertuer_innen=17921 /*[Install\EG Kellerzugang\EG - Kellertüre:1\STATE]*/;
$id_timer_event=55823 /*[Keller\Waschkeller\Beleuchtung_Waschkeller\]*/;
$id_Beleuchtung=33709 /*[Install\ZWave\EG Keller - Treppenlicht\Status]*/;

if(@$_IPS['VARIABLE'] == $id_Bewegungsmelder_Motion ) {

IPS_SetScriptTimer($IPS_SELF, 60*3); // Timer um 3 Minuten verlängern
ZW_SwitchMode($id_Beleuchtung, true); //Licht einschalten

} else

if (GetValueBoolean( $id_Kellertuer_innen/*[Install\EG Kellerzugang\EG - Kellertüre:1\STATE]*/)){
IPS_SetScriptTimer($IPS_SELF, 60*3); // Timer um 3 Minuten verlängern
ZW_SwitchMode($id_Beleuchtung, true);

}else
{
IPS_SetScriptTimer($IPS_SELF, 0);
ZW_SwitchMode($id_Beleuchtung, false);
}
if (@$_IPS['EVENT'] ==  $id_timer_event )
{
IPS_SetScriptTimer($IPS_SELF, 0);
ZW_SwitchMode($id_Beleuchtung, false);
}
//ENDE
?>

Besten Dank

Marko

ich kenne mich mit ZW_SwitchMode nicht aus, kann aber sein, das du nicht den Status sondern die Oberinstanz auswählen musst.

die Timer-ID entsteht, wenn du das Script das erste mal getriggert wird, legt es einen Timer unterhalb des Scriptes an, diese ID trägst du dann ein.

ok das mit dem Timer ist dann auch erledigt.

Wenn ich die obere Instanz nehme kommt zwar kein Fehler mehr aber eine wirkliche Funktion hat dann dieses Skript auch nicht :frowning:

Vielleicht noch jemand mit zWave Nodes hier der weiter helfen kann ?? im übrigen ist das Licht manuell eingeschaltet worden steigt das Skript schon früher aus (zw_switch…true) und das mit der gleicher Fehlermeldung.

gruss marko

PS: Türkontakt ist ein Homematic, Beleuchtung Merten Superdimmer ZWave, Bewegung EZMotion ZWAVE

Lösung gefunden … die obere Instanz muss angegeben werden bei der Beleuchtung und „oh wie peinlich“ das Ereignis welches das Skript dann auch auslöst. Naja so ist das wohl bei den ersten Skripten die man einbaut :slight_smile:

Herzlichen Dank nochmal

gruss marko

Jeder hat man klein angefangen…

und so überragend sind meine Scripte nun auch nicht… wenn ich da an RS oder so denke

Hallo,
mal wieder scheitere ich daran ein einfaches Script zu übernehmen.
Der Timer wurde angelegt und die passende ID eingetragen.
Ich habe den Teil mit dem Türkontakt rausgenommen.

<?
$aktTime=date("Hi");
// aktuelle Uhzeit im Format 1200 für 12:00Uhr
$id_Bewegungsmelder_Motion=54951
/*[Sicherheit\Bewegungsmelder\Flur Oben\Bewegung]*/
$id_timer_event=12512
/*[Räume/Flure/Spots Oben]*/
$id_Beleuchtung=41803


if ( $aktTime <= 900 || $aktTime >= 1700 ) {

if(@$_IPS['VARIABLE'] == $id_Bewegungsmelder_Motion ) {

IPS_SetScriptTimer($IPS_SELF, 60*3); // Timer um 3 Minuten verlängern
HM_WriteValueBoolean($id_Beleuchtung,"STATE",true); //Licht einschalten

}else
{
IPS_SetScriptTimer($IPS_SELF, 0);
HM_WriteValueBoolean($id_Beleuchtung ,"STATE",false);
}
}
if (@$_IPS['EVENT'] ==  $id_timer_event )
{
IPS_SetScriptTimer($IPS_SELF, 0);
HM_WriteValueBoolean($id_Beleuchtung ,"STATE",false);
}
//ENDE
?>

Ergebnis

Parse error: syntax error, unexpected ‚$id_timer_event‘ (T_VARIABLE) in [Skripte\Spots Flur unten einschalten für 3min] on line 6

Leider auch die Strichpunkte am Zeilenende :wink:

Stimmt :confused: Hab sie jetzt wieder eingefügt. Script bringt jetzt keinen Fehler mehr.
Aber leider funktioniert es trotzdem nicht:

<?
$aktTime=date("Hi");
// aktuelle Uhzeit im Format 1200 für 12:00Uhr
$id_Bewegungsmelder_Motion=54951 /*[Sicherheit\Bewegungmelder\Flur Unten\Bewegung]*/;
/*[Sicherheit\Bewegungsmelder\Flur Unten\Bewegung]*/
$id_timer_event=30288 /*[Skripte\Spots Flur unten einschalten für 3min\]*/;
/*[Räume/Flure/Spots Oben]*/
$id_Beleuchtung=44095 /*[Räume\Flure\Spots unten]*/;


if ( $aktTime <= 900 || $aktTime >= 2300 ) {

if(@$_IPS['VARIABLE'] == $id_Bewegungsmelder_Motion ) {

IPS_SetScriptTimer($IPS_SELF, 60*3); // Timer um 3 Minuten verlängern
HM_WriteValueBoolean($id_Beleuchtung,"STATE",true); //Licht einschalten

}else
{
IPS_SetScriptTimer($IPS_SELF, 0);
HM_WriteValueBoolean($id_Beleuchtung ,"STATE",false);
}
}
if (@$_IPS['EVENT'] ==  $id_timer_event )
{
IPS_SetScriptTimer($IPS_SELF, 0);
HM_WriteValueBoolean($id_Beleuchtung ,"STATE",false);
}
//ENDE
?>
if ( $aktTime <= 900 || $aktTime >= 2300 ) {

nimm mir die Frage bitte nicht übel: hast Du das Script vor 23 uhr getestet ? Dein Posting ist von 22:10 Uhr :slight_smile:

Hi, die Frage ist berechtigt. Hatte ich auch gesehen. Aber auch wenn ich die Zeit anpassen klappt es leider nicht.

Gruß Tim

aehm, hasse auch das Ereignis angelegt, welches das Skript auslöst ??? Also ich hatte es vergessen und Stundenlang hier rumgesucht woran es liegen könnte :slight_smile:

gruss marko