Samstag, 27. Dezember 2014

Digitalen Fotorahmen als Ausgabegerät für fhem verwenden

Die Zimmertemperatur farbig und gut lesbar anzeigen und dafür einen alten LCD Fotorahmen verwenden der ansonsten nur in der Kiste liegt, dass fand ich eine gute Idee.

Der Artikel basiert auf diesem Beitrag im forum.fhem.de

Als erstes die Wifi SD Karte (Transcend) besorgen und schon kann es los gehen:

Windows PC
Die SD Karte wird zur Vorbereitung im SD Reader eines Windows PC betrieben. In der Wurzel der SD Karte muss eine Datei autorun.sh mit Notepad und folgendem Inhalt erzeugt werden:

telnetd -l  /bin/sh &
tcpsvd -E 0.0.0.0 21 ftpd -w /mnt/sd/ &

Entsprechend des Beitrages muss noch der Pfad /DCIM/199_WIFI erzeugt werden, dahin wird später das Bild automatisch gespeichert.

Digitaler Foto Rahmen
In meinem Foto Rahmen läuft die SD Karte nur mit dem mitgelieferten USB Reader. Der Rahmen startet nach dem einschalten selbstständig die Wiedergabe der Bilder im USB Reader.

RaspberryPi
Auf dem raspberryPi muss lftp installiert werden.

sudo apt-get install lftp 

Für fhem muss eine Steuerdatei /opt/fhem/FHEM/FhemUtils/wifi-sd.ftp erzeugt werden: 

lftp -u user: ftp://ip
cd /DCIM/199_WIFI
put /opt/fhem/WSD00003.JPG
quit

Jetzt noch den cron job anlegen, dazu wird zuerst ein script WIFI-SD-copy.sh im Pfad /usr/pi erzeugt:

#!/bin/bash

rm /opt/fhem/WSD00003.JPG
wget http://ip:8083/fhem/rss/myrss.jpg -O /opt/fhem/WSD00003.JPG

lftp -f /opt/fhem/FHEM/FhemUtils/wifi-sd.ftp

Das script muss Rechte für execute bekommen!

Jetzt noch den Job in der crontab erstellen:

crontab –e

nano wird geöffnet. Diese Zeile eintragen:

5 * * * * /usr/pi/WIFI-SD-copy.sh

Am Ende hat alles funktioniert, bis auf das mein Fotorahmen nicht wirklich das aktuelle Bild dargestellt hat. Beim Einschalten wird irgendwie das Bild von der SD Karte in einen Cache geladen und nie wieder aktualisiert. Sehr schade, außer dem neuen Wissen über SD WiFi Karten und Anlegen eines RSS Feeds unter fhem ist nichts bei raus gekommen.


Freitag, 26. Dezember 2014

RSS Feed in fhem einrichten

Die Idee war, ein paar Werte aus fhem (z.B. Temperatur draußen) optisch ansprechend und frei definierbar darzustellen.

Meine Beschreibung basiert auf dem Workshop im fhem Forum
Hier steht einfach nur was ich konkret gemacht habe und was für mich funktioniert hat.

Meine Vorbereitung

Eine leere Textdatei rss.layout im Verzeichnis /opt/fhem/FHEM anlegen. Read und Write Rechte erteilen, um die Datei später bearbeiten zu können. Entweder die Datei unter Windows erzeugen und mit winscp auf den Raspberry kopieren und die Rechte über Eigenschaften setzen oder in der console:

cd /opt/fhem/FHEM
touch rss.layout
chmod a+w rss.layout

Zunächst ein paar Module nachinstallieren:

sudo apt-get install msttcorefonts
sudo apt-get install libgd-graph-perl
sudo apt-get install libgd-text-perl (ist eventuell schon installiert)
sudo apt-get install libimage-librsvg-perl  

Es geht weiter in der fhem Oberfläche:

define myrss RSS jpg <IP oder Name des FHEM Servers> ./FHEM/rss.layout

Jetzt kann man unter http://<IP oder Name des FHEM Servers>:8083/fhem/rss/myrss.jpg 
das Bild, derzeit ein schwarzer Kasten, abgerufen werden.

Im Weiteren kann man unter Edit Files unter dem Punkt Own modules and Helperfiles die Datei rrs.layout und damit das Layout direkt im fhem Editor bearbeiten. Um den Erfolg auch sichtbar zu machen, muss nach dem Speichern der Datei neu eingelesen werden: 

set myrss rereadcfg

Der Rest steht im Workshop...

Mittwoch, 24. Dezember 2014

Die WiFi SD Karte

Sowas tolles gibt es: eine SD Speicherkarte mit eingebautem WiFi Hotspot. Für alle Geräte die sonst noch keine Verbindung ins Netzwerk haben, also für Ältere :-)
Die Software auf den Karten und die Features sind wohl unterschiedlich, für ein geplantes Projekt stand eine Karte von Transcend (TS16GWSDHC10) auf der Liste. Dummerweise vor Weihnachten nicht mehr schnell lieferbar, in allen Shops mit 2-3 Tage Lieferzeit. Da lernte ich was neues kennen: "amazon warehousedeals" die bieten diese Karte "gebraucht" an. Es sind offenbar Artikel, die jemand schon mal offen hatte und damit die Verpackung nicht mehr unbeschädigt ist. Egal dachte ich mir, volles Rückgaberecht (und eine geringere Hemmschwelle genau dafür, die Verpackung von SD Karten ist ja meistens Einweg)
Großer Vorteil: Amazon Prime, Lieferung am nächsten Tag :-)

Eine Vorahnung gab es allerdings: Hatte sich wirklich jemand die Mühe gemacht die Karte in den Ursprungszustand zurück zu versetzen? Es waren keine Daten drauf, der Zugang funktionierte auch noch nach Standard - aber der Wizard startet nur einmalig am Anfang. Der genau kam nicht...

Was passiert eigentlich wenn man sich verkonfiguriert hat? Die Frage stellte ich mir nach kurzer Zeit, nachdem auf Grund meines Fehlers die Karte nicht mehr zugänglich war. Ok, kurze Suche im Netz ergab: einfach Firmware neu drauf flashen. Sollte ja kein Problem sein ...

War es aber: Nach ca. 10 oder mehr Versuchen, die natürlich einiges an Zeit kurz vor Weihnachten fressen, machte ich die erlösende Modifikation meiner "Versuchsreihe". Und die will ich hier teilen vielleicht als Einziger im Netz? :-)
Der Flash Vorgang ist interactiv und vor allem davon gesteuert, dass man mehrfach die SD Karte herausziehen und wieder einstecken muss. Ganz am Ende kam dann immer die Fehlermeldung: "Update nicht erfolgreich" - und keiner hatte eine Idee im lieben Internet ...

Lösung

Die SD Karte muss im (mitgelieferten) Reader stecken, und da stecken bleiben! Mann muss den USB Reader samt SD Karte ein- und ausstecken!

Am Ende habe ich die Karte trotzdem zurück geschickt, da ich mich von meinem Projekt verabschiedet habe.

Donnerstag, 18. Dezember 2014

Fhem auf der Fritzbox

Edit Juli 2017
Mittlerweile ist auf der Fritzbox kein sinnvoller Betrieb eines zusätzlichen Systems mehr möglich und ich möchte mich auch ausdrücklich aus Sicherheitsbedenken dagegen aussprechen.

Fhem auf der Fritzbox ist entsprechend der neuen Security Policy von AVM nicht mehr so einfach zu betreiben. Für mich steht der exklusive Betrieb von fhem auf der Fritzbox nicht im Vordergrund, die einfache Anwesenheitserkennung per Wlan (Android Geräte) ist aber schon interessant. Deshalb betreibe ich auf der FB eine zweite Instanz von Fhem, die Haupt Instanz läuft auf einem RaspberryPI.

Mit FHEM2FHEM sind beide gekoppelt, fhem auf der Fritzbox kümmert sich nur um Anwesenheit.
Um Modifikation auf der Fritzbox minimal zu halten wird lediglich das fhem Image auf der Fritzbox installiert. Der Start von Fhem auf der Fritzbox erfolgt über Telnet, damit alles fehlertolerant läuft, wird Fhem auf der Fritzbox vom Fhem auf dem raspberryPi überwacht und automatisch gestartet. Die Fritzbox kann also ohne weiteres jederzeit neu gestartet werden. Die Idee und Grundlage für meine Beschreibung stammt von hier, diese Seite hat mir viel geholfen. Dort wird allerdings gezeigt wie die Anwesenheitserkennung auf die Fritzbox ausgelagert wird. Damals war es noch möglich Fhem auf der Fritzbox durch Modifikation der debug.cfg automatisch zu starten.

Damit man automatisch über Telnet remote etwas auf der Fritzbox ausführen kann, wird expect benötigt. Expect ermöglicht die Automatisierung von Telnet Befehlen. Auf der Fritzbox wird aber nur minimal installiert, ein Firmware Update der Fritzbox ist jederzeit möglich.

Einrichtung Schritt für Schritt
Zunächst mal etwas Vorbereitung auf Systemebene

Auf der Fritzbox

  • telnet aktivieren - das geht mit #96*7* wählen
  • fhem image installieren, hier steht wie es geht

Auf dem RaspberryPi

  • telnet client installieren
  • expect installieren

 sudo apt-get install telnet
  sudo apt-get install expect
  • bash script erzeugen /home/pi/StartFhemOnFritz.sh
 sudo nano /home/pi/StartFhemOnFritz.sh


 #!/usr/bin/expect

  spawn telnet fritz.box
  expect "password:"
  send "******\r"
  expect "#"
  send "cd /var/media/ftp/fhem\r"
  expect "#"
  send "./startfhemAsRoot\r"
  expect eof

Berechtigen zur Ausführung

 chmod +x scriptname

Jetzt kann per script fhem remote auf der Fritzbox gestartet werden. Das sollte man jetzt vom raspberryPi aus mal ausprobieren. Auf dem läuft ja Fhem schon, also in der Komandozeile von fhem eintippen:

 { system("/home/pi/StartFhemOnFritz.sh") }

Anschließend sollte Fhem unter http://fritz.box:8083 erreichbar sein. Beachte: Fhem läuft auf der Fritzbox mit root Rechten!

Die weitere Einrichtung erfolgt unter Fhem. Auf der Fritzbox muss nichts weiter eingerichtet werden. Alle folgenden Fhem Definitionen werden auf dem raspberryPi ausgeführt.

Zunächst mal wird auch für die Anwesenheitserkennung die FHEM2FHEM Kopplung vorbereitet

 define Remoteserver FHEM2FHEM 192.168.178.1:7072 LOG:.*

Der Status dieses Moduls wird später verwendet um zu überprüfen ob Fhem auf der Fritzbox läuft oder nicht.
Die grundlegende  Kontrolle übernimmt das Presence Modul von Fhem, vorher brauchen wir noch einen dummy

 define Server dummy
 define ServerPing PRESENCE lan-ping 192.168.178.1

Jetzt brauchen wir noch eine Erkennung um den Zustand "Fritzbox" ist neu gestartet zu erkennen. Das übernehmen zwei watchdogs.

 define wd_ServerPingoff watchdog ServerPing:absent 00:00:05 SAME set Server off;; trigger wd_ServerPingoff
 define wd_ServerPingon watchdog ServerPing:present 00:00:05 SAME set Server on; setstate wd_ServerPingoff defined

Um letztlich zu überprüfen ob die Fritzbox neu gestartet wurde, wird das DOIF Modul verwendet. Das definierte Modul wartet eine Minute bis zum Start von Fhem über Telnet auf der Fritzbox.

 define di_FritzOn DOIF ([Server] eq "on" and [Remoteserver] eq "disconnected") ({ system("/home/pi/StartFhemOnFritz.sh") })
 attr di_FritzOn wait 60

Ob ich hier eine effiziente und optimale Variante gefunden habe, weiß ich nicht. Auf alle Fälle läuft das alles wie erwartet. Die Fritzbox wurde immer mal neu gestartet. Das Fritzbox OS wurde zwischenzeitlich aktualisiert auf die Version 6.23.

Die Anwesenheitserkennung funktioniert reibungslos.

Montag, 15. Dezember 2014

Raspberry Grundeinrichtung

Mein erster Artikel hier im Blog ist mittlerweile obsolete. Es ist ein echtes Problem mit Blog Artikeln: sie altern relativ schnell und werden leicht sinnlos.
Zur Installation halte diesen Artikel aktuell. Dort steht auch die aktuelle Raspberry Grundeinrichtung.

Eine gute und kompakte Anleitung zur Installation eines RaspberryPi und fhem (auch mein Zielszenario) findet man hier: http://www.meintechblog.de/
Überhaupt eine der guten Seiten für alle Beginner, hier ist auch immer das beschrieben was in die Wiki's und Command Referenzen nie reingekommen ist, weil es zu trivial ist :-)
Hier steht nochmal was genau für mich gepasst hat.

Aktuelles Raspbian Image herunterladen. Das gibt es auf der aktuellen RaspberryPi Seite.
Mit dem Tool "USB Image Tool" das Image auf die SD Karte schreiben. Der immer empfohlene win32diskimager funktioniert übrigens bei mir an verschiedenen Rechnern, SD Kartenlesern nicht. Die SD Karte wird gar nicht angezeigt, keine Ahnung warum.
SD Karte einstecken, Netzkabel anschließen, Stromversorgung anschließen - der Raspberry PI startet.
Nach einer kurzen Startphase, ist der Raspberry erreichbar: Name raspberrypi
Mit putty kann die Basiskonfiguration durchgeführt werden, eine Monitor oder Tastatur ist nicht notwendig.
Die Basiskonfiguration startet am Monitor direkt, per putty müssen wir sie manuell starten

sudo raspi-config

Folgende Konfigurationsschritte sind grundlegend für ein deutsches System notwendig:
1 Expand Filesystem
3 Boot ins Terminal Desktop oder grafischer Desktop
4 Language 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
   - die Tastatur wird offenbar seit neuestem  automatisch eingestellt...
Unter Advanced Options kann noch der Hostname geändert werden, vor allem wenn man mehrere Raspis hat.
Das ist das Minimum damit überhaupt was geht!
Passwort ändern ist natürlich eine gute Idee :-)

Danach System auf den aktuellen Stand bringen:

sudo apt-get update
sudo apt-get upgrade
sudo rpi-update

eventuell noch aufräumen

sudo apt-get clean

Wenn man ein etwas älteres Image hat, kann man auch

sudo apt-get dist-upgrade 

machen. Das läuft aber unter Umständen ne ganze Weile. Ist eine gute Idee für ein schon länger laufendes System, bei Neuinstallation ist es besser das aktuelle Image herunter zu laden.