Donnerstag, 1. Februar 2018

Setup FHEM

Es gibt einen aktuellen Artikel. Detail werden aber weitestgehend hier erklärt.

FHEM installieren ist eigentlich ziemlich einfach. Bevor meiner folgenden Anleitung gefolgt wird, sollte man sich unbedingt hier über den aktuellen Stand informieren. Mit minimalem Aufwand kann man das Setup von hier durchführen.
Alle meine Setup Schritte erfordern erhöhte Rechte. Also bitte alles in einer "sudo su" Session ausführen!
Und so setze ich diese Aufgabe praktisch in einem Script um:
# von debian.fhem.de installieren - siehe aktuelle Anleitung dort https://debian.fhem.de/
wget -qO - http://debian.fhem.de/archive.key | apt-key add -
echo "deb http://debian.fhem.de/nightly/ /" >> /etc/apt/sources.list
apt-get update
apt-get install fhem

Den zusätzlichen Eintrag in der sources.list entfernt das Setup Programm von FHEM. Alle benötigten und sinnvollen debian Pakete werden automatisch mit installiert. Ist ein systemd System vorhanden wird auch der Dienst für FHEM entsprechend installiert.

Damit ist man grundlegend fertig! Aber ein paar Dinge fehlen noch!

Das aus meiner Sicht wichtigste aktuelle Feintuning des frischen FHEM ist die Deaktivierung der USB Stick Erkennung. Dieser kleine direkte Patch auf diese Art ist nur unmittelbar nach der Installation zulässig! Später muss man diese Attribute bitte über die FHEM Oberfläche setzen.
# Den USB Check besser abschalten
/opt/fhem/fhem.pl 7072 "attr initialUsbCheck disable 1"
/opt/fhem/fhem.pl 7072 "save"

Weitere Attribute die man irgendwie braucht, kann man einfach über die Raw definition setzen. Die findet man in jeder Detail Ansicht von Definitionen ganz unten in der Mitte als Link.
attr global backup_before_update 1
attr global commandref modular
attr global title FHEM-Name
attr global sendStatistics onUpdate
attr global latitude 51.xxxxxxxxxxxxx
attr global longitude 12.xxxxxxxxxxxxx
attr global language de
attr WEB JavaScripts codemirror/fhem_codemirror.js
attr WEB codemirrorParam { "theme":"blackboard", "lineNumbers":true }
attr WEB plotfork 1
attr WEB longpoll websocket

Fast fertig - allowed

ToDo

Speziell - Mplayer Ersatz

Ich arbeite viel mit Ansagen unter anderem mit Text2Speech.
Nachtrag: Mittlerweile ist der Aufruf für play direkt mit Parametern im MplayerCall eingebaut. Das Script ist also überflüssig.
Aktuell verwende ich dieses Script um mplayer zu ersetzen. In der Quelle gibt es auch noch eine Variante mit setzen des AUDIODEV.
#!/bin/sh
# die Kommentarezeichen vor echo  fuer den Test entfernen
# echo Parameteranzahl $# > /tmp/mplay.txt

# falls volume nicht vorhanden = 1
volume=1
# Alsa Device, Volume und Dateinamen ermitteln
while [ $# -gt 0 ]
do
# echo $1 >> /tmp/mplay.txt
 if [ $1 = -ao ]
 then
  shift
#   echo $1 >> /tmp/mplay.txt
  device=$(echo $1|cut -d= -f2)
#   echo $device >> /tmp/mplay.txt
 elif [ $1 = -volume ]
 then
  shift
#  echo $1 >> /tmp/mplay.txt
   if [ $1 -lt 100 ]
   then
    volume=0.$(($1))
   fi
 elif [ -e $1 ]
 then
  file=$1
 fi
 shift
done
#echo $volume $file >> /tmp/mplay.txt
play -q -v $volume $file
exit 0

Dieses Script muss für FHEM ausführbar sein. Wenn man es im aktuellen Homdedir liegen hat (User pi) dann kann man es wie folgt als User fhem an Ort und Stelle kopieren. Automatisch mit den richtigen Rechten und Besitz.
sudo -u fhem cp mplayer.sh /opt/fhem/
chmod +x /opt/fhem/mplayer.sh
Zur Vorbereitung sind zwei Pakete erforderlich.
sudo apt-get install libdigest-sha-perl mp3wrap
In Text2Speech kann man einfach den Aufruf durch dieses Script ersetzen. Minimal kann man Text2Speech so definieren:
define MyTTS Text2Speech default
attr MyTTS TTS_MplayerCall /opt/fhem/mplayer.sh

Weitere Software Pakete installieren

Viele der Module in FHEM erfordern zusätzliche Software auf System Ebene.
Aus meiner Liste sind bisher folgende debian Pakete noch nicht installiert
sudo apt-get install avrdude libcrypt-cbc-perl libcrypt-ecb-perl libcrypt-rijndael-perl libdigest-md5-perl libimage-info-perl liblwp-useragent-determined-perl libmime-base64-perl libnet-telnet-perl libnet-upnp-perl libsoap-lite-perl libxml-parser-lite-perl libxml-parser-perl sendemail
Diese Pakete müssen mit cpan installiert werden, es gibt kein debian Paket.
sudo cpan install Crypt::Rijndael_PP

Das folgende Script ermittelt ob die Pakete schon installiert sind und gibt eine Liste der noch nicht installierten Pakete aus. Der Aufruf erfolgt mit Übergabe der zu ermittelnden Pakete.
bash software.sh paket1 paket2 paket3
Script software.sh
# Eine von beiden Zeilen auskommentieren
#echo -n "cpan install " >notinstalled.sh
echo -n "apt-get install " >notinstalled.sh
while [ $# -gt 0 ]
do
# eine von beiden Zeilen auskommentieren
#perl -M$1 -e '' 2>/dev/null
dpkg -s $1 &> /dev/null

if [ $? -eq 0 ]; then
    echo $1" is installed!"
else
    echo $1" is not installed!"
    echo -n $1" " >>notinstalled.sh
fi
shift
done

Man kann auch nur die Perl Module ermitteln, die im System installiert sind.
Aus diesem Beitrag mal abgeleitet könnte man alle Module ausgeben, die in einem System vollständig installiert sind:
dpkg -l |grep ^ii| awk '{ print $2 }'
Oder nur die Perl Module
dpkg -l |grep -i '\-perl'| awk '{ print $2 }'

Diese List könnte man von Zeilenumbrüchen befreien:
|tr -d "\r"|tr "\n" " "

...und in ein ähnliches Script wie oben einspeisen. Damit hätte man alle Pakete die nicht installiert sind. Das geht auch gleich remote von der "Quell Maschine". (Alle Pakete außer die mit "raspberry" in der Zeile)
bash software.sh $(ssh pi@remotehost "dpkg -l " |grep ^ii|grep -vi raspberry | awk '{ print $2 }' |tr -d "\r"|tr "\n" " ")
Das abgewandelte software.sh Script mit Loggingfunktion
LOG=DiffInstall.log
{
date
while [ $# -gt 0 ]
do
   if dpkg -s $1 &> /dev/null
     then
        echo $1" is installed!"
     else
        apt-get -y install $1
   fi
   shift
done
} >> $LOG 2>&1

Keine Kommentare:

Kommentar veröffentlichen