FHEM und FritzBox 7170: Unterschied zwischen den Versionen
TSCOSM (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
K (fakelog durch Logfile ersetzt) |
||
(4 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 9: | Zeile 9: | ||
'''Nachfolgende Installationsanleitung ist angeregt und in Anlehnung an''' | '''Nachfolgende Installationsanleitung ist angeregt und in Anlehnung an''' | ||
''' | '''{{Link2Forum|Topic=11755|LinkText=diesen}} Post im FHEM Forum entstanden.''' | ||
=FHEM Community Image (Original AVM Firmware)= | =FHEM Community Image (Original AVM Firmware)= | ||
Zeile 155: | Zeile 155: | ||
</pre> | </pre> | ||
Für die nachfolgenden Anpassungen benötigen wir die Unix Befehle ''swapon'' und ''swapoff'' | 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 | welche in einer höheren busybox-Variante zu finden sind. Beispielsweise ist auf der | ||
FritzBox 7170 V2 mit oben angegebener Firmware die | FritzBox 7170 V2 mit oben angegebener Firmware die | ||
Zeile 247: | Zeile 247: | ||
</pre> | </pre> | ||
Es dauert einen kleinen Moment, dann ist die | Es dauert einen kleinen Moment, dann ist die Datei angelegt. | ||
soeben erzeugte Auslagerungsdatei machen wir dem System mit dem Befehl ''swapon'' bekannt. | Diese völlig leere Datei muss noch zur Verwendung als Auslagerungsspeicher vorbereitet werden: | ||
<pre> | |||
# /var/media/ftp/<DEIN-USB-STICK>/busybox/busybox-mipsel mkswap /var/media/ftp/<DEIN-USB-STICK>/swapfile | |||
</pre> | |||
Die soeben erzeugte Auslagerungsdatei machen wir dem System mit dem Befehl ''swapon'' bekannt. | |||
<pre> | <pre> | ||
Zeile 368: | Zeile 374: | ||
Dann muss das FHEM-Startskript beim Systemstart der FritzBox automatisch ausgeführt | 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 | 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 | Skript führt die FritzBox beim Systemstart aus. | ||
Die Datei kann auf verschiedene | |||
Weisen angepasst werden. Vier Möglichkeiten sind | Weisen angepasst werden. Vier Möglichkeiten sind | ||
[http://www.fritzmod.net/de/modification/debug-cfg/ in diesem Artikel] beschrieben. | [http://www.fritzmod.net/de/modification/debug-cfg/ in diesem Artikel] beschrieben. | ||
Meine bevorzugte Variante ist der Editor ''nvi'', der | Meine bevorzugte Variante ist der Editor ''nvi'', der in aktuellen AVM-Firmwareversionen enthalten ist. | ||
Der Inhalt des Skriptes sieht so aus: | |||
<pre> | <pre> | ||
Zeile 397: | Zeile 406: | ||
# 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. | # 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. | ||
# Zuletzt wird das FHEM-Startskript aufgerufen. Hier bitte ebenfalls den Pfad entsprechend der eigenen FritzBox anpassen! | # 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: | |||
<pre> | |||
# echo > /var/flash/debug.cfg | |||
</pre> | |||
Dann den Editor starten: | |||
<pre> | |||
# nvi /var/flash/debug.cfg | |||
</pre> | |||
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=== | ===Abschalten Telnet-Zugang=== | ||
Zeile 523: | Zeile 546: | ||
define WEBS FHEMWEB 8084 global | define WEBS FHEMWEB 8084 global | ||
attr WEBS smallscreen | 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 | define Logfile FileLog /var/media/ftp/uStor01/fhem/fhem-5.1/logs/fhem-%Y-%m.log Logfile readonly | ||
define autocreate autocreate | define autocreate autocreate | ||
attr autocreate autosave | attr autocreate autosave |
Aktuelle Version vom 22. November 2021, 12:18 Uhr
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:
- Ein USB Stick (Windows/VFAT formatiert) als zusätzlichen externen Speicher für die 7170 (NAS)
- Multi-call-binary busybox
- FHEM Community Image für FB7170/7270
- Telnet-Zugang zur FritzBox
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:
- Erst prüft das Skript die Verfügbarkeit einer Internetverbindung. Solange diese nicht aktiv ist, werden folgende Schritte nicht ausgeführt.
- 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.
- 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--------------------------------->