Sonntag, 25. Oktober 2015

FHEM Statusdisplay mittels Digitaler Bilderrahmen (Motorola LS1000W)

Das Ergebnis vorweg



Die Idee dahinter

FHEM bietet heute vielerlei Möglichkeiten. Dazu gehört auch die Anzeige von Informationen "auf einen Blick" mit dem Dashboard. Wiederum dafür gibt es viele (Hilfs-)Module, die die Optik schön abrunden und hilfreiche Features mit sich bringen (z.B. Kalendereinträge anzeigen, Wettervorhersage mit Icons...)
Es galt nur noch alle Infos auf den digitalen Bilderrahmen zu bringen.



Benötigte Geräte und Materialien
  • RaspberryPi/BananaPi mit Debian, Apache2-Webserver und PHP es ist nicht erforderlich einen X-Server zu verwenden - diese Anleitung eignet sich (nur) für sog. "Headless"-Systeme.
  • Digitaler Bilderrahmen mit WLAN-Fähigkeit und Möglichkeit einen RSS-Feed zu lesen (In meinem Beispiel handelt es sich um einen Motorola LS1000W, den es vor geraumer Zeit bei Reichelt für etwa 85 EUR im Angebot gab. Die Anleitung sollte sich jedoch mit einigen Modifikationen leicht auf einen anderen WLAN-fähigen Bilderrahmen adaptieren lassen). Meine Wahl fiel auf den Motorola durch den im Internet zu findenen Hack von my-fuzzy-logic. Diesen Teil davon verwende ich ebenfalls hier im Beitrag.
  • FHEM-Installation mit konfiguriertem Dashboard
Funktionsweise
Da der digitale Bilderrahmen natürlich ein Anzeigegerät für Bilder ist, muss man einen Weg finden dynamische Inhalte (wie Websites o.ä.) in ein Bildformat (hier JPEG) zu bringen. Ich habe das durch einen simplen Screenshot der betreffenden Website (das Dashboard von FHEM) erreicht. Dafür habe ich ein PHP-Skript geschrieben, das anschließend via "Cron-Job" (Linux zeitgesteuertes Ausführen) alle fünf Minuten automatisch gestartet wird.

PHP-Skipt

 <?php  
 $filename="dashboard".date('j-m-y-h-i').".jpg";               //Erstellung des Dateinamens  
                                                               //Hier: dashboard2015-10-25-12-00.jpg  
 if (glob('/var/www/dashboard*'))                              //Prüfen, ob bereits Grafiken des Dashboards in /var/www/ befinden, wenn ja alle vorhandenen löschen  
 {                                                             //damit der Speicher nicht überläuft  
      $command = "rm /var/www/dashboard*";  
      exec($command, $output, $ret);  
      if ($ret)  
      {  
             echo "error deleting old file(s)\n";  
             die;  
      }  
 }  

 //Erstellung eines neuen Screenshots der FHEM-Dashboard-Seite  
 //Falls die FHEM-Seite mit einem Passwort-Attribut geschützt ist:  
 //Beim Zugriff darauf achten, dass bei der URL die passenden Parameter für <fhemuser> und <fhempass> gewählt werden 

 $command = "xvfb-run cutycapt --url=http://<fhemuser>:<fhempass>@127.0.0.1:8083/fhem/dashboard/MyDashboard --out=/var/www/".$filename;  
 exec($command, $output, $ret);  
 if ($ret) {  
   echo "error fetching screen dump\n";  
   die;  
 }  

 //"myfeed.rss"-Datei bearbeiten, damit der Bilderrahmen die Aktualisierung der Screenshotdatei bemerkt   
 //Die Adresse unter "<media:content url=" ist der Ort, an den der Apache-Webserver die Anfragen des Bildderrahmens weiterleitet

 $myfile = fopen("/var/www/myfeed.rss", "w") or die("Unable to open file!");  
 $txt = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>  
 <rss>  
 <channel>  
 <ttl>1</ttl>  
 <item>  
 <media:content url=\"http://192.168.1.254/".$filename."\" type=\"image/jpeg\" /> 
 </item>  
 </channel>  
 </rss>";  
 fwrite($myfile,$txt);  
 fclose($myfile); 
 
 //Berechtigung für das Lesen des zuvor erstellten Screenshots setzen 
 
 $command = "chmod 777 /var/www/".$filename;  
 exec($command, $output, $ret);  
 if ($ret)  
 {  
     echo "error chmodding file(s)\n";  
      die;  
 }  
 echo "Screendump completed\n";  
 ?>  

Diese Datei muss dann unter einem geeigneten Namen abgespeichert werden. In meinem Fall habe ich sie im Home-Ordner gespeichert "/home/ajendry/web2jpg/web2jpg.php".

Führt man das Skript nun z.B. alle fünf Minuten mittels Cron-Job als "root" aus, so erhält man einen Screenshot und eine (neue) myfeed.rss Datei im Ordner "/var/www/", welcher in meinem Fall dem Apache-Home-Ordner entspricht.

Cron-Job erstellen

Mittels CLI-Befehl

 crontab -e  

kann man die Tabelle der Cron-Jobs bearbeiten. Erweitert man diese um bzw. erstellt man in diese Tabelle folgende Zeile, wird das Skript alle 5 Minuten ausgeführt:

 0,5,10,15,20,25,30,35,40,45,50,55 * * * * sudo php /home/ajendry/web2jpg/web2jpg.php  

Vorbereitungen für den Bilderrahmen (Motorola LS1000W)

1. Einfach Anleitung von my-fuzzy-logic befolgen.

Tipp: Falls ihr wegen einer Fritzbox oder eines Providerabhängig gewählten Routers keine Möglichkeit habt, eine DNS-Umleitung für "rss.framechannel.de" zu erstellen, so verwendet bei der Verbindung mit dem WLAN eures Heimnetzes einen alternativen DNS-Server. Dabei wählt ihr einfach die IP-Adresse eures RaspberryPis oder BananaPis. Dort könnt ihr dann den BIND9-DNS-Dienst installieren und eine Weiterleitung der Namensauflösung von rss.framechannel.de festlegen.

Freitag, 3. April 2015

Selbstbau Belichtungsmaschine

Idee

Um den Kostenintensiven Kauf von Belichtungsmaschinen zu vermeiden, habe ich, wie viele vor mir eine Belichtungsmaschine im Selbstbau aus einem ausrangierten Scanner hergestellt.
Der Bau sellbst liegt schon eine Weile zurück, aber ich jetzt schaffe ich es endlich, diesen zu Dokumentieren. Sicherlich gibt es hochwertigere Bauten, aber für meinen Zweck reicht es.

Da es sich hierbei um experiemente mit Netzspannung handelt (230V) - Nachmachen auf eigene Gefahr!

Material
  • 3-4 Energiesparlampen (etwa 10W!!, warum? Siehe "Schritt für Schritt"-Anleitung)
  • 3-4 UV-Röhren
  • 6-8 Halterungen für UV-Röhren (TL5/T5)
  • Kabel zur Verbindung
  • Einen ausrangierten Scanner. Sehr wichtig: Das Glas sollte noch heile sein ;-)
  • Heißkleber
  • 230V-Buchse (ich habe eine recyclete PC-Netzteil-Kaltgeräte-Buchse mit zwei Löchern zum festschrauben genommen)
  • Alufolie
  • Dünne Pappe, z.B. Schreibblockrücken
  • Doppelseitiges Klebeband
Aufbau

Schritt für Schritt

1. Zuerst habe ich die Energiesparlampen um ihre elektrischen Starter erleichert. Es ist wichtig, dass die Energiesparlampen eine etwa genauso große Wattzahl haben, wie die UV-Röhren, da die Starter für diese Belastung ausgelegt sind. Nimmt man zu kleine oder zu große kann es zu Schäden an Röhre, Starter oder beidem kommen!

 

2. Anschließend habe ich den Scanner von all seinem alten Innenleben befreit und die "Reflektionsfläche" in Form der Pappe angepasst.

Wichtig ist es, dass Ihr an einer Seite, meist da, wo die alte Elektronik des Scanners auch gesessen hat, etwas platz lasst für die Starter und die Buchse. Was man hier auch schlecht sieht: Die Pappe sollte so groß sein, dass sie am Rand hochgeklappt werden kann und so groß sein, dass die Sockel für die Röhren darunter passen. Schaut Euch zum Vergleich das Bild später im Text an ("3. UV-Röhren...").

 Anschließend habe ich die angepasste Pappe mit simplem Bastelkleber bestrichen.

 Dann die Alufolie zugeschnitten und die Pappe daraufgelegt und festgedrückt.

Es mag nicht sonderlich schön aussehen mit den ganzen Falten, allerdings wird so auch das Licht der UV-Lampen schön gebrochen und in alle Richtungen verteilt.

3. UV-Röhren fixieren
Dazu habe ich einfach eine Röhre in ihre Halterung geklipst und angehalten. Hier könnt ihr dann vielleicht auch gleich schon sehen, ob ihr drei oder vier UV-Röhren verwenden wollt.

Die Sockel selbst habe ich mit Heißkleber fixiert. Ich hatte zunächst Bauschmerzen mit der eventuellen Hitzeentwicklung, aber die UV-Röhren werden i.d.R. im Nutzungszeitraum nicht so warm/heiß, dass dies zu einem Problem wird. Vor dem Fixieren natürlich die Kabel dran.



Anschließend noch mit ein paar Streifen doppelseitigem Klebeband den Reflektor befestigen.

4. Anschlussbuchse
Buchse reinsetzen und ggf. Festschrauben.

5. E-Starter
Die Starter festkleben (das gute ist, dass die meisten Heißkleber nicht leiten, sodass man die Starter einfach unten festkleben kann. Zur Sicherheit aber vorher testen, bzw. auf Verpackungshinweise achten).


So sollte dann die fertige Verkabelung aussehen.

...und so das fertige Gerät. Zum Schluss noch den Deckel drauf und dann kann es losgehen! Erfahrungsgemäß wird am besten belichtet, wenn die Platine in der Mitte über der Röhre liegt. Ich konnte es bisher nur an kleinen Platinen (max. 100x100mm) testen - allerdings sind selbst SMD-Layouts sehr gut geworden!