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.shZur Vorbereitung sind zwei Pakete erforderlich.
sudo apt-get install libdigest-sha-perl mp3wrapIn 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 sendemailDiese 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 paket3Script 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 Moduledpkg -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 LoggingfunktionLOG=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