Ist ein zyklisches Ereignis verlässlich?

Kleine Implementationsfrage zum zyklischen Ereignis:

z. B. Ereignis: Alle 1 Tag(e) alle 1 Minute(n)

Tritt dieses Ereignis wirklich jede Minute auf, oder kann da durch Laufzeiten oder ähnliches mal eine ausfallen?

Wenn PHP Threads frei sind, dann ist das sehr verlässlich. Also in einem vernünftig konfigurierten IPS gibt es da keine Probleme.

Da habe ich mich da schlecht ausgedrückt!
Wenn in diesem zyklisch aufgerufenen Script auf

$time = date(„H:i“);
if($time ==„23:10“){ … }
elseif($time==„00:50“{ … }


getestet wird, passiert das sicher, oder wäre es sinnvoller das Script im 50 Sekundentakt aufrufen, und das Problem 2 Aufrufe in der gleichen Minute extra abfangen …

Der Ansatz war gestern in Lübeck Thema, als schlechtes Beispiel ;).

Dafür solltest du zwei Ereignisse mit der gewünschten Uhrzeit nehmen, mit deinem Ansatz belastet du dein System völlig unnötig.

Und dann kannst du auf die ID des Ereignisses prüfen um zu ermitteln welches gerade das Script gestartet hat. Ob also das 23:10 oder das 0:50 Ereignis ausgelöst hat.
Und die Prüfung auf die Uhrzeit rauswerfen.
Michael

Hm, so ganz trivial ist das nicht, der Stringvergleich über 5 Zeichen geht passabel schnell, und zur Zeit hängt eine Jalousiesteuerung für Süd/West/Ost einmal Helligkeitsabhängig und zum Anderen Zeitabhängig (23:00 - 07:30 geschlossen, um 12:00 zwischen SO auf SW Fassade umschalten, Ostfassade öffnen. Das Ganze ist in einen sehr kurzen und deshalb übersichtlichen und einfach zu wartendem Script untergebracht. Wenn ich das auf verschiedene zyklische Ereignisse aufteile, wird das ziemlich unübersichtlich. Ich werde mich aber nochmals reinknien.
Danke für eure Ideen.

Reinknien wäre sicherlich sinnvoll ;).

Es wird absolut nicht unübersichtlich und belastet dein System überhaupt nicht mehr, im Gegensatz zu deinem zyklischen, nahezu permanenten Aufruf.


switch ($_IPS['EVENT']) {
	case "12345":     // ID vom zyklischen Ereignis, einmal am Tag um 23:10
		...
	break;	
	case "12346":     // ID vom zyklischen Ereignis, einmal am Tag um 05:10
		...
	break;
}

Oder du lässt uns vollständig an deinem Problem teilhaben, mit deinem Script und wir können die einen guten Ansatz empfehlen ;).

So sieht es bis jetzt aus : (Die Jalousien werden über 2 Wago’s gesteuert, da werden auch wiederholte Schaltbefehle abgefangen, bzw eine passende Impulslänge für die Jalousieaktoren erzeugt). Leider fehlen die Kommentare aus dem Skripteditor, aber ich denke, was ich schalte ist im Prinzip klar. Sind jeweils eben Aktoren (Ost/West/Süd) (auf|ab) der jeweiligen Gebäudefront.

<?php 
    if (GetValue(29819))
    {
        $time = date("H:i");
        // In der Nacht werden alle Jalousien geschlossen
        if($time =="23:00")
        {
            ModBus_WriteCoil(25097, false);
            ModBus_WriteCoil(56843, true);
            ModBus_WriteCoil(43498, false);
            ModBus_WriteCoil(42772, true);
            ModBus_WriteCoil(53599, false);
            ModBus_WriteCoil(42536, true); 
        }
        if ($time == "07:30")
        {
            ModBus_WriteCoil(56843, false);
            ModBus_WriteCoil(25097, true);
            ModBus_WriteCoil(42772, false);
            ModBus_WriteCoil(43498, true);
            ModBus_WriteCoil(42536, false);    
            ModBus_WriteCoil(53599, true);
        }
        // Offset zwischen Öffnungs- und Schließhelligkeit
        $offset = GetValue(13137)-20;
        if ($offset < 1)
        {
            $offset = 1;
        }
        // Vormittags wird die Ost- und Südseite gesteuert
        if ($time> "07:30" && $time <="12:00")
        {
            if( GetValue(55952) 
                >= GetValue( 13137))
            {
                ModBus_WriteCoil(25097, false);
                ModBus_WriteCoil(56843, true);       
                ModBus_WriteCoil(43498, false);
                ModBus_WriteCoil(42772, true);        
            }
            elseif (GetValue(55952 < $offset))
            {
                ModBus_WriteCoil(56843, false);  
                ModBus_WriteCoil(25097, true);   
                ModBus_WriteCoil(42772, false);
                ModBus_WriteCoil(43498, true);               
            }
         }
        else
        // Nachmittags die Süd- und die Westseite
        {  
            if( GetValue (55952)
                >= GetValue(13137))
            {
                ModBus_WriteCoil(43498, false);
                ModBus_WriteCoil(42772, true);  
                ModBus_WriteCoil(53599, false);
                ModBus_WriteCoil(42536, true);  
            }
            elseif (GetValue(55952 < $offset))
            {
                ModBus_WriteCoil(42772, false);
                ModBus_WriteCoil(43498, true);     
                ModBus_WriteCoil(42536, false);    
                ModBus_WriteCoil(53599, true);
                
            }
            // Um 12:00 wird die Ostseite geöffnet
            if($time="12:00")
            {
                ModBus_WriteCoil(56843, false);  
                ModBus_WriteCoil(25097, true); 
            }
        } 
    }
?>

… in Zeile 60 hat sich eine schließende Klammer zu viel reingemogelt :slight_smile: Ignorieren!

Ich würde auch - wie von ralf vorgeschlagen - ein Event auf die gewünschte Uhrzeit legen und im Skript abffragen, welches Event getriggert hat, statt dem, was Du da jetzt entworfen hast.

Ich würde dir empfehlen mal einen Blick auf die IPSLibrary zu werfen, da ist eine sehr mächtige und sehr gut funktionierende Jalousiesteuerung fix und fertig enthalten. Ich möchte das Teil nicht mehr missen.

Oder etwas neuer und aktuell das Blind Control Modul von bumas.

Auch das ist eine Überlegung wert.

Der große Vorteil der Library ist in meinen Augen aber, dass da schon eine komplett fertige Oberfläche für die gesamte Bedienung aller Elemente für das WebFront mit geliefert wird.