A Home Assistant integration for Enigma2 / OpenWebif set-top boxes (Vu+, Dreambox, Zgemma, and similar running OpenViX, OpenATV, etc.).
It talks directly to your receiver's OpenWebif HTTP API — the same interface the box's own web UI uses. There is no third-party EPG source and no SSH: your receiver is the single source of truth for channels, EPG, recordings and timers.
This integration is designed to complement Home Assistant's built-in
enigma2 integration
(which provides a media_player for power, volume, now-playing and channel
zapping). OpenWebif Control adds the pieces the core integration doesn't:
current/next programme sensors, recording & timer state, a recordings list, and
control services — the data layer for a richer, "Sky Q-style" TV dashboard.
Status: v0.5.x (data + control layer, with background EPG cache). The companion Sky Q-style dashboard card is available: OpenWebif Control Card.
Sensors
| Entity | Description |
|---|---|
sensor.*_current_programme |
Title of what's on the current channel now (+ description, channel, start/end as attributes) |
sensor.*_next_programme |
What's on next on the current channel |
sensor.*_timers |
Number of scheduled timers (full list in attributes) |
sensor.*_recordings |
Number of recordings on the box's storage (list with name/channel/size/description in attributes) |
sensor.*_channels |
Real channels across your bouquets (list in attributes), each tagged with a category bouquet for the dashboard's tabs |
Channel grouping. Channels are tagged with the first category bouquet they appear in (Entertainment, Movies, News, etc.). The giant
… - All channels/Last Scannedbuckets are deliberately not used as tags: a 1000-channel grid is unusable and its EPG payload is enormous (tens of thousands of events), which would freeze the dashboard. Their refs are still exposed, just never used to group channels.
Binary sensors
| Entity | Description |
|---|---|
binary_sensor.*_recording |
On while the receiver is actively recording |
binary_sensor.*_standby |
On while the receiver is in standby |
Services
| Service | What it does |
|---|---|
openwebif_control.zap |
Change to a channel by service reference |
openwebif_control.send_message |
Show an on-screen message on the TV |
openwebif_control.remote_control |
Send a remote-control key code |
openwebif_control.add_timer |
Schedule a recording from an EPG event id |
openwebif_control.toggle_standby |
Toggle standby on/off |
openwebif_control.get_epg |
Return a timeline EPG window for a bouquet (cached, windowed server-side) |
openwebif_control.play_recording |
Start playing a recording on the TV, optionally seeking to an approximate position |
Required for
play_recordingto work reliably. Do this once on the box.
When a movie/recording starts, Enigma2 can display an interactive
“Resume from last position?” dialog. That modal blocks automated
playback and seeking — the play_recording service (and the companion
card's ▶ Play / timeline scrubber) can't get past it. This integration
therefore assumes the resume prompt is disabled and does not try to
dismiss it; disable it once and playback starts cleanly every time.
On the receiver (via its own on-screen menu / remote):
- Menu → Setup → System → Recordings (some images: A/V settings or Recording paths / Playback).
- Find the movie resume behaviour option. Wording varies by image:
- OpenViX / OpenATV: “Ask about resuming a movie” → set to
no(equivalent settings keyconfig.usage.on_movie_start). - Some images phrase it as “Resume from last position” / “Behaviour when a movie is started” → choose “beginning” or “Do nothing” rather than “Ask user”.
- OpenViX / OpenATV: “Ask about resuming a movie” → set to
- Save/exit. No reboot needed.
Alternatively, over SSH (root): the same setting is stored in
/etc/enigma2/settings as config.usage.on_movie_start. Set it to a
non-interactive value and restart Enigma2:
# Play recordings from the beginning, no prompt:
grep -q '^config.usage.on_movie_start=' /etc/enigma2/settings \
&& sed -i 's/^config.usage.on_movie_start=.*/config.usage.on_movie_start=beginning/' /etc/enigma2/settings \
|| echo 'config.usage.on_movie_start=beginning' >> /etc/enigma2/settings
init 4 && sleep 3 && init 3 # restart Enigma2 (or reboot)Valid
on_movie_startvalues are typicallyask(the prompt — avoid),beginning,resume, orlast. Usebeginning(always from start) orresume(auto-resume, no prompt) — anything exceptask.
- In Home Assistant, go to HACS → three-dot menu → Custom repositories.
- Add this repository URL:
https://github.com/kevpatts/OpenWebif-controland choose category Integration. - Find OpenWebif Control in HACS, install it, and restart Home Assistant.
- Go to Settings → Devices & Services → Add Integration, search for OpenWebif Control, and enter your box's address.
Copy custom_components/openwebif_control/ into your Home Assistant
config/custom_components/ directory and restart.
The integration is configured entirely through the UI (config flow):
- Host — the receiver's IP or hostname (e.g.
10.0.7.40) - Port — OpenWebif port (default
80) - Username / Password — only if you've set OpenWebif auth (leave blank if not)
- Use HTTPS / Verify SSL — for boxes exposed over TLS
After setup, open the integration's Configure (options) to pick a default bouquet for EPG and adjust the update interval.
Install the core Enigma2 integration too, pointed at the same box, for the
media_player entity (power/volume/zap/now-playing transport). OpenWebif
Control focuses on the data and extra control surface around it.
For a Sky Q-style look you'll want channel logos. This integration surfaces the box-served picon URL for each service. If your receiver doesn't have a picon pack installed, picons will 404 — install a FreeSat/DVB picon pack on the box (e.g. via the image's picon downloader, or OpenViX/OpenATV feeds). A helper to fetch a picon pack is planned for a future release.
OpenWebif serves a full multi-day EPG as long as the box has harvested it. If your receiver has been in deep standby for a long time, the EPG cache can go stale and appear nearly empty. Waking the box and letting its EPG importer / OpenTV harvester run (most images do this on a schedule) repopulates a full ~7-day guide. This integration reads whatever EPG the box currently has.
- ✅ Done — Sky Q-style EPG grid dashboard card (OpenWebif Control Card): timeline guide, recordings gallery, favourites, header controls.
- ✅ Done — background EPG cache (fetches a bouquet once, refreshes in-use bouquets on a schedule, serves the card instantly).
- v0.x — picon pack fetch helper; media_source for streaming recordings; per-bouquet EPG sensors.
This integration has no external Python requirements beyond Home Assistant
itself. The API client lives in
api.py and is a thin async
wrapper over the OpenWebif JSON endpoints.