Pearl Display als Dockstar-gesteuerter Bilderrahmen

Bild der Dockstar mit laufender Slideshow

Nachdem wir nun lcd4linux das Image Widget ja erfolgreich eingetrichtert haben und mein zweites Display auch was zu tun möchte, will ich daraus eine kleine Slideshow machen. Natürlich kann der kleine DPF das schon, aber er hängt eh am USB, dann kann die Dockstar das auch gleich steuern.

Erstmal die Dokumentation des Widget_Image von lcd4linux hier lesen. Um das Ziel zu erreichen gibt es prinzipiell 2 Wege.

Voraussetzung ist immer ein Ordner voller 320×240(!) PNG(!!) Bilder.

Weg 1: Das Image Widget von lcd4linux kann auf Dateiänderungen reagieren, wir erzeugen nun ein Skript (Python?) und dieses Skript sucht zufällig eine Datei aus dem Bilderordner und kopiert sie immer an die gleiche Stelle. Diese Datei, die immer wieder überschrieben werden soll, nehmen wir als Bild in unserer lcd4linux.conf und setzen reload=1 und update=5000 (alle 5 sek. wird also geprüft ob sich was geändert hat). Danach erzeugen wir einen Cronjob, der das Skript alle 30 Sekunden ausführt und damit die Bilddatei alle 30 Sekunden aktualisiert mit einem zufälligen Bild.

Weg 2: Wir wählen die Python Funktion von lcd4linux, was für uns 2 Nachteile bedeutet erstmal: Erstens müssen wir uns im PYTHONPATH rumschlagen oder das Skript in einen Ordner, in dem Python es direkt findet, kopieren. Zweitens: Wir müssen lcd4linux mit dem python flag neu kompilieren. Dafür sparen wir uns aber cron und hässliches kopieren alle 30 Sekunden.

Was nehmen wir nur? Natürlich Weg 2.

Ich gehe davon aus, dass ihr Python usw. alles installiert habt. Wenn nicht, googelt einfach danach.

Schritt 1) Kompilieren lcd4linux

Zuerst installieren wir libpython2.6:

sudo apt-get install libpython2.6

Nun kompilieren wir lcd4linux genau gleich wie in meinem anderen Artikel, nur bauen wir die configure Zeile in build-dpf-lcd4linux.sh wie folgt um:

./configure --with-drivers='DPF' --with-plugins='all,!dbus,!mpris_dbus' --with-python

Danach ganz normal wie dort geschrieben weiter machen.

Ich hab hier (md5:771b71903f6b67d07d258b87c2e579cf) auch mein python-enabled lcd4linux hochgeladen, falls jemand nicht so auf kompilieren steht.

Jetzt wählen wir 2 Ordner, einer mit Bildern und einer, in dem das Skript liegt. Wir nehmen für die Bilder /home/user/pics und fürs Skript /home/user.

Danach öffnen wir als Root die Datei /etc/profile und fügen ganz unten folgende Zeilen hinzu:

PYTHONPATH="/home/user/"
export PYTHONPATH

Das ist ganz wichtig, damit root unseren Home Ordner auch für Pythonskripte durchsucht. Damit das klappt, rebooten wir nun einmal die Dockstar.

Jetzt erstellen wir die Datei /home/user/slideshow.py und kopieren folgendes hinein:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import random

img_folder="/home/user/pics" # Anpassen, Ordner mit Pics darin
                             # AM ENDE KEIN /
walker = os.walk(img_folder,True,None)
pics = [] # leer lassen

def give_random_pic(self):
        for i in walker:
                if len(i[2]) > 0:
                        for j in i[2]:
                                if j.split(".")[-1] == "png": # Pruefe ob die Endung .png ist
                                        pics.append(i[0]+"/"+j)
        rn = random.randrange(0,len(pics),1)
        return pics[rn]

Danach noch folgende Befehle ausführen:

sudo chown root:root slideshow.py
sudo chmod 700 slideshow.py

Was fehlt ist die passende /etc/lcd4linux.conf:

Display dpf {
    Driver     'DPF'
    Port       'usb0'
    Font       '6x8'
    Foreground 'ffffff'
    Background '000000'
    Basecolor  '000066'
}
Widget FIRST {
    class 'Text'
    expression 'www.Geekparadise.de'
    width 54
    align 'L'
    update 0
    Background 'ffffff'
    Foreground  '000000'
}

Widget IMAGE {
    class    'Image'
    file     python::exec('slideshow', 'give_random_pic', '')
    update   30000
    reload   1
    visible  1
    inverted 0
}

Display 'DPF'

Layout Dockstar{
    Row01.Col01  'FIRST'

    Layer 2 {
	X1.Y1 'IMAGE'
    }

}

Layout 'Dockstar'

Einmal lcd4linux neugestartet und schwupps ist euere Slideshow fertig. Toll oder?

Achja, das python Skript prüft nur ziemlich rudimentär ob es png Dateien sind .. selber schuld wer jpegs mit Endung .png reinkopiert…

Am Schluss – wie immer – :
Warnung: Dabei kann man seinen digitalen Bilderrahmen durchaus unbrauchbar machen. Ich übernehme keine Verantwortung für gebrickte Digitale Bilderrahmen oder sonstige Schäden die durch diese Anleitung verursacht werden. Jeder muss selbst wissen was er tut.

Comments (2)

  1. 19:37, August 9, 2011Josh  / Reply

    Hallo Andreas!

    Wie hast Du das mit der udev Regel für das zweite Display an der Dockstar geregelt. Ich habe 2 Displays und möchte per udev Regel verschiedene .conf Files nutzen. Das Problem ist, die beiden zu unterscheiden. Eine iSerial gibt es ja nicht und die anderen Daten sind auch gleich. Ich hatte mit udevadm
    den Key ATTRS{urbnum}==”xxxxx” gefunden, jedoch ändert sich dieser Wert nach jedem umstecken.

    Hast Du da eine Idee?

    greetz Josh

  2. 02:20, September 17, 2011Cougarten  / Reply

    Hey hey,
    meinst du das taugt auch als quick’n dirty bildschirm mirror? Also mit irgendwas screencapturen und ein PNG immer wieder überschreiben.
    Vor allem die Frage wie viel FPS man so rausbekommen kann und ob man besser mit oder ohne Python bastelt.
    naja so mein LCD dann mal ankommtkann ich auch selbst ein wenig rumprobieren

Leave a Reply

Allowed Tags - You may use these HTML tags and attributes in your comment.

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Pingbacks (0)

› No pingbacks yet.