Rollosteuerung wird komplexer...

Liebe Community,

aktuell habe ich bei mir die folgenden Rollosteuerung mittels Zwave und Fibaro Roller Shutter realisiert:

Zunächst mal habe ich einen Schalter für Rolloautomatik ‚ein/aus‘.
Wenn die Automatik eingeschaltet ist, fahren die Rollos morgens bei einer bestimmten Helligkeit hoch und abends bei einer bestimmten Dunkelheit wieder runter. Die dafür benötigten Skripte werden mit dem Ereignis Variablenänderung auf einen Außensensor nach Luminance gestartet. -> Funktioniert.

Jetzt möchte ich gerne den nächsten Schritt implementieren:
Wenn jemand im Haus ein Rollo manuell hochfährt, wird mit der nächsten Helligkeitsmessung das Skript für die Automatisierung erneut ausgeführt und fährt wieder runter. Diesen Zustand möchte ich gerne verhindern. Im weiteren möchte ich aber die Automatisierung auch nicht komplett aushebeln.

Hat jemand eine Idee?

Du kannst ja wenn ein Rollladen manuell gefahren wird eine Hilfsvariable Manuell (Typ Boolean) auf true setzten. Alle Hilfsvariablen setzt Du dann z.B. Nachts mit einem Timer und Skript wieder auf false. Dann fragst Du in deinem Automatik Skript einfach zusätzlich ab ob die Hilfsvariable auf true steht. Wenn das der Fall sein sollte wird an dem Rollladen auch nichts verstellt.

Hi!

Ich habe bei mir „Sperr-Variablen“ angelegt. Wenn z.B. ein Licht von Hand geschaltet wird, dann wird die Sperr-Variable auf TRUE gesetzt…und damit ist die Automatik „ausgesperrt“. Wenn ich das Licht dann von Hand wieder ausschalte, wird die Sperre wieder aufgehoben. Sind bestimmte Bedingungen (das sind eine ganze Menge und das muss jeder für sich selbst überlegen) erfüllt, wird die Sperre ebenfalls wieder aufgehoben und auf FALSE gesetzt.

Grüße,
Chris

Danke. Habe mir zusätzliche Variablen erstellt. Funktioniert wunderbar!

Hallo,

das habe ich auch noch nicht zufriedenstellend gelöst.
Momentan werte ich den Zeitunterschied zwischen Skriptausführung und Rolladenbewegung aus.
Wenn keine Skriptausführung aber Rolladenbewegung, dann Handbetrieb.

Wie setzt ihr denn die Hilfsvariable? IPS weis doch nicht wenn der STATE des Aktors sich ändert ob ein Skript gelaufen ist, oder der Taster am Aktor gedrückt wurde.

Also ich weiß, ob ein Aktor durch eine Automatik oder per Taster oder TimerEvent gesteuert wurde. Dazu überwache ich einfach im „Steuerungs-Script“ welches Event/Script/Timer die Aktion „angestoßen“ hat.

EDIT: Und wenn man mal nicht alles weiß, dann kann man nach Ausschlussverfahren gehen. zB wurde es nicht per Automatik gesteuert und nicht per Timer, also muss von Hand gesteuert worden sein. Oder Anwesenheit ist FALSE, dann muss automatisch gesteuert worden sein. Usw…

Grüße,
Chris

Auf die Problematik bin ich auch gestoßen:

ransi
Hallo,…Wie setzt ihr denn die Hilfsvariable? IPS weis doch nicht wenn der STATE des Aktors sich ändert ob ein Skript gelaufen ist, oder der Taster am Aktor gedrückt wurde.

Meine Hilfsvariable wird auch geschaltet, wenn das Skript ausführt.

Bayaro
Also ich weiß, ob ein Aktor durch eine Automatik oder per Taster oder TimerEvent gesteuert wurde. Dazu überwache ich einfach im „Steuerungs-Script“ welches Event/Script/Timer die Aktion „angestoßen“ hat.

EDIT: Und wenn man mal nicht alles weiß, dann kann man nach Ausschlussverfahren gehen. zB wurde es nicht per Automatik gesteuert und nicht per Timer, also muss von Hand gesteuert worden sein. Oder Anwesenheit ist FALSE, dann muss automatisch gesteuert worden sein. Usw…

Kannst du das nochmal etwas näher erläutern?

Hi Benny!

Wüsste nicht, wie ich das näher erklären soll…

Wird z.B. eine Lampe über einen Taster geschaltet, dann weiß ich dass ja, weil die Schaltung durch das Taster-Event ausgelöst wurde. Wurde eine Lampe durch Automatik-Script-XY geschaltet, dann weiß ich das, weil das aufrufende Script die Automatik-XY war.

Und bzgl. Ausschlussverfahren. Gibt es nur 2 Möglichkeiten eine Lampe einzuschalten (Taster oder Automatik) und man weiß, dass es der Taster nicht war, weil das Event „nicht ausgelöst hat“, dann muss es zwangsweise die Automatik gewesen sein.

Allgemein >> man kann ich Scripten doch $_IPS[„SENDER“] und $_IPS[„EVENT“] oder auch $_IPS[„VARIABLE“] auswerten und weiß dann wie wo was passiert.

Grüße,
Chris

Okay?

Ich habe folgendes Skript:

// Skript 'Steuerung Fußbodenheizung Büro' wird ausgeführt
<?
$varAktuelleZeit = time();				// ermitteln der aktuellen Zeit im Unix-Format  
 
$startheat1 = strtotime("00:00");		// Startzeit Heizintervall 1
$endheat1 = strtotime("04:59");			// Endzeit Heizintervall 1

$startheat2 = strtotime("05:00");		// Startzeit Heizintervall 2
$endheat2 = strtotime("07:59");			// Endzeit Heizintervall 2
 
$startheat3 = strtotime("08:00");		// Startzeit Heizintervall 3
$endheat3 = strtotime("16:59");			// Endzeit Heizintervall 3

$startheat4 = strtotime("17:00");		// Startzeit Heizintervall 4
$endheat4 = strtotime("21:59");			// Endzeit Heizintervall 4

$startheat5 = strtotime("22:00");		// Startzeit Heizintervall 5
$endheat5 = strtotime("23:59");			// Endzeit Heizintervall 5
  
																									                                                                                                       
{                                                                                                      
if (($varAktuelleZeit >= $startheat1) and ($varAktuelleZeit <= $endheat1))											// Start Heizintervall 1
	ZW_ThermostatSetPointSet(43916 /*[Erdgeschoss\Büro\Zwave HeatIt Thermostat 01 (NodeID 075)]*/, 1, 18); 			// Raumtemperatur 16 Grad
}
{
if (($varAktuelleZeit >= $startheat2) and ($varAktuelleZeit <= $endheat2))											// Start Heizintervall 2
	ZW_ThermostatSetPointSet(43916 /*[Erdgeschoss\Büro\Zwave HeatIt Thermostat 01 (NodeID 075)]*/, 1, 20); 			// Raumtemperatur 22 Grad
}
{
if (($varAktuelleZeit >= $startheat3) and ($varAktuelleZeit <= $endheat3))											// Start Heizintervall 3
	ZW_ThermostatSetPointSet(43916 /*[Erdgeschoss\Büro\Zwave HeatIt Thermostat 01 (NodeID 075)]*/, 1, 21); 			// Raumtemperatur 16 Grad
}
{
if (($varAktuelleZeit >= $startheat4) and ($varAktuelleZeit <= $endheat4))											// Start Heizintervall 4
	ZW_ThermostatSetPointSet(43916 /*[Erdgeschoss\Büro\Zwave HeatIt Thermostat 01 (NodeID 075)]*/, 1, 23); 			// Raumtemperatur 20 Grad
}
{
if (($varAktuelleZeit >= $startheat5) and ($varAktuelleZeit <= $endheat5))											// Start Heizintervall 5
	ZW_ThermostatSetPointSet(43916 /*[Erdgeschoss\Büro\Zwave HeatIt Thermostat 01 (NodeID 075)]*/, 1, 18); 			// Raumtemperatur 16 Grad
}	
?>

Das ganze wird mit einem Event gestartet, welches alle 5 Minuten das Skript startet.

Ich habe leider keinen Ansatz, wie ich da jetzt was auswerten kann.

Egal ob per Script oder manuell, es wird immer SetPoint verändert:

Wie gesagt >> $_IPS[„SENDER“]

Damit kannst du unterscheiden zwischen manuellen Script-Start (Sender = Execute), Ausführung per Script-Timer (Sender = TimerEvent) oder Ausführung durch Variablenänderung über zugehöriges Event (Sender = Variable).

Zusätzlich könnte man bei den Events dann auch noch im Detail unterscheiden mit Auswertung von $_IPS[„EVENT“].

Grüße,
Chris