Raspberry Pi

Beim Raspberry Pi handelt es sich um einen kreditkartengroßen Einplatinencomputer mit allen Schnittstellen, die der Bastler so benötigt. Ich habe mich für diese handvoll Elektronik entschieden, weil der Raspberry über Ein- und Ausgabemöglichkeiten sowie diverse Scriptsprachen verfügt und das Ganze über das Netzwerk erreichbar und bedienbar ist. Wichtig ist natürlich auch, dass es keine beweglichen Datenträger wie Festplatte oder Diskettenlaufwerk gibt und der Stromverbrauch bei 3,5W liegt. Somit ist dieses Gerät als Dauerläufer bestens geeignet. Ein auch nicht zu unterschätzendes Argument ist der recht niedrige Preis.

Nachfolgend zeige ich die von mir vorgenommenen Installations- und Konfigurationsschritte auf, damit der Interessierte in der Lage ist, das Eine oder Andere nachzubauen.

 

 

 

Außer dem Raspberry Pi, einer geeigenten Stromversorgung und einer passenden SD-Karte benötigt man für die erstmalige Inbetriebnahme noch eine USB-Maus und eine USB-Tastatur. Als Anzeigegerät musste bei mir ein TV-Gerät mit Composit-Eingang herhalten, wobei man bei der Bildqualität einige Abstriche machen muss.

Damit der Raspberry Pi von der SD-Karte booten kann, muss diese mit einem Image bespielt werden. Ein geeignetes und kostenloses Tool bekommt man unter folgendem Link: Image Writer for Windows

Das Raspian Image erhält man unter folgendem Link: Raspberry Pi Downloads

Nach dem ersten Einschalten befindet man sich in der raspi-config. Dort sollten dann so Dinge wie die Tastatur eingestellt werden. Wer den Raspberry per ssh bedienen möchte, der sollte auch diesen Dienst aktivieren. Alle Einstellungen können später mit dem Kommando sudo raspi-config geändert werden.

Für alle, die den Raspberry nur noch per ssh verwalten, empfiehlt es sich, das root-Kennwort zu setzten:
sudo passwd root
Anschließend wäre es vielleicht auch sinnvoll den Speicher für die Grafik in der raspi-config zu reduzieren. Dies geschieht im Menü memory_split.

Da ich selbst den Raspberry als Server betreiben möchte, muss eine statische IP-Adresse konfiguriert werden. Dies geschieht durch Bearbeiten der Datei:
/etc/network/interfaces
Ich selbst hatte mit der korrekten Syntax so meine Probleme und hänge hier einfach mal meine Datei an:

Da das Neueinrichten eine recht aufwändige Sache sein kann, ist es sinnvoll, ab und an, eine Zwischensicherung der SD-Karte anzufertigen, denn eine SD-Karte mit einem funktionierenden Stand zu beschreiben geht schneller von der Hand als eine Neuinstallation.

 

 

Um den Speicherplatz einer 8 oder 16GB SD-Karte nutzen zu können, muss das Image im laufenden Betrieb vergrößert werden.

Dazu brauche ich selbst aber gar nichts zu schreiben, denn es gibt ein paar brauchbare Links:

http://www.youtube.com/watch?v=R4VovMDnsIE

Mit Hilfe des Youtube-Filmchens sollte es jedem möglich sein, seine SD-Karte voll auszunutzen.

 

Um den Apache-Webserver mit PHP und den MySQL-Server zu installieren sind folgende Befehle einzugeben:

apt-get update
apt-get upgrade
apt-get install apache2
apt-get install mysql-server mysql-client
apt-get install php5
apt-get install php-pear php-apc
apt-get install php5-mysql
apt-get install phpmyadmin

Man muss aber etwas Geduld mitbringen!

Das Document-Root befindet sich in /var/www.

 

Um den Raspberry für Steuerungszwecke zu verwenden, ist es wichtig, dafür zu sorgen, dass die Systemzeit ständig aktuell ist. Per default sind ja schon ein paar Server eingetragen, nur funktioniert das bei mir nicht. So wie ich das sehe, liegt dies daran, das der Raspberry nur IPv4 versteht und ich ja einen Internetzugang über Unitymedia habe und dort IPv6 verwendet wird. Um diese Problem zu lösen habe ich die bisher eingetragenen Server auskommentiert und die IP-Adressen von ptbtime1.ptb.de und ptbtime2.ptb.de eingetragen. Die Eintrageungen meiner /etc/ntp.conf sehen wie folgt aus:

#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst
#server rustime01.rus.uni-stuttgart.de
server 192.53.103.108
server 192.53.103.104

 

 

Eine der einfachsten Möglichkeiten mit einem Linux-System Temperaturen zu erfassen und auszuwerten, ist der Einsatz des One-Wire-Bussystems. Eigentlich ist dieser Begriff etwas irreführend, denn es sollte besser Drei-Draht- oder im parasitären Betrieb Zwei-Draht-Bussystem heißen. Dieses Bussystem wird ursprünglich direkt an eine serielle Schnittstelle angeschlossen. Dazu habe ich auch eine recht interessante Anleitung gefunden, an welche ich mich grob orientiert habe: 1-wire Temparatur und Feuchtemessung (Linux:Suse und Debian/ARM)

Da aber die heutigen PC's nicht mehr über derartige Schnittstellen verfügen, empfiehlt sich ein entsprechender USB-Adapter.

An diesen Adapter werden dann Temperatursensoren vom Typ DS18S20 angeschlossen. Ich habe mich für den Drei-Draht-Betrieb entschlossen, da ich in dieser Betriebsart einen größeren und sichereren Messbereich erhalte.

Die Temperaturfühler werden an den UBS-Adapter mit einem RJ11-Stecker verbunden. Ich habe ein altes Telefonkabel missbraucht und von den sechs Adern werden nur die ersten drei Adern benötig. Bei mir ist:

- weiß mit 5V
- braun mit Masse (GND)
- grün mit Daten

belegt. Wer mehr Details benötig, der sollte einen Blick in das Datenblatt werfen.

Dieser One-Wire-Bus darf 100 m lang werden und kann auch Abzweigungen/Verästelungen haben. Für den normalen Hausgebrauch sollten 100 m eigentlich reichen. Wer will, kann ja noch zusätzlich jedem Temperaturfühler eine Pufferkapazität von ca. 10 nF für die Stromversorgung spendieren.

Um OneWire auf dem Raspberry zu installieren, sind folgende Schritte als Benutzer root notwendig: 

apt-get install fuse-utils libfuse-dev libfuse2

apt-get install automake autoconf autotools-dev
gcc g++ libtool libusb-dev fuse-utils
libfuse-dev swig tcl8.4-dev php5-dev wget http://downloads.sourceforge.net/project/owfs/
owfs/2.8p7/owfs-2.8p7.tar.gz tar -xzf owfs-2.8p7.tar.gz cd /root/owfs-2.8p7 ./configure -enable-usb -enable-owfs -enable-w1 make make install

Anlegen des Filesystems
cd /
mkdir owfs
chmod 777 owfs

Nach angeschlossenen USB-Geräten schauen
lsusb

Filesystem neu mounten
/opt/owfs/bin/owfs --Celsius -m /owfs -u /dev/bus/usb/001/005

Temperatursensor abfragen
cat /owfs/10.0E6055020800/temperature

unmounten des Filesystems –nötig,wenn es bereits gemountet sein sollte
fusermount -u /owfs

Starten von owhttpd
/opt/owfs/bin/owhttpd -p 3001 -u /dev/bus/usb/001/005
Dadurch wird der owhttpd auf Port 3001 gestartet.

Stoppen von owhttpd
killall owhttpd

Die beiden Deamon owfs und owhttpd sind nur für Test- und Diagnosezwecke gedacht. Das eigentliche Programm ist der OWServer. Gestartet wird dieser dann mit:
/opt/owfs/bin/owserver --Celsius -m /owfs -p 3001 -u /dev/bus/usb/001/005
Wichtig zu beachten ist, dass nur eines dieser Dienste laufen darf, da sie sich sonst gegenseitig behindern.

 

Die Hausautomatisierungssoftware die nichts kostet und trotzdem viel leisten kann heißt Fhem. Interessante Links dazu gibt es hier:

http://fhem.de/fhem.html

http://www.fhemwiki.de/wiki/FHEM

http://www.fhemwiki.de/wiki/Kategorie:Raspberry_Pi

Heimautomatisierung mit fhem für Einsteiger

Viel muss ich dazu nicht schreiben und kann mich dadurch auf das Wesentliche beschränken, denn das Hauptproblem bei dieser frei verfügbaren Software scheint die nicht sonderlich überzeugende Dokumentation zu sein.

Die Installation von Fhem
Die Installation von Fhem verläuft recht unspektakulär, da es bereits fertige Debian-Installations-Pakete gibt. Es sollten vorher nur ein paar Perl-Paket installiert sein:

apt-get install perl libdevice-serialport-perl
apt-get install libio-socket-ssl-perl
apt-get install perl libwww-perl

Da ich mich hier auf die Version 5.3 von Fhem beziehe wird auch das entsprechen Paket heruntergeladen und installiert:

wget fhem.de/fhem-5.3.deb
dpkg -i fhem-5.3.deb
apt-get install -f

Danach sollte fhem per Browser über IP-adresse:8083/fhem erreichbar sein. Bevor jetzt irgend welche Geräte aufgenommen oder integriert werden, sollten alle vorerst nicht benötigen Dinge in der /opt/fhem/fhem.cfg auskommentiert werden. In meinem Fall sind es die Ports für WEBphone und WEBtablet, sowie der initialUsbCheck. Dies hatte bei mir den Sinn, die Log-Datei bei meinen ersten Gehversuchen etwas übersichtlicher zu halten. Nach den ersten Gehversuchen kann man ja je nach Bedarf die Auskommentierungen wieder entfernen, um die gewünschte Funktion wieder zu aktivieren.

OneWire in Fhem integrieren
Als nächstes integriere ich die Befehle zum Starten und Stoppen des OWServer in das Start- Stop-Script von Fhem:

Zum Starten:
/opt/owfs/bin/owserver --Celsius -m /owfs -p 3001 -u /dev/bus/usb/001/005

Zum Stoppen:
killall owserver

Alternativ ist es auch möglich dafür ein eigenes Script zu erstellen, dann muss aber dafür Sorge getragen werden, dass der OWServer vor Fhem gestartet wird.

Nun kann die erste Konfigurationszeile in /opt/fhem/fhem.cfg eingetragen werden:

# OneWire definieren / owserver muss laufen
define DS1420 OWFS 192.168.2.7:3001 DS1420

Mit dieser Zeile wird der OneWire-USB-Adapter definiert. Danach einfach speichern und fhem neu starten. Wenn die Log-Datei nichts anmeckert, kann es weiter gehen mit der Definition des ersten Temperatursensors:

# 1 - Schlafzimmer
define Schlafzimmer OWTEMP EEA654020800 60
attr Schlafzimmer icon icoKLIMA

Auch danach speichern und fhem neu starten. Ein Blick in die Log-Datei verrät einem ob es funktioniert. Bei mir funktioniert es mit fhem-5.3 als Debian-Paket auf dem Raspberry Pi recht gut, allerdings habe ich auch lange gebraucht, bis ich mir alle nötigen Informationen zusammengetragen habe. Denn so wie es aussieht gibt es je nach fhem-Version Unterschiede bei den Möglichkeiten OneWire abzufragen. Auch sind die verwendeten Begrifflichkeiten manchmal etwas verwirrend.

Und so sieht der Blick auf den Menüpunkt Unsorted von Fhem aus. Hier sind die beiden definierten Geräte DS1420 (obwohl ich tatsächlich einen DS1490F verwende) und der Temperaturfühler Schlafzimmer, ein DS18S20, zu sehen. Der USB-Adapter befindet sich in der Sektion OWFS und in der Sektion OWTEMP ist der Temperatursensor Schlafzimmer aufgelistet. Dort werden dann auch, wenn vorhanden und konfiguriet, alle weiteren Temperatursensoren aufgelistet.

 

Wer mit dem Raspberry Pi etwas steuern oder regeln möchte, der benötigt Ein- und Ausgänge. Zwar hat der Raspberrry Pi eine 26polige Stiftleiste mit ein paar IO-Anschlüssen aber weit kommt man damit nicht. Wer etwas professioneller arbeiten möchte, der verwendet den I²C-Bus, den der Raspberry Pi ja bereits mitbringt. Auf der 26poligen Stiftleiste (dev/i2c-0) sind das der Pin 3 für SDA und der Pin 5 für SCL. Ein weiterer I²c-Bus (/dev/i2c-1) befindet sich auf dem Kameraanschluss. Dort sind es der Pin 13 für SCL und der Pin 14 für SDA. Allerdings ist mir der Kameraanschluss etwas zu fummelig, um konventionelle Elektonik anzuschließen.

Grundsätzlich ist von der Softwareseite alles vorhanden, man muss nur die Treiber aktivieren, da sie gesperrt sind. Dazu löscht man die Einträge aus der /etc/modprobe.d/raspi-blacklist.conf oder kommentiert die beiden Einträge aus der Datei aus:

#blacklist spi-bcm2708
#blacklist i2c-bcm2708

Danach nur noch i2c-dev in der Datei /etc/modules eintragen und das System neu starten. Nach dem Reboot sollten die beiden I²C-Busse zur Verfügung stehen. Testen kann man dies mit dem Befehl lsmod. Nach Ausführen dieses Befehls sollte i2c_dev in der Liste erscheinen.

Nun wird es Zeit noch die Tool-Sammlung i2c-tools zu installieren, um Verbindungen testen zu können:

apt-get update && apt-get install i2c-tools

Zum Testen, ob die beiden I²C-Busse zur Verfügung stehen: i2cdetect -l

Für einfache Tests gibt es danach ein paar Befehle:
- i2cdetect zum Abfragen der Busteilehmer
- i2cdump zum Auslesen der Register eines Busteilnehmers
- i2cget und i2cset zum gezielten Lesen und Setzen von Registern 

Geräte anschließen

Um nun Erweiterungen anzuschließen hat man die Wahl zwischen selbst Basteln oder dem Verwenden von vorgefertigten Geräten. Bei allen kommt bei mir ein 26poliges Flachbandkabel mit dazugehörigem Stecker zum Einsatz. Die Kosten dafür sollten die 1,50 Euro nicht übersteigen. Von diesem Flachbandkabel werden dann folgende Anschlüsse benötigt:

  • Pin 2 für 5V
  • Pin 3 für SDA
  • Pin 5 für SCL
  • Pin 6 für GND (Masse)

Fertige Geräte oder auch Bausätze können unter folgenden Links gekauft werden:

Horter & Kalb - Onlineshop

CCTools - Onlineshop

IO Pi 32 Channel Port Expander

Ich habe mich für den Relaistreiber von CCTools entschieden, da es nach meinem Eindruck das beste Preis/Leistungsverhältnis bietet. Leider muss der Bus an den Lötaugen angeschlossen werden und somit müssen vier Drähte irgendwie in das Gehäuse eingeführt werden. (Nachdem ich dieses Gerät angeschlossen und in Betrieb genommen habe, stellte ich fest, dass dieses Modul eine negative Logik an den Ausgängen verwendet. Das bedeutet, dass die Lasten, z.B. Relais als gemeinsame Leitung an +12 V angeschlossen werden anstatt an GND.)

Die Geräteadresse abfragen

Beim alten Raspberry Pi mit 256MB:
i2cdetect -y 0

Beim neuen Raspberry Pi mit 512MB:
i2cdetect -y 1

Mit Hilfe dieses Befehls ist es möglich die Geräteadresse abzufragen. Diese ist nötig, um einzelne Ausgangsbits zu setzen oder Eingangsbits abzufragen. Damit sich der Nachbau einfacher gestaltet, stelle ich hier eine Intialisierungsroutine sowie ein Script zum Setzen eines Ausgangsbits und ein Script zum Löschen eines Ausgangsbits zur Verfügung. Die Initialisierungsroutine rufe ich beim Starten und beim Stoppen von Fhem auf.

Nachdem das I²C-Gerät initialisiert ist und es grundsätzlich möglich ist ein Ausgangsbit zu setzen und zu löschen, sollte dies auch über die Weboberfläche von Fhem realisiert werden. Dazu muss die Datei /opt/fhem/fhem.cfg und die Datei /etc/sudoers bearbeitet werden. Damit der Benutzer fhem mit Hilfe der Scripte auf den I²C-Bus zugreifen darf, füge ich in der Datei /etc/sudoers folgende Zeile ein:

fhem ALL=NOPASSWD: /myjob/i2c_g1_p*

Um nun in Fhem einen Schalter zu integirieren sind folgende Zeilen in der Datei /opt/fhem/fhem.cfg notwendig:

# Experimente mit Web-Schalter und Relais
define WebSchalter_01 dummy
attr WebSchalter_01 eventMap on:Ein off:Aus

Damit auch bei einem Klick auf Ein oder Aus eine Aktion ausgeführt wird, müssen noch zwei weitere Zeilen eingefügt werden:

define WebSchalter_01_on notify WebSchalter_01:on {system("sudo -u root /myjob/i2c_g1_p0_on.sh");;}
define WebSchalter_01_off notify WebSchalter_01:off {system("sudo -u root /myjob/i2c_g1_p0_off.sh");;}

Mit diesen zwei Zeilen werden externe Scripte ausgeführt. Die Verzeichnisse und Namen der Scripte müssen individuell angepasst werden. Bei diesem Beispiel ist es so, dass sudo verwendet wird, da der Benutzer fhem nicht auf die Geräte /dev/i2c-0 und /dev/i2c-1 zugreifen darf.

Da Fhem in Perl geschrieben ist, kann man laut Dokumentation auch externe Perl-Scripte ausführen. Auf dem Raspberry Pi kann man auch normale Bash-Scripte aufrufen. Dafür ist ja das System-Kommando gedacht. Ob diese Vorgehensweise auf einer Fritz-Box auch funktioniert weiß ich allerdings nicht.

Eine Low-Cost-Variante, Funksteckdosen mit dem Raspberry Pi zu steuern, ist der Einsatz eines entspechenden Funkmoduls und den dazu gehörenden, preiswerten Funksteckdosen, die man selbst im Baumarkt bekommen kann. Animiert hat mich dazu ein Artikel in meiner Lieblingszeitschrift c't 2014, Heft 3. Die Überschrift erinnert leicht an Herr der Ringe: "Ein Pi, sie zu knechten".

Ich selbst habe die Funksteckdosen bei Pollin bezogen (Bestellnr.: 550666) und das Funkmodul bei EXP-TECH (Artikel-Nr.: EXP-R05-107). Beide Bestellungen zusammen haben mich knapp 22 Euro gekostet. Wer an dieser Stelle in der Lage ist, seine Bestellungen zu bündeln, der kann diese Kosten natürlich unterbieten.

Das Funkmodul wird recht unspektakulär angeschlossen und verdrahtet, dabei greift man sich die 5V(Vcc) an Pin 2, GND an Pin 6  und die Daten für das Funkmodul an Pin11 (GPIO17) an der 26poligen Stiftleiste ab. Wichtig ist dann noch ein Stück Draht, von 17 cm Länge, welches als Antenne verwendet wird. Bei der Reichweite darf man natürlich keine Wunder erwarten. Bei mir ist es so, dass bei zwei Zimmerwänden zwischen Sender und Empfänger die maximale Distanz auf ca. 8m zusammenschrumpft. Wer die Sendeleistung erhöhen möchte, der sollte sich folgenden Link ansehen: http://www.itbasic.de/raspberry-pi-sendeleistung-des-433mhz-senders-erhohen/

Bevor man jetzt anfängt die nötige Software zu installieren, kann es nötig sein, sein System auf den aktuellen Stand zu bringen. Dies geschieht mit den zwei Befehlen:

apt-get update
apt-get upgrade

Beim zweiten Befehl kann es sein, dass es etwas länger dauert. Damit meine ich mehrere Stunden, je nach dem, wie alt oder neu die Installation ist.

Ist das System auf dem aktuellen Stand, dann kann die nötige Software installiert werden:

apt-get install git-core
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
cd ~
git clone https://github.com/r10r/rcswitch-pi.git
cd rcswitch-pi
make

Das nun erzeugte Programm send, ist das, was jetzt benötigt wird. Dieses kopiert man sich in ein separates Verzeichnis. Bei mir nennt sich das /myjob und dort werden alle nötigen Scripte für dieses Projekt gesammelt.

Die Syntax des Send-Befehls sieht folgendermaßen aus:

send <hauscode> <Nr. der Taste/Steckdose> <ein/aus>

hauscode: eine 5stellige binäre Ziffer

Nr. der Taste/Steckdose: Eine Zahl zwischen 1 und 5 entspechend dem verwendeten DIP-Schalter (Bei manchen Funksteckdosen sind diese DIP-Schalter zur Unterscheidung vom Hauscode mit Buchstaben von A bis F versehen).

ein/aus: Eine 0 zum Ausschalten und eine 1 zum Einschalten.

Beispiel: send 10000 1 1

Hier wird die Funksteckdose eingeschaltet, bei der der DIP-Schalter 1 für den Hauscode und A für die Steckdose auf On sind. Wie oben schon erwähnt ist die Sendereichweite stark reduziert. Um die Schaltzuverlässigkeit zu erhöhen, setzte ich zwei dieser Schaltdiagramme hintereinander ab. 

 

Als Hauptstromquelle verwende ich ein altes ausgedientes Notebooknetzteil. Bei dem von mir verwendeten Netzteil liegt die Ausgangsspannung bei 16V DC, heute sind aber auch Netzteile mit 19V DC üblich.

Für den bisher vorgestellten Aufbau werden zwei verschiedene Gleichspannungen benötigt, die aus der Spannung des Notebooknetzteils generiert werden. Um nicht all zu viel unnötige Wärme zu erzeugen, habe ich mich bei der 12V Relais-Spannung für den Step-Down-Schaltregler von ELV entschieden und bei der 5V Stromversorgung für den Raspberry für das Schaltnetzteil von Horter & Kalb.

Die Wahl für den Step-Down-Schaltregler von ELV hat den Vorzug der recht hohen zulässigen Eingangsspannung von 45V. Dies ist vor allem dann interessant, wenn man vor hat, zukünftig auch Strom von einem Solarmodul einzuspeisen. Wenn die Sonne scheint, wird der Strom vom Solarmodul verwendet und wenn nicht, dann der Strom vom Notebooknetzteil. Dafür sollte eine einfach Diodenschaltung ausreichen.

Die Wahl für das 5V Schaltnetzteil von Horter & Kalb hat den Vorzug, für weniger Kabelgewirr zu sorgen. Auch ist dieses Bausatz relativ schnell und einfach aufgebaut (zusammenlöten, aufclipsen, einschalten, tut). Man muss dann nur noch ein Micro-USB-Kabel opfern, um den Raspberry mit Strom zu versorgen.

 

Für eine einfach Bedienung kann ein Plan der Wohnung, in der dann die zu bedienenden Elemente hinterlegt sind, hilfreich sein. In fhem nennt sich dies floorplan. Eine recht einfache Dokumentation findet sich unter folgendem Link:

fhem-floorplan-installation-guide_de.pdf

Meine Definition für den Floorplan sieht wie folgt aus:

###########################################
# floorplan
define Erdgeschoss FLOORPLAN
attr Erdgeschoss fp_arrange WEB


Durch die letzte Zeile wird festgelegt, dass über Port 8083 die Geräte definiert werden dürfen. Bedient wird aber über Port 8084. Dadurch ist dann ein versehendliches verschieben der Geräte nicht möglich. Wer definierte Geräte wieder los werden möchte muss in der /opt/fhem/fhem.cfg die entsprechenden Zeilen löschen oder auskommentieren.

 

 

Um die oben beschriebenen Funksteckdosen oder Relais über I²C nach Zeitvorgaben zu steuern, müssen diese definiert sein, so dass sie über die Fhem-Oberfläche bedient werden können und es wird noch etwas Code benötigt, um die Schaltbedingungen zu definieren. Am einfachsten geht dies mit ein paar Beispielen.

 

täglich (durch den * definiert) zu einer bestimmten Zeit schalten:

define Stehlampe_An at *21:00:00 set Stehlampe on

 

nur an bestimmten Wochentagen zu einer bestimmten Zeit schalten:

define Stehlampe_An at *05:59:10 { if($wday >= 1 && $wday <= 5 ) {fhem("set Stehlampe on")} }

oder

define Stehlampe_An at *05:59:00 { if($wday == 1 || $wday == 2  || $wday == 3  || $wday == 4  || $wday == 5 ) {fhem("set Stehlampe on")} }

In beiden Fällen also von Montag bis Freitag.

Sonntag: $wday = 0
Montag: $wday = 1
Dienstag: $wday = 2
Mittwoch: $wday = 3
Donnerstag: $wday = 4
Freitag: $wday = 5
Samstag: $wday = 6

Interessante Links dazu:

http://www.fhemwiki.de/wiki/At

http://www.itbasic.de/fhem-mehrere-433-mhz-steckdosen-auf-einmal-schalten/

Eine Erweiterung dieser Zeitsteuerung ist das Schalten in Abhängigkeit von Sonnenuntergang oder Sonnenaufgang. Dazu sind zu aller Erst die beiden globalen Parameter latitude und longitude zu setzen.

attr global latitude 48.80913
attr global longitude 9.01151

Ein Befehl zum Abschalten kann dann wie folgt aussehen:

define Stehlampe_Aus at *{sunrise("HORIZON=0.0",0,"06:30","06:55")} set Stehlampe off

Mit diesem Befehl wir die Stehlampe abgeschaltet, wenn die Sonne um 0,0 Grad über dem Horizont steht und zwar nicht vor 6:30 Uhr und nicht später als 6:55 Uhr. Weitere Informationen gibt es unter folgendem Link: http://www.computerhilfen.de/info/smart-home-mit-fhem-intelligente-zeitschaltuhr.html

Dort sind dann auch weitere Varianten zu sunrise und sunset zu finden. Ich habe mich für die Variante HORIZON entschieden, da man mit dieser feiner justieren kann.

 

 

Nachdem Fhem das Licht und die Heizung in Abhängigkeit vom Wochentag und Wochenende steuert, möchte man auch die Feiertage berücksichtigt wissen. Auch dafür ist Fhem bestens gerüstet. Es besteht die Möglichkeit eine Kalender-ICS-Datei oder eine Feiertagsdatei mit der Extension holiday für sein Bundesland zu integrieren. Ich habe mich nach ein paar Versuchen für die Feiertagsdatei entschieden. Wer aber Kalenderdateien bevorzugt, der besucht einfach die Seite ifeiertage.de und lädt sich die für das jeweilige Bundesland passende ICS-Datei herunter.

Wie schon beschrieben, habe ich mich für die Feiertagsdatei entschieden, da ich nicht alle paar Jahre die Datei austauschen möchte. Diese Datei einfach in z.B.: BW_Feiertag.holiday benennen und unter dem Ordner /opt/fhem/FHEM speichern. Wichtig ist dabei, dass die Datei mit .holiday endet!  Danach sind noch ein paar zusätzlich Zeilen in der fhem.cfg nötig:

# Wochenende: $we
# www.ifeiertage.de
attr global holiday2we BW_Feiertag
define BW_Feiertag holiday

Danach bewirkt eine Abfrage mit $we, dass auch Feiertage berücksichtigt werden:

define Nachttischlampe_An at *05:59:00 { if(!$we) {fhem("set Nachttischlampe on")} }

Testen läßt sich die Feiertagsdatei, indem man sich einen Feiertag und/oder Urlaub auf den heutigen Tag definiert. FHEM neu starten nicht vergessen.

Meine holiday-Datei sieht wie folgt aus:

# Format für einzelne Tage: 1 MM-DD <Text>
1 01-01 Neujahr
1 01-06 Heilige Drei Koenige
1 05-01 Tag der Arbeit
1 08-15 Mariae Himmelfahrt
1 10-03 Tag der deutschen Einheit
1 11-01 Allerheiligen
1 12-25 1. Weihnachtstag
1 12-26 2. Weihnachtstag

# Osterbezogene Feiertage
# Format: 2 <relative Tage von Ostern> <Text>
2 -2 Karfreitag
2  1 Ostermontag
2 39 Christi Himmelfahrt
2 50 Pfingstmontag
2 60 Fronleichnam

5 -1 Wed 11 23 Buss- und Bettag

# Urlaube
# Format: 4 MM-DD MM-DD <Text>
#4 12-30 12-31 Urlaub1
#4 04-01 04-15 Test-Urlaub