Skip to content

Der RaspberryPi als ePub -> Kindle Gateway

Aktualisiert am 02.08.2017


Um eBooks auf einen Kindle zu bekommen kann man sie via USB übertragen, die meisten werden aber wohl einfach auf der Amazon Webseite einkaufen und die Bücher direkt an den Kindle schicken lassen. Für eigene Dokumente (txt, pdf, eBooks im mobi-Format, doc) hat jeder Kindle eine eigenen E-Mail Adresse über die man Dokumente an ihn schicken kann.

Bücher im ePub-Format kann man z.B. mit Calibre einfach wandeln, Calibre schlägt dies auch automatisch vor sobald man ein solches Buch an einen Kindle schicken will, egal ob via USB oder E-Mail. Da ist Calibre wirklich einfach. Man kann das sogar so weit automatisiseren, dass Calibre Bücher, die in einem bestimmten Verzeichnis abgelegt werden automatisch zur Bibliothek hinzufügt und über weitere Regeln auch automatisch weiter verarbeitet und z.B. an einen Kindle sendet.

RaspberryPiDamit das funktioniert muss Calibre natürlich laufen. Calibre läuft auch auf dem Raspberry Pi und es war sogar eine meiner ersten Ideen überhaupt, es auf meinem Himbeercomputer laufen zu lassen. Das war auch einer der Hauptgründe, dass ich mich auf dem Pi für Arch Linux entschieden habe. Einerseits verwende ich es auch auf meinem PC, vor allem aber war die Version von Calibre in der Standarddistribution Raspbian schon Jahre alt. Bei einer Software, die jeden Freitag aktualisiert wird ist mir das zu alt indecision

Umgesetzt hatte ich das aber bisher nicht. Calibre ist, was eBooks angeht, fast allmächtig und dementsprechend auch ein Schwergewicht auf so einem Rechnerchen wie mein Pi B erster Generation.
Aber letzte Woche hatte ich dringend Bedarf und die Lösung war ganz einfach — man muss sich nur mal ein paar Minuten Zeit nehmen:

Der Bedarf entstand, weil wir für ein verlängertes Wochenende nach Berlin gefahren sind. Und das über meinen Perry Rhodan Donnerstagsurprise!

Die Perry Rhodan Hefte kaufe ich nicht bei Amazon, sondern im Abo bei beam und schicke sie mit Calibre per E-Mail an den Kindle. Gewandelt wird das Heft wie erwähnt automatisch.
Nun war ich also übers Wochenende ohne Zugriff auf den PC und nur dafür einen Laptop mitnehmen fand ich dann auch albern. Also habe ich meine Erinnerung, dass man Calibre auch via Befehlszeile nutzen kann, etwas aufgefrischt und siehe da: mittels

ebook-convert buch.epub buch.mobi

wird ein ePub in ein mobi für den Kindle gewandelt. Mehr brauchte ich im Prinzip gar nicht, das ePub kann ich auch auf dem Smartphone runterladen, per sftp auf den Raspberry kopieren und wandeln. Der Pi braucht geschlagene 20 Minuten für so ein Buch, aber das macht er ja ohne, dass ich dabei zusehe

Aber da geht noch mehr!

Als erstes habe ich den Umwandelprozess in ein kleines Script gepackt, das ein ePub erst in ein mobi wandelt und anschliessend per E-Mail verschickt. Es generiert den Zielnamen automatisch, indem es die Erweiterung austauscht und kontrolliert wegen der langen Dauer, ob das Buch evtl. schon gewandelt wird. Dazu legt es eine leere Datei als Kennzeichen an.
Gewandelte Bücher verschiebt es außerdem in ein erledigt Verzeichnis.

Drumherum habe ich dann noch ein Skript erstellt, das alle 5 Minuten ein bestimmtes Verzeichnis auf neue ePub Bücher kontrolliert. Für jedes Buch wird dann das Konvertierskript aufgerufen. Auch dieses Skript überprüft, ob für das Buch schon eine Konvertierung läuft. Das ist zwar redundant, aber schadet auch nicht.

Nun muss ich die Bücher nur per Smartphone auf den Pi kopieren und den Rest macht er automagisch.

Zu meinem ursprünglichen Plan ist es nur noch ein kleiner Schritt, und der folgt hier:

Die beiden Skripte habe ich absichtlich eher allgemein gehalten. Es ist die Philosophie von UNIX-artigen Systemen, dass es für jede Aufgabe ein dediziertes Tool/Befehl gibt, die man nach Bedarf kombiniert. Ich habe ein Skript, das die Bücher wandelt (und mir zuschickt) und ein Zweites, das ein Verzeichnis überwacht und sich nicht drum kümmert, wie die Bücher darin landen.

Der fehlende Schritt ist die E-Mail Adresse, an die man ePub Dateien schicken kann und die dann automagisch als mobi auf dem Kindle erscheinen.

Also habe ich mir erstmal eine eigene E-Mail Adresse für diesen Zweck eingerichtet. Ich kann mir für meine diversen Domains einfach Adressen einrichten, aber ein Freemailer tut's genauso, Abruf per POP3 reicht.

Die nötigen Programme sollte es im Repository jeder Distribution geben, getreu dem Moto "eine Aufgabe - ein Tool" benötigen wir dafür fetchmail, procmail und uudeview.
fetchmail holt die E-Mail via POP3 ab und übergibt zur Weiterverarbeitung an procmail. procmail kopiert die Mail dann sicherheitshalber erstmal in ein Backup (das werde ich wohl wieder abschalten) und übergibt sie anschließend an uudeview, das einzig und allein epub-Dateianhänge in mein oben angelegtes incoming-Verzeichnis speichert.

Ab dann greifen dann wieder meine beiden Skripte von oben.

Das war es auch schon. Es wirkt vielleicht kompliziert, aber letztlich wird nur für jedes ePub in einem bestimmten Verzeichnis calibre zum wandeln aufgerufen und das Ergebnis per E-Mail verschickt. Das abholen und verarbeiten von E-Mail ist wohl eine der trivialsten Aufgaben von Unixoiden Systemen, fetchmail ist schon Jahrzehnte alt. Das Zusammenspiel des Dreigestirns aus fetchmail, procmail und uudeview ist wirklich der einfachste Teil.

Hier nun endlich mal die Skripte und Konfigurationen:


(02.08.2017) Update: mit dem Umzug auf einen neuen Raspberry Pi 3 habe ich das Script epub2mobi.sh überarbeitet: Es wandelt mehere eBooks im incoming-Verzeichnis nun nacheinander, die Lock-Datei die dafür angelegt wird, wird nach 3 Stunden gelöscht, falls etwas abgestürzt ist. Der Pi 1 benötigte 20 Minuten für ein eBuch, der Pi 3 unter eine Minute. Sollte also passen wink
Ausserdem gibt es nun Statusinformationen via telegram-Messenger. Die Aufrufe habe ich hier aber auskommentiert, über telegram mache ich noch einen gesonderten Artikel, den ich hier dann verlinke.

Da die Blogsoftware gerne auch die Scripte formatieren will gehen teilweise einzelne Zeichen verloren, ich habe sie daher alle in einem Archiv zusammen gepackt: epub2mobi.zip


Meinen Pi hatte ich schon vor ewigen Zeiten so eingerichtet, dass er grundsätzlich E-Mails via Google verschicken kann. Das geht in der /etc/ssmtp/ssmtp.conf:

#!/bin/bash

filename=$(basename "$1")
extension="${filename##*.}"
filename="${filename%.*}"
pathfilename="${1%.*}"

emailadresse=<Kindle-Adresse>@kindle.com
#emailadresse=<Testadresse>

#echo $emailadresse

#echo filename=$filename
#echo extension=$extension
#echo pathfilename=$pathfilename


if [ -f "$pathfilename.mobi" ]; then
        echo "$filename bereits gewandelt, Abbruch" ;
        exit
else
        echo "konvertiere \"$filename.epub\" in mobi" ;
#       /home/rowi/bin/telepot_send.py "konvertiere \"$filename.epub\" in mobi" ;
        ebook-convert "$1" "$pathfilename.mobi" ;
        echo "Konvertierung von \"$filename\" abgeschlossen"
#       /home/rowi/bin/telepot_send.py "Konvertierung von \"$filename.epub\" abgeschlossen"
fi


# Ergebnis an Kindle mailen

mail -a "$pathfilename.mobi" -s "$filename" $emailadresse  < /dev/null
#/home/rowi/bin/telepot_send.py "\"$filename.mobi\" an Kindle versendet"

# Dateien in Ablage verschieben

mv "$1" /home/rowi/doc/ebook/erledigt/
mv "$pathfilename.mobi" /home/rowi/doc/ebook/erledigt/

Das Überwachungsscript convertincomingebook.sh (ja, der Dateiname ist doof) wird alle 5 Minuten per cron aufgerufen und prüft, ob zu ePub Dateien im incoming-Verzeichnis liegen und startet das Konvertierscript epub2mobi.sh. Da die Konvertierung deutlich länger dauert wird eine lock datei .convert angelegt um zu kennzeichnen, dass die Datei gerade gewandelt wird und der auf dem Pi langwierige Prozess nicht doppelt gestartet wird:

#!/bin/bash

echo "START convertincomingebook.sh"
echo `date`

filename=$(basename "$1")
extension="${filename##*.}"
filename="${filename%.*}"
pathfilename="${1%.*}"


#echo argument=$1
#echo filename=$filename
#echo extension=$extension
#echo pathfilename=$pathfilename


if [ -f "$pathfilename.convert" ]; then
    echo "\"$filename\" wird bereits gewandelt, Abbruch" ;
    exit
else
    echo "starte konvertierung von $filename" ;
    touch "$pathfilename.convert" ;
    /home/rowi/bin/epub2mobi.sh "$1" 
    rm "$pathfilename.convert"
fi

echo "ENDE convertincomingebook.sh"

fetchmail habe ich über den Befehl fetchmail -d 180 im Hintergrund gestartet, er prüft dadurch alle 180 Sekunden (drei Minuten), ob neue E-Mail im Postfach sind.
In der .fetchmailrc wird konfiguriert, von welchem E-Mail Konto die Mails abgeholt werden, anschließend werden sie an procmail als Mail Delivery Agent (mda) übergeben:

# mail abholen
poll 
protocol pop3
user '<Benutzername>'
password '<Kennwort>'
# zur weiterverarbeitung an procmail...
mda '/usr/bin/procmail -d %T'

procmail übernimmt die Weiterverarbeitung der E-Mails, momentan lasse ich erst eine Kopie im Verzeichnis mail_backup anlegen (das werde ich demnächst abschalten) und extrahiert mit uudeview alle anhängenden ePub-Dateien in das incoming-Verzeichnis:

:0
*^content-Type:
{
   # Kopie der Mail sichern...
   :0c:
   $HOME/mail_backup

   # .zip attachments ins incoming-Verzeichnis extrahieren
   :0fw
   | uudeview +e .epub -p /home/rowi/doc/ebook/incoming/ -
}

Die Skripte sind wieder eher simpel, ich will damit keinen Preis gewinnen wink Verbesserungsvorschläge werden aber immer gern genommen.

Damit der ganze Prozess überhaupt gestartet wird, lasse ich per cron alle 5 Minuten das incoming-Verzeichnis auf neue ePub Dateien prüfen und rufe dann das "äßere" Konvertierscript convertincomingebook.sh auf:

# epub check
*/5 * * * *  find /home/rowi/doc/ebook/incoming/*.epub -exec /home/rowi/bin/convertincomingebook.sh {} \;  >>  /home/rowi/doc/ebook/convert.log 2>/dev/null

 

Weitere Ideen/Verbesserungen die ich habe:

  • ebook-convert wandelt wirklich nur die Formate, die Plugins von Calibre greifen hier nicht. Um z.B. die Plugins von Apprentice Alf nutzen zu könnenangel muss man die Bücher mit calibredb zur Bibliothek hinzufügen, dabei greifen dann alle Plugins wie gewohnt. Auch wenn man Calibre ganz normal über die Oberfläche benutzt geschieht es in dieser Reihenfolge, die Oberfläche benutzt im Hintergrund die gleichen Programme bzw. Scripte.

  • Um die Bücher nicht nur zu wandeln, sondern auch regulär in der Bibliothek auf dem Pi zu haben — diese könnte man via calibre-server dann auch von überall online im Zugriff haben — müsste man die Bücher also mit calibredb zur Bibliothek hinzufügen und aus der Bibliothek wandeln. Das funktioniert manuell auch, man erhält nach dem Hinzufügen eine Buch-ID und kann über diese den Speicherpfad abfragen. Mit etwas RegEx sollte man den Pfad auch extrahieren und ebook-convert zukommen lassen können. Das gewandelte Buch kann dann wie gehabt verschickt werden und sollte der Vollständigkeit halber dann wieder als weitere Variante der Bibliothek hinzugefügt werden. Auch das geht mit calibredb.
    Im Prinzip kein Problem, aber ein wenig komplexer. Da fehlte mir vor dem Urlaub Zeit und Notwendigkeit. Aber das kommt noch. cheeky

  • Statt der dedizierten E-Mail Adresse könnte man auch eine allgemeine Adresse abfragen und procmail z.B. nur auf ein Stichwort im Betreff reagieren lassen. Das würde die nötige eigene Adresse einsparen. Einen echten Bedarf habe ich da nicht und kostenlose Adressen gibt es ja eh überall. Vielleicht ergänze ich die Zeile im procmail Rezept mal aus langeweile oder um es getan zu haben.

  • Die Ziel E-Mail Adresse ist derzeit hart festgelegt, um es universeller zu machen würde ich sie gern dynamisch haben. Eine Idee ist, die Zieladresse im Betreff zu übergeben. Spätestens falls die Adresse bekannt wird könnte sie aber für Spam und andere unerwünschte E-Mail genutzt werden. Also evtl. feste Namen im Betreff mit hinterlegten Adressen? Da muss ich mal drauf rumdenken.

  • Spannend finde ich auch Telegram für Statusinformationen. Über den BotFather kann man sich beim Telegram-Messenger einfach einen eigenen Bot einrichten, die Skripte könnten auf diesem Wege melden, dass Bücher gefunden wurden und dass die Konvertierung abgeschlossen ist.
    Darüber kann man bestimmt noch viel sinnvollen und sinnlosen Kram machen, da muss ich dringend noch weiter drauf rumdenken laugh

Das war es momentan für mein ePub zu Kindle Konvertierdings auf dem Pi. Hast Du Fragen, Ideen, Verbesserungsvorschläge?

Trackbacks

Netz - Rettung - Recht am : Wellenreiten 07/2017

Vorschau anzeigen
Wer als “Websurfer” metaphorisch auf den Wellen des Netzes reitet, findet dabei zwar keine paradiesischen Inseln, manchmal aber immerhin ganz interessante Lektüre. Im Juli 2017 kann ich u.a. folgende Fundstücke empfehlen und der werten Lesers

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Kommentar schreiben

Textile-Formatierung erlaubt
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Twitter, Identica, Pavatar, Gravatar, Wavatars, Monster ID Autoren-Bilder werden unterstützt.
Wenn Du Deinen Twitter Namen eingibst wird Deine Timeline in Deinem Kommentar verlinkt.
Bewirb einen Deiner letzten Artikel
Dieses Blog erlaubt Dir mit Deinem Kommentar einen Deiner letzten Artikel zu bewerben. Bitte gib Deine Blog URL als Homepage ein, dann wird eine Auswahl erscheinen, in der Du einen Artikel auswählen kannst. (Javascript erforderlich)
Formular-Optionen