Flurlicht schalten

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

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;

}

… was soll das Ganze :confused:
IPS_SetScriptTimer
FS20_SwitchDuration

ist doppelt gemoppelt - besser dies

FS20_SwitchDuration (39375, false, 0);

Geht das überhaupt :confused:

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.

… wozu 2 Skripte :confused:
… „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.:slight_smile: 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.

Bei mir gehts super mit mehreren Scripten

… das bezweifel ich auch gar nicht - IPS schafft das schon :slight_smile:

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

Was ist an diese Schleife denn falsch? > nichts, nur kein gutes Beispiel

OK hatte wohl was falsch verstanden.:wink:

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.:slight_smile:

Grüße Mirco

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

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.

  1. 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);
  }
}
?>
  1. 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

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);
  }
}
?>

Jup. Danke Attain. Läuft. Blöde Klammern. :wink: