Und / Oder - Verknüpfung

Hallo Experten,

ich habe ein kleine Und- und Oder- Verknüpfung und wollte mal fragen, ob man die nicht eleganter lösen könnte:
Ich möchte die Rollläden wenn es hell wird hoch fahren - aber bitte nicht vor 6:45.
Für Euch sicher eine banale Sache, ich habe es so gelöst:

$sunrise = True;  // anpassen ggf. auch mit Hilfe eines Helligkeit-Sensor
$x = IPS_GetEvent(28707);
$next_run =  $x['NextRun'] - time();  // 86400 > 1 Tag
//echo "Next Run : $next_run
";

if((($IPS_SENDER == "TimerEvent") and ($sunrise == True)) or (($sunrise == True) and ($next_run > 21600))){
	//IPS_RunScript(12345 /*[Rollläden öffnen*/);
}

Getriggert wird das Skript von meinem Helligkeit-Sensor sowie zwei Timer:
So & So um 10:00 sowie Mo-Fr 6:45 (ID: 28707 / siehe Bild)
Meine Überlegung: um 10:00 (1.Timer) ist es meistens immer hell und mit Hilfe der Restlaufzeit (2.Timer) verhindere ich ein Hochfahren vor Ablauf.

Wie würdet Ihr so etwas lösen?
Danke für Eure Vorschläge.

Silvia

timer_mo_fr.png

Hallo Silvia,

hab’s folgendermaßen gelöst:

Hier ein Script (noch für Version 1) zum automatischen Schliessen der Rollläden bei Sonnenuntergang.
Gestartet wird es duch einen Eintrage Im TWZ zum (errechneten) Zeitpunkt des Sonnenuntergangs:

IPS_SetScriptTimer("Sonnenuntergang",300);
<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Sonnenuntergang.ips.php
Trigger  : TWZ - Sonnenuntergang setzt Script-Timer
Interval : 300 Sekunden
Autor    : EHB
*/

// Variablen
$Helligkeit = 0;
$Temperatur = 0;
$Text1 = ""; // Logeintrag
$Text2 = ""; // Logeintrag
$SUNSET = GetValueInteger("SUNSET"); // Zeit Sonnenuntergang übernehmen

include(IPS_GetScriptFile("HS485_Include"));  // HS485-Prozeduren einbinden

$Text1 = " - Script-Timer "; // Logeintrag
$Text2 = "läuft seit ".$SUNSET." Uhr"; // Logeintrag
Logbuch_schreiben($IPS_SELF,$Text1,$Text2); // INC-Funktion : Logbucheintrag vornehmen
   
$Helligkeit = GetValueInteger("Luxsensor_Garage"); // Helligkeitswert übernehmen
$Temperatur = GetValueFloat("TFS_Vorgarten_Temperatur"); // Aussentemperatur übernehmen

if ($Helligkeit < 10) // wenn Helligkeit kleiner 10 Lux
{
   $Text1 = " - Rollladen Hobbyraum und Küche --> "; // Logeintrag
   SetValueBoolean("Tag",false); // Variable "Nacht" auf true setzen
   if ($Temperatur > 15) // wenn Aussentemperaur > 15 Grad
   {
      SetValueInteger("Rollladen_Hobbyraum",5); // Rollladen anhalten
      IPS_Sleep(1000); // 1 Sekunde Pause
      SetValueInteger("Rollladen_Hobbyraum",4); // Rollladen auf Schlitz fahren
      IPS_Sleep(10000); // 10 Sekunden Pause
      SetValueInteger("Rollladen_Kueche",5); // Rollladen anhalten
      IPS_Sleep(1000); // 1 Sekunde Pause
      SetValueInteger("Rollladen_Kueche",4); // Rollladen auf Schlitz fahren
      $Text2 = "auf Schlitz fahren"; // Logeintrag
   }
   else // wenn Aussentemperaur < 15 Grad
   {
      SetValueInteger("Rollladen_Hobbyraum",5); // Rollladen anhalten
      IPS_Sleep(1000); // 1 Sekunde Pause
      SetValueInteger("Rollladen_Hobbyraum",1); // Rollladen zufahren
      IPS_Sleep(10000); // 10 Sekunden Pause
      SetValueInteger("Rollladen_Kueche",5); // Rollladen anhalten
      IPS_Sleep(1000); // 1 Sekunde Pause
      SetValueInteger("Rollladen_Kueche",1); // Rollladen zufahren
      $Text2 = "schliessen"; // Logeintrag
   }
   Logbuch_schreiben($IPS_SELF,$Text1,$Text2); // INC-Funktion : Logbucheintrag vornehmen
   IPS_SetScriptTimer("Sonnenuntergang",0); // Script-Timer anhalten
   $Text1 = " - Script-Timer "; // Logeintrag
   $Text2 = "angehalten!"; // Logeintrag
   Logbuch_schreiben($IPS_SELF,$Text1,$Text2); // INC-Funktion : Logbucheintrag vornehmen
}
?>

Das Script wird alle 300 Sekunden gestartet, prüft die aktuelle Helligkeit und Temperatur, schliesst die Rollläden beim Unterschreiten eines Helligkeitswertes.
Die Rollläden werden abhängig von der Aussentemperatur entweder komplett geschlossen, oder auf „Schlitzstellung“ gefahren.
Anschliessend wird der Script-Timer auf „0“ gesetzt.

Hallo Ernst,

danke für Deine Antwort.
Ist es nicht sinnvoller eine Variable „Dämmerung“ anzulegen, mit der kann man dann auch z.B. „Beleuchtung-Skripte“ triggern?
So muss man nicht in vielen Skripten alle 300 Sekunden den „$Helligkeit < 10“ Vergleich durchführen (spart ggf. auch ein wenig CPU).
Aber nun zurück zu meiner Verknüpfung …

Silvia

Hallo Silvia,

gute Idee!

Wie wär’s damit:

Das erste Script aktiviert Zeitgesteuert das Ereignis „Rollladen auf“.

<?
 // Script "Aufstehen"
 
 
 // Event "Rollladen auf" bei Helligkeit > 200 aktivieren
 IPS_SetEventActive(26984,true); 

?>

Wird der Helligkeitswert überschritten:

<?
 // Script "Rollladen auf"
 
 // Befehlsfolge zum Öffnen der Rollläden
 
 ......
 ......
 
// Event "Rollladen auf" bei Helligkeit > 200 deaktivieren
IPS_SetEventActive(26984,false);
?>

Zum Schluß wird das Ereignis wieder deaktiviert!