Oder: Warum wir keine Rohdaten vom Zeo Mobile haben können.
Ein Gastbeitrag von steeph vom Podcast BLucid
Die Zeo-Produkte sind eine konzeptionelle Seltenheit. Ein Schlafphasen-Wecker mit Stirnband-EEG für ca. 100 $. Wer hätte gedacht, dass eine Firma mit so einem Produkt pleite gehen kann? 2013 war das offenbar noch möglich. Heute scheinen diese Geräte beliebter denn je zu sein. Vorallem die Bedside-Version, mit einer neuen Firmware versehen, die die Rohdaten des EEG über eine serielle Schnittstelle ausgibt. Diese relativ kleine Veränderung lässt Anwender ein Zeo Bedside in ein Mini-Schlaflabor für zuhause verwandeln und hat schon viel Hobby-Forschung ermöglicht. Die neuere Version des Zeo, das Zeo Mobile, hat diese Möglichkeit zum Abgreifen der Rohdaten nicht. Das Kopfband sendet über Bluetooth ausschließlich die Daten, die die Android- und iOS-Apps zur Schlafanalyse benutzt haben (also hauptsächlich die aktuelle Schlafphase). Die Frage von Besitzern des Zeo Mobile nach der Möglichkeit, Rohdaten aus diesem zu bekommen wird immer schnell damit beantwortet, dass das nicht möglich sei. Doch theoretisch muss es ja möglich sein. Schließlich sind die Daten ja definitiv da und werden zum Errechnen der Schlafphasen verarbeitet. Die Frage ist also eigentlich eher, mit wie viel Aufwand ein solcher Hack verbunden wäre.
Dank Raipat habe ich gerade ein solches Zeo Mobile, um mir anzuschauen, warum wir keine Rohdaten von ihm bekommen bzw. wie es vielleicht doch ginge. Denn obwohl sich immer gleich alle ganz sicher sind, dass es nicht möglich ist, an die Rohdaten zu kommen, habe ich die Antwort auf das Warum nie irgendwo dokumentiert gesehen.
Die Kopfeinheit
Die Kopfeinheit ist nicht zum Öffnen gedacht. Die vordere und hintere Schale werden durch zwei unzugängliche Schnappverschlüsse zusammengehalten. Mit einem Messer oder flachen Schraubendreher und ein bisschen sanfter Gewalt bekommt man die beiden Schalen voneinander getrennt. Seit dem benutze ich einfach zwei Klebestreifen, um das Gehäuse zusammen zu halten. Unter der Abdeckung befindet sich ein kleiner Akku, eine Platine mit der ganzen Elektronik und eine flexible Platine mit den Anschlüssen für die Elektroden.
Die wichtige Platine wird von zwei kleinen Schrauben gehalten. Die interessanten Teile, die nicht offensichtlich sind, habe ich hier mal markiert.
Die Rückseite ist schnell abgehandelt. Das einzige potentiell interessante Bauteil ist hier der mit 1 markierte Bluetooth-Baseband-Chip BlueCore6-ROM. Aber da wir schon wissen, dass der die Rohdaten gar nicht erst erhält, soll er fürs erste keine weitere Aufmerksamkeit bekommen.
Der mit 2 markierte Beschleunigungssensor (ADXL345) war für mich eine kleine Überraschung. Ich wusste nicht, dass das Zeo auch Bewegungsdaten in seinen Algorithmus einbaut. Das vermute ich jedenfalls, denn es macht Sinn, um Wach von REM zu unterscheiden.
Die 3 ist ein MCP609, der letzte Teil des Verstärkers. Dort könnte man das analoge Signal abgreifen, wenn man das tun wollte.
Leider passiert der ganze Rest der Datenverarbeiten in einem Chip (die 4). Der EFM32G210F128 ist ein Gecko-Mikrocontroller mit ARM Cortex-M3 CPU. Der übernimmt sowohl die Digitalisierung der EEG-Daten als auch die Berechnung der Schlafphasen.
Die Dockingstation
Die Dockingstation des Zeo Mobile ist vergleichsweise klein. Sie wird ja auch nur zum Laden des Akkus in der Kopfeinheit benutzt. Ihr Gewicht bekommt die Dockingstation übrigens von einem, naja, Gewicht eben, damit das Teil auch stehen bleibt. Es wird ihr nachgesagt, dass sie auch nur ein Ladegerät sei. Das stimmt aber nicht ganz. Ein paar Schrauben am Boden und an den Plastikhalterungen im Inneren abgeschraubt fallen einem zwei Platinen entgegen. Darauf befindet sich auch ein Seriell-zu-USB-Controller, der Daten von der Kopfeinheit über eine USB-1.1-Schnittstelle an einen Rechner weiterleiten kann.
Leider kommen dort so gar keine Daten heraus. Die Schnittstelle ist wohl für Firmware-Updates vorgesehen. Ob es auch eine Anwendersoftware für den PC gab, weiß ich nicht. Leider habe ich auch kein Handbuch des Zeo Mobile gefunden, weshalb diese Frage für mich bisher unbeantwortet bleibt.
Rohdaten?
Meine größte Hoffnung war, dass das verstärkte Signal durch einen Analog-zu-Digital-Converter geht, bevor es zur Berechnung der Schlafphasen in den Mikrocontroller kommt. Dann hätte man einen Punkt gehabt, an dem man die Rohdaten in einem brauchbaren Format hätte abgreifen können. Leider wird aber der ADC des Mikrocontrollers dafür benutzt, wodurch diese Variante nicht mehr in Frage kommt. Natürlich könnte man auch das verstärkte analoge Signal abgreifen und selbst digitalisieren. Aber so viel zusätzliche Elektronik möchte ich eigentlich nicht anbringen.
Dann dachte ich mir, vielleicht gibt der Gecko ja an einem Pin die Rohdaten aus. Äußerst unwahrscheinlich. Aber einen Versuch war es wert. Dort kommt jedoch nichts raus.
Das heißt auch an der seriellen Schnittstelle für die Dockingstation gibt es nichts. Möglicherweise können dort Daten abgefragt werden, indem man zuerst einen Befehl an die Kopfeinheit sendet. Vielleicht wäre hier eine Brute-Force-Suche einen Versuch wert.
Doch wie es aussieht ist die letzte Möglichkeit, an die Rohdaten des Zeo Mobile zu kommen, eine neue Firmware aufzuspielen, die die Rohdaten ausgibt. Die Hardware für eine Schnittstelle ist vorhanden. Die Zeit um die Firmware zu reversen jedoch nicht. Doch das heißt nicht, dass ich den Wunsch nach Rohdaten aus dem Zeo Mobile damit niederlege. Wahrscheinlich wird es hier irgendwann einen Folgebeitrag zu dem Thema geben.