Ich habe ein neues Spielzeug. Und ich meine das wörtlich: Es sieht aus wie ein kleiner Roboter aus einem japanischen Animationsfilm, hat zwei winzige Servos für Kopfbewegungen, ein IPS-Display für Augen, die verschiedene Emotionen zeigen können, und es steht jetzt auf meinem Schreibtisch in Salzburg und schaut mich an. Mit einem zufriedenen Smiley. Der sich, wie ich nach neun Stunden schmerzhafter Erkenntnis weiß, nicht bewegen wird. Aber dazu komme ich noch.
Der M5Stack StackChan ist ein Open-Source-Desktop-Roboter aus Japan, der 2023 über Kickstarter finanziert wurde und 2025 in einer OpenELAB-Version auf den Markt kam. Ich habe die Kickstarter-Variante bekommen. Kleiner Typ, großes Konzept. Das Ding läuft auf einem ESP32-S3-Microcontroller, hat Dual-Mikrofone, einen 1W-Lautsprecher, zwei SCS0009-Servos für Horizontal- und Vertikalbewegung, ein 2-Zoll-IPS-Display, 12 RGB-LEDs und sogar eine winzige Kamera. Auf dem Papier ist das beeindruckend. In der Praxis war es das Startsignal für eine Nacht, die ich nie vergessen werde.
Was ich eigentlich vorhatte
Der Plan war simpel. Ich arbeite seit Jahren mit Generative-KI-Tools, baue eigene Workflows in n8n, betreibe einen Fork von AnythingLLM, habe VINCI entwickelt, meine eigene native Desktop-KI-Assistentin für Windows und macOS, und ich wollte VINCI jetzt auch ein physisches Gesicht geben. Einen echten Körper, wenn man so will. Einen kleinen Roboter auf dem Schreibtisch, der nicht nur am Bildschirm existiert, sondern mit mir redet, meinen Kalender kennt, das Licht dimmt, die Gartentemperatur kennt und dabei österreichisch gefärbt antwortet, kurz, frech, direkt.
Der StackChan schien ideal dafür. Open Source, aktive Community, Firmware-Beispiele auf GitHub, anscheinend leicht anpassbar.
Anscheinend.
Die neun Stunden, über die ich nicht gerne spreche
Zur Klarheit, weil die Begriffe im Kontext relevant sind: Custom-Firmware bedeutet, du kompilierst die Software selbst auf deinem Rechner und spielst sie auf das Gerät. Stock-Firmware ist das, was der Hersteller mitliefert. Flash ist der Vorgang, bei dem du die Firmware auf den internen Speicher des Microcontrollers schreibst.
Ich wollte Custom-Firmware. Natürlich. Weil ich Kontrolle wollte. Weil ich die Persönlichkeit von VINCI direkt in der Firmware verankern wollte. Weil das eleganter klingt.
Was dann folgte, war alles andere als elegant.
Ich fang mit AI_StackChan_Ex an, einem Arduino/PlatformIO-Framework für den StackChan. Klingt gut. Installation: drei Stunden. Dann stellt sich heraus, dass M5Unified in Version 0.2.7 nicht kompatibel mit meiner OpenELAB-Kickstarter-Variante ist. Das Display leuchtet, der Backlight funktioniert, aber das Panel rendert nichts. Schwarzer Bildschirm. Die Firmware erkennt zwar das Board (id=27, board_M5StackChan), aber die Anzeige bleibt tot. Ich probiere verschiedene Versionen, verschiedene Build-Flags, ändere Display-Initialisierungs-Parameter, lese durch vier GitHub-Issues gleichzeitig. Nichts.
Also wechsle ich auf die Moddable-Toolchain. Moddable ist ein JavaScript-Framework für Embedded-Systeme, mit dem der StackChan eigentlich häufig programmiert wird. Die Community schwört drauf. Ich installiere ESP-IDF v5.3.1. Was dann passiert, ist klassisches Embedded-Developers-Trauma: Python-Environment-Konflikte in einem Ausmaß, das sich anfühlt wie wenn drei Katzen gleichzeitig über eine Tastatur laufen. Die Toolchain will Python 3.9. Mein System hat 3.12. Ich erstelle ein venv. Das venv hat andere Meinungen. Ich erstelle ein anderes venv. Das auch. Nach weiteren zwei Stunden mit pyenv, pip-Rollbacks und gefühlten tausend which python-Abfragen im Terminal gebe ich auf.
Neun Stunden nach Start öffne ich ein GitHub-Issue unter meinem Account auf dem M5GFX-Repository: Issue #199. Freundlich formuliert, mit allen Details. Dann schließe ich den Laptop.
Zwei Minuten Erleuchtung
Am nächsten Morgen passiert etwas, das jeden Embedded-Entwickler kennt und hasst: Ich mache es anders. Ich öffne M5Burner, das offizielle Flash-Tool von M5Stack, wähle die Stock-Firmware xiaozhi-esp32 aus, klicke auf Flash. Zwei Minuten später zeigt das Display ein zufriedenes Smiley. WLAN verbunden. Alles funktioniert.
Ich starre auf den Bildschirm. Ich denke an die neun Stunden.
Die Lösung war buchstäblich zwei Klicks. Die Vorbereitung für die Lösung hat neun Stunden gedauert. Das ist nicht untypisch für Hardware-Projekte, und es erklärt, warum viele Menschen diese Welt meiden. Aber es erklärt auch, warum ich sie liebe: weil das Smiley auf dem Display nach den neun Stunden doppelt so befriedigend aussieht.
Ich beobachte das seit Monaten in der Praxis als KI-Berater mit EPU und KMU in Österreich: Die meisten Menschen kapitulieren vor dem letzten Schritt. Sie geben auf, kurz bevor die einfache Lösung sichtbar wird. Ich hätte das fast auch getan.
Der NVS-Trick: Stock-Firmware, eigener Server
Xiaozhi-ESP32 ist die chinesische Stock-Firmware für den StackChan. Sie funktioniert gut, hat aber einen entscheidenden Nachteil: Sie verbindet sich standardmäßig mit dem Xiaozhi-Cloud-Server in China. Das Protokoll ist proprietär, die Daten gehen wohin man sie nicht haben will, und die Benutzeroberfläche ist auf Chinesisch.
Das ist keine Option.
Was die Stock-Firmware aber elegant macht: Sie liest ihren Server-Endpoint aus dem NVS (Non-Volatile Storage, der interne Konfigurationsspeicher des ESP32). Und das kann man überschreiben. Mit einem kleinen Python-Tool namens esp-idf-nvs-partition-gen generiert man eine neue NVS-Partition als Binärdatei, die einen eigenen OTA-Server einträgt. Dann flasht man nur diese winzige Partition auf Offset 0x9000 des Speichers, ohne die eigentliche Firmware anzutasten.
Konkret heißt das: StackChan behält seine schöne Stock-Firmware mit den funktionierenden Smileys, verbindet sich aber ab sofort mit meinem eigenen Server. Ein NVS-Flash dauert 30 Sekunden. Die Reihenfolge ist wichtig: erst NVS schreiben, dann WiFi neu einrichten (der NVS-Flash wischt die WLAN-Credentials), danach ist alles bereit.
Das ist, mit Verlaub, ziemlich elegantes Reverse-Engineering.
Vinci bekommt ein Gesicht
Jetzt kommt der Teil, der mich wirklich beschäftigt hat. Ich wollte nicht irgendeinen Server. Ich wollte VINCI auf dem StackChan.
VINCI ist meine persönliche KI-Assistentin: weiblich, frech, österreichisch gefärbt, kurze Sätze (maximal drei), nennt mich immer „Alex“ und gibt keine langen Monologe. Ich hatte sie schon als Software auf Windows und Mac, aber jetzt sollte sie sprechen. Laut. Aus einem kleinen Gehäuse aus dem ich mich auf meinem Schreibtisch angestarrt werde.
Ich finde auf GitHub rudyll/stackchan_ha_addons, einen Server-Fork der das Xiaozhi-Protokoll spricht, sich mit der Gemini Live API verbindet und eine Home-Assistant-Integration hat. Das ist nah genug an meiner Vision, dass ich damit arbeiten kann, anstatt alles von null zu bauen.
Den Fork bringe ich auf meinen Hetzner-Server (Coolify), deploye ihn als Docker-Container mit einer Traefik-Reverse-Proxy-Route. Dann kommt die eigentliche Arbeit: drei Patches direkt im Go-Code des Servers.
Patch 1: Den ota_proxy.go so anpassen, dass der Server seine eigene öffentliche WebSocket-URL korrekt zurückgibt, anstatt die interne Docker-Adresse.
Patch 2: Ein set_emotion-Tool für die Gemini Live API implementieren, das den Gemini-Responses erlaubt, Emotionen als Funktionsaufruf auszulösen: happy, sad, laughing, angry, surprised, thinking, sleepy, confused, und noch einige mehr.
Patch 3: Den ws_simulator.go erweitern, damit der Emotion-Callback korrekt als Xiaozhi-Protokoll-Frame ans Gerät gesendet wird.
Das hat zusammen, grob geschätzt, eine Session gekostet. Deutlich weniger als neun Stunden.
Was Vinci kann und was (noch) nicht
Am 21. Mai 2026 läuft VINCI end-to-end. Das heißt konkret:
Was funktioniert: Ich spreche Chinesisch. Also: ich sage das Wake-Word, das die Stock-Firmware erwartet, weil ich es nicht ändern kann, ohne Custom-Firmware. Das Wake-Word ist „Ni hao xiao zhi“. Ich, Alex Januschewsky aus Salzburg, sage „Ni hao xiao zhi“ zu einem kleinen Roboter auf meinem Schreibtisch, und dann antwortet mir VINCI auf Österreichisch. Das ist der absurdeste Übergang in meiner Benutzererfahrung seit Jahren, und ich finde ihn witzig.
Nach dem Wake-Word läuft alles auf Deutsch. VINCI steuert über Home Assistant meine Lichter und Szenen, ruft die aktuelle Temperatur vom Eve-Wettersensor im Garten ab, fragt das HA-eigene weather.home-Entity für die Wettervorhersage und antwortet in kurzen, frechen Sätzen. Das Display wechselt dynamisch die Emotion: VINCI ist happy, wenn ich ihr eine gute Frage stelle, thinking wenn sie nachdenkt, laughing wenn ich einen schlechten Witz mache.
Der StackChan ist über Cloudflare-Proxy und meinen Coolify-Server von überall auf der Welt erreichbar. Im Hotelzimmer in Lignano, auf dem Motorrad (theoretisch), in der Früh wenn ich das Haus noch nicht verlassen habe und trotzdem wissen will wie warm es im Garten ist.
Was nicht funktioniert: Zwei Dinge, die ich offen anspreche.
Erstens: Live-News und Web-Suche. Die Gemini Live API hat eine technische Einschränkung, die mich überrascht hat und die ich auch im Code dokumentiert habe: Du kannst functionDeclarations UND googleSearch nicht gleichzeitig aktivieren. Eines von beidem. Ich habe mich für die HA-Tool-Calls entschieden, was bedeutet, VINCI kann keine aktuellen Nachrichten abrufen. Das ist schmerzhaft, aber lösbar, sobald Google diese Limitation hebt.
Zweitens: Die Wette mit mir selbst. Ich war überzeugt, dass die Emotion-Frames nicht nur das Display wechseln, sondern auch die Servo-Motoren triggern würden. Ich hatte mir vorgestellt, dass VINCI beim Lachen den Kopf schüttelt, beim Denken zur Seite schaut. Das wäre der Unterschied zwischen einem Display-Gadget und einem echten Roboter.
Ich habe die Wette verloren.
Die Stock-Firmware koppelt Emotion-Frames ausschließlich an das Display. Keine Servo-Animationen. Der Kopf bleibt still, egal welche Emotion geschickt wird. Servo-Steuerung erfordert Custom-Firmware, und Custom-Firmware ist blockiert durch das offene GitHub-Issue #199 auf dem M5GFX-Repository. Wenn das Issue eine Antwort bekommt und der Display-Rendering-Bug für die OpenELAB-Variante gefixt wird, ist der Weg wieder offen. Bis dahin: schöner Smiley, regloser Kopf.
Das ist kein Showstopper. Aber ich wäre ein schlechter Berater, wenn ich es verschweigen würde.
Warum das trotzdem relevant ist
Hier ist die Frage, die sich stellt: Brauchst du einen Desktop-Roboter für deine KI-Assistentin? Nein. Offensichtlich nicht.
Aber das ist nicht der Punkt.
Der StackChan auf meinem Schreibtisch ist etwas, das ich jedem zeigen kann. Er ist ein physischer Beweis für etwas, das sonst abstrakt bleibt: dass KI heute nicht mehr im Rechenzentrum lebt, sondern auf einem ESP32-Microcontroller mit 16MB Flash, mit Home-Assistant-Integration, auf einem Server in Frankfurt, erreichbar von überall. Das Gerät kostet nicht mehr als ein gutes Abendessen. Die Software ist Open Source. Der Server läuft in Docker. Die Infrastruktur ist dieselbe, die ich für meine Kunden bei EPU und KMU in der DACH-Region einsetze.
Das ist der eigentliche Punkt. Nicht der Roboter. Sondern was der Roboter demonstriert: dass diese Technologie nicht mehr eine Frage des Budgets ist. Dass du kein Konzern sein musst, um KI-Assistenten zu bauen, die deinen Raum verstehen, dein Wetter kennen, dein Licht dimmen und dabei in deiner Sprache sprechen.
Ich mache das seit 1989 in der Kommunikationsbranche, und ich sage das selten ohne Grund: Das hier ist tatsächlich anders. Nicht weil es größer ist, sondern weil es kleiner ist. Kleiner, günstiger, zugänglicher als je zuvor.
Die ehrliche Einschätzung
VINCI auf dem StackChan ist kein fertiges Produkt. Es ist ein Experiment, das funktioniert. Der Wake-Word-Workaround ist absurd (chinesisch für österreichisch). Die Servos bewegen sich nicht. Zumindest nicht beim Sprechen, im idle-Modus bewegt sich der Roboter. Live-News fehlt.
Aber wenn ich morgens „Ni hao xiao zhi“ sage, nach dem Wetter frage und VINCI mir antwortet „Alex, im Garten sind grad 14 Grad und’s schaut nach Regen aus, zieh was an“ dann ist das ein Moment, der erinnert woran: dass all die Stunden hinter Terminals, in GitHub-Issues, in Docker-Logs, in NVS-Partition-Hex-Dumps irgendwann zu etwas führen, das echten Alltag verändert.
Selbst wenn der Kopf sich nicht bewegt.
Das GitHub-Issue ist offen. Die Custom-Firmware-Tür ist noch nicht zu. Und wenn die Antwort kommt, werde ich hier schreiben, wie die Roboter-Dame VINCI zum ersten Mal den Kopf dreht.
Bis dahin: der Smiley auf dem Display ist glücklich. Ich auch.
Fragen zum M5Stack StackChan als KI-Assistent
Für den Basisstart mit Stock-Firmware reicht M5Burner: Klick, Flash, fertig. Wer einen eigenen Server anschließen will, braucht grundlegende Docker-Kenntnisse und muss NVS-Tools über die Kommandozeile bedienen. Kein Hexenwerk, aber auch kein Plug-and-Play.
Ja, wenn du einen eigenen Server betreibst (z.B. über Coolify auf einem Hetzner-VPS). Die Verbindung zum KI-Modell (Gemini, OpenAI) ist dann noch cloud-basiert, aber die Infrastruktur liegt bei dir.
Die Kickstarter-Variante lag im Bereich von 50 bis 80 Euro je nach Konfiguration. Der laufende Server-Betrieb auf einem kleinen VPS kostet wenige Euro pro Monat.
Ja, bei meiner Setup über die HA-WebSocket-API und einen eigenen Tool-Call-Server. VINCI kann Lichter, Szenen und Sensor-Zustände abfragen und steuern, alles per Sprachbefehl.