Statusdisplay Fritzbox 7390

Aus FHEMWiki

Statusdisplay für die Anzeige von Informationen der Hausautomation FHEM an einer Fritzbox 7390

Einleitung

DPF1.png

Bei der Suche nach einer kostengünstigen Möglichkeit, einige Temperaturen, Wetterinformationen und Schaltzustände zu visualisieren, bin ich auf den kleinen 2,4" digitalen Bilderrahmen des Elektronikversenders Pearl gestossen. Nach einem Firmware-Patch ist dieser von der Fa. AppoTech mit dem Chip AX206 bestückte Bilderrahmen über lcd4linux ansprechbar und wird schon in einigen Unix/Linux Projekten erfolgreich eingesetzt.

Der User Mick hat auf der Wiki-Seite Infodisplay Linux-Rechner schon ausführlich das Patchen des Bilderrahmens und das Kompilieren der Library lcd4linux für die allgemeine Verwendung dokumentiert. Ich möchte in diesem HowTo die spezielle Einrichtung und das Betreiben an einer Fritzbox 7390 beschreiben. Wichtig war mir dabei auch, möglichst nichts an der Standardkonfiguartion der Fritzbox zu verändern und mit der etwas beschränkten Linux Umgebung auszukommen.

Die anzuzeigenden Werte entnehme ich aus der Datei fhem.save, in die FHEM vor jedem Neustart die Sicherung alle variablen Werte einträgt. Damit die Werte immer rel. aktuell sind, habe ich in FHEM einen Timer erstellt, der die Sicherung alle 10min automatisch vornimmt. Das ist der einfachste, mir bekannte Weg in FHEM, alle aktuellen Werte und Zustände in einer Datei zu haben.

Vorbereitung

Ein fertig vorbereitetes und schon mit dem scaletext-Patch versehenes lcd4linux für die Fritzbox 7390 hat der User devzero im VDR-Portal zur Verfügung gestellt. Für die FB 7390 müsst ihr die "mips" Version nehmen und nicht von dem Posting beirren lassen - ihr braucht kein Freetz für die Verwendung auf eurer Fritzbox. Nach dem Download entpackt ihr das Paket und benennt das enthaltene Binary lcd4linux-mips-linux-svn-1165-scaletext-freetz nach lcd4linux um.
Eine einsatzbereite Binary-Datei für die Fritz!Box und die Raspberry Pi kann man inzwischen auch hier im FHEM SVN herunterladen.

Wir brauchen nun ein Programmverzeichnis für lcd4linux auf dem internen Speicher der Fritzbox. Dazu navigiert ihr über fritz.nas oder ftp auf den Speicherbereich der Fritzbox und legt auf der gleichen Ebene wie der Programmordner fhem einen neuen Ordner "dpf" an (dpf = digital photo frame). Kopiert das entpackte Binary lcd4linux und eine leere Datei lcd4linux.conf in das Verzeichnis.

Als nächstes müssen die Ordner/Dateiberechtigungen und die Besitzer Einstellungen im Linux angepasst werden. Dazu müsst ihr den Telnet Zugang auf der Fritzbox aktivieren. Das geht ganz einfach über ein Telefon mit folgendem Code: #96*7* Telnet an (#96*8* Telnet aus). Meldet euch dann per Telnet bzw. Putty.exe unter Windows an der Fritzbox an.

Passt die Besitzer Einstellungen vom Ordner und den Dateien an:

chown -R root:root /var/InternerSpeicher/dpf

Setzt dann die Berechtigungen auf den Ordner und die Dateien

chmod 777 -R /var/InternerSpeicher/dpf

Übergabedatei

Zur Übergabe der anzuzeigenden Werte und Zustände im Bilderrahmen wird die Datei fhem.save automatisch alle 10min in das Log Verzeichnis von FHEM geschrieben (siehe FHEM Konfiguartion). Aus dieser Datei muss nun mittels Unix Text- und Zeichenkettenfunktionen (grep, cut, tr..kein AWK in der Fritzbox!!) der interessante Teil zur Anzeige herausgefiltet werden und in eine neue Textdatei (fhemdata.log) zeilenweise übertragen werden.

Ich habe mir ein ausführbares Script mit dem Namen "startdpf" mit folgendem Inhalt gebaut und im fhem Programmordner abgelegt. Dies enthält neben den Befehlen zur Umwandlung der Texte auch die Befehle zum Start/Stop des Bilderrahmens, sowie Befehle zum Setzen der richtigen Berechtigungen der Konfiguartionsdatei lcd4linux.conf als Startparameter von "startdpf".

#!/bin/sh
homedpf=/var/InternerSpeicher/dpf
homefhem=/var/InternerSpeicher/fhem
fhemlog=/var/InternerSpeicher/fhem/log
cd $homedpf
case $1 in
AN) ./lcd4linux -f lcd4linux.conf
  ;;
AUS) killall lcd4linux
  ;;
600) chmod 600 lcd4linux.conf
  ;;
777) chmod 777 lcd4linux.conf
  ;;
LOG) grep 'WZ_Temp temp' $fhemlog/fhem.save | cut -d\: -f2 | tr -d ' ' > $homedpf/fhemdata.log
   grep 'KS300 T:' $fhemlog/fhem.save | cut -d\: -f2 | tr -d 'H' | tr -d ' ' >> $homedpf/fhemdata.log
   grep 'RollosZU Next' $fhemlog/fhem.save | cut -d\: -f2,3,4 >> $homedpf/fhemdata.log
   grep '#' $fhemlog/fhem.save | cut -b 13-17 >> $homedpf/fhemdata.log
  ;;
esac

Beispielsweise wird hier der Sicherungszeitpunkt, eine Temperatur eines 1-Wire Sensors, die Aussentemperatur vom KS300 und das nächste Herunterfahren der Rolladen ausgeschnitten und zeilenweise in die Datei fhemdata.log übertragen.

FHEM Konfiguration

In der FHEM Konfiguration fhem.cfg wird nun ein neuer Timer für die Aktion Speichern der Geräte-Stati und Datenaufbereitung alle 10min erstellt:

define fhemsave at +*00:10 { WriteStatefile() };;sleep 2;;{system("(./startdpf LOG)")}
attr fhemsave loglevel 4
attr fhemsave room Display

Der ehemals hier eingesetzte Befehl Befehl {fhem "save"} hat den unerwünschten Nebeneffekt, die Datei fhem.save und auch die Datei fhem.cfg zu speichern und deren Formatierung zu überarbeiten. Der nun eingesetzte Befehl { WriteStatefile() } sichert nur die Stati in der Datei fhem.save.

Alternativkönnen die Stati auch über Perl Coding in eine Datei ausgelesen werden - hier als Beispiel alle FS20 Stati:

define fhemsave notify fhemsave {open(REPORT, ">", "/var/InternerSpeicher/fhem/fhemsave.txt");;_
 my @@mdev=devspec2array("TYPE=FS20");;foreach(@@mdev){my $state= Value($_);;print REPORT "$_ $state\n";;}close REPORT;;}
define fhemsave_timer at +*00:10:00 trigger fhemsave

Damit ich den Bilderrahmen auch über FHEM an- und ausschalten kann, wird noch ein FS20 dummy mit einem notify erstellt:

define Statusdisplay FS20 1234 00
attr Statusdisplay dummy 1
attr Statusdisplay eventMap on:AN off:AUS
attr Statusdisplay room Display

define n_Statusdisplay notify Statusdisplay {Log 1, 'Status Display %';;system("(./startdpf %)")} attr n_Statusdisplay loglevel 4 attr n_Statusdisplay room Display Loglevel 4 habe ich gesetzt, da ich die Rückmeldung -1 im fhem.log unterdrücken will, die immer kommt, wenn eine externe Datei ausgeführt wird.

Anzeigekonfiguration

Nach der Umwandlung der Daten sieht der Inhalt der erstellten Übergabedatei fhemdata.log z.B so aus:

21:50
18:19:35
-7.4
21,3

In die bis jetzt leere Konfiguration des Bilderrahmens lcd4linux.conf kommt jetzt der Anzeigeteil. Zur Bearbeitung muss die Datei immer mit den Unix Rechten 777 versehen werden. Ihr könnt die Datei über //fritz.nas direkt mit z.B. Notepad++ bearbeiten. Zum Lesen der Werte aus der Datei fhemdata.log benutzen wir hier das Plugin File Reading von lcd4linux

Beispiel: hier wird genau die Zeile 3 aus der Übergabetabelle fhemdata.log gelesen

expression file::readline('/var/InternerSpeicher/dpf/fhemdata.log', 3)

Erklärungen zur Konfiguration erhaltet ihr auf der lcd4linux Projektseite

Meine Beispiel Konfiguration sieht dann so aus:

Variables {
 up_zehn 10000
 color_white 'ffffff'
 color_blue '000066'
 color_green '008000'
 color_black '000000'
}
Display DPF {
 Driver   'DPF'
 Port    'usb0'
 Font    '12x16'
 Foreground color_white
 Background color_blue
 Basecolor color_blue
}
Widget Zeit {
 class 'Text'
 expression strftime('%d.%m.%G %H:%M',time())
 width 18
 align 'L'
 update up_zehn
 background color_black
}
Widget FHEMZeit {
 class 'Text'
 prefix 'SV'
 expression file::readline('/var/InternerSpeicher/dpf/fhemdata.log', 1)
 width 8
 align 'R'
 update up_zehn
 background color_black
}
Widget tempAU {
 class 'Text'
 prefix 'Aussen'
 expression file::readline('/var/InternerSpeicher/dpf/fhemdata.log', 3)
 width 11
 align 'R'  
 update up_zehn
 background color_black
}
Widget tempWZ {
 class 'Text'
 prefix ' Wohnzim.'
 expression file::readline('/var/InternerSpeicher/dpf/fhemdata.log', 4)
 width 15
 align 'R'
 update up_zehn
 background color_black
}
Widget rolldown {
 class 'Text'
 prefix 'Roll. schliessen '
 expression file::readline('/var/InternerSpeicher/dpf/fhemdata.log', 2)
 width 26
 align 'L'
 update up_zehn
 background color_black
}
Layout Default {
 Row1 {
   Col1 'Zeit'
   Col19 'FHEMZeit'
 }
 Row3 {
   Col1 'tempAU'
   Col12 'tempWZ'
 }
 Row5 {
   Col1 'rolldown'
 }
}
Display 'DPF'
Layout 'Default'

Anschließend muss die Datei wieder mit den Unix Rechten 600 versehen werden - erst dann läuft lcd4linux an.

Dazu geht ihr in der Telnet Sitzung in den dpf Programmordner

cd /var/InternerSpeicher/dpf

setzt die Berechtigungen

chmod 600 lcd4linux.conf

und startet lcd4linux mit folgenden Parametern im Debug Modus

./lcd4linux -Fvv -f lcd4linux.conf

Wenn alles nach euren Wünschen funktioniert, könnt ihr Telnet an der Fritzbox wieder deaktivieren. Das Display kann nun mit dem angelegten Schalter Statusdisplay im FHEM an und aus geschaltet werden.

--Benutzer:MichaS 10:30, 10. Feb. 2012 (CET)


Bekannte Probleme

Unter bestimmten Konfiguration der FritzBox (VDSL + WLAN + Telefongespräch) kommt die CPU an ihre Leistungsgrenze. Ein zusätzlicher Prozess wie lcd4linux und fhem führt dann zu langen Verzögerungen von FHEMWEB und zu Aussetzern und Stimmverzerrungen beim Telefonieren. Üblicherweise stürzt lcd4linux dann auch ab.