Google Nest Hub und Google Pixel Tablet als Touch-Panels

Christian Drexler

Wir sind gerade umgezogen, und der erste Nachmittag in der neuen Wohnung ging fürs WLAN drauf. Als beide Mesh-Punkte liefen, habe ich mir eine Liste aller Geräte im Netz geben lassen. Darauf standen zwei Bildschirme, mit denen ich nie etwas gemacht hatte: ein Google Nest Hub auf dem Schreibtisch im Büro und ein Google Pixel Tablet auf seinem Dock im Schlafzimmer. Beide zeigen den ganzen Tag eine Fotoschau.

Die Frage war also einfach: Können die stattdessen etwas Nützliches zeigen? Am nächsten Vormittag war der Hub ein Lichtschalter fürs Büro und das Tablet ein Panel am Bett. Keins von beiden braucht eine App oder eine Smart-Home-Plattform.

Der Trick: eine Webseite casten und antippen

Ein Google Nest Hub ist ein Google-Cast-Empfänger wie ein Chromecast. Normalerweise läuft darüber Video, aber es gibt eine kleine Open-Source-Empfänger-App namens DashCast, die eine beliebige URL im Vollbild lädt. In Python bringt pychromecast einen Controller dafür mit:

import pychromecast
from pychromecast.controllers.dashcast import DashCastController

cc = pychromecast.get_chromecast_from_host((HUB_IP, 8009, None, None, None))
cc.wait(timeout=20)
dc = DashCastController()
cc.register_handler(dc)
dc.load_url("http://<rechner-im-lan>:8765/", force=True)

Unsicher war ich beim Touch. Cast ist zum Zuschauen gedacht, ich hatte erwartet, dass der Hub die Taps schluckt oder seine eigene „Streaming beenden“-Leiste zeigt. Also kam ein großer TAP-ME-Knopf auf den Bildschirm, der jeden Tap an den Mac zurückmeldet. Die Taps kamen an. Damit ist der Hub ein kleiner Touchscreen für jede Seite, die ich im Heimnetz ausliefere.

Das Google Pixel Tablet kann dasselbe, aber nur auf seinem Dock. Ohne Dock ist es ein normales Tablet und bietet gar kein Cast an. Auf dem Dock wechselt es in den Hub-Modus und taucht wie der Nest Hub als Cast-Bildschirm auf.

Was auf den beiden Bildschirmen läuft

Büro, Google Nest Hub: die beiden Elgato Key Lights am Schreibtisch. Oben vier Voreinstellungen (Call, Arbeit, Abend, Aus), darunter pro Lampe eine Karte mit Schalter, Helligkeits- und Farbtemperaturregler. Die Seite aktualisiert sich alle paar Sekunden, eine Änderung aus der Elgato-App sieht man dort also auch.

Schlafzimmer, Google Pixel Tablet: links die Uhrzeit, sehr groß. Das war der eigentliche Wunsch: eine Uhr, die man vom Bett aus lesen kann. Rechts die Klimaanlage (an/aus, minus/plus, Modus) und ein großer Knopf fürs Warmwasser. Unten eine Reihe Knöpfe, die noch nichts tun (Deckenlicht, Nachtlicht, Vorhänge, Haustür, Wecker, Gute Nacht). Sie leuchten auf und sagen „noch nicht verbunden“. So sehe ich, ob wir einen Knopf überhaupt benutzen, bevor ich ihn anschließe.

Die Klima-Knöpfe warten nach dem letzten Tap eine Sekunde und schicken dann alles zusammen. Dreimal plus ist ein Befehl, nicht drei.

Drei Dinge, die schiefgingen

Jeder Tap zählte doppelt. Auf einem Touchscreen löst ein Tap erst ein Touch-Event und danach ein Klick-Event aus. Meine Testseite hat auf beide gehört. Leicht zu beheben, nur...

Die Korrektur kam nicht an. Der Hub zeigte weiter die alte Seite. DashCast hält fest, was es geladen hat, und dieselbe URL noch einmal zu laden hat nichts aktualisiert. Was funktioniert: erst die DashCast-App auf dem Gerät beenden, drei Sekunden warten, dann die URL mit einem Zeitstempel am Ende laden. Der Cast-Schritt macht das jetzt immer.

Das Tablet startet langsam. Der Hub hat DashCast in etwa zehn Sekunden oben, das Tablet braucht manchmal dreißig. Die erste Version hat zu früh aufgegeben und einen Fehler gemeldet, während die Seite noch lud. Jetzt wartet der Cast-Schritt bis zu dreißig Sekunden, bevor er etwas einen Fehler nennt.

Der Browser spricht nicht mit den Lampen

Die Seite im Hub ruft die Key Lights nicht direkt auf. Die Lampen haben zwar eine kleine HTTP-Schnittstelle im Heimnetz, beantworten aber keine Browser-Anfragen von einer anderen Herkunft. Also spricht die Seite mit einem winzigen Python-Server, und der spricht mit Lampen, Klimaanlage und Warmwasser. Ein Server, zwei Seiten, ein paar JSON-Endpunkte.

Das Warmwasser verdient eine eigene Anmerkung. Es ist ein alter Wandschalter mit einem kleinen Roboterfinger darauf, der den Schalter drückt. Im Drückmodus sind an und aus derselbe Druck. Das Panel kann nur annehmen, dass jeder Tap umschaltet. Drückt jemand den Schalter von Hand, zeigt das Panel den falschen Zustand, bis der Roboter auf den richtigen Schaltmodus umgestellt ist.

Warum es auf einem Raspberry Pi gelandet ist

Die erste Version lief auf meinem Laptop. Das geht, bis der Laptop schläft, dann frieren beide Bildschirme ein. Ein Rechner, der immer läuft, löst das, und in der Schublade lag ein alter Raspberry Pi 1. Ein Kern, 512 MB, viel zu schwach für Home Assistant, aber zwei kleine Seiten ausliefern und ab und zu einen Knopfdruck weiterreichen schafft er problemlos.

Darauf laufen zwei Dienste, die beim Booten starten und sich nach einem Absturz neu starten: der Panel-Server und ein Aufpasser, der alle drei Minuten beide Bildschirme prüft. Ist einer auf seine Fotoschau zurückgefallen, castet der Aufpasser das Panel neu. Läuft gerade ein Video, lässt er den Bildschirm in Ruhe. Ohne den Aufpasser wären die Panels nach dem ersten Neustart oder Leerlauf weg, und niemand würde sie zurückholen.

Zwei Kleinigkeiten aus dem Pi-Setup:

  • Python-Wheels bauen auf dem alten ARM-Chip nicht. Die Bibliotheken, die kompiliert werden müssen (cryptography, zeroconf, protobuf), kamen deshalb aus dem Paketmanager des Systems statt aus pip. Die virtuelle Umgebung nutzt sie über --system-site-packages.
  • Ein Login, der sich selbst erneuert, darf nur an einem Ort liegen. Die Klimaanlage läuft über ein Cloud-Konto, dessen Token sich alle zwei Stunden erneuert. Solange Laptop und Pi ihn beide hatten, hat jede Erneuerung den anderen ausgeloggt. Der Token liegt jetzt nur auf dem Pi, und der Laptop schickt Klima-Befehle über den Pi.

Was es gekostet hat

Neu gekauft wurde nichts. Zwei Bildschirme, die schon in der Wohnung standen, zeigen jetzt etwas Nützliches, und die Schublade ist einen Raspberry Pi leerer. Als Nächstes ist ein alter Echo Show der ersten Generation dran. Er kann kein Cast, deshalb bekommt er ein Lesezeichen in seinem Browser, und Taps sollten dort genauso funktionieren.