Benutzer-Werkzeuge

Webseiten-Werkzeuge


linux:fhem:bilderrahmen

Dies ist eine alte Version des Dokuments!


Bilderrahmen als Display für fhem@raspberry

Installation

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:

  • socat
  • ImageMagick
  • lcd4linux

lcd4linux sollte beim Hochfahren des Raspberry Pi automatisch starten.

Daten aus fhem holen

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):

  • * * * /opt/fhem/getFHEM.sh

lcd4linux konfigurieren

/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'
 }
}

Bild generieren

Fotodatei generieren

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 800x600 back.png
#convert $DIR/$pic -rotate -90 -resize 450x600 back.png

Datumsanzeige generieren

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

Temperaturanzeige generieren

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

(Balkendiagramme generieren)

(Alarmbild generieren)

linux/fhem/bilderrahmen.1452180684.txt.gz · Zuletzt geändert: 07.01.2016 16:31 von marc