Dies ist eine alte Version des Dokuments!
Siehe FHEM-Wiki http://www.fhemwiki.de/wiki/Digitaler_Bilderrahmen_mit_lcd4linux
Die Installation kann auf dem raspberry Pi selbst erfolgen oder auf einem dedizierten Rechner. Bei der Installation auf einem raspberry pi (2) sind mögliche Auswirkungen auf die Perfomance zu berücksichtigen.
Für diesen Fall benötigte Software:
lcd4linux sollte beim Hochfahren des Raspberry Pi automatisch starten.
In /opt/fhem wird zunächst die Datei getFHEM.sh angelegt und den individuellen Ansprüchen nach modifiziert:
#!/bin/bash # # script to read FHEM values # round() { echo $(LANG=C printf %.$2f $(echo "scale=$2;(((10^$2)*$1)+0.5)/(10^$2)" | bc)) }; # arg=$1 # #-- get FHEM values alarm='{Value("WZ.SPF.alarm")."|"}' warn='{Value("WZ.SPF.warn")."|"}' scharf='{AttrVal("AAA","level6xec","")}' aowb='{Value("A.OWB")}' aowbt='{Value("A.OWB.T")}' wzowm='{Value("WZ.OWM")}' nt5000a='{$defs{"nt5000"}{"STATE"}}' nt5000b='{$defs{"nt5000"}{"READINGS"}{"Wd"}{"VAL"}}' everb='{Value("E.Verb")}' gverb='{Value("G.Verb")}' FHEM=`echo -e "$alarm;$warn;$scharf;$aowb;$aowbt;$wzowm;$everb;$gverb;$nt5000b;$nt5000a" | socat -t50 - TCP:<IP-Adresse von FHEM>:7072` # #--isolate separate values alarm=`echo $FHEM | cut -d '|' -f1` warn=`echo $FHEM | cut -d '|' -f2 | sed 's/^ *//'` FHEM3=`echo $FHEM | cut -d '|' -f3` scharf=`echo $FHEM3 | awk '{print $1}' | sed 's/sharp/scharf/'` rHa=$(round `echo $FHEM3 | awk '{print $3}'` 0) Ta=$(round `echo $FHEM3 | awk '{print $15}'` 1) pa=$(round `echo $FHEM3 | awk '{print $12}'` 0) rHi=$(round `echo $FHEM3 | awk '{print $18}'` 0) Ti=$(round `echo $FHEM3 | awk '{print $21}'` 1) evp=$(round `echo $FHEM3 | awk '{print $27}'` 2) evw=$(round `echo $FHEM3 | awk '{print $24}'` 1) gvp=$(round `echo $FHEM3 | awk '{print $36}'` 2) gvw=$(round `echo $FHEM3 | awk '{print $33}'` 2) pvpraw=`echo $FHEM3 | awk '{print $42}'` pvp=$(round $pvpraw 2) pvw=$(round `echo $FHEM3 | awk '{print $41}'` 1) # if [ "$arg" == "show" ]; then echo "alarm=$alarm warn=$warn => $scharf; Climate=>$rHa $Ta $pa $rHi $Ti; PV=> $pvpraw $pvp $pvw; EV=> $evp $evw; GV=>$gvp $gvw" fi # #--create bar graphs ./createAlarm.sh "$alarm" "$warn" $scharf & ./createBar.sh $pvw 35 kWh $pvp kW 200x150 green PV solar.png & ./createBar.sh $evw 35 kWh $evp kW 200x150 blue EV strom.png & ./createBar.sh $gvw 20 m³ $gvp m³/h 200x150 red GV gas.png & ./createTemp.sh $Ti $rHi $Ta $rHa $pa & ./createDate.sh &
Diese Datei wird nun mit
crontab -e
in die Tabelle des cron-Dämons eingetragen (Ausführung hier minütlich):
/etc/lcd4linux.conf
Display dpf { Driver 'SamsungSPF' Port 'usb0' Model 'SPF-85H' Font '96x128' Foreground 'ffffff' Background '000000' Basecolor '000000' Backlight 7 Orientation 1 } Variables { tick 1000 dick 2000 pick 10000 minute 60000 hminute 30000 } Widget Foto { class 'Image' file '/root/back.png' update hminute reload 1 visible 1 inverted 0 } Widget Alarm { class 'Image' file '/root/alarm.png'+ update hminute reload 1 visible 1 inverted 0 } Widget Solar { class 'Image' file '/root/solar.png' update hminute reload 1 visible 1 inverted 0 } Widget Strom { class 'Image' file '/root/strom.png' update hminute reload 1 visible 1 inverted 0 } Widget Gas { class 'Image' file '/root/gas.png' update hminute reload 1 visible 1 inverted 0 Widget Temp { class 'Image' file '/root/temp.png' update hminute reload 1 visible 1 inverted 0 } Widget Date { class 'Image' file '/root/date.png' update hminute reload 1 visible 1 inverted 0 } ##################################################################### Display 'DPF' ##################################################################### Layout Normal { # X/Y exchanged !! Layer 1 { X0.Y0 'Foto' X450.Y0 'Alarm' X0.Y600 'Date' X150.Y600 'Temp' X450.Y600 'Strom' X450.Y400 'Solar' X450.Y200 'Gas' } }
Erzeugung eines PNG-Files aus einer aus einem Ordner zufällig ausgewählten anderen Datei. Dazu wird im Verzeichnis /opt/fhem die Datei createPic.sh angelegt:
#!/bin/bash # # script to produce a photo PNG file using ImageMagick convert # #-- Directory Containing Pictures DIR="/root/Bilder" # # Command to Select a random jpg file from directory pic=$(ls $DIR | shuf -n1) # #-- Correct the size convert $DIR/$pic -resize 600x450 back.png #convert $DIR/$pic -rotate -90 -resize 450x600 back.png
Erzeugung eines Bildes mit dem gegenwärtigen Datum und der jetzigen Zeit. Dazu wird im Verzeichnis /opt/fhem die Datei createDate.sh angelegt:
#!/bin/bash # # script to produce a date PNG file using ImageMagick convert # #--date pieces ddate=`date +%a%_3e.%_4b%_5Y` dtime=`date +%k:%M` # convert -size 320x240 canvas:none -stroke snow4 -size 1x90 -tile gradient:white-snow4 \ \( +clone -background snow4 -shadow 80x3+3+3 \) \ +swap -background none -layers merge \ \( +size -font Helvetica \ -pointsize 75 -strokewidth 1 -fill red label:"$dtime" -trim -repage 0x0+25+60 \ \( +clone -background firebrick3 -shadow 80x3+3+3 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ \( +size -font Helvetica \ -pointsize 35 -strokewidth 1 -fill blue label:"$ddate" -trim -repage 0x0+25+150 \ \( +clone -background slateblue4 -shadow 80x1+2+2 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ -append -background white -gravity center -extent 320x240 \ b_date.png # #-- correct the size convert b_date.png -resize 200x150 date.png
Dazu wird im Verzeichnis /opt/fhem die Shell-Datei createTemp.sh angelegt:
#!/bin/bash # # script to produce a temperature PNG file using ImageMagick convert # # parameters for internal temperature/humidity ti=$1 rhi=$2 # parameters for external temperature/humidity/pressure ta=$3 rha=$4 pa=$5 # #-- formatted temperature valuesa deg=`printf "\u00B0C"` tif="$ti $deg" taf="$ta $deg" # #-- formatted humidity values rif="$rhi %" raf="$rha %" # #-- formatted pressure paf="$pa hPa" # convert -size 320x480 canvas:none -stroke snow4 -size 1x90 -tile gradient:white-snow4 \ \( +clone -background snow4 -shadow 80x3+3+3 \) \ +swap -background none -layers merge \ \( +size -font Helvetica \ -pointsize 25 -strokewidth 1 -fill black label:"Innen" -trim -repage 0x0+20+20 \ \( +clone -background darkslategray -shadow 80x1+1+1 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ \( +size -font Helvetica \ -pointsize 75 -strokewidth 1 -fill red label:"$tif" -trim -repage 0x0+20+60 \ \( +clone -background firebrick3 -shadow 80x3+3+3 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ \( +size -font Helvetica \ -pointsize 50 -strokewidth 1 -fill blue label:"$rif" -trim -repage 0x0+20+140 \ \( +clone -background slateblue4 -shadow 80x1+2+2 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ \( +size -font Helvetica \ -pointsize 25 -strokewidth 1 -fill black label:"Außen" -trim -repage 0x0+20+240 \ \( +clone -background darkslategray -shadow 80x1+1+1 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ \( +size -font Helvetica \ -pointsize 75 -strokewidth 1 -fill red label:"$taf" -trim -repage 0x0+20+280 \ \( +clone -background firebrick3 -shadow 80x3+3+3 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ \( +size -font Helvetica \ -pointsize 50 -strokewidth 1 -fill blue label:"$raf" -trim -repage 0x0+20+360 \ \( +clone -background slateblue4 -shadow 80x1+2+2 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ \( +size -font Helvetica \ -pointsize 50 -strokewidth 1 -fill blue label:"$paf" -trim -repage 0x0+20+420 \ \( +clone -background slateblue4 -shadow 80x1+2+2 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ \( +size -font Helvetica \ -pointsize 50 -strokewidth 1 -fill blue label:"$rif" -trim -repage 0x0+20+140 \ \( +clone -background slateblue4 -shadow 80x1+2+2 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ \( +size -font Helvetica \ -pointsize 25 -strokewidth 1 -fill black label:"Außen" -trim -repage 0x0+20+240 \ \( +clone -background darkslategray -shadow 80x1+1+1 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ \( +size -font Helvetica \ -pointsize 75 -strokewidth 1 -fill red label:"$taf" -trim -repage 0x0+20+280 \ \( +clone -background firebrick3 -shadow 80x3+3+3 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ \( +size -font Helvetica \ -pointsize 50 -strokewidth 1 -fill blue label:"$raf" -trim -repage 0x0+20+360 \ \( +clone -background slateblue4 -shadow 80x1+2+2 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ \( +size -font Helvetica \ -pointsize 50 -strokewidth 1 -fill blue label:"$paf" -trim -repage 0x0+20+420 \ \( +clone -background slateblue4 -shadow 80x1+2+2 \) \ +swap -background none -layers merge \) \ -insert 1 -layers merge \ -append -background white -gravity center -extent 320x480 \ b_temp.png # # correct the size convert b_temp.png -resize 200x300 temp.png #convert b_temp.png -rotate -90 -resize 300x200 temp.png