Rolladensteuerung automatisiert (Rademacher) Probleme

Hallo zusammen!

Ich bin ganz neu in Sachen IP Symcon unterwegs. Da ich leider keine Programmierkenntnisse und auch keine PHP Kenntnisse habe, schlage ich mich gerade mit der Testversion von IP Symcom herum.
Eingebunden bekommen habe ich den Homepilot 2 von Rademacher und auch die dort angemeldeten Aktoren usw.

Jetzt wollte ich testweise den Rolladen über IP Symcon automatisiert hoch/runterfahren lassen (anhand Lichtwerte, die mir der Rademacher Umweltsensor liefert. Das funktioniert auch, wenn ich die vorkonfigurierten Befehle „HP_Setposition“ und HP_DirectionUp" verwende.

Nun kann es aber vorkommen, das kurzzeitige Beschattungen auftreten und ich möchte ja nicht das Rollo dann nonstop hoch und runterfahren lassen. Daher wollte ich eine Zeitverzögerung einbauen, d.h. wenn Helligkeit überschritten, dann Zeit X (testweise 60sec) warten und nach Ablauf der 60sec dann Rollo auf 50% (sofern die Helligkeit noch überschritten).

Bei Unterschreiten der Helligkeit, dann Zeit X (testweise 60sec) warten, danach Rollo hoch (sofern Helligkeit noch unterschritten)

Tja, was soll ich sagen? Über PHP Code tut sich gar nichts, weder die Zeitsteuerung greift, noch fährt das Rollo herunter oder hoch.

Habe folgendes in den Ereignissen stehen:

Für Rolladen auf 50% fahren:

HP_SetPosition($_IPS[‚TARGET‘], 50);
IPS_SetScriptTimer($24002, 60);

Wobei $24002 die Objekt-ID des Ereignisses ist

Für Rolladen auf:

HP_DirectionUp($_IPS[‚TARGET‘]);
IPS_SetScriptTimer($13923, 60);

Wobei $13923 die Objekt-ID des Ereignisses ist

Entweder habe ich einen Denkfehler oder mein Vorhaben ist so nicht realisierbar?

Vielen Dank für Eure Hilfe!

Ich bekomme es einfach nicht hin, habe nun schon rumgefummelt ohne Ende…

Wenn ich die Zeile mit dem „IPS_SetScriptTimer“ lösche, dann funktioniert das automatische Auf und Abfahren. Also liegt es anscheinend an dem ScriptTimer.
Da ich ja nun die Rollläden nicht nonstop hoch runterfahren möchte (bei Über und Unterschreitung des Lichtwertes), sondern eine Zeitverzögerung haben möchte, bin ich langsam echt am verzweifeln :(:confused:

Du hast zwar einen Timer gestartet aber vergessen diesen dann auch wieder auszuschalten.
Probiere es mal so:


<?
 $limit = 60; // Brightness Limit
 $brightness = GetValue(19484 /*[Geräte\Homematic\Räume\Garten\Wetter OC3 Garten\Helligkeit]*/);
 if($_IPS['SENDER'] == "TimerEvent")
{
    $position = GetValue(34567); // Position des Rollladen
	// Prüfen ob Helligkeit noch über Limit
	if($brightness > $limit && $position != 50)
	{
		// Rollladen fahren
		HP_SetPosition(12345, 50); // Objekt ID der Rollladen Instanz ergänzen
	}
	 
    //Timer ausschalten
    IPS_SetScriptTimer($_IPS['SELF'], 0);
} else {
    // Wird ausgeführt sobald das Ereigniss bei Varibalenänderung der Variable Helligkeit auslöst
     
    //Timer anschalten
    IPS_SetScriptTimer($_IPS['SELF'], 60);
}

?>

Das Skript wird bei Variablenänderung der Variable Helligkeit durch ein Ereigniss aufgerufen. Sobald die Variable sich ändern sollte, wird das Skript aufgerufen, da dies nicht durch einen zyklischen Timer aufgerufen wurde, greift die else
Bedingung, es wird also ein Timer gestartet. Nach 60 Sekunden wird dann das Skript erneut durch einen zyklischen Timer gestartet. Diesmal greift die erste Bedingung if($_IPS[‚SENDER‘] == „TimerEvent“) hier wird nun geprüft ob die Helligkeit über dem Grenzwert liegt, außerdem wird die Rollladenposition abgefragt. Sollte die Helligkeit überschritten sein und gleichzeitig der Rolllladen nicht bereits auf 50% stehen wird dann der Rollladen auf 50% gestellt.

So sollte sich das auf der Grundlage an Deine Bedürfnisse anpassen lassen.

Also nochmal ganz von vorne:

Ich habe im Konfigurator 2 Ereignisse angelegt. Einmal für „Lichtwert überschritten“ und einmal für „Lichtwert unterschritten“.
Siehe Screenshot:

Das erste Ereignis „Bei Grenzüberschreitung Lichtwert vom Umweltsensor“ mit dem Wert 20.000 (Lux):
2Unbenannt.JPG

Dann „Gerät ausführen“, den Rolladenmotor gewählt und den PHP Code unten reingeschrieben:
3Unbenannt.JPG

Ohne den hier eingefügten Timer funktioniert das Herunterfahren des Rollladen… mit dem Timer-Eintrag geht gar nichts.

Wieso muss ich den Timer denn wieder beenden? Wenn das Ereignis nicht mehr erfüllt wird (Grenzwert-Unterschreitung des Lichtwertes), dann fällt doch der Auslöser weg und das Skript ist hinfällig?

Vielen Dank nochmals!

Ich habe jetzt mal anhand Deines Skripts eines erstellt und es wird als fehlerhaft markiert.
Ich habe die ID’s angepasst, habe aber nur noch Fragezeichen vor dem Kopf.

Irgendwie komme ich überhaupt nicht zum Ziel oder zu einem Erfolg…

Wann kommt denn die Fehlermeldung genau? Wenn Du das Skript versuchst direkt auszuführen wenn dies geöffnet ist, ist das normal, da Systemvariablen enthalten sind und diese bekommen ihren Inhalt nur durch das Aufrufen des Skripts durch einen externen Timer.

Diese Aussage bezog sich auf


IPS_SetScriptTimer(13923, 60);

Es gibt unterschiedliche Events. Das was Du verwendest ist ein Event bei Variablenänderung. Es gibt aber auch zyklische Timer. Der Befehl SetScriptTimer erstellt einen zyklischen Timer der das Skript in dem angegebenen Intervall erneut ausführt. Wenn Du das also auf 60 einstellst, bedeutet dies dass das Skript alle 60 Sekunden ausgeführt wird. Das willst Du ja aber nicht, das Skript soll ja nur einmal nach 60 Sekunden erneut durch den Timer aufgerufen werden. Daher muss in dem Fall eben bei erneuten Aufruf des Skripts der ScriptTimer wieder auf 0 gesetzt werdenm sonst würde das Skript weiterhin alle 60 Sekunden aufgerufen werden.

In dem Ereigniss gibst Du nicht den PHP Code direkt ein in dem Fall sondern Du lässt das Skript starten das Du erstellt hast.

Nein, ich nutze keine Variablenänderung, sondern eine Grenzwertüberschreitung. Variablenänderung wäre ja bei jeder Änderung der Variable…

Das Script soll auch nicht nach 60 Sekunden erneut aufgerufen werden, sondern soll einmalig nach 60 Sekunden aufgerufen werden (nicht zweimal oder mehrmals).

Sprich:

Grenzwert überschritten – Zeit x warten – Ausführen der Aktion (sofern Grenzwert noch überschritten)
Grenzwert unterschritten – Zeit x warten – Ausführen der Aktion (sofern Grenzwert noch unterschritten)

Mit anderen Worten:

Grenzwert überschritten – 10min warten – ist Grenzwert immer noch überschritten = Rollo zu
Grenzwert unterschritten --20min warten – ist Grenzwert immer noch unterschritten = Rollo auf

Grenzwert unterschritten – 10min warten – Grenzwert überschritten – 20min warten – Grenzwert unterschritten – 10min warten – usw…

Es geht beides im ersten Fall prüfst Du ja im Skript ob der Grenzwert überschritten wurde, es sollte aber auch mit Grenzwertüberschreitung gehen, Du must nur das Ereignis auf das erstellte Skript legen.

Genau, es gibt aber keine Möglichkeit zu sagen führe ein Skript einmalig nach X Sekunden aus. IP-Symcon kennt nur führe ein Skript in einem Interval von x Sekunden aus. Und weil das eben so ist, wird der Skripttimer nach dem ersten Aufrufen wieder auf 0 gesetzt (s.o.), dass sorgt dann genau dafür das das Skript einmalig nach X Sekunden aufgeführt wird.