Bilderrahmen mit Kindle Paperwhite


Smart Kindle Picture Frame

Der Kindle von Amazon hat, wie viele ähnliche E-Book Reader, ein sogenanntes E-Ink Display. Diese Displayart hat die nette Eigenschaft, dass nur zur Aktualisierung Strom benötigt wird und der angezeigte Inhalt dann stromlos für einen sehr langen Zeitraum erhalten bleibt. Wer mehr wissen will kann sich hier (Wikipedia) schlau machen.

Das Display kann Bilder im JPG oder PNG Format anzeigen. Dabei müssen einige Vorraussetzungen erfüllt sein. Das Bild muss je nach Readerversion eine entsprechende Auflösung aufweisen und es muss in Graustufen konvertiert sein. Ich habe die Erfahrung gemacht, dass es entgegen anderslautender Aussagen nicht auf 16 Farben beschränkt sein muss abhängig von der benutzten Programmbibliothek.

Ein Bilderrahmen für die Großeltern

Die Idee ist es, den Großeltern einen digitalen Bilderrahmen zu schenken dessen Inhalt sich in regelmäßigen Abständen aktualisiert. Hierzu weckt die Software des Bilderrahmens diesen auf, greift auf einen FTPS-Server zu, holt sich ein gespeichertes Bild, konvertiert dieses ins richtige Format, stellt es auf dem Bildschirm dar und schaltet den den Bilderrahmen wieder in den Stand-By Modus um Strom zu sparen.

Dadurch bekommen die Großeltern regelmäßig ein schönes Bild ihrer Kinder und Enkel jenseits von Whatsapp & Co und das auch noch in einem schönen Rahmen.

Das Erscheinungsbild des Bilderrahmens steht dem eines mit echtem Foto in fast nichts nach. Manchmal wünscht man sich ein etwas besseres Reflektionsverhalten also die Fähigkeit einfallendes Licht zurückzuwerfen. Ein weißes Blatt Papier liegt hier bei ca 75%-80%. Der Kindle Paperwhite liegt mit seinem E-Ink Bildschirm nur bei ca. 40%, aber das ist ok.

Der JailBreake

Was ist das?

Um den Kindle in einen digitalen Bilderrahmen zu verwandeln, bietet es sich an den vorhandenen Bildschirmschoner zu nutzen. Leider kann dieser im Originalzustand nur die von Amazon hinterlegten Bilder darstellen. Möchte man hier etwas eigenes, dann muss der Kindle gehackt werden. In Fachkreisen nennt man das dann JailBreake.

Um den Kindle hat sich in den Jahren seit seiner Markteinführung eine große Gemeinschaft gebildet.

Link zum Mobileread Forum

Ziel war es den Kindle zu personalisieren und eigene Software laufen zu lassen, handelt es sich doch um ein Linux Gerät. Anfangs war der JailBreake noch über Softwarelösungen durchführbar. Leider schläft Amazon nicht auf dem Baum und hat deshalb fiese Sperren in seine Firmware eingebaut.

Mein Kindle hatte schon beim Gebrauchtkauf die aktuellste Firmwareversion 12.1.2. An einen JailBreake per Software war nicht im Traum zu denken. Nun haben findige Leute einen Weg gefunden über die serielle Schnittstelle auf dem Mainboard den Kindle zu hacken.

Anleitung zum Serial JailBreake gibt es hier!

Ich habe es getan und es ist beiweitem nicht so schlimm wie es sich aufs Erste anhört. Die folgenden Bilder sind von einem Paperwhite 2 (anderes Projekt) der sich aber nur geringfügig von einem Paperwhite unterscheided. Die Vorgehensweise ist die gleiche.

Zuersteinmal muss der Kindle geöffnet werden. Das lässt sich mit einem nicht allzu scharfem Küchenmesser bewerkstelligen. Der Frontrahmen ist nur geklebt und lässt sich leicht entfernen. Im unteren Bereich wo der Schriftzug ist bitte etwas vorsichtig sein, da sind die LEDs für den Bildschirm der Hall Sensor für das Cover. Weiterhin kann man die Bildschirmschutzfolie ablösen wenn man mit dem Messer zu weit hineintaucht.

open a kindle

Danach liegen das Gehäuse und das Mainboard vor uns.

IMG_5475
entfernter Abdeckrahmen

Jetzt werden alle Schrauben gelöst. Beim Paperwhite 2 3G sind es 10 Stück, vermutlich wegen der 3G Antenne. Beim Paperwhite sind es 11 Stück

IMG_5476
Lösen der Befestigungsschrauben
IMG_5475
Position der Befestigungsschrauben
IMG_5477
Kindle ohne Gehäuse, Ansicht von oben
IMG_5478
Kindle ohne Gehäuse, Ansicht von unten

Das Modem und die Sim Karte habe ich ausgebaut, weil ich mir dadurch einen geringeren Stromverbrauch verspreche. Kann auch nur Einbildung sein. Den Antennenaschluss lässt man einfach baumeln oder fixiert ihn mit Klebeband.

IMG_5483
3G Modem und SIM Karte ausgebaut

So, Akku raus und los gehts. Der Akku ist nur mit drei Schrauben befestigt.

IMG_5480
Akku ausgebaut

Die serielle Schnittstelle ist schnell gefunden.

Kindle serial jailebrake

Jetzt gehts ans Löten. Wer sich das nicht zutraut, es gibt ganz gute Methoden zum lötfreien Kontaktieren. (lötfreies Kontaktieren) Man sollte bevor man anfängt zu Löten auf alle Fälle den Akku und ausbauen. Sicher ist sicher.

IMG_5504
serielle Schnittstelle mit angelöteten Kabeln

Der gelbe Draht geht zu TX am Adapter, der orange Draht zu RX und der grüne zu Masse (siehe unten). Den USB-RS232 Adapter habe ich bei Amazon gekauft. Hier muss man unbedingt darauf achten, dass er sich auf 1,8V stellen lässt oder von haus aus ein 1,8V Typ ist. Sonst kann man sich von seinem Kindle verabschieden!!!

Hier der Link zum USB-RS232 Adapter!

USB-RS232_Adapter
Serieller Adapter (Quelle: Amazon)
Adapterbeschaltung
Verbindung zum seriellen USB Adapter

Wenn man die Kabel noch etwas mit Klebeband fixiert, kann das nicht schaden.

Ich werde jetzt hier nicht den ganzen Vorgang des Jailbreakes beschreiben. Das habe andere schon sehr detailliert getan. Siehe hier!

Das Kindle root Passwort bekommt man übrigens sehr komfortabel mit dem Kindle Password Tool heraus.

Was muss auf dem Kindle installiert werden:

  • Jailbreake
  • Jailbreake Hotfix
  • KUAL
  • KUAL helper um ab Firmware 5.6.x Softwarepakete installieren zu können,
  • Usbnet für den Zugriff auf den Kindle über WLAN
  • Python 
  • Screen Saver Hack für den Bildschirmschoner und etwas mehr, dazu später

Alle benötigen Softwarepakete bekommt man hier.

Die Installationsanweisungen findet man in den jewiligen Readme Dateien der Softwarepakete. Bei USBnet bitte unbedingt die Readme Datei lesen, hier kann viel schief gehen. Um genau zu sein, kann man sich, wenn´s dumm läuft, den Zugriff auf den Kindle komplett verbauen.

Eine sehr gute Anleitung für USBnet findet man hier.

Was muss auf dem PC installiert werden:

  • PuTTy (Link) um mit dem Kindle in Kontakt zu treten
  • Notepad++ (Link) um Dateianpassungen vornehmen zu können, Windows Editor funktioniert nich mit Linux Dateien, da er die Linux Line Endings entfernt,
  • FTP Programm z.B. WinSCP (Link) um Dateien auf den Kindle zu transferieren. Das geht auch über USB ist aber mit WinSCP über WLAN viel komfortabler.
  • RNDIS Treiber um den Kindle als Netzwerkkarte zu benutzen (Link)

Da ich auch zu der Gruppe Menschen gehöre, die ungern Anleitungen liest, habe ich sehr viel Zeit mit dem Versuch verbracht, mich über WLAN am Kindle anzumelden. Leider wurde mir der Zugang verwehrt da ich angeblich nicht über das richtige Passwort verfügte. In der README.txt von USBnet steht eindeutig drin, dass man sich zuerst über Telnet anmelden soll.

Einstellungen für Telnet in PuTTY
Einstellungen in PuTTY für Telnet

WLAN muss am Kindle ausgeschaltet sein und der Kindle über USB im Modus USBNet enabled (kein MassStorage) sein. Die IP-Adresse ist die, welche in der config Datei im Ordner usbnet/ect, festgelegt ist.

USBnet_Config

Telnet verlangt kein Passwort aber der Zugang über WLAN mit PuTTY. Also auf alle Fälle das Passwort als root mit

  • mntroot rw    (Lese- und Schreibrechte auf Root System vergeben)
  • passwd

ändern. Hat man das erledigt setzt man das Root system wieder auf read only.

  • mntroot ro

Danach sollte die Anmeldung über WLAN funktionieren. Die Einstellungen für PuTTy findet man in der Serial Jailbreake Beschreibung unter Punkt 3. Set up PuTTy)

Der Rahmen

Der Rahmen ist für ein Foto der Größe 13×18. Der Ausschnitt im Passepartout hat die Maße 118mm x 88mm. Damit hat man eine ungefähre Randabdeckung des Kindle Bildschirmes von umlaufend 1mm.

Den Kindle selbst habe ich mit doppelseitigem Klebeband auf die Rückseite des Passepartouts geklebt. Im Rahmen wurde ein Loch eingearbeitet um an die USB Buchse des Kindles zu kommen. Somit lässt sich der Bilderrahmen auch einigermaßen komfortabel aufladen.

Die Aufbereitung der Bilder für den Screen Saver Hack funktioniert am Besten mit Gimp. Das ist kostenlos und ein sehr guter Photoshop Ersatz. Die Anforderungen an ein Screen Saver Bild sind folgende:

  • Auflösung muss der des Bildschirmes entsprechen sonst sieht das nachher sehr wild aus. Der Paperwhite und der Paperwhite 2 haben 758 x 1024.
  • Das Bild sollte in Graustufen mit 8bit Auflösung konvertiert werden und als .png gespeichert werden
  • Manch Leute fordern noch eine Reduzierung auf 16 Graustufen (Indiziert) was ich aber nicht bestätigen kann. Es funktioniert auch mit mehr Graustufen.
  • Das Bild muss 90° gegen den Uhrzeigersin gedreht werden, damit es auf dem Bilderrahmen im Querformat richtig dargestellt wird es sei denn man will einen Bilderrahmen im Hochkantformat haben.

Die Bilder müssen eine fortlaufende Nummerierung haben. Die Bilder einfach im Ordner:

/mnt/us/linkss/screensavers/

abspeichern und den Kindle neu starten. Der Screen Savers Hack benennt angeblich alle Bilder nach seinen Vorstellungen um. Ich habe das nie probiert. Ich habe alle Bilde im Vornherein schon in fortlaufender Nomenklatur benannt.

  • bg00_medium_001
  • bg00_medium_002
  •  
  •  

Wozu dient der Kühlschrankmagnet

Kindle_001
Bilderrahmen Version 1

Da ich den Kindle als Bilderrahmen benutzen möchte und nicht nur als Bildschirmschoner auf einem normal genutzten Kindle muss eine Möglichkeit her, die Bilder auf einfache Weise zu wechseln ohne auf einen Knopf zu drücken ect.

Für den Kindle gibt es eine Hülle, welche ihn beim Zuklappen in den Ruhezustand versetzt. Dafür hat der Kindle am unteren Rand in der Leiste wo sich auch die LEDs für die Bildschirmbeleuchtung befinden einen Hall-Sensor und die Hülle hat einen engesetzten Magneten. Schließt man nun die Hülle wird der Hall Sensor aktiviert und der Kindle geht in den Standby.

Hall_Sensor
Position des Hall-Sensors

Diese Funktion habe ich mir zunutze gemacht und schalte nun die einzelnen Bilder mit dem Kühlschrankmagnet, der links unten in der Ecke vom Bilderrahmen liegt, durch. Schiebt man ihn kurz zur Seite startet der Kindle und schiebt man den Magnet zurück, dan wird das nächste Bild als Bildschirmschoner geladen.

Der Akku hält übrigens beim einmaligen Wechsel pro Tag ziemlich lange. Ich will nicht übertreiben, aber es sollten mindestens 200 Tage wenn nicht mehr sein, da man auch nicht jeden Tag wechselt.

Einen automatischen Wechsel kann man auch realiseren und genau darum geht es im Folgenden.


 

Der Bilderrahmen der alles alleine macht und fast ein Jahr lang durchhält!

Smart Kindle Picture Frame
fertiger Bilderrahmen mit geladenem Bild

Das Ziel war es von Anfang an einen digitalen Bilderrahmen zu bauen, der nicht permanent am Netzteil hängen muss und wenn möglich mindestens ein halbes Jahr oder mehr ohne aufladen auskommt. Aus diesem Grund ist die Entscheidung ja auch auf ein E-Ink Display gefallen.

Im Mobilereader Forum gibt es ein Script mit dem Namen Onlinescreensaver. Dieses Script wird einfach auf den Kindle kopiert und läd dann automatisch nach einem selbstdefiniertem Zeitraum ein PNG-Bild von einer Web-Adresse.

Leider war es mir nicht möglich dieses Script zum Laufen zu bekommen.

Ich bin dann nach einigen Recherchen auf die Seite von Nico Hartung gestoßen. Er benutzt den Kindle um ein mit Python erstelltes Bild mit Daten von einer Wetterstation als Wetterdisplay anzuzeigen. Das Bild holt sich der Kindle von einem eigens eingerichteten Server wo die Daten der Wetterstation gesammelt und in ein Bild gepackt werden.

Auf Basis von Nicos Script habe ich ein eigenes Script geschrieben, welches den Kindle  einmal am Tag aufweckt, auf einen FTP-Server zugreift, ein dort hinterlegtes Bild herunterläd, es mit Imagemagick (später mehr) auf dem Kindle bearbeitet um den Kindle Konventionen zu entsprechen, dieses dann auf dem Bildschirm darstellt, einen Logfile an den FTPS Srever sendet und den Kindle dann wieder schlafen schickt. Als Aufwachzeit habe ich mich für Mitternacht entschieden. Da schlafen die meisten Leute und wenn man morgens aufsteht, kann man sich über ein neues Bild freuen.

Das Script läuft permanet durch, weckt den Kindle auf, aktualisiert den Bildschirm und schickt den Kindle wieder schlafen. Möchte man eine Aktualisierung erzwingen, kann man den Kindle duch drücken der Taste aufwecken oder einen Magneten and den HALL-Sensor (siehe oben) halten. Das hat den gleichen Effekt, als würde er um Mitternacht selbstständig aufwachen. Wenn der Kindle schläft, befindet sich das Programm im RAM. Hier wird der Schlafmodus Suspend to RAM (ACPI Modus S3) genutzt. Alle ungenutzen

Hier das Script:

#!/bin/sh

###########################################################
### Programmer: Nico Hartung <nicohartung1@googlemail.com>#
### chnaged for Picture Frame Mario Deuse <mdauso@web.de> #
###########################################################

###########################################################
## Install                                                #
## copy onlinepictureframe folder to mnt/us/extensions/   #
## activate or deaktivate as usual in KUAL                #
###########################################################

#VERSION
# - 20200307_V010
# - due to it´s speed on paperwhite 2 the script ends before midnight
#   120 seconds added to make shure the script sets the wakeup time to next day

# - 20200218_V009
# - status bar deactivated

# - 20200217_V008
# - imagemagick optimized for better dithering and cropping of pictures to fill screen even
#   if the aspect ration doesn`t fit to screen aspect ratio
#   to prevent from bars on upper and lower side of the picture

# - 20200212_V007
# - checking for new script on server, copy to script direction and reboot
# - Hostname added for picture frame location

# - 20200212_V006
# - V005 not used
# - DynDNS from MyFritz used from now on
# - tmp folder removed from script,
#   downloaded pictures will now be stored inside bin folder,

# - 20200207_V004
# - usage of FTPS instead of FTP from now on

# - 20200206_V003
# - V002 not used
# - sleep 4 min after STR when battery level is low, when connecting charger the Kindle wakes up but the battery
# - will not be over minimum level and the script would go into STR again

############################################################
# Variables
NAME=pictureframe
NAMEOLD=pictureframe_old
SCRIPTDIR="/mnt/us/extensions/onlinepictureframe/bin/"
TEMPDIR="/mnt/us/documents/"
LOG="${SCRIPTDIR}/${NAME}.log"
LOGOLD="${SCRIPTDIR}/${NAMEOLD}.log"


#FTPS Server the pictures are located on
USER="xxx"                            # FTPS user
PASSWORT="xxx"                        # FTPS password
PORT="xxx"                            # port of FTPS-Server
FTPADRESSE="xxx"                      # DynDNS adress of FTPS server

#Where will the picture frame be located
#HOSTNAME="xxx"
HOSTNAME="xxx"
#HOSTNAME="xxx"

ROUTERIP="192.168.178.1"              # Standard Gateway AVM Fritz!Box
#ROUTERIP="192.168.2.1"               # Standard Gateway Telekom Speedport

#!!!Be sure to have this folder structure on FTPS-Sever or change the script here!!!
ORT="/Bilderrahmen/Bilder/${HOSTNAME}/abc.JPG"              # location of picture on server
FTPLOG="/Bilderrahmen/Logfiles/${HOSTNAME}/"                # location of Logfile on server
NEWSCRIPT="/Bilderrahmen/Newscript/${HOSTNAME}/${NAME}.sh"  # new script on server

#!!!The picture on FTPS-server must have the right name and ending: "abc.JPG" !!!
TEMPFILEJPG="${SCRIPTDIR}/abc.jpg"
TEMPFILEPNG="${SCRIPTDIR}/abc.png"

LOGCOUNTER=0                                                # number of Log entries
LOGCOUNTERALL=1                                             # number of Log´s

NET="wlan0"

LIMG="${SCRIPTDIR}"
LIMGBATT="${SCRIPTDIR}/pictureframebattery.png"
LIMGERR="${SCRIPTDIR}/pictureframeerror_image.png"
LIMGERRWLAN="${SCRIPTDIR}/pictureframeerror_wlan.png"
LIMGWEISS="${SCRIPTDIR}/weiss.png"
LIMGNEWSCRIPT="${SCRIPTDIR}/newscript.png"


SUSPENDFORS=600                                             # short sleeping time in case of ERROR
BATTERYALERT=10                                             # from this Battery Level on to lower values a info will be displayed
BATTERYLOW=6                                                # from this Battery Level on to lower values the picture frame will go into STR an show a "Please Charge Picture"
BATTERYSLEEP=432000                                         # 5 days sleep time when Battery Level is equal or below "BATTERYLOW"

###################################################################################
### Functions
kill_kindle() {
  initctl stop framework    > /dev/null 2>&1                # "powerd_test -p" doesnt work, other command found
  initctl stop cmd          > /dev/null 2>&1
  initctl stop phd          > /dev/null 2>&1
  initctl stop volumd       > /dev/null 2>&1
  initctl stop tmd          > /dev/null 2>&1
  initctl stop webreader    > /dev/null 2>&1
  killall lipc-wait-event   > /dev/null 2>&1
}

customize_kindle() {
  mkdir /mnt/us/update.bin.tmp.partial                      # prevent from Amazon updates
  touch /mnt/us/WIFI_NO_NET_PROBE                           # do not perform a WLAN test
}

#return true if keyword not found
wait_wlan() {
  return `lipc-get-prop com.lab126.wifid cmState | grep CONNECTED | wc -l`
}

###################################################################################
### Script

### stop Kindle pocesses
kill_kindle

### customize Kindle
customize_kindle

###################################################################################
### Loop

while true; do

 echo "." >> ${LOG} 2>&1
 echo "." >> ${LOG} 2>&1
 echo "========================================================" >> ${LOG} 2>&1
 
 echo "`date '+%Y-%m-%d_%H:%M:%S'` Logbucheintrag Nr. ${LOGCOUNTER} von Logbuch Nr. ${LOGCOUNTERALL}" >> ${LOG} 2>&1
 
 echo "========================================================" >> ${LOG} 2>&1

### activate CPU Powersave
 echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
 echo "`date '+%H:%M:%S'` CPU runtergetaktet." >> ${LOG} 2>&1

### switch off screen saver
 lipc-set-prop com.lab126.powerd preventScreenSaver 1 >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Bildschirmschoner ausgeschaltet." >> ${LOG} 2>&1
 
### switch off the top status bar
 lipc-set-prop com.lab126.pillow disableEnablePillow disable
 
 #lipc-set-prop com.lab126.pillow interrogatePillow '{"pillowId": "default_status_bar", "function": "nativeBridge.hideMe();"}'
 #PILLOW_SOFT_DISABLED="yes"
 echo "`date '+%H:%M:%S'` Statusleiste deaktiviert." >> ${LOG} 2>&1

### check battery level and maybe start STR
  CHECKBATTERY=`gasgauge-info -s`
if [ ${CHECKBATTERY} -le ${BATTERYLOW} ]; then
 echo "`date '+%H:%M:%S'`  Akkuladung bei 5%, statisches Batteriezustandsbild gesetzt!" >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'`  Logfile an Sever gesendet." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'`  STR, bitte Akku aufladen!" >> ${LOG} 2>&1
 eips -f -g "${LIMGBATT}"
 /mnt/us/usbnet/bin/curl -T ${LOG} -k --ftp-ssl --tlsv1 --ftp-ssl-reqd --ftp-pasv ftp://${USER}:${PASSWORT}@${FTPADRESSE}:${PORT}/${FTPLOG}           # send Logfile to server
 rtcwake -d /dev/rtc1 -m no -s ${BATTERYSLEEP}                                                                                                        # picture frame will sleep for X days or wakes up in case of charging.
 echo "mem" > /sys/power/state
 sleep 300                                                                                                                                            # waiting time when charging until battery level is higher than "BATTERYLOW" otherwise it will fall into sleep again
else
 echo "`date '+%H:%M:%S'` Verbleibende Akkuladung: `gasgauge-info -c` "  >> ${LOG} 2>&1
fi

### activate WLAN
 lipc-set-prop com.lab126.wifid enable 1 >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` WLAN aktivieren. " >> ${LOG} 2>&1

 WLANNOTCONNECTED=0
 WLANCOUNTER=0
 SHORTSUSPEND=0

### wait for WLAN
while wait_wlan; do
  if [ ${WLANCOUNTER} -gt 30 ]; then
 echo "`date '+%H:%M:%S'` Kein bekanntes WLAN verfügbar." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` DEBUG ifconfig > `ifconfig ${NET}`" >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` DEBUG cmState > `lipc-get-prop com.lab126.wifid cmState`" >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` DEBUG signalStrength > `lipc-get-prop com.lab126.wifid signalStrength`" >> ${LOG} 2>&1
 eips -f -g "${LIMGERRWLAN}"
 WLANNOTCONNECTED=1
 SHORTSUSPEND=1                                                                                                                                       #short sleeptime will be activated 
 break
  fi
 let WLANCOUNTER=WLANCOUNTER+1
 echo "`date '+%H:%M:%S'` | ${HOSTNAME} | Warte auf WLAN (Versuch ${WLANCOUNTER})." >> ${LOG} 2>&1
 sleep 1
done


### connected to WLAN?
if [ ${WLANNOTCONNECTED} -eq 0 ]; then
 echo "`date '+%H:%M:%S'` Mit WLAN verbunden." >> ${LOG} 2>&1

### lost Standard Gateway if WLAN`s not available
 GATEWAY=`ip route | grep default | grep ${NET} | awk '{print $3}'`
 echo "`date '+%H:%M:%S'` ausgelesener Standard-Gateway:  ${GATEWAY}." >> ${LOG} 2>&1
  if [ -z "${GATEWAY}" ]; then
 route add default gw ${ROUTERIP} >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Standard-Gateway nach Sleep nicht mehr vorhanden." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Standard-Gateway wird neu auf ${ROUTERIP} gesetzt." >> ${LOG} 2>&1
  fi

### Check new Script
    /mnt/us/usbnet/bin/curl --silent --time-cond ${SCRIPTDIR}/${NAME}.sh --output ${TEMPDIR}/${NAME}.sh -k --ftp-ssl --tlsv1 --ftp-ssl-reqd --ftp-pasv ftp://${USER}:${PASSWORT}@${FTPADRESSE}:${PORT}/${NEWSCRIPT}
 #-r File Name  (File exists and is readable) 
  if [ -r ${TEMPDIR}/${NAME}.sh ]; then
  cp ${TEMPDIR}/${NAME}.sh ${SCRIPTDIR}/${NAME}.sh
  rm ${TEMPDIR}/${NAME}.sh
  echo "`date '+%H:%M:%S'` Skript aktualisiert, Neustart durchführen." >> ${LOG} 2>&1
  chmod 777 ${SCRIPTDIR}/${NAME}.sh
  eips -f -g ${LIMGNEWSCRIPT}
  sleep 5
  reboot
  exit
 else
 echo "`date '+%H:%M:%S'` Kein neues Skript auf dem Server gefunden." >> ${LOG} 2>&1
  fi
 

### download picture and send to screen

### download using cURL
 /mnt/us/usbnet/bin/curl -k --ftp-ssl --tlsv1 --ftp-ssl-reqd --ftp-pasv ftp://${USER}:${PASSWORT}@${FTPADRESSE}:${PORT}/${ORT} -o ${TEMPFILEJPG}

### Is there any picture?
 #-r File Name  (File exists and is readable) 
  if [ -r ${TEMPFILEJPG} ]; then
 echo "`date '+%H:%M:%S'` Bild auf Server gefunden und heruntergeladen." >> ${LOG} 2>&1

### edit picture with Imagemagick to fulfill eips demands
 /mnt/us/linkss/bin/convert ${TEMPFILEJPG} -auto-orient -filter LanczosSharp -brightness-contrast 3x15 -resize x758 -gravity center -crop 1024x758+0+0 +repage -rotate 270 -colorspace Gray -dither FloydSteinberg -remap /mnt/us/linkss/etc/kindle_colors.gif -quality 75 -define png:color-type=0 -define png:bit-depth=8 ${TEMPFILEPNG}

 echo "`date '+%H:%M:%S'` Bild mit Imagemagick bearbeitet." >> ${LOG} 2>&1

### send picture to screen
 eips -f -g ${LIMGWEISS}           #cover the screen in white to prevent from shadows
 sleep 1                           #let´s sleep a second, e-ink´s are not the fastest
 eips -f -g ${TEMPFILEPNG}         #load picture to screen
 echo "`date '+%H:%M:%S'` Bildschirm aktualisiert." >> ${LOG} 2>&1
  else 
 eips -f -g ${LIMGWEISS}           #cover the screen in white to prevent from shadows
 sleep 1                           #let´s sleep a second, e-ink´s are not the fastest
 eips -f -g ${LIMGERR}             #show error picture
 echo "`date '+%H:%M:%S'` Kein Bild gefunden, Error-Bild gesetzt." >> ${LOG} 2>&1
 SHORTSUSPEND=1                    #short sleep time will be activated
  fi

### delete temp. files
 rm ${TEMPFILEJPG}
 rm ${TEMPFILEPNG}
 echo "`date '+%H:%M:%S'` Temporaere Dateien entfernt." >> ${LOG} 2>&1
 
if [ ${CHECKBATTERY} -le ${BATTERYALERT} ]; then
 eips 2 2 -h " Akku bei 10 Prozent, bitte aufladen "
fi

fi

### calculate and set WAKEUPTIMER
if [ ${SHORTSUSPEND} -eq 1 ]; then
 TODAY=$(date +%s)
 WAKEUPTIME=$(( ${TODAY} + ${SUSPENDFORS} ))
 echo "." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Ein Fehler ist aufgetreten, neuer Versuch am: `date -d @${WAKEUPTIME} '+%Y-%m-%d_%H:%M:%S'`" >> ${LOG} 2>&1
 echo "." >> ${LOG} 2>&1
 rtcwake -d /dev/rtc1 -m no -s ${SUSPENDFORS}
else
 TOMORROW=$(date +%s -d 23:59)
 TODAY=$(date +%s)
 SUSPENDFORL=$((${TOMORROW} - ${TODAY} + 120)) #120 seconds added to make shure it´s past midnight
 WAKEUPTIME=$((${TODAY} + ${SUSPENDFORL}))
 echo "." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Alles OK, Bilderrahmen wird am: `date -d @${WAKEUPTIME} '+%Y-%m-%d_%H:%M:%S'` neu gestartet" >> ${LOG} 2>&1
 echo "." >> ${LOG} 2>&1
 rtcwake -d /dev/rtc1 -m no -s ${SUSPENDFORL}

fi

### at 365 Log entries the Log will be saved as "pictureframe_old.log" on FTP server, the Log on Kindle will be deleted and a new Log will be created with number +1
 let LOGCOUNTER=LOGCOUNTER+1
if [ ${LOGCOUNTER} -gt 365 ]; then
 cp ${LOG} ${LOGOLD}
 echo "`date '+%H:%M:%S'` Alter Logfile wird auf dem Sever gesichert und vom Bilderrahmen geloescht." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Ruhezustand wird gestartet." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Bye Bye!" >> ${LOG} 2>&1
 /mnt/us/usbnet/bin/curl -T ${LOGOLD} -k --ftp-ssl --tlsv1 --ftp-ssl-reqd --ftp-pasv ftp://${USER}:${PASSWORT}@${FTPADRESSE}:${PORT}/${FTPLOG}
 rm ${LOGOLD} && rm ${LOG}
 LOGCOUNTER=0
 let LOGCOUNTERALL=LOGCOUNTERALL+1
else
### send Logfile to FTP Server
 echo "`date '+%H:%M:%S'` Aktueller Logfile wird an den Sever gesendet." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Ruhezustand wird gestartet." >> ${LOG} 2>&1
 echo "`date '+%H:%M:%S'` Bye Bye!" >> ${LOG} 2>&1
 /mnt/us/usbnet/bin/curl -T ${LOG} -k --ftp-ssl --tlsv1 --ftp-ssl-reqd --ftp-pasv ftp://${USER}:${PASSWORT}@${FTPADRESSE}:${PORT}/${FTPLOG}
fi

### Go into STR
 echo "mem" > /sys/power/state

done

Erklärungen zum Script:

# Variables
NAME=pictureframe
NAMEOLD=pictureframe_old
SCRIPTDIR="/mnt/us/extensions/onlinepictureframe/bin/"
TEMPDIR="/mnt/us/documents/"
LOG="${SCRIPTDIR}/${NAME}.log"
LOGOLD="${SCRIPTDIR}/${NAMEOLD}.log"

SCRIPTDIR und TEMPDIR:

Der Teil  /mnt/us/extensions des Ordners SCRIPTDIR ist vorhanden wenn nach dem Jailbreake KUAL installiert wurde. Die Erweiterung onlinepictureframe/bin/ ist Bestandteil des Scripts und wird beim Kopieren des Scriptes in den „extensions“ Ordner von KUAL erzeugt. Der Ordner TEMPDIR ist bereits auf dem Kindle vorhanden.

FTPS-Server

#FTPS Server the pictures are located on
USER="xxx" 						# FTPS user
PASSWORT="xxx" 						# FTPS password
PORT="xx" 						# port of FTPS-Server
FTPADRESSE="xxx" 					# DynDNS adress of FTPS server

#Where will the picture frame be located
#HOSTNAME="xxx"
HOSTNAME="xxx"

ROUTERIP="192.168.178.1" 	 	# Standard Gateway AVM Fritz!Box
#ROUTERIP="192.168.2.1" 		# Standard Gateway Telekom Speedport

USER, PASSWORT, PORT und FTPADRESSE

Hier werden die Zugangsdaten, die Serveradresse und der Port für den FTPS Server eingetragen. In meinem Falle ist es die heimische Fritz!Box mit freigegebem Datenspeicher. Hierbei ist es wichtig, dass eine dynamische DNS Adresse verwendet wird. Da der Internetprovider die Verbindung einmal am Tag kappt und neu aufbaut, ändert sich die IP-Adresse des Routers ständig und er ist im Netz nicht mehr zu finden. AVM bietet mit der Fritz!Box und dem Dienst MyFritz bereits eine DynDNS an. Man kann sich aber auch bei vielen Anbietern einen DynDNS Dienst einrichten. Google ist auch hier Dein Freund.

HOSTNAME

Den Hostnamen brauche ich, da ich zwei Bilderrahmen an unterschiedlichen Orten in Betrieb habe. Die beiden Rahmen werden mit unterschiedlichen Bildern gefüttert und müssen somit auch auf verschiedene Ordner auf dem FTPS Server zugreifen.

ROUTERIP

Der Standardgateway (ROUTERIP) wird angegeben, weil der Kindle diesen manchmal aus ungeklärtem Grund vergisst und dann nicht mehr ins Internet kommt. Sollte das der Fall sein, dann wird der hier angegebene Standardgateway je nach Router neu gesetzt.

Ordnerstruktur auf dem FTPS- Server

#!!!Be shure to have this folder structure on FTPS-Sever or change the script here!!!

ORT="/Bilderrahmen/Bilder/${HOSTNAME}/abc.JPG"              # location of picture on server
FTPLOG="/Bilderrahmen/Logfiles/${HOSTNAME}/"                # location of Logfile on server
NEWSCRIPT="/Bilderrahmen/Newscript/${HOSTNAME}/${NAME}.sh"  # new script on server

#!!!The picture on FTPS-server must have the right name and ending: "abc.JPG" !!!

TEMPFILEJPG="${SCRIPTDIR}/abc.jpg"
TEMPFILEPNG="${SCRIPTDIR}/abc.png"

Das Script verlangt eine bestimmte Ordnerstruktur auf dem Server. Entweder man hält sich daran oder man schreibt das Script um. Das kann jeder machen wie er will. Bei mir gibt es zwei Bilderrahmen an unterschiedlichen Orten in der Republik. Dies wird mit dem Hostnamen gesteuert.

  • ORT: Wo liegt das Bild auf dem FTPS-Server
  • FTPLOG: Wo soll der Logfile abgespeichert werden.
  • NEWSCRIPT: Hier wird nach einem aktuellerem als dem, auf dem Kindle laufenden, Script geschaut. Sofern vorhanden und neueren Datums, wird dieses heruntergeladen und im Scriptordner unter dem Scriptnamen abgespeichert, danach wird ein Neustart durchgeführt und das neue Script geladen.

Bisher ist es mir nicht gelungen mittels Wildcards (*.JPG , abc.* oder *.*) einfach irgendeine Datei herunterzuladen. Kann sein, dass das Linux auf dem Kindle keine Wildcards unterstützt. Aus diesem Grund muss das herunterzuladende Bild abc.JPG heißen. Warum? Das hab ich mir so ausgedacht.

Tempfile

  • TEMPFILEJPG: Diese Angabe dient dazu, damit cURL weiß, wo es die heruntergeladene Dateie hinspeichern soll.
  • TEMPFILEPNG: Diese Angabe dient dazu, damit Imagemagick (später mehr zu cURL und Imagemagick) weiß, wo es das bearbeitete Bild hinspeichern soll.
  • Beide Dateien sowohl TEMPFILEJPG als auch TEMPFILEPNG werden nach erfolgreicher Aktualisierung des Bildschirmes gelöscht.

Zeiten

SUSPENDFORS=600                                    # short sleeping time in case of ERROR
BATTERYALERT=10                                    # from this Battery Level on to lower values a info will be displayed
BATTERYLOW=6                                       # from this Battery Level on to lower values the picture frame will go into STR an show a "Please Charge Picture"
BATTERYSLEEP=432000                                # 5 days sleep time when Battery Level is equal or below "BATTERYLOW"
  • SUSPENDFORS: Kürzere Schlafzeit im Falle eines Fehlers. Falls das Script kein Bild auf dem Server findet oder kein WLAN erreichbar ist geht der Kindle nur für 10 Minuten schlafen, statt bis Mitternacht zu warten, und versucht es dann nochmal.
  • BATTERYALERT: Gibt an, ab welchem Akkuladezustand ein Schriftzug auf dem Bildschirm erscheint, mit der Aufforderung den Bilderrahmen aufzladen, da der Akku nur noch 10% hat.
  • BATTERYLOW: Ab 6% Akkuladung geht der Bilderrahmen in den Ruhezustand und wacht erst nach BATTERYSLEEP ( in diesem Falle 5 Tagen ) oder beim Anstöpseln des Ladegerätes wieder auf. Wird nicht aufgeladen geht der Bilderrahmen nach 5 Tagen wieder in den Ruhezustand.

Weitere Programmschritte

Wenn das Script startet werden zuerst einige nicht benötigte Prozesse auf dem Kindle gestoppt um Energie zu sparen.

Es wird ein Ordner angelegt, der Amazon vorgaugelt, es wird gerade ein update geladen. Damit soll verhindert werden, dass Amazon über automatische Updates eine neue Firmware aufspielt und der Jailbreake dadurch zerstört wird.

### Functions

kill_kindle() {
  initctl stop framework    > /dev/null 2>&1                # "powerd_test -p" doesnt work, other command found
  initctl stop cmd          > /dev/null 2>&1
  initctl stop phd          > /dev/null 2>&1
  initctl stop volumd       > /dev/null 2>&1
  initctl stop tmd          > /dev/null 2>&1
  initctl stop webreader    > /dev/null 2>&1
  killall lipc-wait-event   > /dev/null 2>&1
}

customize_kindle() {
  mkdir /mnt/us/update.bin.tmp.partial                      # prevent from Amazon updates
  touch /mnt/us/WIFI_NO_NET_PROBE                           # do not perform a WLAN test

Im weiteren Verlauf wird die CPU Frequenz reduziert, der Bildschirmschoner deaktiviert und die obere Menueleiste incl. Statusleiste (Akku, WLAN, Uhrzeit…) ausgeschaltet. Manchmal hatte ich den Effekt, dass nach erfolgreicher Aktualisierung des Bildschirmes plötzlich noch die obere Statusleiste geladen wird und im Bild verbleibt. Das wird damit verhindert.

### activate CPU Powersave
echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "`date '+%H:%M:%S'` CPU runtergetaktet." >> ${LOG} 2>&1

### switch off screen saver
lipc-set-prop com.lab126.powerd preventScreenSaver 1 >> ${LOG} 2>&1
echo "`date '+%H:%M:%S'` Bildschirmschoner ausgeschaltet." >> ${LOG} 2>&1

### switch off the top status bar
lipc-set-prop com.lab126.pillow disableEnablePillow disable
echo "`date '+%H:%M:%S'` Statusleiste deaktiviert." >> ${LOG} 2>&1

Download der Bilder über FTPS

Anfangs habe ich die Bilder über FTP mit wget vom Server geladen. Das war mir aber zu unsicher, wobei unsicher relativ ist, und ich habe mich für FTPS entschieden. Mehr gibt die Fritzbox leider nicht her. Nun kann wget aber kein FTPS. Da kommt cURL ins Spiel. cURL kann ziemlich viel, auch FTPS. Die Version von cURL, welche in der Kindle Linux Version mitgeliefert wird ist aber so alt, dass diese kein FTPS unterstützt.

Nach langem Suchen konnten mir die Leute aus dem Mobilereader Forum helfen. Im UsbNet Hack (welches im Rahmen des Jailbreake Prozedere installiert wurde!!!) ist eine neuere version von cURL enthalten. Wenn man im Script auf diesen Ordner referenziert wird diese Version benutzt und dann funktioniert es auch mit FTPS.

Man kann die Funktionalität von cURL recht einfach über den Befehl curl –version (2 Bindestriche!) in der Konsole herausfinden. Im Beispiel unten hab ich das mal schnell im Windows getan. Ja, cURL gibts auch unter Windows.

curl options
### download using cURL
 /mnt/us/usbnet/bin/curl -k --ftp-ssl --tlsv1 --ftp-ssl-reqd --ftp-pasv ftp://${USER}:${PASSWORT}@${FTPADRESSE}:${PORT}/${ORT} -o ${TEMPFILEJPG}

Bearbeitung der Bilder mit Imagemagick

Imagemagick ist ein Befehlszeilen Bildbearbeitungsprogramm und ist im Screen Saver Hack enthalten. Diese Befehlszeile öffnet das heruntergeldene Bild bearbeitet es und speichert es im passenden Format wieder ab.

Vielen Dank an NiLuJe für die hilfreichen Hinweise.

### edit picture with Imagemagick to fulfill eips demands
 /mnt/us/linkss/bin/convert ${TEMPFILEJPG} -auto-orient -filter LanczosSharp -brightness-contrast 0x20 -resize x758 -gravity center -crop 1024x758+0+0 +repage -rotate 270 -colorspace Gray -dither FloydSteinberg -remap /mnt/us/linkss/etc/kindle_colors.gif -quality 75 -define png:color-type=0 -define png:bit-depth=8 ${TEMPFILEPNG}

Ich werde hier nicht auf alle aufgerufenen Funktionen eingehen aber auf die wichtigsten.

  • auto-orient: hier wird geprüft, wie die Orientierung des Bildes bei der Aufnahme war und das Bild dementsprechend ausgerichtet, auch wenn es auf dem Kopf steht.
  • resize x758 -gravity center -crop 1024×758+0+0 +repage: Das Bild wird auf eine Höhe von 758 Pixel geändert ohne Rücksicht auf die Breite. Dann wird das Bild zentriert und auf eine Breite von 1024 Pixel beschnitten. Danach werden mit repage die Offset und Canvas Werte aus dem Header des Bildes entfernt, da diese sonst falsch stehen bleiben würden.
  • Mit -rotate 270 wird das Bild gedreht, da ja der Kindle im Landscape Modus benutzt und sozusagen auf die Seite gelegt wird.
  • colorspace Gray -dither FloydSteinberg: Diese beiden Befehle sorgen dafür, dass das Bild erstens in Graustufen umgewandelt wird und zweitens die Übergänge im Bild mit den verfügbaren 16 Graustufen so bearbeitet werden, dass keine Farbränder entstehen. Extrem würde das ausfallen bei gleichmäßigen Farbübergängen wie zum Beispiel bei Bildern mit bewölktem Himmel oder Nebel. (Beschreibung hier)
Kindle_002
Bild ohne dithering

 

IMG_6449
Bild mit dithering

 

Der Rahmen

Den Bilderrahmen habe ich bei IDEAL-Trend GmbH in Berlin gekauft.

Dieser Rahmen ist perfekt, da er die nötige Tiefe bereitstellt. Somit ist genügend Platz für den Kindle, den USB Anschluss und die Verlängerung für den Taster. Das Passepartout (aussen 18cm x 24cm, innen 8,8cm x 11,8 cm) kann man sich im Netz bei unzähligen Shops anfertigen lassen oder man geht zum örtlichen Rahmenbauer. Der Kindle ist mit doppelseitigem Klebeband von hinten am Passepartout befestigt.

Hier ein Profilschnitt des Rahmens und die Darstellung der verschiedenen Möglichkeiten des Zusammenbaus.  (Quelle: IDEAL Trend GmbH Berlin)

Bilderrahmen_Schnitt

Die Variante welche ich benutze ist hier aber nicht dargestellt. Der Rahmen ist also wirklich sehr flexibel.

IMG_6394
Online-Bilderrahmen Innenansicht
IMG_6395
USB-Verlängerung und Tasterbetätigung
IMG_6397
USB Anschluss und Tasterbetätigung von aussen

Der Holzstab zur Betätigung des Tasters ist hier noch nicht gekürzt und auch noch nicht schwarz eingefärbt. Links davon der in den Rahmen eingelassene USB Anschluss.

IMG_6453
Tasterbetätigung gekürzt und eingefärbt
IMG_6160
USB Verlängerung von DeLOCK

Das USB Kabel oder besser, die USB Verlängerung gibts bei Ebay. Der Knickschutz auf der Steckerseite muss entfernt werden, sondt passt es nicht. (siehe Bild weiter oben)

IMG_6159
so sieht die Tüte aus

 

Wie kommen die Bilder auf den Bilderrahmen

Der einfachste Weg ist es ein Bild per FTPS auf den Server zu übertragen und es hinterher in abc.JPG umzubenennen. Leider hat diese Methode zwei Nachteile. Erstens wird die Bilddatei nicht verkleinert. Das führt zu längerer Laufzeit des Scripts einmal beim Herunterladen des Bildes vom Server und weiterhin beim Umwandeln mit Imagemagick. Zweitens muss man sich nochmals per FTPS auf dem Server anmelden um das Bild umzubenennen. Dieses auf dem Smartphone vorher zu tun führt nur zu noch mehr Arbeitsschritten.

Nach langem Suchen habe ich tatsächlich eine App gefunden, die meine Anforderungen voll erfüllt.

  • FTPS Support,
  • mehrere FTP-Server,
  • Bilder komprimieren,
  • Bilder umbenennen,
  • überschreiben auf Server ohne nachfragen,

Die App PhotoSync gibt es für iOS und Android. (klick ins Bild)

Picturesync

Nachdem man die App installiert hat, kann man aus der Bildergallerie auf Teilen klicken und PhotoSync auswählen, aber zuerst sollte man die App einrichten.

PhotoSync einrichten

Nach dem Start der App klickt man unten rechts auf das kleine Zahnrad und landet im Einstellungsmenue. Hier klickt man auf Konfigurieren und landet im nächsten Menue.

Photosync_005
 

Da es sich beim Server, auf dem die Bilder gesendet werden sollen (Fritz!Box) um einen FTP-Server handelt wählt man hier FTP aus.

Photosync_006

 

Hier sind bereits die beiden Hosts eingerichtet, da es ja auch zwei verschieden Bilderrahmen gibt. In einem jungfräulichen PhotoSync wählt man „Konfiguration hinzufügen…“

 

Photosync_007

 

Photosync_008

Im Reiter „FTP/SFTP Account einrichten“ trägt man die Dyns-Adresse des Servers, den Benutzernamen, das Passwort und den Port ein. Oben wählt man FTPS aus sofern man dieses Protokoll nutzen möchte. Sonst gibt es noch FTP und SFTP.

010

Als Titel gibt man am Besten den Standort des Bilderrahmens ein. Der Zielordner eintspricht dem entsprechenden Ordner auf dem Server.
Unterverzeichnisse sollen nicht erstellt werden.
Vor Übertr. wählen muss aus sein, sonst fragt PhotoSync jedes mal nach, wo das Bild hin soll. Das nervt.
Dateinahmen hat ein extra Menue. Das kommt als nächstes.
Dann kann man noch die Qualität des Uploads einstellen. Damit reduziert PhotoSync sowohl die Bildgröße als auch die Dateigröße. Hier habe ich „Hohe Qualität“ gewählt. Dadurch dauert der Download auf dem Bildschirm nicht solange und Qualitätsprobleme konnte ich nicht feststellen.

Scrollt man weiter nach unten, kann man noch die Qualitätsstufe für den mobilen Upload einstellen.

Photosync_009

Aber der Clou ist der Reiter Dateinamen.

Hier kann man einen eigenen Dateinamen vergeben. PhotoSync benennt die Datei dann selbstständig um und überschreibt die auf dem Server vorhandene Datei ohne nachzufragen wenn man im vorherigen Menue „Überschreiben zulassen“ aktiviert hat.

Der eigen Dateiname muss „abc.JPG“ sein wenn man das Script für den Kindle nicht ändern möchte.

Photosync_011

Der Bilderupload

Der Upload eines Bildes sollte nun denkbar einfach vonstatten gehen. In der Galerie wählt man ein Bild aus und klickt auf Teilen. Danach erscheint folgender Bildschirm.

Photosync_001

Nun wählt man PhotoSync als Übertragungsmedium aus. Dann gehts weiter zu folgendem Menue.

Photosync_002

Hier wählt man FTP aus. Ich habe alle anderen Möglichkeiten ausgeblendet, dann sieht es übersichtlicher aus. Im folgenden Menue muss man noch die FTP-Konfiguration wählen, die man zuvor eingerichtet hat und gelangt im Anschluss ins Sendemenue.

Photosync_007
Photosync_004

Hier muss man nichts weiter tun als zu warten bis der Upload abgeschlossen ist.

Das war´s.

Jetzt kann man am Bilderrahmen den Knopf betätigen und hat in ca. zwei Minuten ein neues Bild, oder man geht schlafen und freut sich auf ein neues Bild welches einem den Morgen versüßt.

IMG_6452
fertiger Bilderrahmen mit geladenem Bild
IMG_6454
Rückseite

Casablanca

Eine Sache noch. Ihr hab Euch sicher gefragt, was das ganze gekostet hat. Hier noch eine kurze Auflistung.

  • gebrauchter Kindle 25€ -50€ + Versand bei Ebay
  • RS232-USB Adapter 10€ + Versand bei Amazon
  • Bilderrahmen 9€ + Versand bei Ideal Trend GmbH Berlin
  • Passepartout 16€ incl. Versand bei AllesRahmen.de
  • USB Verlängerung 3€ + Versand bei Ebay
  • PhotoSync Pro App 5,49€ im App-Store

Viel Spaß beim Nachbauen!

Mario

 

Download „Online Picture Frame“

4.3.2020 Nachtrag

Mittlerweile konnte ich das ursprünglich auf dem Paperwhite entwickelte Script auch auf einem Paperwhite 2 erfolgreich testen. Was mich total überrascht hat, ist die Verarbeitungsgeschwindigkeit auf dem Paperwhite 2.

Ich habe mal die Zeiten aus den Logfiles verglichen. Beide Bilderrahmen haben das gleiche Bild geladen.

Paperwhite

komplettes Script verarbeiten: 1:13 Minuten

Bild mit Imagemagick bearbeiten: 53 Sekunden

Paperwhite 2

komplettes Script verarbeiten: 21 Sekunden

Bild mit Imagemagick bearbeiten: 9 Sekunden

Fals Ihr euch also entscheided den Bilderrahmen nachzubauen, empfehle ich einen Paperwhite 2 zu nehmen. Das sollte die Akkulebensdauer midestens verdoppeln.

Viel Spaß!

Mario

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s