Hallo
Ich habe versucht das Script mit einem Piri Bewegungsmelder zu steuern.
Da ich den Bewegungsmelder im Flur habe, soll er dies nur tun, wenn es draußen dunkel ist.
Habe also das Skript mit einem Befehl erweitert, das er zusätzlich den Status von meinem SunsetScript abholen soll und erst wenn SunriseSunset\DAYLIGHT == False ist, das Licht geschalten werden soll, ansonsten soll er nichts machen.
Ganz am anfag des Themas steht ja das das Skipt „Bei Variabelaktualisierung“ getriggert werden soll.
Im Script selbst steht allerdings // Trigger: „Bei Variablenänderung“ > PIRI_Status
Liegt es daran?
Oder habe ich jetzt irgendwas nicht verstanden.
Hier mal das Script „Präsenz“
<?
//Beschreibung unter (http://www.ip-symcon.de/forum/f53/timer-praesenz-5431/)
// (c) by IP-Symcon 2008
// lauffähig ab Version 2.0
// Trigger: "Bei Variablenänderung" > PIRI_Status
if($IPS_SENDER == "Execute")
{
echo "Diese Skript kann so nicht ausgeführt werden.
";
echo "Bitte triggern sie das Skript über eine Boolean Variable";
}
if($IPS_SENDER == "Variable")
{
if(!is_bool($IPS_VALUE))
{
die("Skript kann nur über Boolean Variablen verarbeiten!");
}
$vid = CreateVariableByName($IPS_VARIABLE, "Präsenz", 0);
$Tageslicht = 43584 /*[SunriseSunset\DAYLIGHT]*/;
if(($IPS_VALUE == True) && ($Tageslicht == False)) { //Timer starten
$eid = CreateEventIDByName($vid, "Timer für Variable: ".$IPS_VARIABLE, 1);
IPS_SetEventCyclic($eid, 0, 0, 0, 0, 1, 2*60); // alle 5 Minuten
IPS_SetEventCyclicTimeBounds($eid, time(), 0);
IPS_SetEventActive($eid, true);
if(!GetValue($vid)) {
SetValue($vid, true);
}
// weitere Befehle beim Erkennen einer Bewegung
// z.B. FS20_SwitchMode(.....
FS20_SetIntensity(33626 /*[Alle Steckdosen und Fernbedienungen\Flur Stehlampe]*/, 16, 2);
FS20_SetIntensity(20066 /*[Alle Steckdosen und Fernbedienungen\Flur Treppe]*/, 16, 2);
}
}
if($IPS_SENDER == "TimerEvent"){ //Timer ausschalten
IPS_SetEventActive($IPS_EVENT, false);
//Übergeornete Variable herausfinden
$event = IPS_GetObject($IPS_EVENT);
//Variable setzen
SetValue($event['ParentID'], false);
// weitere Befehle nach Ablauf des Zeit
// z.B. FS20_SwitchMode(.....
//IPS_RunScript("48318");
FS20_SetIntensity(33626 /*[Alle Steckdosen und Fernbedienungen\Flur Stehlampe]*/, 8, 30);
FS20_SetIntensity(20066 /*[Alle Steckdosen und Fernbedienungen\Flur Treppe]*/, 16, 30);
}
function CreateVariableByName($id, $name, $type)
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid===false) {
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "This Variable was created by Script #$IPS_SELF");
}
return $vid;
}
function CreateEventIDByName($id, $name, $type)
{
global $IPS_SELF;
$eid = @IPS_GetEventIDByName($name, $id);
if($eid===false) {
$eid = IPS_CreateEvent($type);
IPS_SetEventScript($eid, $IPS_SELF);
IPS_SetParent($eid, $id);
IPS_SetName($eid, $name);
IPS_SetInfo($eid, "This Event was created by Script #$IPS_SELF");
}
return $eid;
}
?>
Wenn ich nun also
$Tageslicht = False benutze, schaltet er nicht obwohl Daylight = False.
Schreibe ich aber:
$Tageslicht = True schaltet er wie er soll, allerdings auch wenn Daylight = False ist.
Hier nochmal das Skript SUNRISE_SUNSET
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : SUNRISE_SUNSET.ips.php
Trigger :
Interval : 60 Sekunden
*/
/*
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
switch ($IPS_SENDER)
{
case "Execute": // ************** Initialisierung *****************************
$CatID = IPS_CreateCategory(); // Kategorie anlegen
IPS_SetName($CatID, "SunriseSunset"); // Kategorie benennen
$VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "SUNRISE_OFFSET"); IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "SUNSET_OFFSET"); IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "SUNRISE"); IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "SUNSET"); IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(0); IPS_SetName($VarID, "DAYLIGHT"); IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "TIME"); IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "WEEKDAY"); IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "DAY"); IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "MONTH"); IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(1); IPS_SetName($VarID, "YEAR"); IPS_SetParent($VarID, $CatID);
$VarID = IPS_CreateVariable(3); IPS_SetName($VarID, "TIME_STRING"); IPS_SetParent($VarID, $CatID);
break;
}
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*/
// Sonnenauf Sonnenuntergang berechnen
// Getriggert wird alle 60 sek.
$latitude = 53.33;
$longitude = 9.59;
$day_offset = (GetValue(13019 /*[SunriseSunset\SUNRISE_OFFSET]*/ )+(date("I")*60))/60+1;
$night_offset = (GetValue(51121 /*[SunriseSunset\SUNSET_OFFSET]*/ )+(date("I")*60))/60+1;
$var_sunrise = date(date_sunrise(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90, $day_offset));
$var_sunset = date(date_sunset(time(), SUNFUNCS_RET_STRING, $latitude, $longitude, 90, $night_offset));
$VarID = IPS_GetVariableID("SUNRISE");
SetValue($VarID, $var_sunrise);
$VarID = IPS_GetVariableID("SUNSET");
SetValue($VarID, $var_sunset);
//DAYLIGHT festlegen
if (date("H:i") == $var_sunrise) {
SetValue(43584 /*[SunriseSunset\DAYLIGHT]*/ , true);
}
if (date("H:i") == $var_sunset) {
SetValue(43584 /*[SunriseSunset\DAYLIGHT]*/ , false);
}
//Zeit ausgeben
SetValue(14498 /*[SunriseSunset\TIME]*/ , date("H:i"));
// Wochentag in deutsch ausgeben
$Tag = Date("w");
$Tag1 = array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag");
//$Tag1 = array("So","Mo","Di","Mi","Do","Fr","Sa");
SetValue(48630 /*[SunriseSunset\WEEKDAY]*/ , $Tag1[$Tag]);
// Tag
SetValue(31930 /*[SunriseSunset\DAY]*/ , (INT)date("j"));
//Monat in deutsch ausgeben
$Monat = Date("n");
$Monat1 = array("","Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
SetValue(31336 /*[SunriseSunset\MONTH]*/ , $Monat1[$Monat]);
//Jahr ausgeben
SetValue(54070 /*[SunriseSunset\YEAR]*/ , (INT)date("Y"));
//Timestring schreiben
//SetValue(19224 /*[SunriseSunset\Latitudet]*/ ,$Tag1[$Tag]." ".date("j").".".$Monat1[$Monat]." ".date("Y")." ".date("H:i"));
SetValue(50565 /*[SunriseSunset\TIME_STRING]*/ ,date("j").".".$Monat1[$Monat]." ".date("Y"));
SetValue(19224 /*[SunriseSunset\Latitudet]*/ , $latitude);
SetValue(21312 /*[SunriseSunset\Longitude]*/ , $longitude);
?>
Kann mir einer erkären wieso er (egal ob Daylight = True oder False)
bei eigabe von $Tageslicht == True immer schaltet (egal ob Tag oder Nacht und bei der Eigabe von
$Tageslicht == False NIE schaltet (auch hier egal ob Tag oder Nacht Also Daylight == False oder True ist)
Hoffe ich habe es nicht zu kompliziert geschrieben, weiss aber nicht wie ich es anders formulieren soll.
Danke im vorraus