Hallo fhem-Gemeinde,
möchte hier mal mein Modul zur Zeitprogrammierung meiner Rolladen (Somfy) und zur Beschattungssteuerung vorstellen.
1. Eigenschaften
Die Programmierung der Zeitsteuerung erfolgt über dummys mit Menüs. Für jeden Rolladen einzeln oder für "Alle" lassen sich die täglichen Öffnungs- und Schließzeiten (Montag...Sonntag, Alle Tage, Werktage, Wochenende) getrennt einstellen.
Dabei kann man zuerst für "Alle" Rolladen und "Alle Tage" die Zeiten einstellen und anschliessend für einzelne Rolladen die Abweichungen festlegen.
Die Öffnungs- und Schliesszeiten lassen sich wie folgt festlegen:
a) feste Uhrzeit
b) Sonnenauf- /-untergang + Minuten oder Sperrzeit (nicht vor)
c) zusätzlich einen "Soft-Modus", dh. zur angegebenen Zeit wird der Rolladen auf "Dämmerung" gestellt und 15 Minuten später erst ganz geöffnet (vorzugsweise für Schlafzimmer :-O)
Oberhalt einer voreinstellbaren Temperatur (Nachtskalt) werden die Rolladen nur auf "Sperrposition" (Lüftung) heruntergefahren. Im kalten Winter auf "geschlossen". Die Temperatur wird aus dem Wetter-Modul abgeleitet (muss also vorhanden sein - s.u.. Anpassungen).
An Feiertagen wird das für Sonntag hinterlegte Öffnungs- und Schliessprogramm ausgeführt (holidayModul muss vorhanden sein, s.u.)
2. Funktionsweise
Die dummys "Rolladenselektror" und "Wochentagselektor" hinterlegen bei Drücken auf "set" ihre eingestellten Werte als Readings bei den Rolladen. (0-Open, 0-Close, 1-Open...6-Close)
Ein at führt jeweils um 15 und um 3 Uhr "BerechneRolladenSchaltzeiten" aus. Das perl-Skript erzeugt für jeden Rolladen ein "at" (Namen: Namen des Rolladen + Uhrzeit + _at)
Alle dummy-Steuerparameter werden in einer readingsGroup dargestellt. Ist die "RolladenAutomatik" "aus" werden die Programmierungseinstellungen ausgeblendet.
Wählt man mehrere Rolladen oder Tage für die Programmierung aus und sind die anzuzeigenen Werte nicht identisch, so wird ein "-" angezeigt.
Wird ein "-" für einen Wert ausgewählt, so werden die entsprechenden Werte bei den Rolladen nicht überschrieben.
3. Was muss angelegt werden?
Mit dem dummy "RolladenAutomatik" kann die ganze Steuerung aktiviert / deaktiviert werden.
define RolladenAutomatik dummy
attr RolladenAutomatik alias Rolladen automatisch
attr RolladenAutomatik devStateIcon ein:fts_shutter_automatic:aus aus:fts_shutter_manual:ein
attr RolladenAutomatik group Automation
attr RolladenAutomatik setList state:aus,ein
attr RolladenAutomatik webCmd state
# die Weboberflaeche anpassen, wenn Rolladenautomatik ein/aus geschaltet wird
define RolladenAutomatik_notify notify RolladenAutomatik:.* {Recalc_Rolladen_rg();;}
# Programmierung der Zeitsteuerung
define RolladenSelektor dummy
attr RolladenSelektor alias Auswahl Raum
attr RolladenSelektor group Rolladen
# Das Menü hier muss angepasst werden
# und auch der Hash %rolliste in 99_myutilsSomfyRolladen
# Menuname zu Rolladennamen
attr RolladenSelektor setList Raum:Alle,Schlafzimmer Fenster,Schlafzimmer Tür,Marinas Zimmer Fenster,Marinas Zimmer Tür,Arbeitszimmer,Bad,Wohnzimmer,Terrassentür,Küche Aktion:offen,Sonnenschutz,Dämmerung,gesperrt,geschlossen
attr RolladenSelektor verbose 2
attr RolladenSelektor webCmd Raum:Aktion:set
define RolladenSelektor_not notify RolladenSelektor:.* {RolladenSelektor_not("$NAME","$EVENT");;}
define RolladenWochentagSelektor dummy
attr RolladenWochentagSelektor alias Auswahl Tag
attr RolladenWochentagSelektor group Rolladen
attr RolladenWochentagSelektor setList state:Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag,Werktage,Wochenende,Alle
attr RolladenWochentagSelektor webCmd state
define RolladenOpen dummy
attr RolladenOpen alias oeffnen
attr RolladenOpen event-on-change-reading .*
attr RolladenOpen group Rolladen
attr RolladenOpen setList ab:-,aus,Uhrzeit,Sonnenaufgang Minuten:-,0,15,30,45,60 Uhrzeit:-,6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30 Sperrzeit:-,6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30 mode:-,normal,soft
attr RolladenOpen webCmd ab:Sperrzeit:Minuten:mode:set
define RolladenClose dummy
attr RolladenClose alias schliessen
attr RolladenClose event-on-change-reading .*
attr RolladenClose group Rolladen
attr RolladenClose setList ab:-,aus,Uhrzeit,Sonnenuntergang Minuten:-,0,15,30,45,60 Uhrzeit:-,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30 Sperrzeit:-,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30 mode:-,normal,soft
attr RolladenClose webCmd ab:Sperrzeit:Minuten:mode:set
define RolladenCloseOpen_not notify Rolladen(Close|Open|Selektor|WochentagSelektor):.* {RolladenCloseOpen_not($NAME,$EVENT);;}
# Hiermit werden die täglichen Schaltzeiten berechnet und als at's definiert
define RolladenBerechneClose_1500_at at *15:00 {RolladenBerechneSchaltzeiten('Close');;}
define RolladenBerechneOpen_0300_at at *03:00 {RolladenBerechneSchaltzeiten('Open');;}
# ############################
# Zusätzliche Steuerpartameter für Automatisierung
define Pennen dummy
attr Pennen alias Morgen schlafe ich aus
attr Pennen devStateIcon ja:scene_sleeping_alternat:nein aus:scene_sleeping:ja
attr Pennen group Automation
attr Pennen setList state:ja,nein
attr Pennen webCmd state
# Beschattungssteuerung
define Beschattungssteuerung dummy
attr Beschattungssteuerung alias Beschattung automatisch (Grad)
attr Beschattungssteuerung setList state:25,28,30,32,35
attr Beschattungssteuerung webCmd state
# die zwei dummys werden von NachtsKalt und TagsHeiss
# ausgewertet -> 99_myUtilsSomfyRolladen
define NachtsKaltTemperatur dummy
attr NachtsKaltTemperatur alias Rolladen nachts ganz schliessen bei Temperatur kleiner
attr NachtsKaltTemperatur setList state:8,5,3,0
attr NachtsKaltTemperatur webCmd state
#########################################
# Die Beschattungssteuerung prueft einmal am Tag auf heiss
define Beschattungssteuerung_0915_at at *09:15:00 {BS_start();;}
# end Beschattungssteuerung_at
# Darstellung aller dummys in einer dynamischen readingsGroup
#########################################
define Rolladen_rg readingsGroup RolladenAutomatik:state RolladenSelektor:Raum,Aktion,set RolladenWochentagSelektor:state RolladenOpen:ab,Sperrzeit,Minuten,mode,set RolladenClose:ab,Sperrzeit,Minuten,mode,set Pennen:state <Witterungssteuerung> Beschattungssteuerung:state NachtsKaltTemperatur:state
attr Rolladen_rg alias Rolladensteuerung
attr Rolladen_rg commands {'RolladenAutomatik.state' => 'state:ein,aus', 'RolladenSelektor.Raum' => 'Raum:Alle,Schlafzimmer-Fenster,Schlafzimmer-Tür,Marinas-Zimmer-Fenster,Marinas-Zimmer-Tür,Arbeitszimmer,Bad,Wohnzimmer,Terrassentür,Küche', 'RolladenSelektor.Aktion' => 'Aktion:offen,Sonnenschutz,Dämmerung,gesperrt,geschlossen','RolladenSelektor.set' => 'trigger $DEVICE set', 'RolladenWochentagSelektor.state' => 'state:Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag,Alle,Werktage,Wochenende', 'RolladenClose.ab' => 'ab:aus,Uhrzeit,Sonnenuntergang', 'RolladenOpen.ab' => 'ab:aus,Uhrzeit,Sonnenaufgang', 'Pennen.state' => 'state:ja,nein', 'Beschattungssteuerung.state' => 'state:28,29,30,31,32,33,34,35,36', 'NachtsKaltTemperatur.state' => 'state:0,1,2,3,4,5,6,7,8','RolladenOpen.Minuten' => 'Minuten:0,15,30,45,60,-','RolladenClose.Minuten' => 'Minuten:0,15,30,45,60,-', 'RolladenOpen.Uhrzeit' => 'Uhrzeit:-,6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30', 'RolladenOpen.Sperrzeit' => 'Sperrzeit:-,6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30', 'RolladenOpen.mode' => 'mode:-,normal,soft', 'RolladenClose.Uhrzeit' => 'Uhrzeit:-,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30', 'RolladenClose.Sperrzeit' => 'Sperrzeit:-,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30', 'RolladenClose.mode' => 'mode:-,normal,soft','set' => 'trigger $DEVICE set'}
attr Rolladen_rg group Rolladen - Programmierung
attr Rolladen_rg mapping {'RolladenAutomatik.state' => 'Automatik', 'RolladenSelektor.Raum' => 'Raum', 'RolladenSelektor.Aktion' => 'Aktion', 'RolladenSelektor' => 'Auswahl', 'RolladenWochentagSelektor.state' => 'Wochentag', 'RolladenClose' => 'schließen', 'RolladenOpen' => 'öffnen', 'Pennen.state' => 'Morgen ausschlafen', 'Beschattungssteuerung.state' => 'Beschattung automatisch (Grad)', 'NachtsKaltTemperatur.state' => 'Rolladen nachts ganz schliessen bei','RolladenOpen.ab' => 'ab', 'RolladenOpen.Uhrzeit' => 'Uhrzeit', 'RolladenOpen.Sperrzeit' => 'Sperrzeit', 'RolladenOpen.Minuten' => 'Minuten', 'RolladenOpen.mode' => 'mode', 'RolladenClose.ab' => 'ab', 'RolladenClose.Uhrzeit' => 'Uhrzeit', 'RolladenClose.Sperrzeit' => 'Sperrzeit', 'RolladenClose.Minuten' => 'Minuten', 'RolladenClose.mode' => 'mode' }
attr Rolladen_rg noheading 1
attr Rolladen_rg nolinks 1
attr Rolladen_rg nonames 0
attr Rolladen_rg notime 1
attr Rolladen_rg room Automation
4. Anpassungen in 99_myUtilsSomfyRolladen
Vorbemerkung:
Die Rolladen werden über die Befehle offen,gesperrt,geschlossen,Dämmerung,Sonnenschutz angefahren. Es muss also sichergestellt sein, dass bei den jeweiligen Rolladen über "eventMap" der Befehl umgesetzt wird, so dass der Rolladen entsprechend verfahren werden kann.
Dazu habe ich das Modul 10_SOMFY.pm erweitert (siehe auch: http://forum.fhem.de/index.php/topic,25321.0.html Beitrag #5 gibts zum Testen die 10_SOMFY.pm mit den Erweiterungen)
Folgende Anpassungen sind ggfs. in der 99_myUtilsSomfyRolladen notwendig, die entsprechenden Stellen habe ich mit # Elektrolurch "kommentiert".
Zu Beginn ist die %rolliste und der Name für das weather-Modul anzupassen.
sub SetzeAlleRolladen:
Die Rolladen werden über at's geöffnet und geschlossen. Dabei wird der set-Befehl nicht direkt an den Rolladen gesendet, sondern über die Funktion "SetzeAlleRolladen". Dies hat den Hintergrund, dass das Schliessen des Rollos an der Terrassentüre verhindert werden soll, wenn die Terrassentür offen ist oder im Garten noch Licht brennt. Dies ist natürlich sehr spezifisch und muss angepasst werden.
(Wer möchte schon gerne von der Hausautomation ausgesperrt werden :-( )
sub BS_go:
Wenn schönes Wetter ist und die zu erwartende (oder gemessene) Temperatur über der eingestellten Temperatur der "Beschattungssteuerung" liegt, dann wird diese Routine aufgerufen.
Sie verfährt die Markise, die Rolläden auf der Südost-Seite. Dies muss natürlich entsprechend angepasst werden.
sub Ga_Temperatur_not($$)
Hängt als notify an einem Aussentemperatur-Sensor und kann nach Bedarf ebenfalls die "Beschattung" starten.
Ändert sich plötzlich die Wettervorhersage auf "schlecht", so wird die "Beschattung" wieder aufgehoben (Markise einfahren).
sub BS_start():
Startet die Beschattung auf der SO-Seite und definiert ein at, mit dem am Nachmittag die Beschattung beendet wird.
sub RolladenBerechneSchaltzeiten($)
Damit das "Sonntagsprogramm" an Feiertagen verwendet werden kann, muss folgendes vorhanden, bzw. angepasst werden:
attr global holiday2we bayern
define bayern holiday
anpassen:
my $Feiertag = Value("bayern");
##################################
Die Anpassungen sind also überschaubar. Viel Spaß damit. Bei mir funktioniert das Ganze schon seit mehreren Monaten recht zufriednstellend.
P.S.:
Da ich häufig genutzte und generelle Funktionen in eigene 99_myUtils.xxx - Dateien ausgelagert habe, ist wohl eine Funktion in unten angehängter Datei nicht dabei, wie ich per PN informiert wurde. Bitte die nachfolgende sub AddZeit in eine 99_myUtils.pm - Datei kopieren:
sub AddZeit($$)
{
my ($s,$a) = @_;
my ($hh,$mm,$ss) = split(':',$s);
$mm = 0 if(!defined($mm));
$ss = 0 if(!defined($ss));
my ($ahh,$amm,$ass) = split(':',$a);
$ass = 0 if(!defined($ass));
$amm = 0 if(!defined($amm));
if(split(':',$a) == 1)
{
$ass = $ahh;
$ahh = 0;
# nur eine Zahl -> dann Sekunden addieren
} # if nur eine Zahl
my $rss = $ss + $ass;
if($rss > 59)
{
$rss = $rss % 60;
$mm++;
}
my $rmm = $mm + $amm;
if ($rmm > 59)
{
$rmm = $rmm % 60;
$ahh++;
}
my $rhh = $hh + $ahh;
return sprintf("%02d:%02d:%02d",$rhh,$rmm,$rss);
} # end sub AddZeit
############################
Gruß
Elektrolurch
Hallo Elektrolurch,
ich hätte da eine kleine Verbesserung:
# Hiermit werden die täglichen Schaltzeiten berechnet und als at's definiert
define RolladenBerechneClose_1500_at at *15:00 {RolladenBerechneSchaltzeiten('Close');;}
define RolladenBerechneOpen_0300_at at *03:00 {RolladenBerechneSchaltzeiten('Open');;}
Neu:
define RolladenBerechneOpen_0305_at at *03:05 {RolladenBerechneSchaltzeiten('Open');;}
den at Befehl um 3 Uhr, um 5 Minuten zu erweitern, so bekommt man bei der Sommerzeitrücksetzung keine
Fehlermeldung, da ja die Uhr von 3 Uhr auf 2 Uhr zurück gestellt wird. So wird die Sub Routine {RolladenBerechneSchaltzeiten('Open');;} nicht ein zweites mal auf gerufen.
MfG
Frohby
Danke für den Tipp. Daran hatte ich natürlich nicht gedacht.
Gruß
Elektrolurch
Hallo,
ist es möglich dein Modul auch mit anderer Hardware zu benutzen als den Somfy Funkrollos?
Ich habe bereits eine verdrahtete Lösung meiner Rolläden und plane sie durch einen RaspberryPi mit I2C Modulen abzulösen.
Da du in diesem Modul schon sehr viel Logik für Rolläden verbaut hast (Wochenende vs. Arbeitstage, Sonnenstände, Feiertage, Positionsberechnung) wäre es natürlich klasse wenn ich dieses Modul gemeinsam mit dem FHEM I2C Modul (http://fhem.de/commandref_DE.html#I2C_MCP23017) benutzen könnte.
Sofern möglich, könnte man das I2C Modul direkt mit deinem Rolladen-Modul verknüpfen, oder müsste eine Zwischenschicht die pro Rolladen 3 Funktionen anbietet: "hoch,runter,aus" eingefügt werden?
Die Steuerung funktioniert folgendermaßen:
Es existiert für jedes Stockwerk ein Ausgang der für alle dortigen Rollos die Richtung vorgibt (aus=hoch/an=runter)
Es existiert für jeden Rolladen ein Ausgang (an/aus)
Nach Ende der Fahrzeit sollten die Ausgänge alle wieder auf aus gestellt werden (nicht zwingend, aber ich finde es sauberer)
Ausgang A1-A10 = Rollos
Ausgang A20-A25 = Richtung
Beispiele:
Rolladen 1 hochfahren: A1 on, A20 off
Rolladen 2 runterfahren: A2 on, A20 on
Alle Rolladen EG runterfahren: A1 on, A2 on,... A20 on
...
Gruß
Thomas
Hallo,
die eigentliche Ansteuerung der Rolladen erfolgt in der sub SetzeAlleRolladen.
Ich würde von dort aus mir eine Zwischenschicht bauen:
1. Aus dem Raumnamen des Rolladen musst Du eine Nummer für den entsprechenden Schalter des Rolladen machen.
2. up oder down betätigen dann die beiden Aktoren.
Ich hatte mir so etwas ähnliches gebaut, bevor ich die Somfys über einen 433 - er CUL angesteuert habe.
Drähte an eine Fernbedienung gelegt, da gibt es auch einen up und down-Taster und einen für das Selektieren des entsprechenden Funkkanals.
In perl hat man das schnell hingebastelt.
Einen hash für die Raumnamen -> Kanalnummer Zuordnung.
Damit den entsprechenden Selekct - Aktor setzen.
Dann up oder down aktivieren.
Mit "Stop" alles stromlos schalten, bzw. in Deinem Fall musst Du ja die Laufzeiten der Rollos hinterlegen und nach der Maximalzeit alles auf 0 zurück setzen.
Damit mehrere Rollo-Befehle, die hintereinander kommen, nicht Deine Logik durcheinanderbringen (wegen stop-Befehl) würde ich die Befehle, die aus fhem herausfalllen (sub SetzeAlleRolladen oder ev. aus den dummys für die Darstellung auf dem GUI), in einen Puffer schreiben und nacheinander abarbeiten. Im erst den nächsten Befehl holen, wenn das "stop" ausgeführt wurde.
So habe ich das für meine FB-Lösung auch gemacht.
Gruß
Elektrolurch
Hallo,
habe alles wie von dir Beschrieben in eine "neue" config eingegeben. Die zu schaltenden Rolläden habe ich als dummy hinterlegt.
Deine Readingsgroup habe ich per Copy & Paste in meine config übernommen, sie wird aber nicht korrekt angezeigt. Ich habe nur die Zeilen / Auswahlmöglichkeiten
Automatik: aus/ein
Auswahl: offen/Sonnenschutz/Dämmerung/gesperrt/geschlossen
Morgen ausschlafen: ja/nein
Witterungssteuerung: (keine Auswahlmöglichkeit)
laut dem Code müsste es doch wesentlich mehr Optionen in dem Dialog geben.
die dummy für die Rolläden habe ich mit gleichem Namen Alias im perlScript eingefügt.
Alle von dir angelegten objekte habe ich zusätzlich im Raum Rolladen eingefügt um eine bessere Übersicht zu haben bis ich alle zusammenspiele verstanden habe.
Anbei Screenshots des Raum Rolladen, der ReadingsGroup und meine fhem.cfg
(Zeile 1 - 96 sind mein eigener Code, ab Zeile 100 kommen deine Konfigurationen):
(//)
attr global userattr devStateIcon devStateStyle fp_Grundriss icon sortby webCmd widgetOverride
attr global autoload_undefined_devices 1
attr global holiday2we Hessen
attr global latitude 51.4
attr global logfile ./log/fhem-%Y-%m.log
attr global longitude 9.4
attr global modpath .
attr global sendStatistics onUpdate
attr global statefile ./log/fhem.save
attr global uniqueID ./FHEM/FhemUtils/uniqueID
attr global updateInBackground 1
attr global verbose 5
#attr global autoload_undefined_devices 1
#attr global verbose 5
##### KOMMUNIKATION #####
#telnet
define telnetPort telnet 7072 global
#WWW Oberfläche
define WEB FHEMWEB 8083 global
attr WEB JavaScripts codemirror/fhem_codemirror.js
attr WEB basicAuth xxxxxxxxxxxxxxxxx
attr WEB basicAuthMsg Bitte Name und Geheimwort eingeben
attr WEB longpoll 1
attr WEB stylesheetPrefix dark
#Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog
#Ich habe keine Geräte die von autocreate unterstützt werden
define autocreate autocreate
attr autocreate filelog ./log/%NAME-%Y.log
#wird von div. Oberflachen benutzt
define eventTypes eventTypes ./log/eventTypes.txt
# Disable this to avoid looking for new USB devices on startup
# define initialUsbCheck notify global:INITIALIZED usb create
#Feiertage wie Wochenende behandeln
#Definition der Feiertage in config-Datei
define Hessen holiday
#Wetter Version 2
# Wetterdaten erfassen
define MeinWetter Weather 663443 3600 de
## Logfile alle Wetter Daten ##
define FileLog_MeinWetter FileLog ./log/meinwetter-%Y-%m.log MeinWetter
attr FileLog_MeinWetter logtype text
attr FileLog_MeinWetter room hidden
# **Wetter Icons hinzufügen** #
define weblink_meinwetter weblink htmlCode {WeatherAsHtml("MeinWetter")}
#### SONNENAUF UND -UNTERGANG #####
define Sun_RiseSet_Timer at *02:20:15 {\
my $Sonnenaufgang = sunrise();;\
my $Sonnenuntergang = sunset();;\
fhem("set Sonnenaufgang $Sonnenaufgang");;\
fhem("set Sonnenuntergang $Sonnenuntergang");;\
}
define Sonnenaufgang dummy
attr Sonnenaufgang icon scene_day
define Sonnenuntergang dummy
attr Sonnenuntergang icon scene_night
#1 Stunde vor Sonnenuntergang, 30min nach Sonnenaufgang
define Tageslicht dummy
define SetDummy1 at *{sunset(-900)} set Tageslicht dunkel
define SetDummy2 at *{sunrise(-0)} set Tageslicht hell;; set garten.licht1 off;;set garten.licht2 off
###### ANWESENHEITSSTATUS #####
define Nexus5 PRESENCE lan-ping Nexus5-Thomas 60 120
#####*****SIMATIC S7*****#####
#Siemens S5 einbinden
#Parameter: S7,S5,plcMPI,localMPI,rack,slot,parity,timeout,comport,speed
define mysps S5 S5 2 0 0 0 /dev/ttyAMA0 9600 E 50000
define bewegungsmelder1 S5_Digital db 5 29
attr bewegungsmelder1 comment E3.3
attr bewegungsmelder1 devStateIcon on:people_sensor@red off:people_sensor@blue
attr bewegungsmelder1 webCmd .
attr bewegungsmelder1 widgetOverride NoArg
define garten.licht1 dummy
define garten.licht2 dummy
define Nachtlicht notify bewegungsmelder1:on {\
my $r1 = $value{"Tageslicht"};;\
if ($r1 eq "dunkel" ) {fhem("set garten.licht1 on;;set garten.licht2 on")}\
}
define RolladenAutomatik dummy
attr RolladenAutomatik alias Rolladen automatisch
attr RolladenAutomatik devStateIcon ein:fts_shutter_automatic:aus aus:fts_shutter_manual:ein
attr RolladenAutomatik group Automation,
attr RolladenAutomatik room Rolladen
attr RolladenAutomatik setList state:aus,ein
attr RolladenAutomatik webCmd state
define RolladenAutomatik_notify notify RolladenAutomatik:.* {Recalc_Rolladen_rg();;}
attr RolladenAutomatik_notify room Rolladen
define RolladenSelektor dummy
attr RolladenSelektor alias Auswahl Raum
attr RolladenSelektor group Rolladen
attr RolladenSelektor room Rolladen
attr RolladenSelektor setList Raum:Alle,Schlafzimmer,Wohnzimmer,Esszimmer,Küche,Kinderzimmer,Bad,Terrassentür Aktion:offen,Sonnenschutz,Dämmerung,gesperrt,geschlossen
attr RolladenSelektor verbose 2
attr RolladenSelektor webCmd Raum:Aktion:set
define RolladenSelektor_not notify RolladenSelektor:.* {RolladenSelektor_not("$NAME","$EVENT");;}
attr RolladenSelektor_not room Rolladen
define RolladenWochentagSelektor dummy
attr RolladenWochentagSelektor alias Auswahl Tag
attr RolladenWochentagSelektor group Rolladen
attr RolladenWochentagSelektor room Rolladen
attr RolladenWochentagSelektor setList state:Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag,Werktage,Wochenende,Alle
attr RolladenWochentagSelektor webCmd state
define RolladenOpen dummy
attr RolladenOpen alias öffnen
attr RolladenOpen event-on-change-reading .*
attr RolladenOpen group Rolladen
attr RolladenOpen room Rolladen
attr RolladenOpen setList ab:-,aus,Uhrzeit,Sonnenaufgang Minuten:-,0,15,30,45,60 Uhrzeit:-,6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30 Sperrzeit:-,6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30 mode:-,normal,soft
attr RolladenOpen webCmd ab:Sperrzeit:Minuten:mode:set
define RolladenClose dummy
attr RolladenClose alias schließen
attr RolladenClose event-on-change-reading .*
attr RolladenClose group Rolladen
attr RolladenClose room Rolladen
attr RolladenClose setList ab:-,aus,Uhrzeit,Sonnenuntergang Minuten:-,0,15,30,45,60 Uhrzeit:-,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30 Sperrzeit:-,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30 mode:-,normal,soft
attr RolladenClose webCmd ab:Sperrzeit:Minuten:mode:set
define RolladenCloseOpen_not notify Rolladen(Close|Open|Selektor|WochentagSelektor):.* {RolladenCloseOpen_not($NAME,$EVENT);;}
attr RolladenCloseOpen_not room Rolladen
define RolladenBerechneClose_1500_at at *15:00 {RolladenBerechneSchaltzeiten('Close');;}
attr RolladenBerechneClose_1500_at room Rolladen
define RolladenBerechneOpen_0300_at at *03:05 {RolladenBerechneSchaltzeiten('Open');;}
attr RolladenBerechneOpen_0300_at room Rolladen
define Pennen dummy
attr Pennen alias Morgen schlafe ich aus
attr Pennen devStateIcon ja:scene_sleeping_alternat:nein aus:scene_sleeping:ja
attr Pennen group Automation
attr Pennen room Rolladen
attr Pennen setList state:ja,nein
attr Pennen webCmd state
define Beschattungssteuerung dummy
attr Beschattungssteuerung room Rolladen
attr Beschattungssteuerung setList state:25,28,30,32,35
attr Beschattungssteuerung webCmd state
define NachtsKaltTemperatur dummy
attr NachtsKaltTemperatur alias Rolladen nachts ganz schliessen bei Temperatur kleiner
attr NachtsKaltTemperatur room Rolladen
attr NachtsKaltTemperatur setList state:8,5,3,0
attr NachtsKaltTemperatur webCmd state
define Beschattungssteuerung_0915_at at *09:15:00 {BS_start();;}
attr Beschattungssteuerung_0915_at room Rolladen
# Darstellung aller dummys in einer dynamischen readingsGroup
#########################################
define Rolladen_rg readingsGroup RolladenAutomatik:state RolladenSelektor:Raum,Aktion,set RolladenWochentagSelektor:state RolladenOpen:ab,Sperrzeit,Minuten,mode,set RolladenClose:ab,Sperrzeit,Minuten,mode,set Pennen:state <Witterungssteuerung> Beschattungssteuerung:state NachtsKaltTemperatur:state
attr Rolladen_rg alias Rolladensteuerung
attr Rolladen_rg commands {'RolladenAutomatik.state' => 'state:ein,aus', 'RolladenSelektor.Raum' => 'Raum:Alle,Schlafzimmer-Fenster,Schlafzimmer-Tür,Marinas-Zimmer-Fenster,Marinas-Zimmer-Tür,Arbeitszimmer,Bad,Wohnzimmer,Terrassentür,Küche', 'RolladenSelektor.Aktion' => 'Aktion:offen,Sonnenschutz,Dämmerung,gesperrt,geschlossen','RolladenSelektor.set' => 'trigger $DEVICE set', 'RolladenWochentagSelektor.state' => 'state:Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag,Alle,Werktage,Wochenende', 'RolladenClose.ab' => 'ab:aus,Uhrzeit,Sonnenuntergang', 'RolladenOpen.ab' => 'ab:aus,Uhrzeit,Sonnenaufgang', 'Pennen.state' => 'state:ja,nein', 'Beschattungssteuerung.state' => 'state:28,29,30,31,32,33,34,35,36', 'NachtsKaltTemperatur.state' => 'state:0,1,2,3,4,5,6,7,8','RolladenOpen.Minuten' => 'Minuten:0,15,30,45,60,-','RolladenClose.Minuten' => 'Minuten:0,15,30,45,60,-', 'RolladenOpen.Uhrzeit' => 'Uhrzeit:-,6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30', 'RolladenOpen.Sperrzeit' => 'Sperrzeit:-,6:30,6:45,7:00,7:15,7:30,7:45,8:00,8:15,8:30,8:45,9:00,9:30', 'RolladenOpen.mode' => 'mode:-,normal,soft', 'RolladenClose.Uhrzeit' => 'Uhrzeit:-,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30', 'RolladenClose.Sperrzeit' => 'Sperrzeit:-,17:30,18:00,18:15,18:30,18:45,19:00,19:15,19:30,19:45,20:00,20:15,20:30,20:45,21:00,21:15,21:30,21:45,22:00,22:15,22:30,22:45,23:00,23:30', 'RolladenClose.mode' => 'mode:-,normal,soft','set' => 'trigger $DEVICE set'}
attr Rolladen_rg group Rolladen - Programmierung
attr Rolladen_rg mapping {'RolladenAutomatik.state' => 'Automatik', 'RolladenSelektor.Raum' => 'Raum', 'RolladenSelektor.Aktion' => 'Aktion', 'RolladenSelektor' => 'Auswahl', 'RolladenWochentagSelektor.state' => 'Wochentag', 'RolladenClose' => 'schließen', 'RolladenOpen' => 'öffnen', 'Pennen.state' => 'Morgen ausschlafen', 'Beschattungssteuerung.state' => 'Beschattung automatisch (Grad)', 'NachtsKaltTemperatur.state' => 'Rolladen nachts ganz schliessen bei','RolladenOpen.ab' => 'ab', 'RolladenOpen.Uhrzeit' => 'Uhrzeit', 'RolladenOpen.Sperrzeit' => 'Sperrzeit', 'RolladenOpen.Minuten' => 'Minuten', 'RolladenOpen.mode' => 'mode', 'RolladenClose.ab' => 'ab', 'RolladenClose.Uhrzeit' => 'Uhrzeit', 'RolladenClose.Sperrzeit' => 'Sperrzeit', 'RolladenClose.Minuten' => 'Minuten', 'RolladenClose.mode' => 'mode' }
attr Rolladen_rg noheading 1
attr Rolladen_rg nolinks 1
attr Rolladen_rg nonames 0
attr Rolladen_rg notime 1
attr Rolladen_rg room Automation
define schlaf.rolladen dummy
attr schlaf.rolladen alias Schlafzimmer
attr schlaf.rolladen group Rolladen - Dummys
attr schlaf.rolladen room Rolladen
define wohn.rolladen dummy
attr wohn.rolladen alias Wohnzimmer
attr wohn.rolladen group Rolladen - Dummys
attr wohn.rolladen room Rolladen
define essen.rolladen dummy
attr essen.rolladen alias Esszimmer
attr essen.rolladen group Rolladen - Dummys
attr essen.rolladen room Rolladen
define kueche.rolladen dummy
attr kueche.rolladen alias Küche
attr kueche.rolladen group Rolladen - Dummys
attr kueche.rolladen room Rolladen
define kind.rolladen dummy
attr kind.rolladen alias Kinderzimmer
attr kind.rolladen group Rolladen - Dummys
attr kind.rolladen room Rolladen
define bad.rolladen dummy
attr bad.rolladen alias Bad
attr bad.rolladen group Rolladen - Dummys
attr bad.rolladen room Rolladen
define wohn.tuer.rolladen dummy
attr wohn.tuer.rolladen alias Terassentür
attr wohn.tuer.rolladen group Rolladen - Dummys
attr wohn.tuer.rolladen room Rolladen
Ist nicht ganz einfach drauf zu kommen:
Wenn der Wert (state oder reading), der von einer readingsGroup angezeigt werden soll, nicht definiert ist, erfolgt keine Ausgabe.
Du musst also alle Werte vorbelegen, z.B.
set Pennen ja
setreading RolladenOpen set set
sonst kommt z.B. auch der Knopf nicht....
Für manche Fälle, wie z.B. Knöpfe, gibt es mittlerweile die !Wert - Auszeichnung in den readingsGroups, aber als ich das Teil gebaut habe, gab es das noch nicht.
Also mal fleißig initialisieren, die Einzelkomponenten in einem seperaten Raum darzustellen, ist bestimmt eine gute Idee. So habe ich beim Aufbau auch angefangen...
Gruß
Elektrolurch