Infodisplay Linux-Rechner
Motivation
Für meine Fhem-Installation suchte ich ein kleines billiges Statusdisplay, welches beim Verlassen des Hauses eine Reihe von Informationen liefern kann.
Beim Versender Pearl fand sich ein passendes Display für unter 10 Euro, welches sich über lcd4linux an eine Fritzbox oder einen *NIX-/Linux-Rechner anbinden lässt (mittlerweile ist dieses Display dort nicht mehr verfügbar, es gibt aber eine ganze Reihe funktionierender Alternativen, siehe hier oder auch detaillierter im Sourecforge Repository).
Die Anleitung zum Hacken des Rahmens und weitere Infos gibt es hier.
Eine Anleitung mit diversen Links für die Fritzbox findet sich hier.
Der Code dazu findet sich inzwischen auch bei Sourceforge unter [1]
Aktuelle Infos' bei dem der dieses Display (und inzwischen viele andere gehackt hat): [2]
Eine einsatzbereite Binary-Datei für die Fritz!Box und die Raspberry Pi kann man inzwischen hier im FHEM SVN herunterladen.
Projektlog
Start
Das folgende Kochrezept ist unter debian lenny (mittlerweile auch squeeze) getestet. Ziel des Projektes ist es, z.B. den Status von Fensterkontakten beim Verlassen des Hauses prüfen zu können und ggf. weitere nette Informationen (z.B. Wettervorhersage, Müllabfuhrkalender) dort anzuzeigen.
erste Versuche
Das Display [3] ist gestern gekommen, die mitbestellte Gratis-Taschenlampe (Artikel-Nummer GRA-16629-901 oder ein anderer Gratis-Artikel, dann entfällt der Mindermengenzuschlag) auch. Das Display ist winzig und sollte erst einmal eine Weile geladen werden. Achtung: Am besten gleich ein Mini-USB-Kabel mitbestellen, das beiliegende (unbedingt entsorgen!) taugt gar nichts (zu geringer Querschnitt, mangelnde Stromversorgung, dadurch wacklige Device-Erkennung). Irgendwo im Dunstkreis der u.g. Anleitung steht, dass man den China-Akku entfernen sollte. Dies sollte unterbleiben (der Akku-Pack enthält eine winzige Einzelzellenüberwachung und die Ursache für das Stabilitätsproblem ist das Kabel), da sonst das Display jedesmal nach einem Reboot / kurzer Spannungsausfall von Hand in den Debug-Modus gesetzt werden muss.
Nach dem Hack des Displays (unter Windows, Binaries im VDR-Portal, ging am schnellsten) habe ich mir dann die Dateien für i386/Linux aus den Einzelanleitungen zusammengestoppelt.
Die Anleitung unter [4] ist für armel, daher an Stelle von sdcc_2.9.0-5_armel.deb das entsprechenden Paket für i386 sdcc_2.9.0-5_i386.deb suchen.
Eigentlich braucht man den Kram zum Hacken des Displays nicht vollständig, wenn man dieses vorher unter Windows gehackt hat [6] des dpfhack und lcd4linux notwendig. Damit das richtig funzt sollte man die in der Anleitung genannten udev rules verwenden. Ansonsten gibt es beim Anschalten eine Fehlermeldung.
Das Display funktioniert, nur ist noch der Font zu klein (6x8). Abhilfe schafft hier der sogenannte lcd4linux-scaletext-dpf.patch aus dem VDR-Portal, den ich mir mal erlaubt habe, hierein zu kopieren. [7]
diff -rupN --exclude=.svn --exclude='*.log' --exclude=Makefile --exclude='*.m4' --exclude='*.in' --exclude=autom4te.cache --exclude='config*' --exclude='*.Po' --exclude='*.sh' lcd4linux/drv_dpf.c lcd4linux.1/drv_dpf.c --- lcd4linux/drv_dpf.c 2011-11-14 14:41:40.859787820 +0100 +++ lcd4linux.1/drv_dpf.c 2011-11-13 14:42:58.650315817 +0100 @@ -160,12 +160,26 @@ static int drv_dpf_start2(const char *se } /* Fixme: provider other fonts someday... */ - if (XRES != 6 && YRES != 8) { + /* Overridden - we have scaled the textout drawing */ +/* if (XRES != 6 && YRES != 8) { error("%s: bad Font '%s' from %s (only 6x8 at the moment)", Name, s, cfg_source()); return -1; + } */ + + /* we dont want fonts below 6 width */ + if (XRES <6) { + error("%s: bad Font '%s' width '%d' using minimum of 6)", + Name,s,XRES); + XRES = 6; } + /* we dont want fonts below 8 height */ + if (YRES <8) { + error("%s: bad Font '%s' height '%d' using minimum of 8)", + Name,s,YRES); + YRES = 8; + } /* open communication with the display */ if (drv_dpf_open(section) < 0) { diff -rupN --exclude=.svn --exclude='*.log' --exclude=Makefile --exclude='*.m4' --exclude='*.in' --exclude=autom4te.cache --exclude='config*' --exclude='*.Po' --exclude='*.sh' lcd4linux/drv_generic_graphic.c lcd4linux.1/drv_generic_graphic.c --- lcd4linux/drv_generic_graphic.c 2011-11-14 14:41:40.614375417 +0100 +++ lcd4linux.1/drv_generic_graphic.c 2011-11-14 14:58:29.303285793 +0100 @@ -259,15 +259,18 @@ static void drv_generic_graphic_render(c } for (y = 0; y < YRES; y++) { - int mask = 1 << XRES; + for (x = 0; x < XRES; x++) { - mask >>= 1; - if (chr[y] & mask) - drv_generic_graphic_FB[layer][(r + y) * LCOLS + c + x] = fg; - else - drv_generic_graphic_FB[layer][(r + y) * LCOLS + c + x] = bg; + int mask = 1 << 6; + mask >>= ((x*6)/(XRES))+1; + if (chr[(y*8)/(YRES)] & mask) + drv_generic_graphic_FB[layer][(r + y ) * LCOLS + c + x] = fg; + else + drv_generic_graphic_FB[layer][(r + y ) * LCOLS + c + x] = bg; + } } + c += XRES; txt++; }
Diesen kopieren wir mit dem Dateinamen lcd4linux-scaletext-dpf.patch in das Verzeichnis ~/dpf/lcd4linux und wenden ihn mit
patch -p1 < lcd4linux-scaletext-dpf.patch
an.
Mit diesem patch bauen wir lcd4linux nochmals neu, dazu rufen wir
make
auf und dann
cd .. make clean make ./build-dpf-lcd4linux.sh
Dann daran denken, dass lcd4linux nicht mehr laufen sollte, daher
killall lcd4linux
Wer noch keine lcd4linux.conf im /etc Verzeichnis hat, sollte die nun spätestens anlagen. Danach noch die Rechte und den Eigentümer/Gruppe korrekt setzen:
chmod 600 /etc/lcd4linux.conf chown root.root /etc/lcd4linux.conf
Und anschließend (wenn keine Fehlermeldung gekommen war) noch ein
cp lcd4linux/lcd4linux /usr/local/bin/lcd4linux
Nun können wir den Font in der Sektion Display in /etc/lcd4linux.conf ändern
vi /etc/lcd4linux.conf
Display dpf { Driver 'DPF' Port 'usb0' # Font '6x8' Font '12x16' Foreground 'ffffff' Background '000000' Basecolor '000066' } Details zur lcd4linux.conf unter [8]
Nun rufen wir mit angeschlossenem und gehacktem Display
lcd4linux -F
auf. Kommt dabei keine Fehlermeldung beenden wir mit <CRTL>-<C>, bauen die udev-Regeln entsprechend [9] in das System ein und ziehen das Display für ca. 10 Sekunden ab. Anschließend stecken wir es an, dann sollte eine sinnvolle Ausgabe kommen.
Ausgabe des Fensterstatus eines FHT80TF-2
noch etwas quick&dirty:
Dazu nutzen wir das exec-plugin von lcd4linux
Mit diesem rufen wir ein Shell-Skript namens "fenster" auf. Dieses besteht aus einer Codezeile (hier der Lesbarkeit wegen mit einem Zeilenumbruch):
/usr/bin/fhem.pl 7072 'list CUL_FHTTK_b1987b STATE' |awk '/CUL/ \ {printf("%s \n",$2)}'|sed -e 's/Closed/ist zu/'
Derzeit erfasse ich genau einen FHT80TF-2 ! Vielleicht kann ja einer der hier anwesenden Perl-Freaks da mal so eine nette Schleife einbauen, die den Status aller bekannten FHT80TF-2 abfragt. ;-)
Das Skript gibt genau "geschlossen" zurück wenn das Fenster zu ist. Ansonsten "Open" (muss ich noch schöner machen ;-) ).
Als nächstes brauchen wir in der Datei /etc/lcd4linux (neu anlegen, Rechte auf 600, Eigentümer auf root setzen) folgende Einträge:
# Definition des Displays Display dpf { Driver 'DPF' Port 'usb0' # Durch den scaletext-patch aus dem VDR-Portal können wir nun einen größeren Font als 8x6 nutzen Font '12x32' Foreground 'ffffff' Background '000000' Basecolor '000066' } # Definition des Fensterstatus-Widgets Widget Fenster { class 'Text' prefix 'Fenster' # Skript /root/fenster alle 100 Sekunden ausführen expression exec('/root/fenster', 100000) width 20 align 'R' # Display alle 10 Sekunden updaten update 10000 } # Layout-Definition Layout Default { Row1 { Col1 'Fenster' } } Display 'DPF' #Für Debugging-Zwecke Kommentar entfernen und den DPF-Eintrag auskommentieren #sowie lcd4linux -F aufrufen # #Display 'Curses' Layout 'Default'
Damit wird nun der Status alle 100 Sekunden bei fhem ausgelesen und alle 10 Sekunden die Anzeige aktualisiert.
Einbinden von Wetterinformationen
Hinweis: Inzwischen funktioniert Google Weather nicht mehr. Daher muss man auf yahoo o.ä. ausweichen. Vorgehensweise ähnlich. Ich poste das mal, sobald ich wieder Zeit habe ;-) Die Wetterinformationen bekommen wir mit dem Fhem-Modul Weather. Dieses liest in bestimmten Abständen die Daten eines Ortes aus Google Weather aus.
Wir definieren daher in der fhem.cfg folgende Zeile(n), wobei eigentlich nur die erste notwendig ist:
define wx Weather "Ilmenau,TH" 1800 de attr wx room Wetter define FileLog_wx FileLog /var/log/fhem/wx-%Y.log wx attr FileLog_wx logtype text attr FileLog_wx room Wetter
Nach dem Speichern der fhem.cfg können wir nun über fhem auf die (alle 1800 Sekunden von Google abgefragten) Werte (im Beispiel für die Stadt Ilmenau in Thüringen) zugreifen:
get wx temp_c
liefert z.B. die Ausgabe der aktuellen Temperatur in °C
wx temp_c => -1
Es ist also gerade -1°C.
Im Verzeichnis "/root/" legen wir nun ein Subdirectory "wetter" an und legen dort ein Skript "hole_wetter" mit folgendem Inhalt an:
fhem.pl 7072 'get wx fc0_high_c;get wx fc0_low_c;get wx temp_c;get wx condition;get wx humidity; \ get wx wind_condition;get wx fc1_high_c;get wx fc1_low_c;get wx fc1_condition; \ get wx fc2_high_c;get wx fc2_low_c;get wx fc2_condition;quit'
Das Skript fragt mit netcat also alle uns interessierenden Wettervariablen der Google-Abfrage ab und schreibt diese auf die STDOUT. Dies sollte in 3 Sekunden geschehen (-w 3). Würde man alle Variablen einzeln abfragen, dauert jede Abfrage mindestens 1 Sekunde und es würde zu Verklemmungen führen, das exec-Plugin von lcd4linux (und mit diesem lcd4linux selbst) hängt sich in diesem Fall einfach auf.
Um Fhem alle 5 Minuten abzufragen ergänzen wir folgenden Eintrag in der crontab:
*/5 * * * * sh /root/wetter/hole_wetter > /root/wetter/wx
In der Datei /root/wetter/wx stehen nun immer die aktuellen Wetterwerte (es sei denn, die Internet-Verbindung funktioniert gerade mal nicht, dann ist diese leer).
Diese sieht dann wie folgt aus:
lenny:~/wetter# more wx wx fc0_high_c => 3 wx fc0_low_c => -1 wx temp_c => -1 wx condition => Meistens bewölkt wx humidity => Luftfeuchtigkeit: 93 % wx wind_condition => Wind: W mit 14 km/h wx fc1_high_c => 7 wx fc1_low_c => 1 wx fc1_condition => Vereinzelt Schnee wx fc2_high_c => 5 wx fc2_low_c => 1 wx fc2_condition => Vereinzelt Regen lenny:~/wetter#
Nun müssen wir diese Datei noch die Rechte "600" setzen, damit lcd4linux diese verarbeitet.
chmod 600 wx
Für jede der Variablen legen wir nun ein eigenes Skript im Verzeichnis an, welches die Rechte 700 bekommt, für die aktuelle Temperatur z.B. ein Skript "temp" mit folgendem Inhalt:
grep ' temp_c' /root/wetter/wx|awk '{printf("%d°C\n",$4)}'
Damit gibt das Skript nun folgendes aus:
-1°C
Es ist Geschmacksfrage, ob man die Einheit hier mit ausgeben lässt, oder diese im Postfix von lcd4linux angibt (dazu mehr weiter unten).
Eine Besonderheit sind die "condition"-Skripte, diese geben einige durch Leerzeichen getrennte Worte aus, sodass man hier nicht nur $4 in awk angeben muss, sondern einfach ein paar mehr Variablen vorsieht, z.B. für das Skript "wind_condition" 5 Stück:
grep ' wind_condition' /root/wetter/wx |awk '{print $4,$5,$6,$7,$8}'
Damit werden auch mehrere Worte korrekt ausgegeben, z.B.:
Wind: W mit 14 km/h
Mit diesen Vorbereitungen haben wir nun die Voraussetzungen geschaffen, damit lcd4linux auf die Variablen zugreifen kann. Dabei muss man nämlich wissen, dass jeder Wert in lcd4linux in einem eigenen Widget adressiert wird.
Meine /etc/lcd4linux.conf (muss ebenfalls die Rechte 600 haben) sieht nun mit den Wetterdaten wie folgt aus:
Display curses { Driver 'Curses' Size '26x20' } Display DPF { Driver 'DPF' Port 'usb0' # Font '6x8' Font '12x16' Foreground 'ffffff' Background '000066' Basecolor '000066' } Widget Time { class 'Text' expression strftime('%d.%m.%G %H:%M',time()) width 20 align 'C' update 10000 } Widget Zisterne { class 'Text' prefix 'Zisternenfuellstand' expression exec('/root/zisterne', 100000) postfix ' cm' width 26 align 'R' update 20000 } Widget Fenster { class 'Text' prefix 'Fenster ' expression exec('/root/fenster', 100000) width 26 align 'R' update 20000 } Widget Temp { class 'Text' prefix 'Temp ' expression exec('/root/wetter/temp', 300000) width 9 align 'L' update 20000 } Widget Min_Temp { class 'Text' prefix 'Min ' expression exec('/root/wetter/min_temp', 3000000) width 9 align 'L' update 20000 } Widget Max_Temp { class 'Text' prefix 'Max ' expression exec('/root/wetter/max_temp', 3000000) width 9 align 'L' update 20000 } Widget Cond { class 'Text' expression exec('/root/wetter/condition',300000) width 26 align 'L' update 20000 } Widget Wind_Cond { class 'Text' expression exec('/root/wetter/wind_condition',300000) width 26 align 'L' update 20000 } Widget Morgen { class 'Text' expression 'Morgen ' width 9 align 'L' update 0 } Widget fc1_Min_Temp { class 'Text' prefix 'Min ' expression exec('/root/wetter/fc1_min_temp', 300000) width 9 align 'L' update 20000 } Widget fc1_Max_Temp { class 'Text' prefix 'Max ' expression exec('/root/wetter/fc1_max_temp', 300000) width 9 align 'L' update 20000 } Widget fc1_Cond { class 'Text' expression exec('/root/wetter/fc1_condition',300000) width 26 align 'L' update 20000 } Widget Uebermorgen { class 'Text' expression 'Ueberm. ' width 9 align 'L' update 20000 } Widget fc2_Min_Temp { class 'Text' prefix 'Min ' expression exec('/root/wetter/fc2_min_temp', 300000) width 9 align 'L' update 20000 } Widget fc2_Max_Temp { class 'Text' prefix 'Max ' expression exec('/root/wetter/fc2_max_temp', 300000) width 9 align 'L' update 20000 } Widget fc2_Cond { class 'Text' expression exec('/root/wetter/fc2_condition',300000) width 26 align 'L' update 20000 } Layout Default { Row1 { Col1 'Time' } Row3 { Col1 'Zisterne' } Row4 { Col1 'Fenster' } Row6 { Col1 'Temp' Col9 'Min_Temp' Col19 'Max_Temp' } Row7.Col5 'Cond' Row8.Col5 'Wind_Cond' Row10 { Col1 'Morgen' Col9 'fc1_Min_Temp' Col19 'fc1_Max_Temp' } Row11.Col1 'fc1_Cond' Row13 { Col1 'Uebermorgen' Col9 'fc2_Min_Temp' Col19 'fc2_Max_Temp' } Row14.Col1 'fc2_Cond' } Variables { tick 1000 tack 500 minute 60000 } Display 'DPF' #Display 'Curses' Layout 'Default'
lcd4linux fragt damit nun alle 300 Sekunden die Werte aus dem Zwischenspeicher (der Datei "wx") ab und aktualisiert die jeweilige Displayanzeige alle 20 Sekunden. Das reicht für den Einsatzzweck vollkommen aus.
Das Ergebnis dieser Abfragen ist nun im Bild dieses Beitrages zu sehen.
Einbinden von Wettergrafiken (Symbolbilder)
Zuerst sollte man mal lt. hackfin [10] ein
apt-get install libgd2-noxpm-dev
absetzen. Damit wird sichergestellt, dass die libgd2-noxpm beim Compilieren einbezogen wird und Grafiken überhaupt angezeigt werden können. Vorher bekommt man nämlich die Nachricht beim Aufruf von
lcd4linux -F
mit einem Image-Widet in der lcd4linux.conf die Nachricht, dass "Image" "not supported class" sei :-(
Dann also nochmals alles kompilieren. Das heißt:
cd dpf make clean ./build-dpf-lcd4linux.sh make cd lcd4linux patch -p1 <lcd4linux-scaletext-dpf.patch make cp lcd4linux /usr/local/bin/lcd4linux lcd4linux -F
Dann sollte die Klasse "Image" beaknnt sein und eine in der
/etc/lcd4linux.conf
angegebene Grafik auch angezeigt werden.
Nun kommen wir dazu, das Wetterskript so anzupassen, dass auch die Grafiken korrekt heruntergeladen werden. Da diese als *.gif vorliegen unser Rähmchen aber nur *.png kann, brauchen dazu noch das Paket convert aus dem Paket imagemagick, also geben wir auf unserer Kommandozeile ein:
apt-get install imagemagick
Unser hole_wetter-Skript passen wir dann wie folgt an:
# Fhem-Variablen auslesen fhem.pl 7072 'get wx fc0_high_c;get wx fc0_low_c;get wx fc0_condition;get wx fc0_day_of_week; \ get wx temp_c;get wx condition;get wx fc0_icon;get wx humidity;get wx wind_condition; \ get wx fc1_high_c;get wx fc1_low_c;get wx fc1_condition;get wx fc1_day_of_week;get wx fc1_icon; \ get wx fc2_high_c;get wx fc2_low_c;get wx fc2_condition;get wx fc2_day_of_week;get wx fc2_icon;' \ > /root/wetter/wx # Wetter-Icon von heute holen URL=$(fhem.pl 7072 'get wx fc0_icon'|awk '{printf("www.google.de%s\n", $4)}') wget "$URL" -O /root/wetter/wx_icons/fc0_icon.gif # Wetter-Icon von morgen holen URL=$(fhem.pl 7072 'get wx fc1_icon'|awk '{printf("www.google.de%s\n", $4)}') wget "$URL" -O /root/wetter/wx_icons/fc1_icon.gif # Wetter-Icon von uebermorgen holen URL=$(fhem.pl 'get wx fc2_icon'|awk '{printf("www.google.de%s\n", $4)}') wget "$URL" -O /root/wetter/wx_icons/fc2_icon.gif # nach png konvertieren fuer DPF und Rechte auf 600 setzefuer lcd4linux for i in *.gif; do convert "$i" "${i%.gif}.png" ; done chmod 600 *
Nun müssen wir noch unseren crontab Eintrag wie folgt modifizieren:
*/5 * * * * sh /root/wetter/hole_wetter
Das heißt, wir lassen die Umleitung in eine Datei weg, dies erledigt jetzt unser modifiziertes Skript!
Außerdem legen wir ein Verzeichnis wetter/wx_icons sowie drei neue Skripte an:
# wetter/fc0_icon grep 'fc0_icon' /root/wetter/wx |awk '{print $4}'|sed 's/\/ig\/images\/weather/\/root\/wetter\/wx_icons/g'
# wetter/fc1_icon grep 'fc1_icon' /root/wetter/wx |awk '{print $4}'|sed 's/\/ig\/images\/weather/\/root\/wetter\/wx_icons/g' # wetter/fc2_icon grep 'fc2_icon' /root/wetter/wx |awk '{print $4}'|sed 's/\/ig\/images\/weather/\/root\/wetter\/wx_icons/g'
Unsere /etc/lcd4linux.conf passen wir wie folgt an:
Display curses { Driver 'Curses' Size '26x20' } Display DPF { Driver 'DPF' Port 'usb0' # Font '6x8' Font '12x16' Foreground 'ffffff' Background '000066' Basecolor '000066' } Widget Time { class 'Text' expression strftime('%d.%m.%G %H:%M',time()) width 18 align 'C' update 10000 } #Kommentar für Ultraschall-Füllstansanzeige (separater Eintrag im Fhem-Wiki) entfernen! #Widget Zisterne { # class 'Text' # prefix 'Zisternenfuellstand' # expression (170 - exec('/root/zisterne', 100000))/155*100 # postfix '%' # precision 1 # width 26 # align 'R' # update 20000 #} Widget Fenster { class 'Text' prefix 'Fenster ' expression exec('/root/fenster', 100000) width 15 align 'L' update 20000 } Widget Temp { class 'Text' expression exec('/root/wetter/temp', 300000) width 5 align 'L' update 20000 } Widget Min_Temp { class 'Text' prefix 'Min ' expression exec('/root/wetter/min_temp', 3000000) width 9 align 'L' update 20000 } Widget Max_Temp { class 'Text' prefix 'Max ' expression exec('/root/wetter/max_temp', 300000) width 9 align 'L' update 20000 } Widget fc0_Cond { class 'Text' expression exec('/root/wetter/fc0_condition',300000) width 26 align 'L' update 20000 } Widget Wind_Cond { class 'Text' expression exec('/root/wetter/wind_condition',300000) width 26 align 'L' update 20000 } Widget fc0_Icon { class 'Image' file '/root/wetter/wx_icons/fc0_icon.png' update 10000 reload 1 visible 1 inverted 0 } Widget fc1_Min_Temp { class 'Text' prefix 'Min ' expression exec('/root/wetter/fc1_min_temp', 300000) width 9 align 'L' update 20000 } Widget fc1_Max_Temp { class 'Text' prefix 'Max ' expression exec('/root/wetter/fc1_max_temp', 300000) width 9 align 'L' update 20000 } Widget fc1_Cond { class 'Text' expression exec('/root/wetter/fc1_condition',300000) width 26 align 'L' update 20000 } Widget FC1_Icon { class 'Image' file '/root/wetter/wx_icons/fc1_icon.png' update 10000 reload 1 visible 1 inverted 0 } Widget fc2_Min_Temp { class 'Text' expression exec('/root/wetter/fc2_min_temp', 300000) width 7 align 'L' update 20000 } Widget fc2_Max_Temp { class 'Text' prefix ' bis ' expression exec('/root/wetter/fc2_max_temp', 300000) width 9 align 'L' update 20000 } Widget fc2_Cond { class 'Text' expression exec('/root/wetter/fc2_condition',300000) width 26 align 'L' update 20000 } Widget FC2_Icon { class 'Image' file '/root/wetter/wx_icons/fc2_icon.png' update 10000 reload 1 visible 1 inverted 0 } Widget dummy { class 'text' expression visible 0 width 0 update 20000 } Layout Default { Row1 { Col1 'Time' Col20 'Temp' } Row3 { Col1 'Fenster' } Row4 { # Col1 'Zisterne' } # Row5.Col1 'dummy' # notwendig, da sonst wegen Prozentzeichen von Zisterne keine Ausgabe Row6 { Col5 'fc0_cond' } Row7 { Col5 'Min_Temp' Col16 'Max_Temp' } Row8.Col5 'Wind_Cond' Row10 { Col5 'fc1_Cond' } Row11 { Col5 'fc1_Min_Temp' Col16 'fc1_Max_Temp' } Row13 { Col5 'fc2_Cond' } Row14 { Col5 'fc1_Min_Temp' Col16 'fc1_Max_Temp' } Layer 2 { X85.Y5 'FC0_icon' X145.Y5 'FC1_icon' X192.Y5 'FC2_icon' } } Variables { tick 1000 tack 500 minute 60000 } Display 'DPF' #Display 'Curses' Layout 'Default'
Außerdem müssen für diese Modifikation die Skripte fc*_condition wie folgt angepasst werden (Beispiel fc0_condition):
grep 'fc0_day_of_week' /root/wetter/wx|awk '{printf("%s: ",$4)}' grep 'fc0_condition' /root/wetter/wx|awk '{printf("%s %s\n",$4,$5)}'
Damit werden nun statt "Heute", "Morgen" und "Ueberm." die Wochentage von Google angezeigt und es ist mehr Platz für die Ausgabe der Wetterbedingungen.
Einbinden der Zisternenanzeige mit Ultraschallsensor
Ist man Besitzer des Ultraschallsensor, kann man das dort angegebene Skript zur Abfrage einfach in das Verzeichnis /root/ kopieren und dessen Rechte auf '700' setzen. Entfernt man nun in der /etc/lcd4linux.conf das Widget Zisterne und die zugehörige Zeile im Layot-Abschnitt die Kommentarzeichen, wird der Zisternenfüllstand in % (bei mir ist der Abstand Sensor bis Boden ca. 170 cm und beim maximalen Füllstand gibt das Sensorskript 15cm aus) unter dem Fensterstatus angegeben. Dieser Wert ist ein Füllstanswert und entspricht nicht dem prozentualen Volumen. Wer dieses berechnen will, muss die Formel nach [11] verwenden.
Müllkalender
Einen einfachen Müllkalender kann man mit dem Progrämmchen calcurse realisieren
apt-get install calcurse
Dort importiert man die Mülltermine (Serien gehen auch!) als ics-Dateien. Die Termine sollten einen kurzen sprechenden Inhalt haben z.B. "Gelber Sack". Import mit folgendem Befehl
calcurse -i dateiname.ics
Dann legt man in /root eine Datei mit dem Namen "muell" mit folgendem Inhalt an:
calcurse -d 2|awk '/*/ {print "+++ " $2 " " $3 " " $4 " " $5 " +++"}'
Damit werden die Texte der in den nächsten 2 Tagen anstehenden Termine ausgegeben. Das Skript /root/muell noch schnell mit den korrekten Rechten versehen
chmod 700 /root/muell
und anschließend in die /etc/lcd4linux.conf einen neuen Widget-Eintrag hinzufügen, z.B.
Widget Muell { class 'Text' expression exec('/root/muell', 100000) Foreground 'FF0000' width 26 align 'M' speed 250 update 10000 }
(Bei diesem Widget-Eintrag haben wir nun eine rote Vordergrundfarbe und eine Laufschrift. Dadurch nimmt man die "Mülltonnen-Erinnerung" eher wahr als bei statischem Text.)
Im Bereich Layout in dieser Datei muss noch die Zeile
Row5.Col1 'Muell'
ergänzt werden.
Schon wird die Müllabfuhr 2 Tage vorher in Zeile 5 des Displays angezeigt.
bekannte Probleme
keine mehr.
Viel Spaß beim Nachbau / Verbessern! --Mick (Diskussion) 06:30, 18. Jan. 2012 (CET)