Die Roofbox: Reichweite auf dem Taxidach
Ein doppelseitiges Dachdisplay mit eigenem Rechner, Mobilfunk, GNSS und Umgebungssensorik. Es fragt seine Werbemittel positionsabhängig an, passt die Helligkeit dem Tageslicht an und wird komplett aus der Ferne gewartet.
Was in der Dachbox steckt
- 1Zwei Displays, doppelseitigJe 1920 × 540 px, getrennt als Display 0 und 1 ansteuerbar. Jede Seite fragt ihre Werbung separat an und bestätigt sie separat.
- 2Umgebungslicht OPT3001Misst kontinuierlich im 100-ms-Takt und regelt darüber die Hintergrundbeleuchtung. Lesbar bei Sonne, nicht blendend bei Nacht.
- 3LTE & GNSS: SIMCom SIM7600Mobilfunk mit eigener Verbindungsüberwachung. GNSS mit A-GPS liefert Position, Geschwindigkeit und Fix-Qualität. Gemeldet werden auch Signalstärke, Zelle und Netzbetreiber.
- 4Klima: 2 × LM75, HTU21DAußentemperatur an beiden Seiten, Innentemperatur und Luftfeuchte über einen I²C-Bus. Der Bus hängt an einer USB-Brücke vom Typ MCP2221.
- 5Klappen-ErkennungEin serieller Kontakt meldet, ob das Display aufgerichtet oder heruntergeklappt ist. Grundlage für Dunkelschaltung und Alarm.
- 6Kfz-Netzteil mit ZündungslogikDas Netzteil überwacht Bordspannung und Zündung. Fällt die Spannung dauerhaft unter 10,4 V, schaltet die Box das Backlight ab und fährt kontrolliert herunter.
- 7Intel x86-64 RechnerUZE-OS auf Yocto-Basis mit A/B-Partitionen für sichere Over-the-Air-Updates. Darauf läuft der UZE Player auf Java 17 mit JavaFX.
Immer lesbar, nie blendend
Ein eigener Backlight-Dienst in C++ mit gRPC-Schnittstelle liest etwa zehnmal pro Sekunde den Lichtsensor aus. Er setzt die Helligkeit des Panels entlang einer Kennlinie: unterhalb von 100 lx nur wenige Prozent, ab 2.500 lx volle Leuchtkraft.
Der Regler daneben zeigt die Kennlinie.
Wann das Display leuchtet
GPS-Position liegt in einem hinterlegten GeoJSON-Polygon (z. B. Hamburg, Bremen, NRW, München). Weitere Polygone lassen sich nachladen.
Der Klappensensor meldet „oben“.
Sonst bleibt das Backlight aus und der Player zeigt ein schwarzes Bild.
Vom Kernel bis zum Werbemittel
Telemetrie
Die Sensoren werden im Sekundentakt gelesen. Alle 10 Sekunden geht ein Paket an die Plattform, gzip-komprimiertes JSON an /sensor/collect. Ältere Firmware sendet im Avro-Binärformat. Ohne Netz puffert die Box die Daten in SQLite und sendet sie minütlich in Paketen von bis zu 1.000 Einträgen nach.
| Position | Breite, Länge, Geschwindigkeit, Quelle (GPS oder letzte bekannte) |
|---|---|
| Mobilfunk | Signal (dBm), MCC/MNC, Zell-IDs, Modem-Temperatur, ICCID, Provider |
| Licht & Display | Lux, Backlight an/aus, Helligkeit in % |
| Klima | Temperatur außen (2×), innen, Luftfeuchte |
| Energie | Bordspannung, Zündungsspannung, Abschalt-Timer |
| Zustand | Klappe, Datenvolumen, Internet, Dienste-Health, Version |
| Reichweite | WLAN-Probe-Zählung im Umfeld des Fahrzeugs |
Der Playout-Zyklus
Anfrage
Jedes Display sendet seine Position, Auflösung und MIME-Typen an /playout/request. Es authentisiert sich mit dem Fingerprint seines Mender-Schlüssels.
Laden & Cachen
Das Werbemittel wird geladen, geprüft und lokal gecacht. Wiederkehrende Motive kommen aus dem Cache und kosten kein Datenvolumen.
Anzeigen
Bild, APNG oder Video läuft für die vorgegebene Dauer, standardmäßig 10 Sekunden.
Bestätigen
Danach folgt /playout/confirm mit Zeitpunkt und Position. Ohne Netz wird die Bestätigung persistent gespeichert und später gesendet.
# Playout-Anfrage eines Displays (vereinfacht) POST /playout/request x-device-display: 0 x-device-width: 1920 x-device-height: 540 x-device-mime: image/png,image/jpeg x-device-pk-fingerprint: 3f9a…e1 { "position": { "lat": 53.5511, "lng": 9.9937 } } # Antwort { "playoutId": "…", "media": { "url": "https://…/ads/images/…png", "type": "image/png" }, "durationInSec": 10, "isChargeable": true }
Dieselbe Software, stationär
Die Smartbox nutzt den gleichen Player auf einem Raspberry Pi.