Nun, um das zu realisieren habe ich schon vor längerer Zeit einen Scanner gekauft. Fujitsu fi-4120C. Altes Modell, aber immerhin ein echter Dokumentenscanner, mit Duplex und automatischem Einzelblatteinzug. Eigentlich wollte ich den mit einem Raspberry ins Netz bringen, kürzlich ist aber bei einer anderen Bastelei ein TP-Link TL-MR3020 abgefallen. Den kriegt man gebraucht schon unter 20 Euro, und in Kombination mit der freien Firmware OpenWRT ist das echt interessantes Spielzeug — das sogar Pakete enthält die meinen Scanner befeuern können.
Leider ist der Router so klein dass mit einer Standard-Installation von OpenWRT kein Platz mehr für meine Zwecke ist. Und einfach Pakete deinstallieren geht nicht, die vorinstallierten wird man nicht los. Es sei denn man baut ein eigenes Image-File…
Glücklicherweise ist das mit dem Image Generator kein Problem. In dem Paket ist alles wichtige vorcompiliert enthalten. Das stellt man sich geeignet zusammen, pflegt bei Bedarf ein paar eigene Dateien ein und fertig ist die Laube. In meinem Fall habe ich folgende Dateien angelegt, alle in einem Unterordner files
unter dem entpackten OpenWRT-Paket:
files/etc/resolv.conf
undfiles/etc/config/network
— Konfiguration für mein Netzfiles/etc/config/system
— Hostnamen einstellenfiles/etc/fstab
— ein Laufwerk von meinem Server mountenfiles/etc/hotplug.d/button/buttons
— ruft das Scan-Skript auffiles/root/scan.sh
— das eigentliche Scan-Skriptfiles/etc/zabbix_agentd.conf
— Überwachung mit Zabbix (soviel Platz war noch frei )
Das ist alles keine Raketentechnik. Zentral sind aber die beiden Dateien die mit dem Scanner zu tun haben (hätte ich auch in einer Datei machen können, finde ich so aber übersichtlicher). Zum einen ist das files/etc/hotplug.d/button/buttons
, das wird vom Hotplug-Daemon gestartet sobald der Button auf dem Router gedrückt wird:
1 2 3 4 5 6 |
#!/bin/sh SCAN=/root/scan.sh if [ $ACTION == "pressed" ]; then logger "Button pressed, calling $SCAN" $SCAN fi |
Und zum anderen das eigentliche Scan-Skript files/root/scan.sh
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/bin/sh MOUNTPOINT=/mnt TEMPDIRECTORY=$MOUNTPOINT/temp OUTDIRECTORY=$MOUNTPOINT/in.ocr DATE=$(date +%Y%m%d-%H%M%S) logger "preparing to scan page to $TEMPDIRECTORY/$DATE" if [ ! -d $TEMPDIRECTORY ]; then logger "mounting $MOUNTPOINT" mount $MOUNTPOINT fi if [ ! -d $TEMPDIRECTORY ]; then logger "FATAL: target dir doesn't exist: $TEMPDIRECTORY" exit 1 fi scanimage --format=tiff --source "ADF Duplex" --resolution=300 \ --batch=$TEMPDIRECTORY/$DATE-scan-%03d.tif mv $TEMPDIRECTORY/$DATE-* $OUTDIRECTORY |
Sind diese Dateien angelegt ist man nur noch einen Make-Aufruf von der eigenen Firmware entfernt:
1 2 3 |
make image PROFILE=TLMR3020 FILES=files/ PACKAGES="nfs-utils kmod-fs-nfs \ portmap sane-frontends sane-fujitsu zabbix-agentd -firewall -iptables -ip6tables \ -kmod-ath9k -kmod-ip6tables -kmod-ipv6 -odhcp6c -ppp -ppp-mod-pppoe" |
Nach kurzer Bauzeit lag in meinem Fall unter bin/ar71xx
eine Datei die ich vermutlich auch direkt aus der originalen Firmware hätte flashen können. Da ich schon OpenWRT und somit eine Shell auf dem Router hatte konnte ich das dort machen:
1 |
sysupgrade -n openwrt-15.05.1-ar71xx-generic-tl-mr3020-v1-squashfs-factory.bin |
Die Installation beendet sich mit einem Reboot. Per Telnet komme ich direkt auf das Gerät, da es sich ja direkt in mein Netz verbinden kann (kabelgebunden, ich habe eine Steckdose an der Stelle wo der Scanner stehen soll). Und mit scanimage -L
sehe ich direkt den Scanner: device `fujitsu:fi-4120Cdj:44135' is a FUJITSU fi-4120Cdj scanner
. Und scannen kann ich direkt auf Knopfdruck aus dem Skript heraus.
Ich habe mir auch schon Skripte gebastelt die die Scans weiter verarbeiten. Leere Seiten rausfischen, alles gerade rücken, Texte erkennen, komprimieren und Sandwich-PDF erstellen. So habe ich jetzt einen Haufen elektronisch durchsuchbarer Dokumente. Was mir noch fehlt ist eine nette Lösung um die dann auch zu archivieren. Mit Suchfunktion und so. Bis jetzt nutze ich Alfresco, aber für zu Hause ist das zu groß und zu umständlich. Für Tipps bin ich offen!
Das einzige was ich jetzt noch zu meinem Glück fehlt ist eine Möglichkeit, herauszufinden in welchem Zustand sich der Scanner befindet. Der hat eine Taste und eine Anzeige ‚Function‘, damit könnte ich dann die weitere Verarbeitung des Scans steuern… mal sehen, vielleicht finde ich dafür auch noch was. Mit scanimage -A
sehe ich dass das irgendwie implementiert ist, aber ich habe noch nicht herausgefunden wie ich es benutzen kann.