I’ve been posting updates about my PiPup fork in the original PiPup thread ( PiPup - Android TV app for notifications ), but since several forks now live side by side there (@alex-savin maintains his own version too which is published in playstore too), that thread has become hard to follow. So here’s a dedicated topic for the version I created (with help of Claude), a maintained fork of GitHub - rogro82/PiPup: Enhanced notifications for Android TV · GitHub (all credit for the original idea to him), plus i’ve created a native Home Assistant integration for it too.
- App (APK): GitHub - mhoogenbosch/PiPup: Enhanced notifications for Android TV · GitHub
- HA integration: GitHub - mhoogenbosch/ha-pipup: Home Assistant integration for PiPup (fork): show camera streams and notifications on Android TV for as long as you want · GitHub
Everything is developed against a real household fleet: 8 TVs across Fire OS 9/11, Google TV 11 (TCL) and Android TV 14 (Nokia), so the platform quirks below aren’t theoretical.
What the app adds over the original
-
Indefinite popups, `duration: 0` keeps a popup up until you cancel or replace it, e.g. a doorbell camera stream for exactly as long as there is motion.
-
Popup `id` + update-in-place, re-sending the same popup only extends its timer; a playing video/web stream keeps running without flicker.
-
Buttons on popups, up to 3 remote-operable buttons; a press POSTs to a callback URL. Combined with the integration this becomes an HA event you can automate on (e.g. an *“Open the door”* button on the doorbell popup — callbacks are protected with single-use tokens, so nothing on your LAN can forge a press).
-
Text-to-speech, popups can speak (`tts`, optional `ttsLanguage`), using the TV’s own engine.
-
Muted media by default, audio in a popup can freeze live-TV playback on some devices, so video/web media plays silent unless you ask otherwise.
-
Styling, urgency presets (info/warning/critical) plus full border control (`borderColor`, `borderWidth`, `cornerRadius`), title/message sizes and colors, five positions.
-
Screen on/off over HTTP, `POST /power?state=on|off|toggle`. Waking always works (and switches CEC-linked TVs to the right input); standby needs a one-time grant (device admin, or an accessibility fallback for the many boxes that ship without device admin).
-
Self-update, the app checks my GitHub releases and can install updates itself (silent on Android 12+; older versions show the system dialog on the TV). The HA update entity drives this.
-
mDNS discovery, with a stable device id, so HA finds TVs automatically and follows them across DHCP changes.
-
Permission screen with Fix buttons, the app can’t grant its own permissions (that’s adb territory), but it shows the real state of every grant and jumps straight to the right system screen where one exists. Where a vendor ships a do-nothing placeholder instead (looking at you, Fire OS), it shows the exact adb command instead of a dead button.
-
Reliability work, overlay watchdog (a popup can never get stuck on screen), resilient web server startup, service restart after updates, guards against the vendor process-killers on low-RAM TVs.
`GET /state` and `GET /permissions/diagnose` tell you everything the app knows — the latter exists specifically so a bug report can carry facts instead of “it doesn’t work”.
Install: grab `install.sh` (Linux/macOS/WSL) or `install.ps1` (Windows) from the [releases page]( Releases · mhoogenbosch/PiPup · GitHub ) — they sideload the APK **and** grant the app-ops that an app can never grant itself (and that every `adb install -r` silently resets). Multiple TVs per run.
What the HA integration gives you
Add it in HACS as a custom repository (`mhoogenbosch/ha-pipup`, type Integration), restart, and TVs running the fork are discovered automatically. Each TV becomes a device with:
-
Actions, `pipup.show` (including `camera_entity` with an MJPEG mode that’s safe next to live TV, TTS, buttons, styling — all with per-TV defaults), `pipup.dismiss`, `pipup.fix_permission`.
-
Entities, popup / screen / connectivity sensors, a `notify` target, a **screen on/off switch**, an **update entity** with a working Install button, a dismiss button, default-position select, diagnostics.
-
A `pipup_button` event, for popup button presses — the doorbell-unlock automation is four lines.
-
Permission monitoring, a problem sensor plus an HA repair that can open the right settings screen on the TV for you, and honest errors that include the adb command when a device genuinely can’t do something remotely.
-
A diagnostics download that embeds the app’s own diagnosis — if you ever file a bug, that one file is all I need.
The README on the GitHub page has copy-paste examples: house-wide announcements with TTS, a doorbell popup with an unlock button, calendar reminders, and showing a camera for as long as there is motion.
Community
@Ltek built a Lovelace card for this integration: GitHub - Ltek/pipup-notify-card: Home Assistant Card for the PiPup Android app · GitHub - check it out.
Found a bug? Have an idea?
Please open an issue, that works far better for me than forum replies I might miss:
- App: Issues · mhoogenbosch/PiPup · GitHub
- Integration: Issues · mhoogenbosch/ha-pipup · GitHub
For anything permission- or update-related, include the output of `http://:7979/permissions/diagnose` or the integration’s diagnostics download, it usually pinpoints the cause immediately. Release notes are bilingual (EN/NL) and every version is documented in the changelogs.
And feature requests are genuinely welcome: several of the features above started as a user asking “would it be possible to…” — the custom borders, the screen on/off switch and the install scripts all came from one such message. If you have a fun or interesting idea, open an issue and I’ll happily see what I can do with it.
Enjoy!




