From 7d92e2c50ebe874bc2c4b012c5ceb09072091e76 Mon Sep 17 00:00:00 2001 From: sebastianb <> Date: Sat, 9 Jun 2007 22:20:46 +0000 Subject: [PATCH] Initial Version git-svn-id: https://svn.fhem.de/fhem/trunk@74 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/examples/07_sunset_windowed | 112 +++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100755 fhem/examples/07_sunset_windowed diff --git a/fhem/examples/07_sunset_windowed b/fhem/examples/07_sunset_windowed new file mode 100755 index 000000000..2dbb7e221 --- /dev/null +++ b/fhem/examples/07_sunset_windowed @@ -0,0 +1,112 @@ +########################################################################### +# Beispiel: Steuerung nach Sonnenzyklus mit Zeitfenster +# +# Aufgabenstellung: Ein Rolladen soll eine Stunde nach Sonnenuntergang +# schliessen, aber fruehestens um 20:00 und spaetestens um 22:00 +# +# Loesungsansatz: Es werden zwei at-Jobs zu festen Zeiten eingeplant, um +# 20:00 und um 22:00, zusaetzlich existiert ein at-Job, der mit der +# variablen Zeit "sunset_rel(3600)" eingeplant ist. Die einzelnen Jobs +# verwenden ein benutzerdefiniertes Attribut "freigabe", um untereinander +# Informationen auszutauschen. +# +# Funktionsweise: Der erste ablaufende Job prueft den Zustand des Attributs +# "freigabe". Wenn es existiert, wird der Rolladen geschlossen und das +# Attribut geloescht. Wenn nicht, wird das Attribut gesetzt, der Rolladen +# aber nicht geschlossen. Der naechste Job findet dann ein gesetztes Attribut +# vor, schliesst den Rolladen und loescht das Atribut. Der 22:00-Job, der +# das Ende des Zeitfensters darstellt, loescht das Attribut und schliesst +# den Rolladen, falls noch nicht geschehen. +# +# Sonnenuntergang um 18:30: +# um 19:30 laeuft der variable Job und setzt das Attribut +# um 20:00 laeuft der fixe Job 1 und schliesst den Rolladen +# um 22:00 laeuft der fixe Job 2 (und veraendert nichts) +# Sonnenuntergang um 20:30: +# um 20:00 laeuft der fixe Job 1 und setzt das Attribut +# um 21:30 laeuft der variable Job und schliesst den Rolladen +# um 22:00 laeuft der fixe Job 2 (und veraendert nichts) +# Sonnenuntergang um 22:30: +# um 20:00 laeuft der fixe Job 1 und setzt das Attribut +# um 22:00 laeuft der fixe Job 2 und schliesst den Rolladen +# um 23:30 laeuft der variable Job (und veraendert nichts) +########################################################################### +# example: sunset-dependent action within fixed-time boundaries +# +# task: A shutter is to be closed one hour past sunset, but not before +# 20:00 and at 22:00 at the latest. +# +# solution: Two fixed-time jobs at 20:00 and 22:00, respectively, mark the +# desired "window of opportunity". A time-variable job is scheduled for one +# hour past sunset ("sunset_rel(3600)"). The jobs use a user defined attribute +# named "freigabe" ("permission" in german) to exchange information. + +# How it works: The first job checks the status of the attribute. If it's set, +# the shutter is closed and the attribute is deleted. If the attribute doesn't +# exist, it is set but the shutter will not be closed. The next job running +# then finds the attribute set and therefore closes the shutter and deletes +# the attribute. The job running at 22:00 unconditionally deletes the attribute +# and closes the shutter, if it's still open. +# +# sunset at 18:30: +# at 19:30 the time-variable job runs and sets the attribute +# at 20:00 fixed job 1 runs and closes the shutter +# at 22:00 fixed job 2 runs (and changes nothing) +# sunset at 20:30: +# at 20:00 fixed job 1 runs and sets the attribute +# at 21:30 the time-variable job runs and closes the shutter +# at 22:00 fixed job 2 runs (and changes nothing) +# sunset at 22:30: +# at 20:00 fixed job 1 runs and sets the attribute +# at 22:00 fixed job 2 runs and closes the shutter +# at 23:30 the time-variable job runs (and changes nothing) +########################################################################### + +# Globale Einstellungen +# global settings + +attr global logfile /var/log/fhem/fhem.log +attr global statefile /var/cache/fhem/fhem.save +attr global pidfilename /var/run/fhem.pid +attr global verbose 3 +attr global port 7072 +attr global modpath /usr/local/lib + +# Die Definition des Attributs "freigabe" +# definition of attribute "freigabe" + +attr global userattr freigabe + +define FHZ FHZ /dev/ttyUSB0 + +{ sunrise_coord("10.000", "53.550", "Europe/Berlin") } + +# devices + +define roll_eg_wz1 FS20 fb02 0c fg f2 lm 8f + +########################################################################## +# Timing-Funktionen +# timed jobs +########################################################################## + +define roll_wz1_off1 at *20:00:00 { if( $value{roll_eg_wz1} ne "off" ) { \ + if( $attr{roll_eg_wz1}{freigabe} ) { \ + fhem("set roll_eg_wz1 off");; \ + fhem("delattr roll_eg_wz1 freigabe") \ + } else { \ + fhem("attr roll_eg_wz1 freigabe") \ + } \ + } } + +define roll_wz1_off2 at +*{sunset_rel(+3600)} { if( $value{roll_eg_wz1} ne "off" ) { \ + if( $attr{roll_eg_wz1}{freigabe} ) { \ + fhem("set roll_eg_wz1 off");; \ + fhem("delattr roll_eg_wz1 freigabe") \ + } else { \ + fhem("attr roll_eg_wz1 freigabe") \ + } \ + } } + +define roll_wz1_off3 at *22:00:00 { fhem("set roll_eg_wz1 off") if($value{roll_eg_wz1} ne "off");; \ + fhem("delattr roll_eg_wz1 freigabe") }