Neues Spielzeug: Thermodrucker

Update: das Ding kann mehr als auf der Packung steht :)

Ich konnte einfach nicht widerstehen: Ein Kassenbon-Drucker (celectronic CardStar gkt) auf Ebay für ca. 17€. So ein Schnäppchen konnte ich mir natürlich nicht entgehen lassen.

Was ich damit will, mag sich der ein oder andere vielleicht fragen. Vieles. Meine Twitter Timeline live ausdrucken z.B.

Nachdem mein storygeiler Kommilitone Servaholics sich nicht zurückhalten konnte und schon vor mir berichten musste und mich auch gleich noch verlinkt hat, muss ich ja jetzt mal einen ausführlichen Bericht liefern :)

Erstmal ein paar Details zum Gerät:

Die Idee, mir so ein Ding zuzulegen, hatte ich ja schon lange, aber normalerweise kosten die Dinger ne ganze Menge. Mein Thermodrucker kann halt nur den Basis-ASCII Zeichensatz Der Drucker frisst ziemlich viel, wenn man Dinge nach codepage 437 (MS-DOS Zeichensatz) konvertiert (der Drucker kann nämlich doch Umlaute und einige Zeichen mehr (wenn auch teilweise aufgrund der schlechten Auflösung unleserlich), danke an Marco für den Hinweis), Unicode und vielleicht sogar Bilder  wären aber eigentlich auch nicht schlecht, aber vielleicht lässt sich das Ding ja auch noch ein bisschen modden. Es hängt über einen Parallelport am Rechner. Ein Adapter Parallel-USB wird mitgeliefert, man braucht also keinen prähistorischen PC auszugraben. Eine Rolle Papier war auch dabei.

Was ich auch noch ändern will, ist die bisher externe Stromversorgung. Sollte man auch noch über USB lösen können.

Unter Windows funktioniert das Ding ziemlich einfach als Drucker, indem man es mit dem “Generic Text-Only” Treiber einrichtet. Drucken geht das einfach über das Drucken-Menü in jedem Programm. Man sollte allerdings im Editor den Textrand ausschalten, sonst bleibt von den 24 Zeichen nicht mehr viel übrig…

Linux (mein Arch zumindest) erkennt das Gerät sofort und läd den usblp-Treiber. Allerdings mag CUPS den Treiber nicht und findet auch in der gepatchten Version den Drucker nicht. Ist aber eigentlich auch egal. Wir wollen ja nicht unsere Hausaufgaben da drauf drucken (auch wenn das mal ne trollige Idee wäre :) ), sondern da live Dinge draufhauen.

Am einfachsten geht das, wenn man direkt in die Gerätedatei /dev/usb/lp0 schreibt und jede Zeile dabei mit newline, carriage-return (“\n\r“) beendet. Mein aktuelles Skript dafür frisst einfach alles was man in es reinpiped, ersetzt Umlaute codiert es in codepage 437  und druckt es dann. Z.B.:

cowsay -f small "Hallo Welt! " | ./thermo

Das malt eine kleine Kuh (die große ist zu dick, 24 Zeichen Breite max) auf den Kassenbon (vorrausgesetzt man hat cowsay drauf natürlich). Sehr praktisch ist auch das Programm figlet, mit dem aus Text ASCII-Art machen kann.

Twitter ausdrucken geht bisher noch nicht mit automatischer Aktualisierung, aber einfach die aktuelle Timeline drucken kann man mit dem Komandozeilenprogramm Python Twitter Tools. Installieren lässt sich das über setuptools:

pacman -S setuptools
easy_install twitter
twitter
twitter -l 5 | ./thermo

Beim ersten Aufruf von twitter wird das übliche oauth-Zeug gemacht. Mit dem -l (kleines L) bestimmt ihr die Anzahl der ausgegebenen Tweets.

Jetzt noch ein paar kleine Skripte, die lustige Dinge mit dem Drucker tun können und dann folgen noch ein paar Bilder. Anmerkung: die Skripte gehen jeweils davon aus, dass das Druckerskript (“thermo“) im aktuellen Verzeichnis liegt und ausführbar ist. Möchte man sich z.B. die Zeitansage auf eine Tastenkombination legen, sollten überall feste Pfade drin stehen.

  • Zeitansage, benötigt figlet
  • Zufälliges Zitat, benötigt fortune
  • Aktueller Titel (MPD), benötigt mpc. Als Argument kann ein MPD-Server angegeben werden. Default ist localhost.
  • NetSocket, benötigt socat. Druckt alles, was über Port 4242 UDP kommt. So können andere z.B. mit “netcat -u EURE_IP 4242” Dinge bei euch drucken.

Ihr habt euch das Teil immernoch nicht auf ebay gesucht? Selber schuld. Vielleicht überzeugen euch ja ein paar Bilder (Servaholics hat auch noch ein paar, die wurden sogar bei Tag gemacht :) )

    • Marco
    • 16. Aug. 2012 10:48am

    Ich hab diesen Drucker auch grade bekommen. Ich weiss nicht wie das bei dir aussieht, aber meiner kann Umlaute wenn man ihn mit Codepage 437 anspricht. Wenn ich in deinem Script statt mit ‘sed “…”‘ die Zeichen mit ‘iconv -t cp437′ umwandle, kommt alles richtig raus.

      • nervengiftlabs
      • 16. Aug. 2012 11:12am

      Oh schön, sehr schön, das funktioniert ja wirklich :)

    • Sebastian
    • 3. Apr. 2013 9:24pm

    Hey,
    kannst du mir mal weiterhelfen? ich habe versucht den drucker an meinem PC anzuschliessen, wenn ich jedoch versuche was zu drucken (indem ich in /dev/usb/lp1 schreibe, kommen nur cryptische Zeichen. Irgendwelche Tips?

      • nervengiftlabs
      • 14. Apr. 2013 8:52pm

      klingt, als wenn das Encoding kaputt geht. Benutzt du eventuell ein komisches Encoding in der Shell? (auch wenn ich das als Grund etwas komisch fände, aber ich hab sonst keine Idee)

      • nervengiftlabs
      • 14. Apr. 2013 8:59pm

      hast du eigentlich mal versucht, mein Skript zum Drucken zu benutzen, anstatt direkt in /dev/usb/lp1 zu schreiben?

        • Sebastian
        • 14. Apr. 2013 9:09pm

        Jo, hab das schon versucht, leider hats nicht geklappt… naja, hätte ja sein können, dass du noch ne andere idee hast.