FHEM und FritzBox 7170

Aus FHEMWiki

Die FritzBox 7170 ist ein Allround-Gerät und vereint die wichtigsten Anschlüsse und Funktionen für den Heimeinsatz. Dazu zählen ADSL2+, WLAN 802.11 b/g/g++ bis 125MBit/s, LAN 100Mbit/s (4 Anschlüsse), ISDN-S0 Bus (1 Anschluss), Analogtelefonie (3 Anschlüsse). Da die FritzBox zur Sicherstellung der Telefonfunktion (wenn genutzt) in der Regel rund um die Uhr an ist, eignet sie sich optimal für die Installation von FHEM, denn so ist sichergestellt, dass die Heimautomatisierungs-Dienste ebenfalls rund um die Uhr zur Verfügung stehen.

Nachfolgende Installationsanleitung ist angeregt und in Anlehnung an diesen Post im FHEM Forum entstanden.

FHEM Community Image (Original AVM Firmware)

Die erste Variante beschreibt die die Installation von FHEM auf einer FritzBox 7170 über das Community Image. Dabei bleibt die Firmware der FritzBox unverändert. Es wird also lediglich zusätzliche Software installiert (busybox zur Erstellung einer Auslagerungsdatei sowie Perl, FHEM und entsprechende Kernel Module aus dem FHEM Community Image).

In einigen Foren Threads ist zu lesen, dass die 7170 wenig internen Arbeitsspeicher aufweist und FHEM daher nur bedingt oder nur sehr eingeschränkt läuft. Mit einer kleinen Erweiterung jedoch kann auch die 7170 ohne Anpassung der Firmware für FHEM fit gemacht werden.

Voraussetzungen

Die Anleitung beschreibt die Installation auf einer 7170 v2. Das Verfahren auf der älteren Variante sollte aber identisch sein. Voraussetzung ist eine aktuelle Firmware von AVM. Die zum Zeitpunkt der Erstellung des Artikels verfügbare Firmware hat die Version 29.04.87.

Zusätzlich benötigt werden:

Installation

Anschluss zusätzlicher Externer Speicher

Der USB Stick wird an den USB Anschluss der Fritzbox angeschlossen. Der USB Stick muss FAT/FAT32 (Windows) formatiert sein! Bitte kein anderes Dateisystem wie NTFS, EXT3 etc. verwenden. Eine detaillierte Anleitung zur Einrichtung des USB Speichers gibt es in der AVM Wissensdatenbank.

Nach Anschluss des USB Sticks an die FritzBox muss der Speicher über die Benutzeroberfläche der FritzBox eingerichtet werden. Zunächst bitte prüfen, dass der USB Anschluss nicht als USB-Fernanschluss verwendet wird:

  • Heimnetz
  • USB-Geräte
  • Fernanschluss
  • USB Fernanschluss aktiv (deaktivieren / nicht angehakt)

Ist der Fernanschluss deaktiviert, so kann der Speicher als Network attached Storage (NAS) eingerichtet werden. Hierzu bitte folgendermaßen vorgehen:

  • Heimnetz
  • Speicher (NAS)
  • Speicher (NAS) aktiv (aktivieren)

Optional kann der Zugriff aus dem Internet (per FTP) und/oder die Option Musikbox aktiv aktiviert werden.

Wurden die Einstellungen entsprechend vorgenommen und der Speicher ordnungsgemäß formatiert, so kann die Freigabe z.B. über den Datei-Explorer (Windows), Finder (OSX), Android Systeme mit Hilfe von AndSMB oder jeden anderen Samba Client aufgerufen werden.

Aktivierung Telnet-Zugang

Für die späteren Arbeiten zur Einrichtung von FHEM wird ein Telnetzugang zur FritzBox benötigt. Da Telnet ein relativ altes, nicht abhörsicheres Protokoll darstellt ist der Telnet Zugang der FritzBox zunächst inaktiv. Auch auf einigen neueren Betriebsystemen (z.B. Windows 7) ist der Telnet Client zunächst deaktiviert und muss aktiviert werden.

Die Aktivierung von Telnet auf der FritzBox erfolgt über die Kurzwahl #96*7*. Ist kein Telefon an die Fritzbox angeschlossen, kann mit Hilfe der Schritte aus dieser Anleitung der Telnetzugang aktiviert werden.

Die Anmeldung an der FritzBox über Telnet erfolgt über die Eingabeaufforderung (Windows) oder Terminal (OSX) oder über jede beliebige andere Shell folgendem Aufruf:

macbook:~ $ telnet fritz.box

Darauf erfolgt die Anmeldung an der FritzBox mit dem gleichen Kennwort, welches auch für die Weboberfläche genutzt wird.

Trying 192.168.x.x...
Connected to fritz.box.
Escape character is '^]'.
Fritz!Box web password: 

BusyBox v1.8.2 (2009-04-22 13:54:57 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

ermittle die aktuelle TTY
tty is "/dev/pts/0"
Console Ausgaben auf dieses Terminal umgelenkt
# _

Wer den vorherigen Abschnitt aufmerksam gelesen hat, der stellt fest, dass die jetzt aufgebaute Telnet Verbindung die ash Shell benutzt die aus dem multi-call-binary busybox v1.8.2 stammt. Mehr dazu im folgenden Abschnitt.

Einrichtung der Auslagerungsdatei (SWAP)

Bis Version 5.3 läuft FHEM noch ohne Auslagerungsdatei auf der FritzBox. Ab Version 5.4 muss zwingend eine Auslagerungsdatei auf der FritzBox eingerichtet werden. Wird FHEM 5.4 oder höher ohne Auslagerungsdatei installiert, so kommt es beim ersten Zugriff auf die Weboberfläche von FHEM auf der FritzBox zu einem Absturz und erzwungenen Neustart der FritzBox. Damit dies nicht nicht vorkommt, muss der knappe Speicher der FritzBox mit einer Auslagerungsdatei ''erweitert'' werden. Der aktuelle Speicherverbrauch der FritzBox ohne Auslagerungsdatei und FHEM kann mit dem Befehl free abgrefragt werden:

# free
              total         used         free       shared      buffers
  Mem:        30316        28652         1664            0         1304
 Swap:            0            0            0
Total:        30316        28652         1664

Für die Einrichtung der Auslagerungsdatei benötigen wir das Multi-call-binary busybox in einer höheren Version als mit der Firmware ausgeliefert. Welche Version mit der FritzBox ausgeliefert wird, kann nach erfolgreicher Telnet-Anmeldung oder hier nachgelesen werden. Wer die Auslieferungsversion erneut abfragen möchte kann in der Telnet-Verbindung den Befehl busybox absetzen und erhält Infos zu Version un unterstützten Befehlen:

# busybox 
BusyBox v1.8.2 (2009-04-22 13:54:57 CEST) multi-call binary
Copyright (C) 1998-2006 Erik Andersen, Rob Landley, and others.
Licensed under GPLv2. See source distribution for full notice.

Usage: busybox [function] [arguments]...
   or: [function] [arguments]...

        BusyBox is a multi-call binary that combines many common Unix
        utilities into a single executable.  Most people will create a
        link to busybox for each function they wish to use and BusyBox
        will act like whatever it was invoked as!

Currently defined functions:
        [, [[, ash, basename, cat, chmod, clear, cp, date, dd, dmesg, echo, egrep, env, ether-wake, false,
        fgrep, find, free, grep, halt, head, hostname, ifconfig, ifdown, ifup, inetd, init, insmod, kill,
        killall, ln, login, ls, lsmod, md5sum, mkdir, mknod, modprobe, more, mount, mv, nc, netstat, nohup,
        pidof, ping, poweroff, ps, pwd, realpath, reboot, rm, rmdir, rmmod, route, sed, setconsole, sh,
        sleep, stty, tail, tar, tee, telnetd, test, tftp, time, touch, tr, traceroute, true, tty, umount,
        uname, uniq, uptime, vconfig, vi, wget

Für die nachfolgenden Anpassungen benötigen wir die Unix Befehle "mkswap", swapon und swapoff welche in einer höheren busybox-Variante zu finden sind. Beispielsweise ist auf der FritzBox 7170 V2 mit oben angegebener Firmware die busybox-mipsel v1.16.1 lauffähig. Dieses Version enthält alle benötigten Befehle.

Das fertige Programm bitte herunterladen und auf die FritzBox kopieren oder direkt auf der FritzBox ein Verzeichnis auf dem USB-Stick herunterladen. Schritt für Schritt in der aktiven Telnet-Verbindung auf der FritzBox:

Wo ist mein USB-Stick? Hier hilft ein einfaches mount weiter.

# mount
rootfs on / type rootfs (rw)
/dev/root on / type squashfs (ro)
proc on /proc type proc (rw,nodiratime)
ramfs on /var type ramfs (rw)
usbfs on /proc/bus/usb type usbfs (rw)
sysfs on /sys type sysfs (rw)
/dev/sda1 on /var/media/ftp/Intenso-MicroLine-01 type vfat (rw,nodiratime, ...

In dieser FritzBox ist der USB-Stick unter /var/media/ftp/Intenso-MicroLine-01 eingebunden. Hier erstellen wir ein Verzeichnis und wechseln für den Download der Busybox dorthin:

# cd  /var/media/ftp/Intenso-MicroLine-01
# mkdir busybox
# cd busybox
# wget http://www.busybox.net/downloads/binaries/1.16.1/busybox-mipsel
Connecting to www.busybox.net (140.211.167.224:80)
busybox-mipsel       100% |***********************************************************************|  1657k 00:00:00 ETA

Nach dem Download kann der Funktionsumfang von busybox-mipsel v1.16.1 abgefragt werden. Hierzu bitte in bestehender Telnet Verbindung ./busybox-mipsel eingeben.

# ./busybox-mipsel
BusyBox v1.16.1 (2010-03-29 11:52:23 CDT) multi-call binary.
Copyright (C) 1998-2009 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

Usage: busybox [function] [arguments]...
   or: function [arguments]...

        BusyBox is a multi-call binary that combines many common Unix
        utilities into a single executable.  Most people will create a
        link to busybox for each function they wish to use and BusyBox
        will act like whatever it was invoked as.

Currently defined functions:
        [, [[, acpid, addgroup, adduser, adjtimex, arp, arping, ash, awk, basename, bbconfig, beep, blkid, brctl,
        bunzip2, bzcat, bzip2, cal, cat, catv, chat, chattr, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt,
        cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd, deallocvt, delgroup,
        deluser, depmod, devmem, df, dhcprelay, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, dpkg, dpkg-deb,
        du, dumpkmap, dumpleases, echo, ed, egrep, eject, env, envdir, envuidgid, ether-wake, expand, expr, fakeidentd,
        false, fbset, fbsplash, fdflush, fdformat, fdisk, fgrep, find, findfs, flashcp, fold, free, freeramdisk, fsck,
        fsck.minix, fsync, ftpd, ftpget, ftpput, fuser, getopt, getty, grep, gunzip, gzip, halt, hd, hdparm, head,
        hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig, ifdown, ifenslave, ifplugd, ifup, inetd, init,
        insmod, install, ionice, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill,
        killall, killall5, klogd, lash, last, length, less, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger,
        login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lspci, lsusb, lzmacat, lzop, lzopcat,
        makedevs, makemime, man, md5sum, mdev, mesg, microcom, mkdir, mkdosfs, mkfifo, mkfs.minix, mkfs.reiser,
        mkfs.vfat, mknod, mkpasswd, mkswap, mktemp, modprobe, more, mount, mountpoint, msh, mt, mv, nameif, nc,
        netstat, nice, nmeter, nohup, nslookup, ntpd, od, openvt, passwd, pgrep, pidof, ping, ping6, pipe_progress,
        pivot_root, pkill, popmaildir, poweroff, printenv, printf, ps, pscan, pwd, raidautorun, rdate, rdev, readahead,
        readlink, readprofile, realpath, reboot, reformime, renice, reset, resize, rm, rmdir, rmmod, route, rpm,
        rpm2cpio, rtcwake, run-parts, runlevel, runsv, runsvdir, rx, script, scriptreplay, sed, sendmail, seq, setarch,
        setconsole, setfont, setkeycodes, setlogcons, setsid, setuidgid, sh, sha1sum, sha256sum, sha512sum, showkey,
        slattach, sleep, softlimit, sort, split, start-stop-daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd,
        swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, tcpsvd, tee, telnet, telnetd, test, tftp,
        tftpd, time, timeout, top, touch, tr, traceroute, traceroute6, true, tty, ttysize, tunctl, udhcpc, udhcpd,
        udpsvd, umount, uname, uncompress, unexpand, uniq, unix2dos, unlzma, unlzop, unzip, uptime, usleep, uudecode,
        uuencode, vconfig, vi, vlock, volname, wall, watch, watchdog, wc, wget, which, who, whoami, xargs, yes, zcat,
        zcip

Die neuere Version enthält also eine ganze Reihe mehr an Befehlen als die mit der Firmware ausgelieferte Version. Jetzt geht es an die eigentliche Erstellung der Auslagerungsdatei. Hierzu ertsellen wir zunächst eine leere, 32MB große Datei im Dateisystem auf dem USB-Stick. Über die weiterhin aktive Telnet Verbindung auf der FritzBox setzen wir diesen Befehl ab, wobei <DEIN-USB-STICK> für den Namen Deines USB-Stick steht (siehe oben Befehl mount) und jeweils zu ersetzen ist:

# dd if=/dev/zero of=/var/media/ftp/<DEIN-USB-STICK>/swapfile bs=1024 count=32768

Es dauert einen kleinen Moment, dann ist die Datei angelegt. Diese völlig leere Datei muss noch zur Verwendung als Auslagerungsspeicher vorbereitet werden:

# /var/media/ftp/<DEIN-USB-STICK>/busybox/busybox-mipsel mkswap /var/media/ftp/<DEIN-USB-STICK>/swapfile

Die soeben erzeugte Auslagerungsdatei machen wir dem System mit dem Befehl swapon bekannt.

# /var/media/ftp/<DEIN-USB-STICK>/busybox/busybox-mipsel swapon /var/media/ftp/<DEIN-USB-STICK>/swapfile

Ein abschließendes free zeigt uns, dass die Auslagerungsdatei jetzt angelegt ist und benutzt wird. Bitte folgende Ausgabe mit der Ausgabe von oben vergleichen mit Augenmerk auf die Zeile Swap.

# free
              total         used         free       shared      buffers
  Mem:        30316        28844         1472            0         1324
 Swap:        32760            0        32760
Total:        63076        28844        34232

Wer die in der Firmware ausgeleiferte Busybox dauerhaft ersetzen möchte, kann die notwendigen Informationen hier nachlesen.

Installation von FHEM

Nachdem die Auslagerungsdatei erfolgreich erzeugt wurde, kann es mit der Installation von FHEM auf der FritzBox losgehen. Diese ist vergleichsweise unkompliziert und schnell durchgeführt.

Zunächst benötigen wir das aktuelle Community-Image für die FritzBox (siehe Abschnitt #Voraussetzungen. Dieses bitte entpacken und auf den USB-Stick an der FritzBox kopieren. Nach dem Kopieren von FHEM muss auf der FritzBox 7170 der FHEM-Heimatpfad im Start-Skript startfhem angepasst werden. Dies wird erneut in der aktiven Telnetverbindung durchgeführt. Dazu benutzen wir den Editor vi. Mit dem Befehl

# vi /var/media/ftp/<DEIN-USB_STICK>/fhem/startfhem

das Skript öffnen und den fest eingegebenen Heimatpfad (home) der FHEM Installation auf das eigene System anpassen.

# On the Fritzbox 7270 V1/V2 with missing df replace home with the hardcoded
# path.
#root=`df | sed -n -e '/ftp\//s/.*ftp\///p'`
#home=/var/InternerSpeicher/$root/fhem
#home=/var/media/ftp/Generic-FlashDisk-01/fhem
home=/var/media/ftp/<DEIN-USB-STICK>/fhem

Test der Installation

Die Installation kann jetzt mit dem Ausführen des FHEM-Start-Skriptes getestet werden

# /var/media/ftp/<DEIN-USB-STICK>/fhem/startfhem

Beim Start von FHEM erscheinen einige Programmausgaben auf der Konsole. Nach kurzer Zeit ist das Webinterface von FHEM auf der FritzBox erreichbar. Dazu im Browser bitte folgende URL eingeben:

http://fritz.box:8083

Einrichten von Autostart

Damit FHEM bei jedem Neustart der FritzBox automatisch startet sind noch zwei Schritte notwendig. Zunächst muss die Aktivierung der Auslagerungsdatei in das FHEM-Startskript aufgenommen werden. Eine mögliche Anpassung sieht so aus:

#!/bin/sh

# On the Fritzbox 7270 V1/V2 with missing df replace home with the hardcoded
# path.
#root=`df | sed -n -e '/ftp\//s/.*ftp\///p'`
#home=/var/InternerSpeicher/$root/fhem
#home=/var/media/ftp/Generic-FlashDisk-01/fhem
home=/var/media/ftp/<DEIN-USB-STICK>/fhem

cd $home

trap "" SIGHUP
modprobe kernel/cdc_acm
modprobe ftdi_sio
sleep 2

# FritzBox 7170, 7270 V1/V2 needs additional swap
# busybox from http://www.busybox.net/downloads/binaries/1.16.1/busybox-mipsel
# should be present on your Box.
# On FritzBox 7170 swap file size 32M is sufficient -> 1024 * 32768
# test if swapfile already present in fhem directory
if [ -f ../swapfile ]; then
  echo "swapfile already present ..."
else
  echo "swapfile will be built, please wait ..."
  dd if=/dev/zero of=../swapfile bs=1024 count=32768
fi
../busybox/busybox-mipsel mkswap ../swapfile
../busybox/busybox-mipsel swapon ../swapfile
echo "additional swap was activated"

ln -sf $home/FHEM/fhemcmd.sh /var/fhemcmd

PATH=$home:$PATH
export PATH

export LD_LIBRARY_PATH=$home/lib
export PERL5LIB=$home/lib/perl:$home/lib/perl/arch

#export PERL5LIB=$home/lib/perl5/5.10
#stty -echo -echok -echoke -echoe -echonl < /dev/ttyACM0

perl fhem.pl fhem.cfg &>/dev/null

Vorstehendes Skript geht davon aus, dass FHEM auf dem USB-Stick im Verzeichnis fhem installiert ist und busybox-mipsel auf gleicher Ebene im Ordner busybox.

Dann muss das FHEM-Startskript beim Systemstart der FritzBox automatisch ausgeführt werden. Hierzu ist es notwendig die Datei /var/flash/debug.cfg anzupassen. Dieses Skript führt die FritzBox beim Systemstart aus.

Die Datei kann auf verschiedene Weisen angepasst werden. Vier Möglichkeiten sind in diesem Artikel beschrieben. Meine bevorzugte Variante ist der Editor nvi, der in aktuellen AVM-Firmwareversionen enthalten ist.

Der Inhalt des Skriptes sieht so aus:

while !(ping -c 1 www.google.de > /dev/null); do
        sleep 15
done

max=10
i=0
while [ $i -lt $max ]; do
        if mount | grep " on /var/media/ftp/<DEIN-USB-STICK>" > /dev/null; then
                break
        fi
        let i=$i+1
        sleep 30
done

/var/media/ftp/<DEIN-USB-STICK>/fhem/startfhem > /dev/null 2>&1

Hierzu eine kurze Erklärung:

  1. Erst prüft das Skript die Verfügbarkeit einer Internetverbindung. Solange diese nicht aktiv ist, werden folgende Schritte nicht ausgeführt.
  2. Dann wird in maximal 10 Wiederholungen überprüft, ob der USB-Stick bereits eingebunden ist. Hier bitte darauf achten den Pfad entsprechend auf die eigene FritzBox abzupassen.
  3. Zuletzt wird das FHEM-Startskript aufgerufen. Hier bitte ebenfalls den Pfad entsprechend der eigenen FritzBox anpassen!

Um der Box das Skript beizubringen, zuerst die entsprechende Datei erstellen:

# echo > /var/flash/debug.cfg

Dann den Editor starten:

# nvi /var/flash/debug.cfg

Dann mit Taste "i" den Einfügemodus aktivieren, gewünschte Teile des oben erläuterten Skripts per Copy&Paste einfügen, mit <ESC> den Einfügemodus verlassen und mit ":wq"<ENTER> speichern und den Editor verlassen.

Abschalten Telnet-Zugang

Der Telnetzugang wird durch die Kurzwahl #96*8* abgeschaltet. Auch hier gilt: Ist kein Telefon an die Fritzbox angeschlossen, kann mit Hilfe der Schritte aus dieser Anleitung der Telnetzugang auch deaktiviert werden.

Neustart und Funktionsprüfung

Abschließend kann die FritzBox über die Benutzeroberfläche der FritzBox neu gestartet werden. Hierzu den Punkt

  • System
  • Zurücksetzen
  • Neustart
  • Neu starten

anwählen und warten, bis die Netzwerkverbindung wieder aktiv ist. Danach muss neben der Benutzeroberfläche der FritzBox auf Port 80 auch die FHEM Installation auf Port 8083 verfügbar sein.


Die Beschreibung in den folgenden Abschnitten wurden aus dem Originalartikel übernommen. Hier ist eine Anpassung der Firmware notwendig. Wer unerfahren oder unsicher ist, sollte auf jeden Fall die Variante ohne Modifikation der Firmware anwenden!


FHEM unter Freetz (modifizierte, open source Firmware)

Ziel: die aktuelle Version (zum Zeitpunkt des Artikel ist dies 5.0) von fhem (pgm2) auf der Fritz!Box 7170 mit einem CUL zum Laufen zu bekommen, ohne die Box dabei total zu überlasten oder zu crashen... Logfiles der Box sollen dabei nicht auf der Box sondern auf einem angesteckten USB-Stick gespeichert werden.

Orientiert habe ich mich an der hier veröffentlichten Anleitung, welche für mich allerdings einige Fallstricke aufweist - und bei der ich zumindest die Rolle des Apaches bei der Art der Installation und Konfiguration nicht verstanden habe...

Voraussetzungen: Ein USB-Hub an der Fritz!Box mit (mindestens) einem USB-Speicherstick sowie einem Funk-Device (ich beschreibe hier den Weg für CUL v3.2, anderes wird ähnlich funktionieren); ein PC mit VMware (Player) bzw. VirtualBox, um die neue Firmware zu basteln

Bemerkung: Ich habe versucht, das Wesentliche aus dem Gedächtnis und meiner (unzureichenden) Doku zu rekonstruieren. Falls es irgendwo hängt, würde ich mich über eine Korrektur des Artikels und/oder 'ne kurze Mail freuen!

Freetz

Warnung:Mit freetz kann man sich seine Fritz!Box auch schön zu Grunde richten (wenn auch meist nicht endgültig); ich empfehe ganz dringend die Lektüre der ersten Schritte für Anfänger und die etwas gründlichere Auseinandersetzung mit Freetz!

Vorbereitungen

Freetz erlaubt die Modifikation der original-AVM Firmware, so dass zusätzliche Features eingebaut und nicht benötigte eingespart werden können (spart Flash und RAM - und erhöht eventuell sogar die Sicherheit...)

Für das Erstellen der Firmware mittels Freetz ist hier.

Ist die VM gemäß Anleitung gestartet, kann man (nach einloggen und downloaden der Quellen) sich mittels make menuconfig seine eigene Firmware zusammenbasteln.

Konfiguration der Firmware

(leider erlaubt das Wiki kein Upload von Textdateien, daher liegt meine Config extern)

Meine komplette (so für mich funktionierende) .config für freetz gibt es hier; bitte beachten, dass folgende (nicht direkt fhem-relevante) Änderungen eingebastelt sind, um die Box sowohl bezüglich Flash als auch bezüglich RAM zu entlasten:

FREETZ_REMOVE_TR069=y   # ACHTUNG: Vorher via WebIF deaktivieren!
FREETZ_REMOVE_USERMAN=y  # brauche keine Kindersicherung
FREETZ_REMOVE_FTPD=y   # ebenso kein FTP
FREETZ_REMOVE_MEDIASRV=y # Mediaserver ist eine andere Kiste
FREETZ_REMOVE_SMBD=y   # Samba brauche ich auch nicht (spart alles Platz!)
FREETZ_PACKAGE_CALLMONITOR=y # der Callmonitor ist TOLL!
FREETZ_PACKAGE_DROPBEAR=y # SSH Server. Klasse zur Installation und Wartung von FHEM
FREETZ_PACKAGE_NANO=y   # kleiner Editor, angenehmer als VI.

Hinweis: Diese Config spiegelt natürlich meine Konfiguration wieder. Wer einen Samba, FTP-Server etc. auf seiner Box haben will, muss natürlich entsprechende Änderungen vornehmen!

ACHTUNG: Das Entfernen von TR069 kann laut einigen Hinweisen zu einer Dauer-reboot-Schleife der Fritz!Box führen, wenn TR069 nicht vorher per Webinterface deaktiviert wurde; siehe auch hier - im Zweifellsfall tr069 nicht deaktivieren! fhem-relevante Anpassungen (Kernelmodule):

FREETZ_MODULE_usbserial=y # fuer CUL
FREETZ_MODULE_ftdi_sio=y # fuer FHZ? (habe ich nicht...)

einloggen und download der fhem-Quellen

Ist die selbst gebastelte Freetz-Firmware geflasht, kann man sich - wenn dropbear einkompiliert wurde - mittels SSH (ein empfehlenswerter SSH-Client für Windows ist z.B. PuTTY auf der Kiste anmelden. Als Serveradresse - na klar - fritz.box verwenden; Login ist "root", Passwort (ACHTUNG, daran habe ich 'ne Runde gesessen) "freetz". Dieses sollte man möglichst bald ändern.

Jetzt wechseln wir in das Verzeichnis des USB-Sticks und legen uns erst einmal ein Sammelverzeichnis für fhem an:

cd /var/media/ftp/uStor01
mkdir fhem
cd fhem

Sollte der erste Befehl nicht klappen, ist der USB-Stick wohl an einer anderen Stelle gemountet - ein df gibt Aufschluss, wo.

Jetzt besorgen wir uns Perl (dankenswerterweise vorkompiliert und mit allen wesentlichen Modulen bereitgestellt) sowie fhem:

wget [http://fhem.de/fb7170/perl-5.6.2.tgz http://fhem.de/fb7170/perl-5.6.2.tgz]
wget [http://fhem.de/fhem-5.1.tar.gz http://fhem.de/fhem-5.1.tar.gz]

entpacken:

tar -xvzf perl-5.6.2.tgz
tar -xvzf fhem-5.1.tar.gz

Praktischerweise ist in der Perl-Installation eine Datei vorhanden, die wir als Swap-Device für die Box nutzen können. Das Ganze ist natürlich erbärmlich langsam (USB 1.1!), leider führt kein Weg daran vorbei:

swapon /var/media/ftp/uStor01/fhem/perl/swapfile

Damit wir das nicht jedes mal machen müssen, wenn die Box startet, ist ein automatisches Einbinden beim Starten der Box sinnvoll. Freetz hat ja sein Webinterface auf fritz.box:81; hier gibt es unter Einstellungen / rc.custom die Möglichkeit, Kommandos beim Booten automatisch ausführen zu lassen.

<---------------------------- alt anfang-------------------------------->

Bei mir steht da

[ -f /var/media/ftp/uStor01/fhem/perl/swapfile ] && swapon /var/media/ftp/uStor01/fhem/perl/swapfile

<---------------------------- alt ende --------------------------------->


Hinweis: kommt die Meldung "Konfiguration in der aktuellen Sicherheitsstufe nicht verfügbar", hilft folgendes (auf der Shell eingeben!)

echo 0 > /tmp/flash/security
modsave

heisst, wenn das Swapfile gefunden wird (Stick steckt), dann aktiviere das auch. fhem selber möchte ich gerne (noch) manuell starten, das Swapfile brauche ich aber auch, wenn fhem nicht läuft (der Callmanager startet bei mir perl-Programme, die viel Speicher brauchen)...

Basisinstallation von fhem mit pgm2

Freetz läuft, Perl steht bereit, FHEM liegt vor. Machen wir uns an die Konfiguration. Eigentlich wird fhem mittels make install-pgm2 installiert, das wollen wir hier aber nicht (die Zielverzeichnisse stehen auf der FB so nicht zur Verfügung), aber wir können uns an die Zeilen aus dem Makefile halten:

(angenommen wird hier, dass fhem in /var/media/ftp/uStor01/fhem/fhem-5.1 entpackt wurde):

cd /var/media/ftp/uStor01/fhem/fhem-5.1    # eventuell anpassen!
cp -r webfrontend/pgm2/* FHEM
cp docs/commandref.html docs/faq.html docs/HOWTO.html FHEM
cp docs/*.png docs/*.jpg FHEM
cd examples; for i in *; do cp -r $i ../FHEM/example.$i; done
cd ..
cp examples/sample_pgm2 fhem.cfg
mkdir logs

soweit, so gut. Unsere fhem.cfg passen wir in etwa an wie folgt (nano fhem.cfg):

attr global logfile /var/media/ftp/uStor01/fhem/fhem-5.1/logs/fhem-%Y-%m.log
attr global modpath .         # where our FHEM directory is
attr global port 7072         # our TCP/IP port (localhost only)
attr global statefile /tmp/fhem.save  # where to save the state of the devices
attr global verbose 3         # "normal" verbosity (min 1, max 5)
define CUL CUL /dev/ttyUSB0@38400 1234
define WEB FHEMWEB 8083 global
define WEBS FHEMWEB 8084 global
attr WEBS smallscreen
# Readonly logfile, to access the global log
define Logfile FileLog /var/media/ftp/uStor01/fhem/fhem-5.1/logs/fhem-%Y-%m.log Logfile readonly
define autocreate autocreate
attr autocreate autosave
attr autocreate device_room %TYPE
attr autocreate filelog /var/media/ftp/uStor01/fhem/fhem-5.1/logs/%NAME-%Y.log
attr autocreate weblink
attr autocreate weblink_room Plots

Hinweis:Ich hatte enorme Probleme - mein CUL empfing eifrig Daten, nur sendete er nichts. Mit der Umstellung auf "define CUL CUL /dev/ttyUSB0@38400 1234" ging es auf einmal, während "define CUL CUL /dev/ttyUSB0 1234" und "define CUL CUL /dev/ttyUSB0@9600 1234" den erwähnten Effekt brachten. Vielleicht hilfts jemandem.

Startscript

letztendlich basteln wir uns noch ein Startskript, welches das notwendige Kernel-Modul für CUL einbindet und den ganzen Kram startet:

nano fhem.sh

export dTSB=1212687845
export LD_LIBRARY_PATH='/var/media/ftp/uStor01/fhem/perl/lib'
export PERL5LIB='/var/media/ftp/uStor01/fhem/perl/lib:/var/media/ftp/uStor01/fhem/perl/lib/perl5:/var/media/ftp/uStor01/fhem/perl/lib/perl5/5.6.2'
insmod /lib/modules/2.6.13.1-ohio/kernel/drivers/usb/serial/usbserial.ko vendor=0x03eb product=0x204b
mkdir /tmp/fhem
cd /var/media/ftp/uStor01/fhem/fhem-5.1/var/media/ftp/uStor01/fhem/perl/bin/perl fhem.pl fhem.cfg

Bemerkung für die *nixer unter uns: ein chmod +x brauchen wir nicht, auf dem Stick ist alles +x

Das Skript jetzt starten (./fhem.sh) - und das Log beobachten (tail /var/media/ftp/uStor01/fhem/fhem-5.1/logs/NameDesLogfiles). Kommen Fehlermeldungen, dass es Probleme mit SIGirgendwas gibt, hilft erst einmal ein beherztes Auskommentieren der Zeilen 1757ff in fhem.pl (nano fhem.pl):

sub
SignalHandling()
{
 if($^O ne "MSWin32") {
#  $SIG{'INT'} = sub { $sig_term = 1; };
#  $SIG{'TERM'} = sub { $sig_term = 1; };
#  $SIG{'PIPE'} = 'IGNORE';
#  $SIG{'CHLD'} = 'IGNORE';
#  $SIG{'HUP'} = sub { CommandRereadCfg(undef, "") };
 }
}

Hier gibt es sicher elegantere Methoden - ich war nur zu faul mich zu bemühen zu verstehen, woran es hängt! Wenn jemand da eine Idee hat... mittels telnet localhost 7072 oder mit dem Webbrowser auf http://fritz.box:8083/fhem sollte jetzt auf fhem zugegriffen werden können.

FHZ

(alles ungetestet, habe keine FHZ mit USB) ...

das Modul für die FHZ könnte sich mit

insmod /lib/modules/2.6.13.1-ohio/kernel/drivers/usb/serial/ftdi_sio.ko

laden lassen, die FHZ sollte dann unter

/dev/ttyACM0

bereit stehen...

Autostart fhem

Beispielscript für rc.custom

Die Warteschleife ist aus einem Beispiel von http://www.zebradem.com/wiki/index.php

# Wait until we have a network connection.
# Script can be disabled by removing network cable
# At least one of the web sites must must respond to ping before we continue
SITE_1=web.de
SITE_2=www.google.com
while !(ping -c 1 $SITE_1>/dev/null) && !(ping -c 1 $SITE_2>/dev/null); do
  sleep 15
done
# Warten bis USB-Stick gemountet ist 
max=10
i=0
while [ $i -lt $max ]; do
if mount | grep " on /var/media/ftp/" > /dev/null; then
break
fi
let i=$i+1
sleep 30
done
# ENDE USB-Stick Warteschleife 
swapon /var/media/ftp/uStor01/fhem/perl/swapfile
/var/media/ftp/uStor01/fhem/fhem-5.1/fhem.sh

<---------------------------- alt anfang-------------------------------->

wer möchte, bastelt sich jetzt noch eine Zeile wie

[-f /var/media/ftp/uStor01/fhem/fhem.sh] && /var/media/ftp/uStor01/fhem/fhem.sh

(ungetestet; bei mir liegt das Skript nicht unter fhem-5.1!) in seine rc.custom (siehe oben), dann startet das ganze automatisch mit der Box.

<---------------------------- alt ende--------------------------------->