FHEM Hausautomation


Rolladensteuerung mit dem Roller Shutter 2 ( FGR-222 ) von Fibaro und FHEM

Jeder kennt das Problem, dass es im Sommer in der Wohnung immer zu Heiß wird. Daher möchte ich eine kleine Anleiten für das Steuern von elektrischbetrieben Rolladenmotoren per Funk geben.

Folgende Software/Hardware habe ich verwendet:

  1. Software: FHEM
  2. Hardwareplatform:
    • Linux PC oder Single-Board Computer wie Raspi, PCDuino oder ähnliche.
      • ich habe einen RaspberryPi1, RaspberryPi3 und jetzt einen Linux PC mit eine Ubuntu Installation am Start.
    • Linux PC Hardware:
      • ASRock N3150M - M-ATX, Intel Pentium N3150 4x 1.60 GHz
        • Memory: Kigston 8GB DDR3L Kit of 2
      • LC-Power LC-1360mi - Mini ITX Gehäuse, inkl. 75 Watt Netzteil
      • alte 2,5" SATA Festplatte
    • zWave USB stick von AEOTEC.
    • Fibaro Roller Shutter 2 für die elektrischen Rolläden.





Für die Installation des FHEM Servers empfehle ich euch die folgenden Webseiten:


Als nächstes muss der zWave Stick von Aeotec in FHEM installiert werden. Sobald FHEM korrekt installiert ist kann der USB stick eingesteckt und sollte dann auch automatisch erkannt werden und zu FHEM hinzu gefügt worden sein. Siehe FHEM wiki zWave.


Der Roller Shutter 2 von Fibaro kann direkt hinter dem Rolladenschalter montiert werden. Hierzu muss der Rolladenschlater ausgebaut und wie in dem Auszug aus der Anleitung verbunden werden. Dieses sollte unbedingt von einem Fachmann durchgeführt werden, da es sich um 230V handelt und diese sind ja bekanntlich Lebensgefährlich. Also bitte von einer Fachkraft installieren lassen!

Bei der Installation ist auf den korrekten Anschluss der "auf" und "ab" Leitung für den Motor und der Schalterwippe zu achten. Falls dieser nicht richtig ist merkt man es später in dem FHEM "99" für Rolladen oben und "0" für unten Anzeigt. In diesem Fall einfach S1 mit S2 und Q1 mit Q2 vertauschen.

Die Art des Rolladenschalters kann später per Konfiguration geändert werden (Taster, Wechselschalter). In meinem fall benötige ich einen Wechselschalter.

 


Die Integration und grundsätzlichen Steuerungen des "Roller Shutters" werden in der FHEM Wiki für den FGR-222 behandelt.

 

Nach der Erfolgreichen Integration in FHEM sollte euer FileLog so ähnlich aussehen:

1
2
3
4
5
2017-05-15_20:54:49 ZWave_SWITCH_MULTILEVEL_5 associationAdd 3 1
2017-05-15_20:54:49 ZWave_SWITCH_MULTILEVEL_5 modelId: xxxx-xxxx-xxxx
2017-05-15_20:54:49 ZWave_SWITCH_MULTILEVEL_5 model: FIBARO System FGRM222 Roller Shutter Controller 2
2017-05-15_20:54:49 ZWave_SWITCH_MULTILEVEL_5 modelConfig: fibaro/fgrm222.xml
2017-05-15_20:55:16 ZWave_SWITCH_MULTILEVEL_5 off

danach muss der Rolladen noch eine Kallibrierungsfahrt machen:

1
2
3
set <device> configByte 29 1

wobei <device> hier ZWave_SWITCH_MULTILEVEL_5 ist

Perl modul für fhem - Rolladensteuerung

Dieses perl script kann den Roller-Shutter 2 in Abhängigkeit vom Sonnenstand und der Sonneneinstrahlung steuern. Es wird einfach als Notifier in FHEM eingebunden. Am besten, man editiert die fhem.cfg direkt und fügt folgende Zeilen ein:

  1. define Auto_Shutter_Wohnzimmer_Seite notify Sonne_Ilbenstadt:azimuth:.*
  2. {Auto_Shutter_Zwave("ZWave_SWITCH_MULTILEVEL_3","Rolladen_Wohnzimmer_Seite_position","Rolladen_Wohnzimmer_Seite_Beschattung_Aktiv",50,110,200,5600,1000)}
  3. attr Auto_Shutter_Wohnzimmer_Seite room Notify

Zudem wird das Modul "Twilight" benötigt um den Sonnenstand zu erfassen. Hierzu hilf natürlich auch die FHEM Wiki Twilight.

Die einzelnen Schritte:

 

Installation von Twilight für azimuth definition:


#### Definition of Twilight

define Sonne_Ilbenstadt Twilight <Längengrad> <Breitengrad> <Indoor_Horizont> <Yahoo-Wetter-ID>
attr Sonne_Ilbenstadt icon weather_sunrise
attr Sonne_Ilbenstadt room Wetter

 

1. define Auto_Shutter_Wohnzimmer_Seite notify Sonne_Ilbenstadt:azimuth:.*

  • Auto_Shutter_Wohnzimmer_Seite: Name des Notifiers für FHEM
  • Sonne_Ilbenstadt:azimuth.*: Twilight definition in der fhem.cfg

2. {Auto_Shutter_Zwave("ZWave_SWITCH_MULTILEVEL_3","Rolladen_Wohnzimmer_Seite_position", "Rolladen_Wohnzimmer_Seite_Beschattung_Aktiv",50,110,200,5600,1000)}

  • Diese Zeile kommt direkt hinter das define OHNE ein return.
  • Auto_Shutter_Zwave: ist der Aufruf des perl Modules mit den Parametern:
  • $zwave_device, -> "ZWave_SWITCH_MULTILEVEL_3"
  • $Rolladen_Position_var, -> "Rolladen_Wohnzimmer_Seite_position"
  • $Rolladen_Beschattung_Aktiv_var, -> "Rolladen_Wohnzimmer_Seite_Beschattung_Aktiv"
  • $shutter_level,-> 50
  • $azimuth_on,-> 110
  • $azimuth_off,-> 200
  • $pv_power_on,-> 5600
  • $pv_power_off-> 1000
$zwave_device Name des ZWave devices in FHEM welches gesteuert werden soll
 $Rolladen_Position_var  Variable in FHEM, hier wird die vorherige Position des Rolladens gespeichert, um nach der Beschattung den "alten" zustand wieder herszustellen
$Rolladen_Beschattung_Aktiv_var Variable in FHEM, signalisiert über den Notifier hinaus, ob die Beschattung schon Aktiviert worden ist.
$shutter_level Prozentuale Beschattung. (Rolladen Position bei Beschattung)
$azimuth_on Beschattung aktiv ab azimuth
$azimuth_off Beschattung deaktivieren ab azimuth
$pv_power_on Beschattung aktiv schalten wenn PV-Power (bei mir der Strom vom Dach) eine bestimmte schlwelle überschreitet. Hier kann natürlich auch ein Helligkeitssensor eingesetzt werden.
$pv_power_off Beschattung deaktivieren wenn PV-Power keliner als vorgabe ist.

Der folgende Abschnitt enthält das komplette Perl Modul für FHEM

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
set package main;
use strict;
use warnings;
use POSIX;
sub
mySmartHomeUtils_Initialize($$)
{
  my ($hash) = @_;
}
##########################################################
# Shutter auto control with zwave modules
#

sub Auto_Shutter_Zwave($$$$$$$$) {
  my ($zwave_device, $Rolladen_Position_var, $Rolladen_Beschattung_Aktiv_var, $shutter_level, $azimuth_on, $azimuth_off, $pv_power_on, $pv_power_off) = @_;

my $Beschattung_Aktiv=ReadingsVal($Rolladen_Beschattung_Aktiv_var,"state",0);
my $Rolladen_Position=ReadingsVal($Rolladen_Position_var,"state",0);
my $azimuth=ReadingsVal("Sonne_Ilbenstadt","azimuth",0);
my $pv=ReadingsVal("Strom_PVAnlage", "AVERAGE", 0);
my $Automatische_Beschattung_Aktiv=ReadingsVal("Automatische_Beschattung_Aktiv","state",0);

my $Rolladen_actual_position;

# Rolladen Wonzimmer Seite per Sonnenstand&PV-Ertrag schalten

# Einschalten wenn Sonnenstand und PV Ertrag OK

if ($Automatische_Beschattung_Aktiv eq 1) {    # activate auto shutter only if $Automatische_Beschattung_Aktiv=activ
  # readout shutter position and compare it to the required value.

  if (($azimuth > $azimuth_on) && ($azimuth < $azimuth_off) && ($pv > $pv_power_on) && ($Beschattung_Aktiv eq 0))
   {
     fhem "get $zwave_device position"; # readout positon of shutter
     sleep 2;

     $Beschattung_Aktiv = 1;
     $Rolladen_Position = ReadingsVal($zwave_device, "position",0);
 
     fhem ("set $Rolladen_Position_var $Rolladen_Position");   # save value of shutter position befor activation of auto mode and store it in FHEM variable
     fhem ("set $Rolladen_Beschattung_Aktiv_var $Beschattung_Aktiv");  # set shutter_auto for current shutter and store it in FHEM variable

     fhem "set Telegram message Beschattung aktiv $pv $azimuth $Beschattung_Aktiv"; # send Telgram message to user

     # set shutter level only when actual position of shutter is lower than the defined $shutter_level
     if ($shutter_level > $Rolladen_Position) {
        fhem "set $zwave_device dim $shutter_level";
     }
   };
 
  # Ausschalten wenn Sonnenstand und PV Ertrag KO

  if (((($azimuth_on > $azimuth_on) && ($azimuth < $azimuth_off) && ($pv < $pv_power_off)) || ($azimuth > $azimuth_off)) && ($Beschattung_Aktiv eq 1))
   {
     $Beschattung_Aktiv = 0;
     fhem ("set $Rolladen_Beschattung_Aktiv_var $Beschattung_Aktiv");  # set FHEM varialbe outside of notify function

     fhem "get $zwave_device position"; # readout positon of shutter
     sleep 1;
     $Rolladen_actual_position = ReadingsVal($zwave_device, "position",0);

     # restore value only if the shutter was not changed during the activation.
     if ($Rolladen_actual_position = $zwave_device) {
         fhem "set $zwave_device dim $Rolladen_Position";
     }

     fhem "set Telegram message Beschattung deaktiv: $pv $azimuth $Beschattung_Aktiv";
   };

  # Ausschalten wenn Sonnenstand > $azimuth_off

  if (($azimuth > $azimuth_off) && ($Beschattung_Aktiv eq 1))
   {
     fhem "set Telegram message Beschattung deaktiv > $azimuth_off: $pv $azimuth $Beschattung_Aktiv";
   
     fhem "get $zwave_device position"; # readout positon of shutter
     sleep 1;
     $Rolladen_actual_position = ReadingsVal($zwave_device, "position",0);

     # restore value only if the shutter was not changed during the activation.
     if ($Rolladen_actual_position = $zwave_device) {
         fhem "set $zwave_device dim $Rolladen_Position";
     }

     $Beschattung_Aktiv = 0;
     fhem ("set $Rolladen_Beschattung_Aktiv_var $Beschattung_Aktiv");  # set FHEM varialbe outside of notify function
   };
  };
}
1;