coolice
1. November 2008 um 23:50
1
Guten Abend,
habe gerade ein Script getippt, das für 60 Sekunden das Flurlicht anmachen soll, wenn der Piri eine Bewegung meldet.
$bewegung = GetValueBoolean(44197 /*[Flur\flur_piri\StatusVariable]*/);
$dunkel = GetValueBoolean (25767 /*[dsensor]*/);
if($IPS_SENDER == "Variable") {
if ($bewegung && $dunkel)
{
echo "Flurlicht an";
FS20_SwitchDuration (39375 /*[Flur\flurlicht]*/, true, 60);
IPS_SetScriptTimer (56862 /*[Scripte
achtschaltung_flurlicht]*/, 60);
}
} else {
echo "Flurlicht aus";
IPS_SetScriptTimer (56862 /*[Scripte
achtschaltung_flurlicht]*/ ,0);
SetValueBoolean(44197 /*[Flur\flur_piri\StatusVariable]*/, false);
FS20_SwitchDuration (39375 /*[Flur\flurlicht]*/, false, 0);
}
?>
Das licht geht leider nicht an obwohl der Piri meldet.
Wenn ich es so ändere
$bewegung = GetValueBoolean(44197 /*[Flur\flur_piri\StatusVariable]*/);
$dunkel = GetValueBoolean (25767 /*[dsensor]*/);
if($IPS_SENDER == "Variable") {
if ($bewegung && $dunkel)
{
echo "Flurlicht an";
FS20_SwitchMode (39375 /*[Flur\flurlicht]*/, true,);
IPS_SetScriptTimer (56862 /*[Scripte
achtschaltung_flurlicht]*/, 60);
}
} else {
echo "Flurlicht aus";
IPS_SetScriptTimer (56862 /*[Scripte
achtschaltung_flurlicht]*/ ,0);
SetValueBoolean(44197 /*[Flur\flur_piri\StatusVariable]*/, false);
FS20_SwitchMode (39375 /*[Flur\flurlicht]*/, false,);
}
?>
geht zwar das Licht an aber nicht wieder aus.
Kann mir einer helfen?
Grüße Mirco
1007
2. November 2008 um 00:38
2
Hallo
Wird den in deinem Logfile deine echos ausgegeben?
Ich mache das viel einfacher aber es funkt wobei
STATUS.SONNE.Nacht errechnet wird
(Sonnenaufgang Sonnenuntergang)
$c = $IPS_VARIABLE;
switch($c)
{
case I_EINGANG_PIRI_TREPPE:
if ( GetValueBoolean("STATUS.SONNE.Nacht") == true )
{
FS20_SwitchDuration(34564, TRUE,60);
}
break;
}
steiner
2. November 2008 um 07:14
3
… was soll das Ganze
IPS_SetScriptTimer
FS20_SwitchDuration
ist doppelt gemoppelt - besser dies …
FS20_SwitchDuration (39375, false, 0);
Geht das überhaupt
Naja der Ansatz war ja garnicht so schlecht.
Mache das so:
Script_1 Durch Trigger Bewegungsmelder true
include(IPS_GetScriptFile("Konstanten"));
if ($OG_Bal_Daemmerungssensor_Status == true) //Dunkel
{
if($hrs >= 21 or $hrs <= 6){FS20_SetIntensity($OG_Sz_Dimmer, 10, 5);}
if($hrs > 6 and $hrs < 21){FS20_SetIntensity($OG_Sz_Dimmer, 16, 5);}
}
//Bewegungsmelderzeit
SetValueInteger("OG_Sz_Zeit", 40);
IPS_SetScriptTimer("Script_2",1);
Script_2
include(IPS_GetScriptFile("Konstanten"));
SetValueInteger("OG_Sz_Zeit", GetValueInteger("OG_Sz_Zeit")-1);
if ($OG_Sz_Zeit == 1)
{
IPS_SetScriptTimer("Script_2",0);
SetValueBoolean("OG_Sz_Bewegungsmelder_Status", false);
FS20_SetIntensity($OG_Sz_Dimmer, 0, 5); //Intensität
SetValueBoolean("OG_Sz_Dimmer_Deckenlicht_Status", false);
}
Hat auch noch den Vorteil, dass man durch „OG_Sz_Zeit“ die Restzeit im Designer anzeigen kann.
steiner
2. November 2008 um 11:45
5
… wozu 2 Skripte
… „Restzeit im Designer anzeigen“ wenn man’s braucht - OK
Ansonsten sollte man darauf verzichten ein Skript sekündlich auszuführen.
MST
Stimmt ist mir noch garnicht aufgefallen. Das lässt sich auch auf ein Script minimieren. Müßte dann mit IPS_Sender abfragen. Aber das ein Script nicht sekündlich ausgeführt werden soll liegt dann an der Performance der Software… Bei mir gehts super mit mehreren Scripten.
steiner
2. November 2008 um 12:21
7
Bei mir gehts super mit mehreren Scripten
… das bezweifel ich auch gar nicht - IPS schafft das schon
Zur allgemeinen Info:
Jeder SetValue-Befehl erzeugt einen Eintrag in die Log-Datei
Für größere Installationen bitte beachten.
Auch gehört ein SetValue-Befehl nicht in eine Schleife rein.
MST
Sorry.
//Off Topic an
Auch gehört ein SetValue-Befehl nicht in eine Schleife rein.
Na das verstehe ich nun mal aber garnicht.
Wie soll ich dies hier dann anders machen.
So setze ich z.B. Variablen in IPS zurück. Was ist an diese Schleife denn falsch?
//---------------------Variablen zurücksetzen----------------------------------
$var_bool = array
(
"OG_Sz_Alarm",
"OG_Flu_Touch_Sperre",
"SK5_Touch",
"Run_OG_Bad_Modus",
"Run_Schlafen",
"Run",
"Schlummer_erlaubt",
"OG_Sz_Dimmer_Sperre",
"mail_erhalten_thomas",
"mail_erhalten_nadine",
"Mutti_1",
"Mutti_2",
"Mutti_3",
"Mutti_4",
"Mutti_5",
"Mutti_6",
"Mutti_7",
"Mutti_8",
"Mutti_9"
);
foreach($var_bool as $value)
{
SetValueBoolean($value, false);
}
//Off Topic aus
steiner
2. November 2008 um 12:45
9
Was ist an diese Schleife denn falsch? > nichts, nur kein gutes Beispiel
OK hatte wohl was falsch verstanden.
coolice
4. November 2008 um 08:05
11
steiner:
… was soll das Ganze
IPS_SetScriptTimer
FS20_SwitchDuration
ist doppelt gemoppelt - besser dies …
FS20_SwitchDuration (39375, false, 0);
Geht das überhaupt
OK. Wenn Ihr bitte einem PHP unbedarften noch sagen würdet, wo in Steiners Script die Variable von Piri und die Variable von Flurlicht rein muss wäre ich euch echt dankbar und der WAF würde wieder um einiges steigen.
PS. Das 1 Script aus dem 1 Thread lief Jahre lang in der V1.
Grüße Mirco
steiner
4. November 2008 um 09:22
12
wo die Variable von Piri und die Variable von Flurlicht rein muss
Garn nicht.
… bitte LESEN:
Das folgende IPSmagic-Skript - versteht nicht jeder, aber jeder kann es anwenden
Getriggert wird es „Bei Variablenaktualisierung“ einer Status-Variablen z.B. von einem Bewegungsmelders / PIRI.
MST
coolice
9. November 2008 um 18:59
13
OK verstanden.
Habe jetzt eine funktionierende Lösung mit 2 Scripten zum ein bzw aus schalten. Ich würde gerne aus den 2 Scripten eins machen, was mir aber nicht gelingt. Die zwei einzelnen Scripte werden bei True bzw False der Präsenz des Piri getriggert.
Script
<?
$bewegung = GetValueBoolean(51629 /*[Flur\flur_piri\StatusVariable\Präsenz]*/);
$dunkel = GetValueBoolean (25767 /*[Allgemeine Verwaltung\dsensor]*/);
if($IPS_SENDER == "Variable") {
if ($bewegung && $dunkel)
{
FS20_SwitchMode(39375 /*[Flur\flurlicht]*/, true);
}
}
?>
Script
<?
$bewegung = GetValueBoolean(51629 /*[Flur\flur_piri\StatusVariable\Präsenz]*/);
if($bewegung == false)
FS20_SwitchMode(39375 /*[Flur\flurlicht]*/, false);
FS20_SwitchMode(44197 /*[Flur\flur_piri\StatusVariable]*/, false);
?>
Meine Zusammenfassung sah so aus
<?
$bewegung = GetValueBoolean(51629 /*[Flur\flur_piri\StatusVariable\Präsenz]*/);
$dunkel = GetValueBoolean (25767 /*[Allgemeine Verwaltung\dsensor]*/);
if($IPS_SENDER == "Variable") {
if ($bewegung && $dunkel)
{
FS20_SwitchMode(39375 /*[Flur\flurlicht]*/, true);
}
} else {
FS20_SwitchMode(39375 /*[Flur\flurlicht]*/, false);
FS20_SwitchMode(44197 /*[Flur\flur_piri\StatusVariable]*/, false);
}
?>
Leider läuft das Script nicht richtig. Das Licht geht zwar an aber nicht aus.
Woran liegt das? Was ist falsch?
Grüße
Mirco
Attain
9. November 2008 um 19:11
14
coolice:
Meine Zusammenfassung sah so aus
<?
$bewegung = GetValueBoolean(51629 /*[Flur\flur_piri\StatusVariable\Präsenz]*/);
$dunkel = GetValueBoolean (25767 /*[Allgemeine Verwaltung\dsensor]*/);
if($IPS_SENDER == "Variable") {
if ($bewegung && $dunkel)
{
FS20_SwitchMode(39375 /*[Flur\flurlicht]*/, true);
}
} else {
FS20_SwitchMode(39375 /*[Flur\flurlicht]*/, false);
FS20_SwitchMode(44197 /*[Flur\flur_piri\StatusVariable]*/, false);
}
?>
Leider läuft das Script nicht richtig.
Die Klammersetzung ist falsch. Die geschweifte Klammer vor dem „else“ gehört zum „if“ und muß ganz ans ende.
<?
$bewegung = GetValueBoolean(51629 /*[Flur\flur_piri\StatusVariable\Präsenz]*/);
$dunkel = GetValueBoolean (25767 /*[Allgemeine Verwaltung\dsensor]*/);
if($IPS_SENDER == "Variable") {
if ($bewegung && $dunkel) {
FS20_SwitchMode(39375 /*[Flur\flurlicht]*/, true);
}
else {
FS20_SwitchMode(39375 /*[Flur\flurlicht]*/, false);
FS20_SwitchMode(44197 /*[Flur\flur_piri\StatusVariable]*/, false);
}
}
?>
coolice
9. November 2008 um 19:20
15
Jup. Danke Attain. Läuft. Blöde Klammern.