Most engineers repurposing an old Android tablet for Home Assistant run straight into the same wall of hardware constraints: WebView engine overhead chokes low-tier CPUs, browser-based wake-word detection pegs battery and compute, and unencrypted local HTTP setups break modern browser media security constraints entirely. The dream of a smooth, responsive wall panel degrades into a stuttering, unresponsive frame that cannot even capture microphone input when the display goes dark.
Kiosk Satellite strips away these structural limitations. Operating as a lightweight, open-source Android kiosk browser and the official companion app for Voice Satellite, it delivers an always-on dashboard that shifts heavy wake-word inference from JavaScript engines to native CPU execution. It turns discarded silicon into a responsive, voice-driven hub capable of running 24/7.
+-------------------------------------------------------------+
| Android Tablet Host |
| |
| +--------------------+ +-------------------------+ |
| | Native Wake-Word | | In-App Loopback Proxy | |
| | (vsWakeWord Engine)| | (HTTP -> Secure Context)| |
| +---------+----------+ +------------+------------+ |
| | | |
| v v |
| +-------------------------------------------------------+ |
| | Kiosk Satellite Core | |
| | [State Stream Filter] [MQTT Discovery] | |
| +---------------------------+---------------------------+ |
| | |
| v |
| +-------------------------------------------------------+ |
| | Home Assistant Dashboard | |
| | (Voice Satellite Frontend View) | |
| +-------------------------------------------------------+ |
+-------------------------------------------------------------+
The Architecture: Native Wake-Word Pipeline and Resource Optimization
Running client-side wake-word models inside a standard mobile browser layer is deeply inefficient. JavaScript runtime constraints inflate memory usage, drain power, and suspend execution the second the operating system drops the screen into low-power states.
Kiosk Satellite re-engineers this pipeline by taking full control of the voice stack:
- Native vs. In-Browser Inference: When running Voice Satellite within Kiosk Satellite, the frontend detects the container and hands off the detection pipeline directly to the app's native inference engine. Native execution runs the full wake-word pipeline at 10x to 30x faster than real-time entirely on the CPU.
- Zero GPU Dependency: The execution footprint is lean enough to run models like vsWakeWord on extreme low-spec targets such as the Amazon Echo Show 5 purely on CPU compute.
- Decoupled Display State: Wake-word listening operates independently of whether the screen is illuminated or if another application occupies the foreground. Triggering the wake word instantly wakes the panel, returns the viewport to the Home Assistant dashboard, and handles voice execution through the device's native
assist_satelliteentity.
Architectural Breakdown: Voice Satellite Alone vs. Kiosk Satellite
| Metric / Capability | Voice Satellite Alone (Browser) | Kiosk Satellite + Voice Satellite |
|---|---|---|
| Wake Word with Dashboard on Screen | Yes | Yes |
| Wake Word with Screen Off | No | Yes |
| Wake Word with Background/Other App Active | No | Yes (restores dashboard on trigger) |
| Microphone Access on Plain HTTP Instances | No (blocked by browser secure context rules) | Yes (via in-app loopback proxy) |
| Detection Processing Cost | Heavy browser-side JavaScript compute | Native CPU inference (10x–30x faster) |
| Low-End Hardware Viability | Struggles with high latency and frame drops | CPU-only processing without GPU requirements |
| Crash/Reboot Recovery | Manual launch required | Native start-on-boot execution |
Overcoming Browser Constraints: State Filtering and the Loopback Proxy
Deploying web dashboards to legacy hardware presents two persistent bottlenecks: real-time WebSocket state saturation and restrictive browser security models for media capture.
[ Home Assistant Server ]
| (Full State Stream: Hundreds of Entities)
v
[ Kiosk Satellite In-App Filter ]
| (Filters out non-visible UI entities)
v
[ Filtered Dashboard View ] ===> Smooth scrolling on low-power CPUs
1. In-App Loopback Proxy for HTTP Deployments
Modern WebRTC and media-capture APIs demand a secure context (HTTPS or localhost). If your local Home Assistant instance runs over standard http://, standard mobile browsers deny microphone permissions entirely. Kiosk Satellite embeds an internal loopback proxy during setup. It translates the local connection into an internal secure context, unlocking native microphone access without needing custom SSL certificates or reverse proxy infrastructure.
2. Selective State Stream Filtering
Home Assistant installations with hundreds of active entities often flood client WebViews with constant WebSocket state updates. On aging CPUs, this causes rendering bottlenecks, input latency, and sluggish scrolling. Kiosk Satellite dynamically intercepts the state stream, filtering real-time updates to match only the entities present on the active dashboard view. If a complex view cannot be fully resolved, the engine falls back to unfiltered streaming automatically, ensuring zero functional breakage while reclaiming critical UI thread cycles.
Enterprise Kiosk Lockdown and Remote Management
Transforming an off-the-shelf tablet into a hardened wall interface demands granular hardware and operating system isolation:
- Perimeter Lockdown: Kiosk Satellite implements status bar masking, volume and power button remapping, and back/home key suppression. It includes Task Lock support for devices enrolled via Android Device Owner provisioning. Unlocking the device requires a configured multi-tap exit gesture backed by a secure PIN.
- Remote Administration Server: Every tablet hosts an embedded administration interface available at:
This management interface mirrors all physical settings, exposes real-time screen captures, serves a web debugging console, streams application logs, and supports one-click system configuration exports.bashhttp://<device-ip>:2324 - Two-Way Home Assistant Integration via MQTT: Point the app at your network MQTT broker, and Kiosk Satellite provisions the tablet inside Home Assistant automatically using MQTT auto-discovery. It instantly publishes diagnostics and controls, including battery levels, charging status, display brightness, active page paths, volume, and screensaver states.
+---------------------------+
| Kiosk Satellite Node |
| (Port 2324 Web UI) |
+-------------+-------------+
|
+----------------------+----------------------+
| | |
v v v
[ REST / WebSocket ] [ MQTT Broker ] [ Media Stack ]
| | |
Remote Config & Logs HA Device Discovery DLNA / Sendspin
Multimedia Integration: Screensavers, Immich, Sendspin, and DLNA
Beyond basic dashboard delivery, Kiosk Satellite embeds native media endpoints that turn the tablet into a smart multi-zone peripheral:
- Immich Photo Frame Integration: The display engine features a comprehensive screensaver suite that links natively to Immich photo libraries and albums, alongside local directories, clock displays, or Home Assistant media feeds. Render transitions include crossfade, slide, zoom, and Ken Burns motion algorithms with contextual metadata overlays.
- Sendspin Synchronized Audio Engine: The client implements the Sendspin protocol for Music Assistant. This turns the tablet into a network speaker featuring sample-accurate audio synchronization across multi-room player groups, exposing dynamic metadata, album artwork, and volume entities inside Home Assistant.
- Direct DLNA Rendering: The integrated DLNA engine accepts raw audio, video, and live security camera streams dispatched directly from
media_player.play_mediacalls within Home Assistant automations. - View Rotations and Script Injection: Configure rotating dashboard playlists with customizable dwell times, automatic light/dark UI scheduling, custom JavaScript injection hooks via
window.kioskSatellite, and support for self-signed certificates.
Deployment and Setup Workflow
Prerequisites
- Android device running Android 7.0 or newer.
- Home Assistant server reachable across the local network.
- Home Assistant Long-Lived Access Token generated via User Profile → Security → Long-Lived Access Tokens.
- Voice Satellite integration (installed via default HACS repository) for voice engine features.
[ Step 1: Install APK ]
│
▼
[ Step 2: Launch Wizard & Enable Remote Admin ]
│
▼
[ Step 3: Open http://<device-ip>:2324 on PC ] ──► (Paste Long-Lived Access Token)
│
▼
[ Step 4: Map Dashboard & Auto-Detect Voice Satellite ]
│
▼
[ Step 5: Configure MQTT / Lockdown PIN ]
Installation Steps
- Download the latest Kiosk Satellite release APK and sideload it onto the target device. Enable installations from unknown sources when prompted by Android.
- Launch the application to initialize the five-step setup wizard.
- Engineering Tip: Enable the remote admin server in step one. Navigate to
http://<device-ip>:2324on a desktop browser to complete the token configuration, bypassing on-screen mobile keyboard entry for long strings. - Set your default Home Assistant dashboard URL, verify automatic detection of the Voice Satellite integration, and configure optional local MQTT broker parameters.
bash# Verify network connectivity to the remote admin port curl -I http://<device-ip>:2324
Maintenance and Developer APIs
Day-to-day administrative operations on the tablet use an edge-swipe gesture from the left boundary to expose options: Dashboard, Settings, Web Console, Clear Web Cache, Exit, and Close App. When production Kiosk Mode is active, this menu is replaced by your configured multi-tap gesture and master PIN.
Developers can interface with the runtime through multiple surfaces:
- JavaScript Interface: Intercept and direct dashboard behavior using the
window.kioskSatelliteDOM API. - Remote Protocol: Automate configuration and state changes via the embedded REST and WebSocket endpoints on port
2324. - License Architecture: Kiosk Satellite is free for personal, non-commercial deployments under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0) license.
