tiptoi-Hacking mit tttool

Veröffentlicht am

Mit Hilfe des Programms tttool lassen sich, zwar mit etwas Aufwand aber auf recht einfache Art und Weise eigene Produkte für den tiptoi-Stift von Ravensburger erstellen. Der Artikel bietet einen ersten Überblick und eine Installationsanleitung für Ubuntu-User…

Was ist dieses tiptoi-Ding?

tiptoi-hacking

tiptoi-Hacking

Zunächst einmal für die, die das Gerät nicht kennen: Der tiptoi ist ein Stift von Ravensburger, der hauptsächlich für den Einsatz im Kinderzimmer konzipiert ist. Dieser Stift verfügt, vereinfacht gesagt, über ein optisches Lesegerät, einen Lautsprecher und einen Flashspeicher.

Mit Hilfe des Lesegeräts in der Spitze des Stiftes können Punktraster (OIDs = optical IDs) aus speziellen Büchern und von speziellen Objekten (z.B. Tierfiguren) abgelesen werden. Mit bloßem Auge sind diese Punktraster dabei kaum zu sehen und in den Büchern beispielsweise über Bilder gelegt.
Tippt man also in einem Buch auf einen Vogel, der auf einem Baum sitzt, zwitschert es aus dem Lautsprecher. Oder es kommt eine Erklärung, welcher Vogel das ist und wie er lebt. Oder das Lied „Alle Vögel sind schon da“. Oder es könnte auch „This is a bird“ zu hören sein, sofern es sich um ein Buch für den ersten Kontakt mit der englischen Sprache handelt.

Um den Stift mit dem entsprechenden Buch oder Objekt benutzen zu können, muss die Inhaltsdatei (.gme-Datei) auf den Flash-Speicher des Stiftes kopiert werden. Diese Datei enthält alle OIDs, alle Sounds und die Zuordnung dazwischen.
Außerdem kann auch etwas Programmlogik enthalten sein, denn es gibt auch Brettspiele für den tiptoi und in den Büchern sind oft auch kleinere Spielinhalte zu finden.

Und wie jetzt hacken?

Gemeint ist natürlich, eigene Inhalte für den tiptoi-Stift zu erstellen. Dazu sind zwei Teile notwendig:

  1. Das Programm erstellen, also die .gme-Datei. Es muss natürlich die Datei für das Produkt erzeugt werden, und somit womöglich auch Soundfiles.
  2. Das Drucken der OID. Die zu der .gme-Datei gehörenden OIDs müssen erstellt, gedruckt und ggfs. auf das Objekt (z.B. ein Plastiktierchen) aufgeklebt werden.

Für beides kann das Programm tttool (Open Source) des Karlsruher Entropia e.V. verwendet werden. Zunächst muss die Quelldatei im YAML-Format erzeugt werden. Darin steht was auszuführen ist, wenn eine bestimmte OID gescannt wurde. Diese .yaml-Datei kann dann zu einer .gme-Datei umgewandelt werden.

tiptoi-hacking-eigene-inhalte

Eigene Produkte: „Wie geht es dir heute?“ und Duplo-Giraffe mit OID

Aus der .yaml-Datei können mit dem Tool außerdem die Anschalt-OID und alle übrigen OIDs extrahiert und dafür jeweils eine Grafikdatei erzeugt werden. Diese Grafiken, die Punkraster, müssen dann „nur noch“ ausgedruckt werden.
Das kann mitunter zum kniffligsten Arbeitsschritt werden, denn das Punktraster darf nicht verzerrt werden und es muss natürlich mit höchstmöglicher Auflösung bestmöglich auf Papier gebracht werden. Je nach Druckermodell muss man etwas mit den Einstellungen experimentieren – oder der eigene Drucker ist vielleicht sogar ungeeignet.

Bevor ihr jetzt loslegt, beachtet bitte den obligatorischen Hinweis, dass ihr beim Hacken das Risiko eines Defektes selbst tragt!

Nähere Informationen zum Funktionsumfang und zur Bedienung bietet die deutschsprachige Seite zum Projekt. Dort sind im Übrigen auch die Informationen zur Installation zu finden. Ich habe sie im Folgenden speziell aus der Ubuntu-Sicht und zum Teil etwas ausführlicher aufgeführt:

tttools kompilieren

Um tttools unter Linux benutzen zu können, muss man es selbst aus den aktuellen Quellen bauen. Ein fertiger Build liegt derzeit nur für Windows vor. Die Kompilation ist allerdings nicht sonderlich aufwendig. Etwas mehr Aufwand entsteht natürlich, wenn man das Programm auf einem separaten System (z.B. eine speziell dafür eingerichtete Virtual Machine) durchführen möchte, um nicht jede Menge Pakete installiert zu haben, die man im Anschluss nicht mehr benötigt.

Um das Programm zu bauen, wird auf einem frisch aufgesetzten Ubuntu 15.10 zunächst einmal ein Git-Client benötigt, mit dessen Hilfe die aktuellen Quellen aus dem Projekt-Repository bei GitHub bezogen werden können:

sudo apt-get install git

Mit dem Git-Kommando clone werden dann die Quellen heruntergeladen:

cd ~
git clone https://github.com/entropia/tip-toi-reveng.git tttool
cd tttool

Da das Programm in der Sprache Haskell entwickelt wurde, muss natürlich die Haskell-Plattform installiert werden (bei einem „nackten“ 15.10 bedeutet das einen Download von ca. 70MB und einer Mehrbelegung auf der HDD von rund 700MB):

sudo apt-get install haskell-platform

Mit Hilfe des Haskell-Tools cabal können dann ganz einfach die Projekt-Abhängigkeiten installiert werden:

cabal update
cabal install --only-dependencies

Bei dem zweiten dieser beiden Befehle muss man zwingend in dem Verzeichnis stehen, in das man die tttool-Quellen heruntergeladen hat – lt. o.g. Kommando also das tttool-Verzeichnis.
Außerdem wird es bei diesem Aufruf vermutlich zu folgender Fehlermeldung kommen:

cabal: The following packages are likely to be broken by the reinstalls:
network-uri-2.6.0.3
HTTP-4000.2.20
Use --force-reinstalls if you want to install anyway.

Das heißt der Befehl muss einfach noch einmal mit dem genannten Parameter wiederholt werden. Benutzt man kein temporäres Build-System, sollte man vorher aber eine Sandbox initialisieren, damit die Pakete darin installiert werden (und somit die Pakete global nicht in Mitleidenschaft geraten). Also erst:

cabal sandbox init

Und anschließend dann:

cabal install --only-dependencies --force-reinstalls

Nun kann der eigentliche Build – der Kompilierungslauf – gestartet werden:

cabal install --bindir=.

Ist der Buildlauf erfolgreich durchgelaufen, findet sich im aktuellen Verzeichnis dann das tttool-Binary (ca. 14 MB groß). Das kann nun auf einen anderen Rechner (mit demselben Ubuntu-Release am besten) kopiert werden.

Zusätzliche Pakete installieren

Zusätzlich wird ggfs. das Paket sox (Sound Exchange) benötigt. Grundsätzlich meldet das Tool aber, wenn ein benötigtes Paket fehlt.

Wer sich, z.B. bei den ersten Tests, nicht die Mühe machen möchte, Soundfiles zu produzieren, sollte außerdem die folgenden beiden Pakete installieren:

  • libttspico-utils (SVOX Pico Software Speech Synthesizer)
  • vorbis-tools (Werkzeuge für die Verarbeitung von ogg-Sounddateien)

Damit kann man in seinen YAML-Quelldateien einfach einen Text hinterlegen, der dann per Sprachausgabe generiert wird. Natürlich werden auch hierbei Sounddateien produziert, das funktioniert dann aber eben ohne weiteren Aufwand.

Selbstverständlich müssen diese Pakete auf dem System installiert werden, auf dem tttool ausgeführt werden soll, also nicht unbedingt dort wo kompiliert wurde!

Ein Tipp für den OID-Druck

Wie schon erwähnt, kann das Ausdrucken der Codes einige Anläufe kosten. In meinem Fall ging es noch nicht einmal darum, dass ich Codes über Bilder legen wollte. Mir reicht es eigentlich (erst einmal), die Punktraster auf dem blanken Papier zu haben. Trotzdem hatte ich erst einmal meine Schwierigkeiten. Mit dem Versuchsdrucker hatte ich nicht die Möglichkeit, in 1200 DPI zu drucken. 600 DPI waren das Maximum, und es das Ergebnis konnte der Stift leider erst einmal nicht lesen. Das Erhöhen des Kontrastes funktionierte leider auch nicht.

Der entscheidende Punkt für mich war letztendlich, die Codes mit doppelt so großen Pixeln zu erzeugen. Das geht, indem man dem oid-code-Aufruf einen entsprechenden Parameter anhängt:

tttool oid-code -d 600d tester.yaml

Das d bei der Auflösung (hier 600 DPI) löst die Verdoppelung der Pixel aus. Genauso wäre natürlich auch 1200d möglich.

Und wozu jetzt das Ganze?!

Denkbar sind unzählige großartige Anwendungen:

  • Personalisierte Produkte („Hey Kevin Ben Liam, lass uns zusammen spielen!„).
  • Eigene Figuren mit Soundfiles verknüpfen (z.B. Tierfiguren von Playmobil, Lego Duplo o.ä.).
  • Eigene Brettspiele erstellen.
  • Exotischere Ideen: Ein Bastler namens Pronwan hat beispielsweise den ersten Teil von Monkey Island 3 als… „Point and Tip“-Adventure umgesetzt. Es gibt aber auch schon Sequencer, Taschenrechner, …
  • Eine tiptoi-Schnitzeljagd für den Kindergeburtstag oder eine aufgemotzte Geocaching-Tour. Dabei müssen an den Stationen natürlich verschiedene Rätsel gelöst werden.

Schaut euch einfach mal auf den o.g. Seiten rund um das Projekt inspirieren.

So, sollte mich jemand suchen, ich will mal eine eigene Schnitzeljagd in Angriff nehmen… 🙂


Dieser Artikel wurde in der/den Kategorie(n) OSBN, Planet-U, Programmierung und Skripting, Spiele veröffentlicht und mit den Tags , , , , versehen.

28 Kommentare zu tiptoi-Hacking mit tttool

  1. Kommentar von Nermin
    7. Dezember 2015, 13:19 Uhr.

    Klasse Artikel, Danke! Meine Tochter ist seit ca. einem Jahr Besitzerin eines TipToi Stiftes, ich hatte mich schon gefragt wie man das Ding „hacken“ könnte.

    • Kommentar von Gerald
      7. Dezember 2015, 13:22 Uhr.

      Viel Spaß und danke für deine Rückmeldung!
      Gruß, Gerald

  2. Kommentar von andreas
    8. Dezember 2015, 21:03 Uhr.

    sehr interessant. wenn du webseiten hast, wo man weitere infos bekommen kann, bitte her damit.

    • Kommentar von Gerald
      8. Dezember 2015, 21:44 Uhr.

      Hast du dir die Webseite zum Projekt angesehen? Die, zusammen mit den Informationen die du auf der GitHub-Seite noch findest, dürfte so ziemlich alle Fragen beantworten. Zumindest die, die aktuell beantwortbar sind – denn es ist ja scheinbar noch nicht der gesamte Funktionsumfang reverse-engineered worden.

    • Kommentar von Leser
      12. Dezember 2015, 20:50 Uhr.

      Es gibt tolle Seiten im Wiki von ubuntuusers.de:

      https://wiki.ubuntuusers.de/tiptoi

      https://wiki.ubuntuusers.de/tiptoi/tttool

  3. Kommentar von Sandra
    25. Dezember 2015, 21:02 Uhr.

    Gibt es denn auch Möglichkeiten seine Lieder(mp3 ) doch noch auf den Stift zu bekommen?🙈

    • Kommentar von Gerald
      26. Dezember 2015, 07:39 Uhr.

      Du kannst auf die beschriebene Weise natürlich beliebige Soundfiles auf den Stick bringen. Aber sie werden dann eben erst abgespielt wenn der entsprechende Code gescannt wurde. Anders beim neuen tiptoi-Model. So weit ich weiß funktioniert der zusätzlich auch als normaler MP3-Player…

      • Kommentar von Bettina
        23. Januar 2016, 18:59 Uhr.

        Leider nein, das ist ja da Problem. Der spielt nur einen speziellen Dateityp von Ravensburger ab. Einen Konverter habe ich bisher noch nicht gesehen. Vielleicht eine Aufgabe für den nächsten Hack? Und noch eine Idee: Wie wäre es, den Stift mit einem Tablet zu betreiben? Unterwegs wäre es cool, wenn man nicht die ganzen Bücher mitschleppen müsste….

        • Kommentar von Gerald
          23. Januar 2016, 19:24 Uhr.

          Hallo Bettina!
          Ich hab das alte Modell. Daher kann ich wegen den Soundfiles nicht wirklich mitreden… Und wg. Tablet: denke nicht, dass der Stift die Codes von einem Bildschirm lesen kann. Aber das könnte man ja ausprobieren, indem man mit tttool einen Code erzeugt und den auf dem Tablet-Bildschirm anzeigen lässt. Wenn du damit Bücher „einsparen“ willst, würde das ja zusätzlich aber auch noch bedeuten, dass die eingescannt werden müssten – und das dann wiederum brauchbar, was die Codes angeht. Spätestens hier wird das scheitern. 🙂
          Gruß, Gerald

  4. Kommentar von Martin K.
    26. Januar 2016, 13:25 Uhr.

    Gibt es irgendwo eine Übersicht/Liste der Einschaltcodes für die verschiedenen Produkte? Leider bin ich hier nicht fündig geworden.

    • Kommentar von Gerald
      26. Januar 2016, 13:31 Uhr.

      Hallo Martin,
      ich meine, irgendwo mal zumindest einen Ansatz einer solchen Liste gesehen zu haben. Kann dir aber keinen Link liefern.
      Mit einigem Aufwand könnte man sich natürlich auch alle Dateien von Ravensburger runterladen und die Codes herauslesen…
      Gruß, Gerald

      • Kommentar von Martin K.
        26. Januar 2016, 14:04 Uhr.

        Hallo Gerald!
        Danke für die schnelle Antwort!
        Die für mich relevanten gme-Dateien habe ich hier und kann sie selbst in yaml umwandeln. Dennoch ist mir nicht klar, woran ich dann den jeweiligen Einschaltcode erkenne. Sind es die Codes von „initial sounds“?
        Gruss
        Maritn

        • Kommentar von Gerald
          26. Januar 2016, 14:13 Uhr.

          In der yaml-Datei müsste doch die Product-ID („product-id: 99„) ganz oben zu finden sein, oder?

          • Kommentar von Martin K.
            26. Januar 2016, 14:17 Uhr.

            Yess! Das ist es. Ich wusste nicht, dass die Product-ID der Einschaltcode ist. Dadurch, dass sie zweistellig ist, kam sie mir „zu kurz“ vor und ich habe sie nicht getestet.

            Danke!

          • Kommentar von Gerald
            26. Januar 2016, 14:22 Uhr.

            Gerne! 🙂

  5. Kommentar von Bent
    8. April 2016, 22:19 Uhr.

    Ich komme leider nicht mit der „Pixelvergrößerung“ klar.
    Wenn ich einen Code in 1200dpi erzeugen will, mache ich das z.B. für die
    42 mit: „tttool oid-code 42“.
    Wenn ich auf 600dpi kommen möchte mit?
    Unter help kommt der Hinweis –dpi DPI bzw. –pixel-size N
    Kannst Du das bitte einmal in plaintext als Beispiel für den oid-code 42 machen?
    Ich bin ein Kommandozeilen-Unwissender.
    Tut mir leid, und vielen Dank.

    • Kommentar von Gerald
      9. April 2016, 08:12 Uhr.

      Hallo Bent,
      in meinem Beitrag habe ich ja ein Beispiel genannt. Nur, dass da die OID-Codes für die gesamte Programmdatei tester.yaml erzeugt werden.
      Die Hilfe nennt die beiden Möglichkeiten:
      oid-code [-d DPI] <infile.yaml>
      und
      oid-code [-d DPI] <codes>
      Ersteres war mein Beispiel. Letzteres ist das, was du suchst. Entscheidend ist die Option -d 600d, die man zusätzlich angibt, wenn man 600dpi haben möchte.
      Wenn du also nur einen bestimmten Code haben möchtest, dann sieht das für den Code 42 so aus:
      tttool oid-code -d 600d 42
      Hoffe das hilft dir weiter.
      Gruß, Gerald

      • Kommentar von Bent
        11. April 2016, 07:32 Uhr.

        Moin Gerald,
        vielen Dank für die ausführliche Antwort. Ich wollte schon fast schreiben, dass es nicht funktioniert. Nach 2 Tagen nächtlicher Verzweiflung habe ich dann gemerkt, dass ich eine spätere Version vom tttool installiert habe.
        Komisch, dass einem immer solche Dinge zur Verzweiflung bringen.
        Vielen Dank und viele Grüße
        Bent

        • Kommentar von Gerald
          11. April 2016, 08:29 Uhr.

          Moin Bent,
          meinst du damit, dass mein Beispiel mit einer neueren tttool-Version nicht mehr funktioniert?
          Das wäre natürlich interessant für mich. Muss ich mir wohl mal ansehen… 🙂
          Gruß, Gerald

          • Kommentar von Bent
            11. April 2016, 14:20 Uhr.

            Genau, beim neuesten Download funktioniert es nicht mehr.
            Vielen Dank noch mal.
            Bent

  6. Kommentar von Michael
    4. Juni 2016, 14:39 Uhr.

    Der Befehlt heißt nun einfach:

    tttool oid-code 42 –dpi 600

    Man beachte die beiden „-“ und kein d hinter die Zahl.

    Gruß,
    Micha

    • Kommentar von Gerald
      4. Juni 2016, 21:29 Uhr.

      Danke für die Info. Gruß, Gerald.

  7. Kommentar von TheCybers
    4. September 2016, 21:52 Uhr.

    Hat es jemand inzwischen geschafft normale MP3 in das rav-Format zu bringen?

    Wäre für jeden Tipp dankbar!

  8. Kommentar von Ulrich
    19. Dezember 2016, 12:28 Uhr.

    Hallo,

    erstmal vielen Dank fuer die Informationen – mein Sohn bekommt so einen Stift dieses Jahr auch vom Christkind gebracht und ich habe schon einige Ideen, was da als weitere Sachen gemacht werden kann. Ich habe nur ein Problem; ich habe mich komplett an die „Bauanleitung“ gehalten und bekomme das tttool mit meinem Linux nicht gebaut, das Teil meldet (u.a.):

    Failed to install aeson-1.0.2.1
    cabal: Error: some packages failed to install:
    aeson-1.0.2.1 failed during the building phase. The exception was:
    ExitFailure 1
    tttool-1.7 depends on aeson-1.0.2.1 which failed to install.

    und etwas zuvor:

    Data/Aeson/Encoding/Internal.hs:201:40:
    No instance for (Semigroup Builder) arising from a use of `‘
    Possible fix: add an instance declaration for (Semigroup Builder)
    In the first argument of `Encoding‘, namely `(a b)‘
    In the expression: Encoding (a b)
    In an equation for `>< (Encoding b) = Encoding (a b)

    Kann mir jemand helfen oder vielleicht ein binary zusenden?

    Danke und Gruss,

    Ulrich

    • Kommentar von Dimitri Vanhecke
      30. Dezember 2016, 22:44 Uhr.

      Ich auch!! Genau diesen Fehler auf einer neuen Ubuntu 14.04 LTS OS.

    • Kommentar von Dimitri Vanhecke
      30. Dezember 2016, 23:07 Uhr.

      Uebrings: Exakt diesen Fehler wird auf der Github Website besprochen, allerdings mit einer älteren aeson Version: https://github.com/bos/aeson/issues/469
      Letze Eintrag von Admin: Unfortuntately I don’t think there’s anything we can do here, but if someone figures it out please let us know!
      Auch ich habe die Version 1.16.0 von Cabal.
      Sieht düster aus… Ich wäre umso mehr froh wenn jemanden dies lösen könnte.
      Vielen Dank, auch für das sehr gelungene Artikel.

      Dimitri

  9. Kommentar von Wenk
    23. Dezember 2016, 14:04 Uhr.

    Hallo zusammen
    Ich könnte die Codes erstellen, drucken und auch erfolgreich testen. Mit dem neuen Stift funktioniert alles gut, der alte Stift macht keinen Eank… weiss da jemand warum das so ist? Habe extra die Stifte auf die neueste Version updadet. Lg Gery

Schreibe einen Kommentar zu Gerald Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.