Hausautomation: FHEM mit Ubuntu 14 LTS Server auf Oracle Virtualbox VM

fhem_logoFHEM ist eine freie Software zur Verwaltung von verschiedensten Geräten im Bereich der Hausautomation. Der Vorteil dieser kostenfreien Software gegenüber Einzellösungen verschiedener Gerätehersteller ist die gleichzeitige Nutzungsmöglichkeit der Komponenten verschiedener Anbieter. Weiterhin können neben den sogenannten Funkaktoren (z.B. von Homematic) ebenfalls Netzwerkgeräte wie z.B. Netzwerk Kameras oder Linux Sat Receiver intelligent gesteuert und auch beispielsweise Telefonanrufe, Push Nachrichten oder eine SMS an beliebige Empfänger versendet werden. In diesem Beitrag soll einmal die Möglichkeit der Virtualiserung eines FHEM Servers beschrieben werden.

Fhem ist eine web basierte Steuerungssoftware, welche in der Programmiersprache Perl geschrieben wurde. Als Plattform hat sich oft der Raspberry als stromsparender Linux Server oder auch die Fritzbox durchgesetzt. Beide Systeme bieten durchaus Vorteile, wobei der Betrieb auf der Fritzbox mittlerweile nicht mehr offiziell vom Hersteller unterstützt wird. Da jeder einmal anfängt, bietet sich doch zuerst einmal ein Testsystem an, welches keine Anschaffungskosten verursacht. So bietet sich die Installation innerhalb einer virtualiserten Umgebung prima an. In diesem Beitrag wird die Installation auf dem folgenden System durchgeführt:

  • Der Host ist ein reguläres Windows System.
  • Als Virtualiserungsumgebung wird die kostenlose Software Virtual Box verwendet.
  • Innerhalb der virtuellen Maschine soll das kostenfreie Betriebssystem Linux Ubuntu 14.04 LTS Server installiert werden.

Als produktives System mit einem Funkstick empfehle ich jedoch langfristig einen Raspberry zu verwenden, da dieser keine Störeinflüsse wie Neustart des Hostsystemes, gemeinsame Nutzung von USB Geräten, usw. unterliegt. Die Installation auf dem Raspberry ist hier dokumentiert.

Virtuelle Umgebung (VirtualBox) + Betriebssystem (Ubuntu) installieren

Zu Beginn der Installation des FHEM Server innerhalb einer virtuellen Maschine muss nun als erstes Virtual Box installiert werden:

Download: https://www.virtualbox.org/wiki/Downloads

virtual box download

 

Nach der Installation wird nun das Betriebssystem Ubuntu Server herunter geladen:

Download: http://www.ubuntu.com/download/server

ubuntu 14 LTS download

Hier wird sich bewusst für die Server Variante entschieden, da diese keine grafische Oberfläche beinhaltet. Gerade bei einer geplanten Nutzung ohne viel freie Ressourcen innerhalb einer virtuellen Maschine oder auf einem Raspberry ist dies sehr von Vorteil. Zudem soll das System lediglich im Hintergrund laufen.

Nach dem Download wird in Virtual Box eine neue VM angelegt und das herunter geladene Ubuntu 14.04 ISO als CD Image eingebunden. Damit erscheint nach Start der neuen VM gleich das Installationsmenü von Ubuntu.

fhem-neue_vm_Oracle VM VirtualBox Manager

virtual_box_ubuntu_iso_einhaengen

Nach der Installation, wird empfohlen, sich nicht über die Virtual BOX Oberfläche auf die Benutzeroberfläche zu verbinden, sondern vielmehr gleich zu Beginn den SSH für den Zugriff mittels eines SSH Client zu konfigurieren. Die spätere Administration des virtuellen Linux System kann damit später theoretisch von jedem Computer im lokalen Netzwerk (beispielsweise über (m)putty) erfolgen. Der Ubuntu Server wird ohne grafische Oberfläche installiert, was in Tests die direkte Bedienung der virtuellen Maschine mit Maus trotz installierter Virtual Box Gasterweiterungen etwas problematisch machte. Dafür allerdings kommt das System mit sehr wenig Ressourcen aus.

Wurde die SSH Verbindung erfolgreich konfiguriert, empfiehlt es sich für root ein Passwort zu setzen, wenn der Server nur im heimischen Netzwerk betrieben wird. Der Vorteil ist ein leichterer Umgang beim späteren Austausch von Dateien zwischen dem Windows System und dem virtuellen Linux System. Ist ein Zugriff per SSH nicht möglich, muss zuvor einmal im installierten Linux die SSH Konfigurationsdatei /etc/ssh/sshd_config konfiguriert werden. Das Passwort für den Benutzer root kann anschließend wie folgt gesetzt werden:

sudo passwd root [RETURN]

linux_passwort_aendern

Als kleiner Hack Trick… Sollte sich das Passwort nicht für den Root setzen lassen, kann es zuvor gelöscht werden mit :

            sudo vim /etc/passwd

linux_passwd_passowort_hack

Dann das x in der Zeile des root entfernen und die Datei speichern.

Anschließend kann man sich ohne Passwort als root anmelden mit:

slogin root

Danach mit passwd das Passwort erneut versuchen zu setzen 😉

 

FHEM Hausautomationssoftware installieren

Jetzt ist alles bereit, um FHEM zu installieren.

die Grundinstallation aus der Konsole gestartet (als root) kann so erfolgen:

cd /tmp/

wget http://fhem.de/fhem-5.6.deb

dpkg -i fhem-5.6.deb

apt-get install perl

apt-get install libxml-simple-perl

apt-get install libnet-telnet-perl

CUL Funkstick installieren

Der FHEM Server soll später vorerst Funkaktoren von Homematic ansprechen. Die Kommunikation der Steuerungssoftware mit diesen Geräten erfolgt per Funk über die Sendefrequenz 868,3 MHz. Damit diese Geräte angesprochen werden können, wird ein Funksender benötigt, welcher mit der FHEM Software verbunden wird. Hierfür gibt es mehrere Möglichkeiten:

  

Die Integration des CUL Funkstick in FHEM ist hier dokumetiert.

Damit der CUL Stick angesprochen werden kann, muss dieser vorab als USB Gerät dauerhaft in die virtuelle Maschine eingebunden werden.

fhem_virtualBOX_CUL_DEVICE_einhaengen

In den Tests fiel lediglich auf, dass nach dem kompletten Ausschalten der VM der CUL USB Stick immer wieder eingehangen werden musste. Dies lässt sich jedoch umgehen, wenn das USB Device bei den Eigenschaften der VM fest zugeordnet wird:

fhem_virtualBOX_CUL_zuordnen.jpg

Nachdem der USB Stick dem Gastsystem bekannt gemacht wurde, muss anschließend der Stick mit der passenden Firmware geflasht werden. Fehm versucht dies selbstständig, jedoch erschienen auf dem Testsystem im FHEM Logfile Fehler. Dank der guten Hinweise darin, konnte der Stick manuell in der Linux Konsole dann eingerichtet werden:

sudo apt-get install dfu-programmer

dfu-programmer atmega32u4 erase

dfu-programmer atmega32u4 flash

cd /opt/fhem/

dfu-programmer atmega32u4 flash ./FHEM/firmware/CUL_V3.hex

Sind für FHEM selbst ausreichend Zugriffsrechte im System vorhanden, führt FHEM diese Aktionen natürlich selbst auch korrekt aus. Da dieser Schritt einmalig gemacht wird, ist diese Thematik nicht weiter dramatisch.

Ein Hinweis zur Verwendung des Sticks innerhalb der VM: Das Testsystem lief ein gutes Jahr und eines Tages gab es plötzlich Probleme bei Erkennung des CUL Sticks. Er wurde zwar im Linux weiterhin erkannt, ließ sich jedoch weder von FHEM korrekt ansprechen noch über die beschriebene Verfahrensweise neu flashen. Die Fehlermeldung war ab diesen Moment nur noch: no Device present. Obwohl der Programmier Knopf am Stick während des Einstecken in den USB Port korrekt gedrückt war und das Linux System das USB Gerät auch erkannt hat (siehe Befehl lsusb oder Datei /var/log/syslog), war ab diesen Moment nichts mehr zu machen. Als auch der Hersteller keine Tipps mehr geben konnte, welche noch etwas zur Lösung beitragen konnten, entschied ich mir Kurzerhand einen letzten Versuch zu starten, um einen Defekt des Gerätes ausschließen zu können: Installation FHEM auf einem Raspberry. Die gewonnene Erkenntnis aus dem Versuch war, dass der Stick tatsächlich nicht defekt war. Seit dem wird die  VM als Reserve System nach einem guten Jahr vorerst schlafen gelegt und das Projekt Hausautomation mit FHEM auf dem Raspberry fortgeführt. Trotzdem bietet die VM eine gute Basis, um das Thema gut kennen zu lernen und kann bei anderen Installationen durchaus auch langfristig fehlerfrei funktionieren.

Mitteilungen per E-Mail von FHEM senden lassen:

Damit das FEHM System später innerhalb des Ubuntu System E-Mails als Mitteilung bei definierten Aktionen oder Ereignissen senden kann, wurde ein einfaches Sendmail Paket und ein Mailprogramm installiert:

apt-get install ssmtp
chown root:mail /etc/ssmtp/ssmtp.conf
chmod 640 /etc/ssmtp/ssmtp.conf
cat /etc/ssmtp/ssmtp.conf
#user fhem der mail gruppe hinzufügen
usermod -a -G mail fhem
touch root/.mail; touch /root/.mailrc
apt-get install mutt

Damit das System Mails über einen SMTP Account versenden kann, muss die ssmtp.conf mit den Zugangsdaten versehen werden:

nano /etc/ssmtp/ssmtp.conf
#(nano ist ein Editor, kann mit “apt-get install nano” installiert werden)
#User=root+hostname = mailadresse@domain.de –> mailadresse sendet erhaltene System Mails des user an
#externe Mail Adresse
root=IhrName@IhreDomain.de
# The full hostname
hostname=localhost
mailhub=smtp.strato.de
# The address where the mail appears to come from for user authentication.
rewriteDomain= IhreDomain.de
#Mail Server Configuration:
UseSTARTTLS=YES
AuthUser= IhrName@IhreDomain.de
AuthPass=IHRPasswort
# Email ‘From header’s can override the default domain?
FromLineOverride=YES

Der Versand von E-Mails ist nach Installation von ssmtp mit dem Befehl mail bereits möglich. Durch die Nutzung des zusätzlichen Programm mutt ist jedoch später auch der Versand von Dateianhängen wie Kamera Bilder problemlos.

Der Versand kann aus der Konsole getestet werden:

echo “test” | mutt -s “subject0” Empfänger@E-Mailadresse.de

Mit einem Dateianhang erfolgt ein Test wie folgt:

echo “test” | mutt -s “subject0” Empfänger@E-Mailadresse.de -a /tmp/Datei1.txt -a /tmp/ Datei2.txt

In den Tests erwies sich das Senden von Mails über den mutt Client aus fhem heraus als die am besten funktionierende Lösung.

Dies ist im Wesentlichen eine Grundinstallation des FHEM Server auf einem Ubuntu System. Die Installation innerhalb einer VM bietet gerade zu Beginn eine gute und kostengünstige Möglichkeit. Die VM kann beliebig dupliziert werden. Es können Wiederherstellungspunkte gesetzt werden und es benötigt zu Beginn nicht gleich den Einsatz eines separaten PC’s, einer Fritzbox oder eines Raspberry.

Der Einsatz auf der Fritzbox kommt für mich persönlich nicht in Frage, da diese für solche “Bastelprojekte” im Anfangsstadion nicht unnötig gestresst werden soll.  Damit ist gemeint, dass mir der Empfang von Telefonanrufen und Internet wichtiger sind, als ein unnötiges Risiko bei eventuell notwendigen Neustarts eingehen zu müssen. So ist eine VM einfach Prima. Mit einer aktuellen Virtual Box Version lassen sich einzelne VM’s auch auf Wunsch automatisch im Hintergrund starten, was für mich persönlich eine sehr gute Sache ist und ein Grund mehr bietet, auf einen separaten PC für Fhem dauerhaft komplett verzichten zu können.

<- Zurück zur FHEM Projekt Übersicht…

Veröffentlicht in FHEM, Hausautomation, Tipps und Tricks und verschlagwortet mit , , , , .

Ralf Bösenberg

Als gelernter Fachinformatiker begeistere ich mich für viele aktuelle IT Themen. Ich befasse mich mit Programmierung unter VB.Net, VB6, Linux, verbringe viel Zeit mit der Gestaltung und Administration von Internet Servern und Web Seiten und bin gerne und jederzeit ein freundlicher und kompetenter Ansprechpartner für Kunden und Interessenten.

www.Ralf.Bösenberg.info

3 Kommentare

  1. Danke für diese Erläuterungen, die Installation auf meinem Ubuntu hat funktioniert, das Versenden von Emails aus der Konsole klappt auch.
    Ich habe dann in FHEM in der 99_myUtils.pm diese sub zugefügt

    sub fb_mail {
    my $rcpt = $_[0];
    my $subject = $_[1];
    my $text = $_[2];
    system(“/bin/echo \”$text\” | /usr/bin/mutt -s \”$subject\” — \”$rcpt\””);
    }

    Der Versand aus der FHEM Befehlszeile nach dem Muster
    {fb_mail(‘zuhause@DeineDomain.de’,’TV !’,’TV Status ist: %’)}
    Wird mit -1 quittiert, es wird aber keine Email verschickt.
    Irgendein Tipp, woran es liegen kann?
    Danke vorab

    • Hallo Karl-Heinz,

      meine aktuelle Mail Konfiguratuion in fhem schaut so aus:

      Aufruf in der fhem.cfg:

      ########### Beginn: BATTERIE STATUS von Homematic Aktoren ermitteln #########################
      #Batterie Warung per Mail senden:
      define n_batt_chk notify .*:[Bb]attery.* { if ($EVENT !~ m/ok/) { \
      { DebianMail('meineMail@meineDomain.de', 'FHEM Batteriewarnung', $NAME.': '.$EVENT)};; \
      Log 3, "$NAME : Batteriewarnung $EVENT";; \
      } \
      }

      Die Funktion DebianMail habe ich in der Datei 99_myUtils_email_linux.pm gespeichert:


      ######neue funktion... ## DebianMail Mail auf dem RPi versenden ############
      sub
      DebianMail
      {
      my $rcpt = $_[0];
      my $subject = $_[1];
      my $text = $_[2];
      my $attach = $_[3];
      my $ret = "";
      my $sender = "meinbenutzername\@meineDomain.de";
      my $konto = "meinbenutzername\@meineDomain.de";
      my $passwrd = "XXXMeinPasswortXXX";
      my $provider = "smtp.1und1.de:25";
      Log 1, "";
      Log 1, "sendEmail RCP: $rcpt";
      Log 1, "sendEmail Subject: $subject";
      Log 1, "sendEmail Text: $text";
      Log 1, "sendEmail Anhang: $attach";;

      $ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -a '$attach' -s '$provider' -xu '$konto' -xp '$passwrd' -o tls=yes -o message-charset=utf-8);
      $ret =~ s,[\r\n]*,,g; # remove CR from return-string
      Log 1, "sendEmail returned: $ret";
      }

      Viellleicht ist es Dir eine Hilfe.
      Viele Grüße
      Ralf

  2. Pingback: Heizungsprojekt: Kombination Wassergeführter Kamin + Gas Therme mit Pufferspeicher + Frischwasserstation + FHEM | HRO-Netz.de

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert