Momentan beschäftige ich mich ein wenig mit Heimautomation. Da ich zur Miete wohne, kommt es leider nicht in Frage ein KNX/EIB-System zu installieren, da alle Teile wieder abnehmbar sein müssen. Daher muss ich eine Funklösung her. Als Software verwende ich FHEM , einen in Perl geschrieben Server, welcher die Verwaltung der Geräte übernimmt. Als Funk-Sender & -Empfänger kommt bei mir ein Busware COC  zum Einsatz. Auf der Wiki-Seite von Busware wird wunderbar erläutert, wie man diese Einrichtung vollzieht, ich rate auf jeden Fall dazu, dort immer die aktuellsten Schritte nachzuvollziehen. Das folgende Tutorial ist auf dem Stand vom 09.05.2013.

Zunächst starte ich mit einem Raspbian  auf dem ich das fhem -Debian-Paket installiere. Für die folgende Schritte wechsle ich auf den User “root”! Die folgenden Schritte sind natürlich auf eigene Gefahr!

Nachdem man die ersten Schritte auf dem System getan hat (SSH-Server einschalten usw.) kommt man dann zur Einrichtung des COC. Zunächst sollte man zuvor avrdude installieren, da man ohne dieses Tool nichts flashen kann:

1
apt-get install avrdude

Nun muss man zunächst einen Seriellen Port freimachen. Dazu muss man zunächst /etc/inittab editieren und die folgenden Zeilen mit einem Kommentar versehen:

1
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Sodass diese so aussieht:

1
# T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Anschließend muss man alle Einträge mit ttyAMA0 aus der Datei /boot/cmdline.txt entfernen. Meine Zeile sah vorher so aus:

1
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Und danach dann so:

1
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

Jetzt einmal rebooten und nach dem Boot wieder zu User “root” wechseln! Anschließend sollte man FHEM erstmal stoppen:

1
/etc/init.d/fhem stop

Dann wird die Firmware geflashed. Dazu muss man zunächst wissen, ob man einen COC mit 1-Wire oder ohne gekauft hat. Hat man einen mit, so muss man diese Datei  herunterladen (COC.hex) andernfalls diese Datei  (COC.radio_only.hex). Da ich keine 1-Wire-Extension gekauft hatte, nehme ich letztere:

1
wget "http://culfw.svn.sourceforge.net/viewvc/culfw/trunk/culfw/Devices/COC/COC.radio_only.hex?revision=HEAD" -O COC.radio_only.hex

Nun muss man den COC mit ein paar Kommandos ansteuern um den Bootloader anzusprechen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
echo "calling COC bootloader..."
if test ! -d /sys/class/gpio/gpio17; then echo 17 > /sys/class/gpio/export; fi
if test ! -d /sys/class/gpio/gpio18; then echo 18 > /sys/class/gpio/export; fi
echo out > /sys/class/gpio/gpio17/direction
echo out > /sys/class/gpio/gpio18/direction
echo 0 > /sys/class/gpio/gpio18/value
echo 0 > /sys/class/gpio/gpio17/value
sleep 1
echo 1 > /sys/class/gpio/gpio17/value
sleep 1
echo 1 > /sys/class/gpio/gpio18/value

Und nun wird die Firmware geflashed (Achtung Dateiname am Ende bei dem anderen Gerätetyp tauschen!):

1
avrdude -p atmega1284p -P /dev/ttyAMA0 -b 38400 -c avr109 -U flash:w:COC.radio_only.hex

Dies sieht wie folgt aus: [caption id=“attachment_4783” align=“alignnone” width=“600”]

COC-Firmware
COC-Firmware[/caption]

Abschließend muss man nun noch die Datei /etc/init.d/fhem ein wenig abändern. Suche:

1
start)

Ersetze durch:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
start)
 echo "resetting 868MHz extension..."
 if test ! -d /sys/class/gpio/gpio17; then echo 17 > /sys/class/gpio/export; fi
 if test ! -d /sys/class/gpio/gpio18; then echo 18 > /sys/class/gpio/export; fi
 echo out > /sys/class/gpio/gpio17/direction
 echo out > /sys/class/gpio/gpio18/direction
 echo 1 > /sys/class/gpio/gpio18/value
 echo 0 > /sys/class/gpio/gpio17/value
 sleep 1
 echo 1 > /sys/class/gpio/gpio17/value
 sleep 1

Dies initialisiert die COC-Erweiterung bei jedem Start von FHEM. Wenn man nun noch möchte, kann man einen Watchdog-Prozess installieren, welcher den Raspberry bei dauerhafter hoher CPU-Last durchpustet. Dies ist auf der Busware-Seite  ganz unten beschrieben. Dort findet sich auch, wie man die Ansteuerung der 1-Wire und RTC Module vornimmt.