Releases: jxlarrea/kiosk-satellite
Release list
v0.21.1-beta
What's new in Kiosk Satellite v0.21.1-beta
Bug Fixes
- Fixed a crash in the microWakeWord engine that could permanently stop wake word detection until the dashboard was reloaded (#52). Loud audio that clipped to full scale could kill the detection worker with an internal error; after enough crashes the automatic restart gave up and the device went deaf to wake words. The audio frontend now handles clipped samples correctly.
v0.21.0-beta
What's new in Kiosk Satellite v0.21.0-beta
New MQTT Entities
- Screensaver mode select: the screensaver mode is now a dropdown on the device's Home Assistant page, listing the same modes as the Screensaver settings, so an automation can for example switch the screensaver to a camera view at night and back to photos in the morning.
- Clock style select: the Clock screensaver's face (Digital, Flip or Roller) can now be picked from Home Assistant.
- HA kiosk method select: the full HA kiosk mode choice (Off, Auto, Plugin, CSS) is now available as a dropdown. The existing HA kiosk mode switch stays as the simple toggle; the dropdown is where a specific strategy can be hand-picked.
v0.20.0-beta
What's new in Kiosk Satellite v0.20.0-beta
New Screensaver Features
- Clock styles: the Clock screensaver now has a Style option with three faces. Flip Clock is a classic split-flap clock with animated card flips and configurable digit and card colors, with the backdrop shading itself to match. Roller Clock shows oversized digits that glide upward continuously, with each digit's height reflecting how far it is through its hour or minute, and configurable digit and background colors.
- Scheduled screensavers: a new Schedule group at the bottom of the Screensaver settings lets you switch to a different screensaver at set times of day, each with its own brightness that overrides the global screensaver brightness. Add as many times as you like; each one applies from its time until the next, in both the on-device settings and the remote admin.
Bug Fixes
- Sendspin skipping/stuttering on slower devices: audio decoding now runs on its own dedicated thread and decoder output that arrives late is played at its correct position instead of being dropped. If you still hear skipping, the
sendspinStatuscommand now reports detailed pipeline counters that pinpoint where audio is being lost, so please include them in a report.
v0.19.1-beta
What's new in Kiosk Satellite v0.19.1-beta
Bug Fixes
Wake word detection recovers from a crashed detector (#52)
On some devices the detector's worker died from an uncaught error, and the app carried on as if nothing had happened: it kept saying "listening natively" and kept feeding the microphone into something that was no longer there. The device was deaf until someone restarted the app by hand, which could be hours later. The wake word tester still worked, because it starts a detector of its own, which made it look like the microphone was fine.
The detector is now brought back automatically, a couple of seconds after it dies, up to three times an hour. A one-off crash heals itself before anyone notices. If it keeps happening the app stops claiming to listen and reports itself unavailable, so Voice Satellite resumes wake word detection in the browser instead of trusting a device that hears nothing.
Crashes now also record their stack trace in the app log. If you hit this, that line says which code failed and is worth including in a bug report.
Screen off on devices with an always-on display (#51)
Two separate problems, both showing up as "the screen turns back on by itself".
Kiosk mode was undoing it. Android does not let an app block the power button, so "Disable power button" watches for the screen going off and turns it straight back on. That watch could not tell a button press from the app's own screen-off, so turning the screen off from Home Assistant, the remote admin or a schedule was undone a second later, leaving the lock screen showing. Kiosk Satellite now recognizes its own screen-off and leaves the panel alone. A real power-button press is unaffected.
Always-on displays never went dark at all. On a device with an always-on display the screen-off works exactly as intended, the device sleeps and locks, and then the ROM lights the lock screen back up at low brightness. No app can override that. Rather than leave a screen entity reporting "off" about a panel you can see is lit, Kiosk Satellite now detects this and:
- Marks the Home Assistant screen entity unavailable, so it is clear the control cannot do what it says
- Shows a notice under Settings → Screen explaining why, in the app and the remote admin
Turn off "Always show time and info" in Android's display settings, near the lock screen options (some devices call it always-on display) and both come back on their own, with no restart.
v0.19.0-beta
What's new in Kiosk Satellite v0.19.0-beta
Microphone settings
A new group under Settings → Voice Satellite, for devices whose audio stack does not behave: the ones that only wake you when you are standing right next to them, where changing the wake word sensitivity makes no difference.
Three controls, all defaulting to exactly what the app has always done, so an untouched install captures bit for bit as before:
- Capture mode: which of Android's microphone paths to record from. Voice communication is the default and the only one echo cancellation works on, but on custom ROMs it is the phone-call path and the least tested, and can arrive 20 dB below the raw microphone while a recorder app sounds perfectly fine.
- Automatic gain control: hands the levelling to Android. Off by default because it lifts room noise to speaking level between utterances, and on many devices it does nothing at all.
- Microphone gain: 0 to 24 dB applied before anything hears the audio, so the wake word engine, the stop word and the speech sent to Home Assistant all get the same boosted signal.
Changing any of them reopens the microphone on the spot, no restart. The wake word tester's Mic level is how you set the gain: aim for around 0.05 speaking normally from where you use the device. See docs/microphone.md for what the readings mean.
DLNA renderer starts even when its port is taken (#49)
On any Home Assistant instance served over plain http, the DLNA renderer could never start. The secure context proxy binds port 2325 on loopback and the renderer binds the same port on every interface, which loses to it, so enabling the renderer failed with "Address already in use" every time.
The renderer now steps to the next free port instead of failing, and advertises the one it took, so discovery finds it as usual.
A Server port field comes with it, under Settings → DLNA Renderer. It starts empty and fills itself in with the port the renderer actually took, so the number a manually added Home Assistant entry needs is on screen rather than buried in the log. Type a different port to move the renderer, or clear the field to let it pick again.
The default remains 2325 on purpose. Home Assistant stores the renderer's URL in its config entry and does not follow a device that reappears elsewhere, so a new default would have taken every working install offline until its owner re-added the integration by hand.
v0.18.0-beta
What's new in Kiosk Satellite v0.18.0-beta
Lyrics on the Now Playing screen
The Sendspin player can now show synced lyrics while a track plays, sourced from Music Assistant. (#43)
A new Music Assistant group in the Sendspin player settings takes the server address and an auth token, with a Validate connection row that checks both before you rely on them, and a toggle to enable lyrics. Music Assistant needs a lyrics provider configured for this to return anything: LRCLIB is the easy one, and it needs no account.
Lyrics scroll with the track, follow you when you seek to any point rather than only working from the start, and have an adjustable timing offset if a particular track's lyrics run early or late. In landscape they sit beside the artwork, in portrait they stack underneath it.
Open other Android apps from the dashboard (#44)
Any card's tap action can now open another app on the tablet, with the kiosk still running behind it:
tap_action:
action: url
url_path: app://com.android.deskclockUseful for the clock app, a music app, or anything else installed. The same thing is available from the remote API as the launchApp command. If the package is not installed the tablet says so instead of showing a browser error.
Next Alarm MQTT Sensor
A new Next alarm timestamp sensor (#42) exposes the tablet's next alarm clock, so an automation can dim the lights before it, or a dashboard can show when you are waking up.
It reads whatever the system considers the next alarm, so any clock app counts, and it follows alarms set, moved, disabled or dismissed outside Kiosk Satellite, including while the app is in the background. Attributes name the app that owns the alarm and give the device's own wall clock reading.
Bug Fixes
- At a Glance entities wrapped into a single column on portrait screens instead of sitting side by side. They now lay out two per row, wrapping to a new row after that, and stay centered.
v0.17.0-beta
What's new in Kiosk Satellite v0.17.0-beta
New Feature: "At a Glance" entities in screensavers
- An optional row of Home Assistant entity states on the Black and Clock screensavers, for the things you check in passing: is the garage still open, is the front door locked (#37). Settings -> Screensaver -> At a Glance: turn it on and pick up to four entities. The picker searches Home Assistant by name or entity id, so nothing has to be typed from memory, and the chosen entities can be reordered. The same picker is in the remote admin's Screensaver tab. On the Black screensaver the row is centered and is the whole display; on the Clock screensaver it sits along the bottom, with the middle entity aligned to the clock above it. Each entity shows its icon, name and state in one muted tone, with the unit appended for numeric sensors. Icons come from the entity's own icon in Home Assistant, falling back to the icon Home Assistant itself would draw for that kind of entity. On a narrow screen the entities stack into a column. See the documentation.
Bug Fixes
- The Screen entity in Home Assistant now follows the panel however it changes (#41). Turning the screen off or on outside Kiosk Satellite (the power button, the device's own idle timeout, another app, a lock screen) left the entity reporting whatever the app last did itself, so it sat stuck on
onafter the screen went dark, and stuck onoffafter someone woke the tablet by hand. The app now tracks the real display state, so the entity, the remote admin and any automation reading it stay in step with the device. A tablet whose screen is already off when the app starts also reports correctly instead of claiming to be on.
v0.16.1-beta
What's new in Kiosk Satellite v0.16.1-beta
Bug Fixes
- The remote administration page was completely broken in v0.16.0-beta. A duplicated block of script left the page with a redeclared constant, which stops the browser from running any of the admin's JavaScript: the login button did nothing and the console showed
Uncaught SyntaxError: redeclaration of const EXPORT_FOLDED_LATIN. Anyone on v0.16.0-beta should update. The device itself, its dashboard and all Home Assistant control were unaffected, so a tablet on v0.16.0-beta can be updated from the Updates entity in Home Assistant, from the update notice in the app menu on the device, or by installing this APK directly. (#40)
v0.16.0-beta
What's new in Kiosk Satellite v0.16.0-beta
New Features
- WebRTC Camera screensaver. A new screensaver mode that shows one of your camera views after the idle timeout, with the view chosen from a picker below the mode. The grid is scenery here, so it has no focus or close gestures of its own: any touch wakes the kiosk like every other screensaver mode, and the small corner clock stays off so nothing sits over the cameras. A camera view you opened yourself still holds the screensaver off, and the screensaver only ever shows the view configured for it, so the two never fight over the display.
- A permanent default camera view. Every install now has a view named Default that cannot be deleted and is allowed to stand empty (emptying it is how you retire it). Once it holds at least one camera, a Default Camera View entry appears in the kiosk menu, so the cameras are one swipe and one tap away without any automation.
- Drag and drop camera ordering. The view editor now keeps the chosen cameras in their own ordered list: drag a row by its handle to reorder it, or use the arrows on a touch screen, and add or remove cameras from the list below. Camera order used to be whatever order you happened to tick the boxes in, which meant unticking everything to move one tile.
- Stop button next to Play on every camera view row in the remote admin, and a Dismiss camera view button on the remote dashboard beside Dismiss screensaver.
- Validate connection row in MQTT Settings, matching the ones under Home Assistant and Immich. It opens a throwaway connection on its own client id, so it cannot knock the live session off a broker that allows one session per user, and it reports what the broker actually said ("The broker rejected the username or password") instead of leaving you to read the log.
Improvements
- Exported configurations are now named after the device and the moment of export, as
ks-backup_<device>_<YYYYMMDD>_<HHmmss>.json, instead of every tablet producing an identicalkiosk-satellite-config.json.
v0.15.0-beta
What's new in Kiosk Satellite v0.15.0-beta
This release adds a complete low-latency WebRTC/WHEP camera experience designed for wall tablets, with native controls on the device, matching administration from a browser, and dedicated Home Assistant entities.
New Features
-
WebRTC camera views. Import streams directly from Go2RTC or add cameras manually using a WHEP endpoint, then combine up to four cameras into a named view. Views automatically arrange themselves for the display orientation and aspect ratio, with an option to show camera names. Go2RTC connections support basic authentication, self-signed certificates, missing-stream detection, and a separate high-resolution stream for fullscreen focus.
-
Fast camera navigation built for touch. Tap a camera in a multi-camera view to focus it while the other streams disconnect. Press Back, use the back swipe gesture, or double tap to return to the grid. The same controls close the full view when no camera is focused.
-
Camera controls in Home Assistant. MQTT discovery now creates a button for every camera view, a Close camera view button, and an Active camera view sensor. Each view uses a stable internal ID, so renaming it does not replace its Home Assistant entity.
-
Complete camera management on the device and in Remote Admin. Add and edit Go2RTC servers, import streams, configure manual cameras, order cameras into views, choose whether names are shown, preview views, and remove cameras or views from either interface.
-
Camera views cooperate with voice interactions. A voice interaction temporarily closes the camera view so Voice Satellite remains visible, then restores the same view and focused camera when the interaction finishes. Explicitly closing or changing the view cancels the return.
-
Screensaver-aware camera viewing. Opening a camera view immediately dismisses an active screensaver, and the screensaver remains suppressed until the camera view closes.
-
Optimized for low-memory tablets. The camera player exists only while a view is visible, one WebView owns all peer connections, camera audio is never negotiated, and focusing a camera closes the hidden streams to reduce decoder, CPU, and memory pressure.