Dienstag, 7. April 2015

Computer mit FHEM an- und ausschalten

Wake On LAN mit FHEM

Kann ein Rechner im Netzwerk Wake on Lan so können wir ihn ganz einfach auch mit FHEM aufwecken. Wir brauchen die MAC Adresse und die IP Adresse des Rechners. Die IP Adresse wird von dem WOL Gerät in FHEM verwendet, um mit Ping zu prüfen, ob der Rechner im Netzwerk erreichbar ist. Entsprechend wird der Status auf on oder off gesetzt. Ich verwende in meinem Beispiel die UDP Methode. Für diese Methode muss nichts weiter installiert werden. In der Commandref  sind noch die Methoden mit den Tools ether-wake oder wakeonlan beschrieben, dafür müssen die entsprechenden Tools installiert werden.
define <Rechnername> WOL xx:xx:xx:xx:xx:xx 192.168.x.x UDP
Generell ist es sinnvoll zu konfigurieren, in welches Netzwerk das UDP Broadcast Packet versendet wird. Dazu muss die Broadcast Adresse konfiguriert werden. Dies geschieht mit dem entsprechendem  Attribut:
attr <Rechnername> useUdpBroadcast 192.168.x.255
Mit einem Druck auf on (oder set <Rechnername> on) sollte den Rechner aufwecken. Geschieht das nicht, ist der Rechner nicht richtig auf WOL konfiguriert. Man hat leider kein Feedback von der Weboberfläche, man "spürt" nicht ob man gedrückt hat oder nicht.
Sollte nach ca. 1 min der Status des eingeschalteten Rechners nicht auf on aktualisiert werden, ist zu prüfen ob der Rechner auf Ping reagiert, falls nicht muss eventuell noch die Windows Firewall konfiguriert werden (siehe weiter unten).


Um den Rechner auch ausschalten zu können, müssen wir ihn natürlich ordentlich herunterfahren. Für einen Windows Computer müssen wir folgende Vorarbeit leisten.

Benutzerverwaltung unter Windows

Um shutdown von der übrigen Verwaltung von Windows sauber zu trennen und mit maximaler Sicherheit für das System zu arbeiten, legen wir einen separaten Benutzer an.

Hinweis: Wer das alles kurz mit ein paar Zeilen Powershell Script machen will, sollte hier schauen.

Die Einrichtung neuer Benutzer ist auf jedem Windows System etwas anders zu finden, dass hängt leider nicht nur von der konkreten Version sondern auch persönlicher Konfiguration ab. Zumindest seit Windows 7 geht es einfach auf jedem deutschen System mit der Eingabe des Wortes "Benutzerkonten" im Suchfeld.
Generell führt uns die "Windows Taste" auf der Tastatur ins Suchfeld wenn wir uns auf dem Desktop befinden. Mit der Maus geht es so:
Windows 7 und Server 2008 - Startknopf ( -> Startmenü) und dann einfach tippen
Windows 8 und Server 2012 - Windows Knopf ( -> Kacheloberfläche) und dann einfach tippen


Wer sich manuell durch hangeln will, der muss das in etwa so tun:
Systemsteuerung --> Benutzerkonten --> Benutzerkonten verwalten
Leider ist das von Windows zu Windows Version immer wieder etwas verschieden.


Hier erstellen wir  ein neues Konto z.B. den "UserShutdown" als Standardbenutzer. Da wir später den Account im Klartext in der FHEM Konfiguration eintragen, bekommt dieser Benutzer nur minimale Rechte. Ich begnüge mich mit Standardbenutzer und einem zusätzlichem Recht. Man könnte ihm eventuell weitere Rechte entziehen.

Wir müssen ein sicheres Kennwort vergeben. Sichere Passwörter bestehen aus Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen. Sonderzeichen sollte man sorgsam verwenden, es gibt nicht alle in jeder Sprache.

Beispiel: P@ssw0rd


Dieser Benutzer braucht jetzt noch entsprechende Rechte. Dazu öffnen wir die lokale Sicherheitsrichtlinie. Das geht mit dem Begriff "secpol.msc" im Suchfeld (siehe oben). Bei Windows 8 ist das allerdings etwas umständlich, da wird die App nicht sofort sondern erst ganz links im Bing Fenster angezeigt. Alternativ kann man gpedit.msc eingeben und verwenden, die Sicherheitseinstellungen sind eine Untermenge von Gpedit.

Der Benutzer bekommt das Recht das System herunterzufahren. Weitere Rechte sind nicht notwendig.


Soll der am Windows Computer angemeldete Benutzer eine Nachricht bekommen, muss ein Dienst aktiviert werden. Dazu tippen wir einfach services.msc im Suchfeld ein (siehe oben). Der Dienst Remoteregistrierung wird auf automatisch gestellt und gestartet. Für die Remote Shutdown Funktion alleine ist es nicht notwendig.








Der Dienst Remoteregistrierung ist wohl auch für den Eintrag des Shutdowngrundes im Eventlog zuständig.
Will man den Remote Shutdown von einem Windows System einleiten, müssen eventuell noch folgende Dienste aktiviert sein:
- Windows-Remoteverwaltung
- Windows-Verwaltungsinstrumentation





Firewalleinstellung unter Windows

Wenn wir Firewallregeln ändern müssen, empfehle ich die direkte Methode über Windows Firewall: Wir tippen im Suchfeld (langsam sollte jeder wissen wie es geht) firewall ein und öffnen das Tool "Windows-Firewall mit erweiterter Sicherheit".

Hier klicken wir auf Eingehende Regeln, es kann etwas dauern bis die Regeln angezeigt werden.
Für die Überwachung muss Ping zulässig sein, dafür müssen wir die beiden Regeln "Datei- und Druckfreigabe (Echoanforderung -ICMPvx eingehend) aktivieren. Sicher reicht uns v4, aber ich habe beide aktiviert.

Beispiel: Windows Server 2012

Für den Shutdownbefehl von Linux muss offenbar die Standardeinstellung der Firewall nicht angepasst werden, falls wenigstens Datei und Druckfreigabe aktiviert ist. Ansonsten je nach Windows Version überprüfen, dass SMB eingehend (Port 445) aktiviert ist. Für den Shutdown Befehl von einem Windows System muss unter Umständen mehr aktiviert werden:
Technet Artikel
Mit Powershell cmdlet Stop-Computer funktioniert es bei mir auch ohne.



Windows Shutdown mit FHEM

Das hier gezeigte Beispiel geht von FHEM auf einem Linux System aus.

Voraussetzung für den "net" Befehl unter Linux ist das Packet samba-common-bin. Ist bisher kein Samba installiert, muss jetzt zumindest dieses Packet installiert werden:

sudo apt-get install samba-common-bin
Wenn Windows ein remote shutdown zulässt, können wir mit dem Attribute shutdownCmd den Befehl eintragen. Ein Druck auf off lässt dann den PC innerhalb einer Minute herunterfahren.
attr <Rechnername> shutdownCmd "net rpc shutdown -I <Rechnername> -U UserShutdown%P@ssw0rd"


Man kann mit dem attr interval noch das Interval für die Ping Überprüfung konfigurieren. Als Standard ist die Ping Überprüfung aus und man kann mit set <Rechnername> refresh den Zustand aktualisieren.


Ein Linux System remote herunterfahren


Der shutdown Befehl für ein Linux System lässt sich am einfachsten per ssh realisieren. Das habe ich in dem Artikel beschrieben:
Per ssh Remote Befehle direkt ausführen

Die Sache mit der Broadcast Adresse

Bei Geräten mit mehreren Netzwerkanschlüssen ist es möglich, dass das Magic Packet ins falsche Netzwerk gesendet wird und damit beim Empfänger gar nicht ankommt. Mit dem Route Befehl kann man sich anschauen, was passieren würde:
IPv4-Routentabelle
===========================================================================
Aktive Routen:
     Netzwerkziel    Netzwerkmaske          Gateway    Schnittstelle Metrik
          0.0.0.0          0.0.0.0    192.168.178.1   192.168.178.54     25
        127.0.0.0        255.0.0.0   Auf Verbindung         127.0.0.1    331
        127.0.0.1  255.255.255.255   Auf Verbindung         127.0.0.1    331
  127.255.255.255  255.255.255.255   Auf Verbindung         127.0.0.1    331
   172.28.130.240  255.255.255.240   Auf Verbindung    172.28.130.241    271
   172.28.130.241  255.255.255.255   Auf Verbindung    172.28.130.241    271
   172.28.130.255  255.255.255.255   Auf Verbindung    172.28.130.241    271
    192.168.178.0    255.255.255.0   Auf Verbindung    192.168.178.54    281
   192.168.178.54  255.255.255.255   Auf Verbindung    192.168.178.54    281
  192.168.178.255  255.255.255.255   Auf Verbindung    192.168.178.54    281
        224.0.0.0        240.0.0.0   Auf Verbindung         127.0.0.1    331
        224.0.0.0        240.0.0.0   Auf Verbindung    192.168.178.54    281
        224.0.0.0        240.0.0.0   Auf Verbindung    172.28.130.241    271
  255.255.255.255  255.255.255.255   Auf Verbindung         127.0.0.1    331
  255.255.255.255  255.255.255.255   Auf Verbindung    192.168.178.54    281
  255.255.255.255  255.255.255.255   Auf Verbindung    172.28.130.241    271
===========================================================================
Ein Packet für das Netzwerk 192.168.178.x an die Broadcast Adresse 255.255.255.255 versendet würde hier im falschen Subnetz landen. Das Packet muss also an die richtige Broadcast Adresse 192.168.178.255 versendet werden. Die Tools arbeiten da unterschiedlich, blöd ist wenn man die Broadcast Adresse nicht angeben kann.

Montag, 6. April 2015

FHEM - kann ich nicht einfach bei null beginnen?

Diese Frage wird immer mal gestellt - Aber: Was ist eigentlich null?

Warnung: Was ich jetzt beschreibe löscht wirklich alle eigenen Definitionen. Falls man etwas behalten will, sollte man den Pfad /opt/fhem vorher komplett sichern!!! Zumindest die Textdatei fhem.cfg sollte man aufheben, eventuell stehen dort nützliche Definitionen drin, die man wieder übernehmen kann.

Also dann - setzen wir FHEM zurück:
- erstmal shutdown in der Befehlszeile von FHEM und tschüss Browser

Alles weitere über Terminal oder WinSCP
- die leere fhem.cfg gibt es hier, die ersetzt die bisherige fhem.cfg
Jetzt müssen wir noch ein paar Dateien unterhalb von /opt/fhem löschen:
- Inhalt von ./log löschen.
- Inhalt von ./backup löschen
- Inhalt von ./restoreDir löschen
- ./FHEM/controls_fhem.txt löschen
- ./FHEM/99_myUtils.pm kann man löschen oder behalten.

Jetzt können wir FHEM wieder starten und anschließend im Browser neu beginnen.

Diese Script würde das erledigen. Vorsicht die bestehende FHEM Installation wird damit zurückgesetzt auf null!

wget https://svn.fhem.de/fhem/trunk/fhem/fhem.cfg
sudo systemctl stop fhem
# Kopie anlegen
sudo cp -R /opt/fhem/ ~/Sicherung/
# Ab hier wird zurück gesetzt
sudo cp fhem.cfg /opt/fhem/
sudo chown fhem:dialout /opt/fhem/fhem.cfg
sudo rm -R /opt/fhem/log/*
sudo rm -R /opt/fhem/backup/*
sudo rm -R /opt/fhem/restoreDir/*
sudo rm /opt/fhem/FHEM/controls_fhem.txt
sudo rm /opt/fhem/FHEM/99_myUtils.pm
# FHEM neu starten
sudo systemctl start fhem

Sonntag, 29. März 2015

Browser Timeout und FHEM

Schon mal einen Befehl in FHEM ausgeführt und nach ca. zwei Minuten einen Time-out bekommen? Schon mal gewundert, dass ein Backup doppelt ausgeführt wurde?

Warum das so ist? Den Hinweis fand ich im Forum.
Mir sind zwei Situationen aufgefallen in denen der Browser beim Zugriff auf FHEM in einen Time-out gerät. Beim Backup und beim update force. In beiden Fällen bekommt der Browser keine Quittung für den Befehl und wartet eine Minute. Läuft der angeforderte Befehl länger als eine Minute sendet der Browser einmalig den Request neu. Damit erhält FHEM erneut den Request und führt ihn aus, der Browser zeigt nach der zweiten Minute einen Time-out.
Blöd ist: Man hat anschließend das Backup doppelt in kurzem Abstand. Das update force läuft unnötigerweise auch zweimal.
Nicht besonders schlimm, aber man kann das auch verhindern: Befehl ausführen und einfach Browser schließen.

Beim Backup gibt es noch die gute Idee es nicht manuell zu starten sondern automatisch auszuführen. z.B. vor dem Update:
attr global backup_before_update 1
Oder man richtet ein zyklisches Backup ein.

Perl Module dokumentieren

Vor ein paar Tagen sagte mir mein FHEM System "... FHEM/99_myUtils.pm: No document text found". Mich hat diese Meldung erstmal verwirrt, sah mir nach einem Fehler aus.

Hintergrund: Die Entwickler haben die Erzeugung der commandref, einer der wichtigsten und besten Dokumentationen von FHEM, auf die lokale Installation verlagert. Der Vorteil: Es wird beim Update weniger heruntergeladen und die Doku wird aus den lokalen Modulen erzeugt. Damit bekommt die Datei mit den eigenen Routinen, die Chance in die Offline-Dokumentation einzugehen.

Wahrscheinlich hat bisher kaum jemand seine Dokumentation für die eigenen Routinen aufgeschrieben, allenfalls Kommentarzeilen direkt im Code.
Ich habe mich schlau gemacht und will daher mal zeigen wie das geht. Irgendwo stand im Forum sinngemäß: "Ein Module ohne Dokumentation ist wertlos" :-)

Ich habe die vorhanden Module durchsucht, habe im Internet recherchiert und als Ergebnis gibt es gleich zu Beginn eine Art Grundbaustein:
=pod
=begin html
... hier steht die Doku in englisch
=end html
=begin html_DE
... hier steht die Doku in deutsch
=end html_DE
=cut
In den meisten Modulen habe ich diesen Doku Abschnitt einfach am Ende des Perl Modules gefunden, also nach der Zeile mit dem Inhalt 1;
Laut diesem Beitrag ist es aber egal, wo man diesen Abschnitt einfügt. Das allerwichtigste ist die "Klammer", die den Abschnitt für Plain Old Documentation darstellt.
=pod
...
=cut
Dazwischen gibt es Schlüsselwörter und Text. Im Falle FHEM gibt es dann zwei "Klammern" eine für englische Doku eine für Deutsche. Wenn die deutsche Klammer fehlt, wird in der commandref ein Link und ein Standardtext erstellt.
=begin html
...
=end html
FHEM erfordert innerhalb des hmtl Abschnittes dann mindestens zwei Tags:
<a name="myUtils"></a>
<h3>myUtils</h3>
Der <a> Tag stellt einen Verweis dar, der <h3> Tag kennzeichnet die Überschrift. Beide Tags müssen sein, ansonsten kann FHEM die Doku nicht in die commandref einbinden. Der Abschnitt für die deutsche Doku kann komplett fehlen. Das folgende Minimum erzeugt einen Link und eine Überschrift in der commandref.
=pod
=begin html

<a name="myUtils"></a>
<h3>myUtils</h3>

=end html
=cut
Die Beschreibungen der einzelnen Routinen werden mit <ul> Tags geklammert und eventuell mit <ul> Tags weiter untergliedert. Dabei entsteht ein eingerückter Text. Beispiele können mit dem <code> Tag formatiert werden.
So schaut es als Gerüst aus:
=pod
=begin html

<a name="myUtils"></a>
<h3>myUtils</h3>
<ul>
  <b>Name</b>
  <br>
  Text<br>
  Examples:
  <ul>
   <code>Example Code </code><br>
  </ul>
</ul>

=end html
=cut
Mit diesem Befehl in der FHEM Kommando Zeile:
{system("/usr/bin/perl ./contrib/commandref_join.pl")}
{qx(/usr/bin/perl ./contrib/commandref_modular.pl)}
Kann die Erstellung der commandref im laufenden Betrieb getestet werden. Allerdings erfolgt die Ausgabe von Fehlern im Logfile von FHEM. Will man die Ausgabe direkt sehen, kann man im Terminalfenster folgendes eingeben:
cd /opt/fhem
sudo /usr/bin/perl ./contrib/commandref_join.pl
Wenn man anschließend die Ansicht testet, darf man den Browsercache nicht vergessen (F5). 

Donnerstag, 26. März 2015

Angepasstes RaspBerryPi Image

Das Raspbian Image hat derzeit eine Größe nach dem entpacken des Downloads von 3,2 GB. Mir stellte sich die Frage: kann ich das was ich z.B. als Grundlage installiere für ein FHEM System, einmal tun und dann als Grundlage für weiter System aufheben? Klar werden jetzt alle sagen, ganz einfach! Aber ganz so simpel ist es nicht. Es geht damit los, dass es meines Wissen kein Tool gibt mit dem sich von einer SD Karte unter Windows ein Image der definierten Partitionen/Laufwerke machen lässt.
Also ganz praktisch: Man nimmt das USB Image Tool, schreibt das Raspbian Image (3,2GB) auf eine 16 GB SD Karte und zieht von dieser wieder ein Image. Ergebnis: Man hat ein 16 GB Image und, das USB Image Tool weigert sich diese auf ein 4 GB SD Karte zu schreiben, die ja reichen würde. Soviel zur Einleitung.

Wie kann man vorgehen?

  • Raspian Image auf eine 16 GB SD Karte schreiben.
  • Rein in den Raspberry und starten.
  • Jetzt kann man mit Raspi-config alles tun, blos nicht: Expand Filesystem
  • Jetzt können wir Updates fahren, Software installieren. Für eine FHEM Installation passt alles in das 3,2 GB Image. 

Mit dem Befehl "fdisk -l" kann man sich die Partitionen anzeigen lassen. der Befehl "df" zeigt die tatsächliche Belegung der SD Card an.
Ich hatte auf dem Original Image 183648 1K-Blöcke verfügbar. Nach dem Update/Upgrade und einem apt-get clean waren es 261564. Nach der FHEM Installation waren es 218112. Also ist der belegte Platz nach Bereinigung soweit verringert, dass FHEM das nicht aufholt.

Wenn das Master-System soweit fertig ist, fahren wir es herunter (sudo halt).
Die SD Karte kommt in einen USB Reader und wir begeben uns an einen anderen Raspi oder starten den einzigen Raspi mit einem anderen Image. Als Speicher für das Image brauchen wir noch einen USB Stick.
Meistens ist es ein gute Idee, die USB Stick's schon vor dem Start anzustecken. Die alten Raspi's stürzen wegen Spannungsproblemen ab, wenn man im laufenden Betrieb USB Sticks ansteckt, die neuen können das, wenn das Netzteil in Ordnung ist.

Nun kommt etwas Arbeit auf der Kommandozeile, also Terminal (putty) zum Raspi aufbauen und anmelden.
Meist muss der USB Stick erst gemounted werden, das kann aber von System zu System unterschiedlich sein.

sudo mkdir /media/usbstick
sudo mount -t vfat -o utf8,uid=pi,gid=pi,noatime /dev/sdb1 /media/usbstick

Mit dem Befehl lsblk kann man sich alle Geräte listen lassen. In meinem Beispiel sieht das so aus:

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    1  14,8G  0 disk
+-sda1        8:1    1    56M  0 part /media/boot
+-sda2        8:2    1     3G  0 part /media/f24a4...
sdb           8:16   1  29,4G  0 disk
+-sdb1        8:17   1  29,4G  0 part /media/TRANSCEND1
mmcblk0     179:0    0  15,1G  0 disk
+-mmcblk0p1 179:1    0    56M  0 part /boot
+-mmcblk0p2 179:2    0    15G  0 part /

Die "HDD" sda ist mein USB Reader mit SD Karte, sdb ist mein USB Stick. Das aktive System ist in mmcblk0.

Jetzt werden die ersten 3,2 GB mittels dd quasi von a nach b kopiert:

sudo dd bs=1M count=3125 if=/dev/sda of=/media/usbstick/raspbian.img

Das dauert übrigens ca 04:25 min. Der Wert war ziemlich konstant, unabhängig ob 4M oder 1M Blöcke oder ob beim kopieren unter Windows vom Stick auf  auf die SD Karte an USB3 Verbindungen.

Ergebnis ist wieder ein 3,2 GB großes Image welches auf eine beliebige SD Karte geschrieben werden kann. Mit Raspi-config und Expand Filesystem kann man jederzeit die gesamte SD Karte nutzen.
Erweitern geht immer einfach und ist ein zwei Schritt Prozess durch vergrößern der Partition und erweitern des Filesystems:

fdisk
resize2fs

Eine Verkleinerung ist schwieriger, deswegen sollte man eventuell überlegen, die Erweiterung manuell zu machen und nicht die gesamte SD Karte nutzen. Die nächste SD Karte könnte nämlich ein paar Bytes kleiner sein.

Donnerstag, 26. Februar 2015

Einrichtung Rapberry Pi für FHEM in aller Kürze

Dieser Artikel ist zwar etwas umfangreicher aber auch reichlich veraltet.
Ich halte einen Artikel  aktuell zur Installation Raspberry und FHEM.

Ich mache es jetzt auch noch: Die Anleitung zum Einrichten in aller Kürze.
Nach dem ich im letzten Artikel den Werdegang aufgeschrieben habe, wie ich Stück für Stück den Raspberry zu dem Zustand gebracht habe, dass mein FHEM wieder läuft - will ich es jetzt kurz: in einem Rutsch.
Da gibt es nämlich noch ein Problem: Ich habe ne große SD Karte gekauft, die ist nicht ganz so schnell. Und jetzt habe ich eine schnellere, aber die ist nicht so "groß". Jetzt gibt es keine ganz einfache Variante, mal eben das Image der Raspberry SD Karte von groß auf klein zu machen.
Ich glaube, dass hier ist die geradlinigste!? Und Schnellste?
Ich installiere einfach nochmal ein komplettes Raspbian mit allen notwendigen Ergänzungen und spiele anschließend wieder FHEM zurück. Das hat vor allem den Vorteil, dass ich die Downtime auf das Restore von FHEM reduziere. 

Man braucht eine SD Karte mit mindestens 4 GB, ich nehme aktuell eine SanDisk SDSDQXN-016G-FFPA Extreme Class 3 Micro SDHC 16GB Speicherkarte inkl. Adapter (UHS-I, 60Mbps).
Das Herunterladen des aktuellen Raspbian Wheezy Images (974 MB) ist ein wesentlicher Zeitfaktor, es dauert bei mir ca. 70 min. Ich lasse diese Zeit mal extra stehen. Die Zeiten der folgenden Vorgänge fasse ich am Ende zusammen.
Die Zip Datei entpacken und die xxxx-xx-xx-raspbian.img Datei (3,2GB) mit einem Tool (ich nehme immer USB Image Tool) auf die SD Karte zurück schreiben (das dauert 2min44s).
SD Karte in den Raspberry stecken, Netzwerkkabel und Netzteil anschließen. Mehr braucht es nicht, den Rest machen wir mit dem Terminal, z.B. putty , Dateitransfer z.B. winscp und einem Windows PC.

Putty starten und unter Hostnamen einfach raspberrypi eintragen und open drücken. Funktioniert die Namensauflösung nicht finden wir im Netzwerkrouter/DHCP Server die IP Adresse und verwenden diese im gleichen Feld.

Die Grundkonfiguration mit mit raspi-config dauert etwa 4,5 min.
Anmelden mit User pi und Passwort raspberry (Standard)
sudo raspi-config
Folgende Konfigurationsschritte sind grundlegend für ein deutsches System notwendig:
Expand Filesystem (kann man auch jederzeit später machen, alle folgenden Schritte funktionieren mit dem Original Image)
Boot ins Terminal Desktop oder grafischer Desktop
Internationalisation  Options
   - Locale de_DE.UTF-8 UTF-8 zur ordentlichen Darstellung
       - der vorgewählte Standard en GB.UTF-8 sollte als zweite Auswahl bestehen bleiben.
       - default ebenfalls auf deutsch
       - Tastatur stimmt automatisch
   - Change Timezone
       - Europa
       - Berlin
Unter Advanced Options den Hostname ändern. 
Das Tool schließt mit einem reboot. 

Danach muss man sich mit Verwendung des neuen Hostnamen wieder per Terminal (putty) anmelden. Bei mir war dabei immer die Eigenheit, dass ich jetzt vorübergehend einen FQN angeben musste, also z.B. raspib.fritz.box
Das Basisupdate und Firmwareupdate dauert ca 6 min.
Die Version vor dem Update ermitteln wir mit: uname -a --> 3.18.7+ 755
sudo apt-get update && sudo apt-get upgrade && sudo rpi-update && sudo reboot
Nach dem Update zeigt uns: uname -a --> 3.18.7+ 757

Die Software Installation dauert ca. 15 min.
sudo apt-get install python-dev python-rpi.gpio perl libdevice-serialport-perl libio-socket-ssl-perl libwww-perl libxml-simple-perl msttcorefonts libgd-graph-perl libimage-librsvg-perl libsoap-lite-perl samba samba-common-bin libjson-perl libdigest-md5-file-perl liblwp-protocol-https-perl liblwp-protocol-http-socketunix-perl telnet expect sendemail libnet-ssleay-perl perl && sudo cpan install Digest::SHA1

Der folgende Befehl schafft noch etwas freien Speicher:

sudo apt-get clean

Ein sudo apt-get autoremove wie oft beschrieben brachte bei mir gar nichts.

Das CPAN Modul könnte noch aktualisiert werden, allerdings weiß ich derzeit nicht wie und ob es irgendwelche Vorteile bringt.


Ab hier bis FHEM Installation dauert es ca. 6 min. Es wird "Taster gesteuertes Shutdown/Restart", "FHEM auf Fritzbox Überwachung", "Sonos Sprachausgabe (Samba Freigabe)" und sendEmail Unterstützung eingerichtet.
Ich habe zwei Scripts im Einsatz, diese müssen vom Windows PC auf den Raspberry kopiert werden. Ich nehme dazu Winscp und kopiere die beiden Dateien nach 
/home/pi/shutdown.py und /home/pi/StartFhemOnFritz.sh:

Man braucht noch einen Pfad und alle Rechte müssen gesetzt werden.
sudo chmod +x /home/pi/shutdown.py && sudo chmod +x /home/pi/StartFhemOnFritz.sh && sudo mkdir /mnt/SonosSpeak && sudo chmod 777 /mnt/SonosSpeak/


Jetzt noch Dateien editieren, die Befehle von nano sind selbsterklärend.

sudo nano /etc/rc.local
Am Ende vor exit 0 diese Zeile eintragen
sudo python /home/pi/shutdown.py &

sudo nano /usr/share/perl5/IO/Socket/SSL.pm
Diese Textkette suchen (steht in Zeile 1490) und das $ kurz vorm Ende löschen
m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i
sudo nano /usr/bin/sendEmail
Diese Textkettte suchen (Zeile 1907)
SSLv3 TLSv1 und durch diese ersetzen TLSv1_0:TLSv1_1:TLSv1_2
sudo nano /etc/samba/smb.conf
Folgende Zeilen hinzufügen:
[SonosSpeak] comment = Audio-Files for SonosPlayer to Speak 
read only = false 
path = /mnt/SonosSpeak 
guest ok = yes
Sicherstellen, dass in der Global-Sektion der Parameter Security auf User steht (oder gar nicht erst definiert wurde):
[global]
security = user
Samba-Server neustarten:
sudo invoke-rc.d samba restart

Fertig: 

Die Einrichtung hat am 2000 DSL Anschluss (ich wohne auf dem Land) bis hierher ca. 34,5 min gedauert. Eigentlich kann man jetzt das Download von FHEM noch integrieren und dann das Image als Installationsbasis verwenden. Download FHEM dauert ca. 45 sec.
FHEM installieren, ist schnell erledigt in ca. 1 min. Beides zusammen, oder download jetzt und Installation später:
wget http://fhem.de/fhem-5.6.deb && sudo dpkg -i fhem-5.6.deb

Man kann dieses Image aufheben und als Grundlage für mehrere Raspberries nehmen. Ich beschreibe später noch wie.

Zusammenfassung: 

In ca. 35 min bekommt ein frisch installiertes System, wenn man das Download von Raspbian  nicht mitrechnet. Diese Zeiten habe mit dem Stand Februar 2015 ermittelt. 
Mit dem Download von Raspbian dauert es ca. 1 h 45 min. 

Mittwoch, 18. Februar 2015

Umzug FHEM auf die Paparazzischeue Power Himbeere

Aktuelles 23.03.2017: Dieser Artikel ist mittlerweile zwei Jahre alt, ich empfehle meine aktuellen Anleitungen zur Installation und zum Umzug 

Vorbemerkung zur Überschrift 

Der neue Raspberry Pi 2 hat einen lichtempfindlichen Chip an Board, man tut also gut daran ein weitestgehend lichtdichtes Gehäuse zu verwenden, oder eben nicht zu blitzen.
Wer Himbeermarmelade mag weiß, die Himbeere an sich hat viele Kerne. Ob die im Kuchen nicht auffallen, ist mir jetzt nicht so bewusst aber der Raspberry Pi 2 hat 4 Kerne anstatt bisher nur einen. Mal sehen ob wir die auch wirklich nutzen können.

Installation

Ich schreibe hier einfach mal mit was ich alles tue, um die aktuelle FHEM Installation auf einen neuen Raspberry Pi umzuziehen. Die vielleicht einfachste Variante ist:
Altes System
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo rpi-update
sudo halt

Dann SD Karte ins neue System stecken, hochfahren und fertig. Das werde ich später auch noch probieren, aber: Wer will schon immer einfach? :-)

Kann ja sein man will/muss die SD Karte auch wechseln. Oder man will das Betriebssystem einfach mal von alten Lasten befreien. Oder wie auch immer ...

Also erstmal System einrichten, wie von mir beschrieben.

Kleine Feststellung am Rande:
Wenn man mehrere Kommando Zeilen aus diesem Text kopiert und mit einem Mal in das Terminalfenster einfügt wird die Verarbeitung abgebrochen wenn ein Zwischenfrage kommt und man J oder enter drückt. Deswegen schreibe ich mal auch die Einzeiler mit && zwischen den einzelnen Kommandos - liest sich nicht so schön funktioniert aber.

Hardwareunterstützung

Ein bisschen mein Standard ist eine Stop/Start Taste einrichten. Die Hardware ist ja vorbereitet, dann noch:
sudo apt-get install python-dev python-rpi.gpio

das schon existierende Script von dem alten Raspberry kopieren nach
/home/pi/shutdown.py

Rechte setzen
sudo chmod +x /home/pi/shutdown.py

und für den Systemstart aktivieren
sudo nano /etc/rc.local

und ganz zum Ende gehen und vor exit 0
sudo python /home/pi/shutdown.py &
eintragen.

FHEM installieren

Die notwendigen Module, dass -f install am Anfang überprüft nochmal die Paketabhängigkeiten. Ob das bei der sauberen Neuinstallation wirklich nötig ist weiß ich nicht.
sudo apt-get -f install
sudo apt-get install perl libdevice-serialport-perl
sudo apt-get install libio-socket-ssl-perl
sudo apt-get install libwww-perl
sudo apt-get install libxml-simple-perl
oder so
sudo apt-get -f install && sudo apt-get install perl libdevice-serialport-perl && sudo apt-get install libio-socket-ssl-perl && sudo apt-get install libwww-perl && sudo apt-get install libxml-simple-perl
oder so
sudo apt-get -f install && sudo apt-get install perl libdevice-serialport-perl libio-socket-ssl-perl libwww-perl libxml-simple-perl

RSS Unterstützung

Will man RSS verwenden braucht man folgende Module
sudo apt-get install msttcorefonts libgd-graph-perl libimage-librsvg-perl

sudo apt-get install libgd-text-perl (wird gebraucht ist schon installiert)

Sonos Unterstützung 

zusätzliche Perl Pakete
sudo apt-get install libsoap-lite-perl

Die Sprachausgabe benötigt eine Samba Freigabe die von Sonos erreichbar sein muss. Ich habe es noch so gemacht, dass jeder schreiben kann.
sudo apt-get install samba samba-common-bin
sudo mkdir /mnt/SonosSpeak
sudo chmod 777 /mnt/SonosSpeak/
sudo nano /etc/samba/smb.conf
Folgende Zeilen hinzufügen (Pfade müssen natürlich u.U. angepasst werden):
[SonosSpeak]
  comment = Audio-Files for SonosPlayer to Speak
  read only = false
  path = /mnt/SonosSpeak
  guest ok = yes

Hier muss normal nichts stehen, damit steht der Eintrag per default auf user:
[global]
  security = user
Samba-Server neustarten:
sudo /etc/init.d/samba restart
oder
sudo invoke-rc.d samba restart

Für das Caching der Sprachausgabe brauche ich noch ein Perl Modul, welches über cpan installiert werden muss.
sudo cpan install Digest::SHA1

netatmo Unterstützung

Netatmo braucht vor allem die Json Library
sudo apt-get install libjson-perl libdigest-md5-file-perl liblwp-protocol-https-perl liblwp-protocol-http-socketunix-perl

FHEM auf der Fritzbox Unterstützung

Um FHEM auf der Fritzbox Remote zu überwachen brauchen wir auch noch zwei Softwarepakete.
sudo apt-get install telnet expect
und das Script /home/pi/StartFhemOnFritz.sh muss von der alten Installation kopiert werden und mit Berechtigung zum ausführen versehen werden.

Email senden

Siehe hier

Das FHEM Paket selbst ist dann nur noch ein klacks, vorher kann man hier schauen ob es eine Neue Version gibt.
Man kann zwar im Zweifelsfall im sudo machen, aber bei wget braucht man es nicht.
wget http://fhem.de/fhem-5.6.deb
sudo dpkg -i fhem-5.6.deb

FHEM wird gestartet und wir sind erstmal fertig mit einem neuen System.

Wiederherstellung altes System

Jetzt noch FHEM auf den aktuellen Stand bringen, oder braucht man das nicht weil ich ja ein backup zurückspielen will? Man könnte jetzt einfach die fhem.cfg einspielen und neu starten, dazu wäre es clever das System zu aktualisieren. Das will  ich aber nicht, ich prüfe einfach mal ob das System läuft:
http://<hostname>:8083
Man kann an 3 Stellen nach einer Version schauen.

  1. version in der Kommandozeile von FHEM - die Versionsnummern der geladenen Module
  2. fheminfo in der Kommandozeile von FHEM - gibt einen Satz Infos aus, je nach dem was verwendet wird. Bereit um es an das Statistic Modul von Martin Fischer zu senden (fheminfo send)
  3. list global in der Kommandozeile von FHEM - gibt uns die Version der fhem.pl

Da ich etwas testen will, mache ich von diesem System mal noch ein backup. Also einfach backup in der Kommandzeile von FHEM.

Achtung! beim enter drücken passiert erstmal gar nichts. Der Browser sendet nach 1 min den Befehl von sich aus neu, damit werden zwei Sicherungen erzeugt. Also besser nach dem Backup Befehl den Browser schließen und im Terminal weitermachen.

Im Terminalfenster eingeben:
sudo invoke-rc.d fhem stop
Jetzt mache ich am "Alten System" nochmal ein backup und dann ein shutdown in der Kommandozeile von FHEM.

Mit Winscp kopiere ich die aktuelle Backup Datei aus dem Verzeichnis 
/opt/fhem/backup auf meinen Windows PC
und dann auf das neue System nach /home/pi . Damit umgehe ich Schreibrechte, muss nichts verbiegen und es bleibt quasi eine temporäre Datei. Sie hat aus meiner Sicht nichts im Pfad /opt/fhem/backup zu suchen.
Jetzt die eigentliche Wiederherstellung des Programmpfades
sudo tar -xvzf /home/pi/FHEM-201xxxxx_xxxxxx.tar.gz -C /opt/fhem/

In meinem Fall brauche ich an Hardware nichts weiter umstecken, ich habe einen HMLAN. Ansonsten müsste man das hier an dieser Stelle tun. 

Und das System wieder starten
sudo invoke-rc.d fhem start

Das SONOS Modul schreibt bei mir ins aktuelle Terminalfenster, für weitere Arbeit öffnet man besser ein neues.

Für eine Test zwischendurch gebe ich dem HMLAN in der fhem.cfg einfach mal eine andere Adresse um es prinzipiell zu testen
sudo nano /opt/fhem/fhem.cfg

Wenn alles läuft kann man die Sache endgültig machen, wenn nicht folgt noch mal Analyse:
Auf dem alten System
Den automatischen Start von FHEM verhindern
sudo update-rc.d -f fhem remove
Auf dem neuen System
Den Start von FHEM wieder auf automatisch stellen
sudo update-rc.d -f fhem defaults

Restarbeiten

Sounddateien für Sonos
Die vorhandene Dateien kann man einfach von Freigabe zu Freigabe kopieren.
Die DEFs verweisen aber noch auf die alte Freigabe, die müsste man auch noch ändern. Solange der alte Raspberry am Netz ist funktioniert natürlich alles.

Tuning

Das sollte die Plots auf mehrere Prozesse auslagern.
attr WEB plotfork 1

Quellen