Viark satellite receivers (and other G-MScreen boxes) — local control integration

I’ve published a custom integration for Viark satellite receivers: jorgediez/ha-viark.

It talks to the receiver over its own LAN protocol on TCP 20000. No cloud, and no scraping a web UI — the receiver pushes state changes and the integration reacts to them.

Why a new integration: these boxes don’t run Enigma2, so the built-in enigma2 / OpenWebif integration can’t see them at all. As far as I could find, nothing else covered them.

What you get

  • media_player — power on/off (soft standby), mute, volume step, channel up/down, and select_source across the full channel list.
  • remote — remote.send_command with named keys (epg, menu, red, digit_0…digit_9, and about 50 more) or raw codes.
  • Diagnostic sensors — serial, software version, platform ID, channel count, receiver clock, and a longer list disabled by default for debugging.
  • Auto-discovery — the receiver broadcasts on UDP 25860, so the config flow usually pre-fills the address and you just confirm. Enter the IP manually if HA runs in a container without host networking.

One detail worth calling out: the source dropdown shows channels numbered as the receiver shows them on screen (163 laSexta). Satellite line-ups are full of duplicate channel names, and without the numbers only the first of each was reachable. select_source still accepts a bare name or a bare number, so existing automations don’t need changing.

Known limits

Better you hear these from me than find them at 11pm:

  • Deep standby can’t be woken. The receiver leaves the network entirely. turn_on only works from soft standby — use an IR blaster for a cold start.
  • Volume is step-only. Mute state is reported, volume level isn’t.
  • One client at a time. If the G-MScreen phone app is connected, HA gets refused.
  • Channel changes fail while a menu is open on the TV. Surfaced as a readable error rather than a silent no-op.

Installing

Requires Home Assistant 2025.3 or newer. No external Python dependencies.

HACS → Integrations → ⋮ → Custom repositories → add https://github.com/jorgediez/ha-viark as an Integration, install, restart. Or copy custom_components/viark/ in by hand.

Then Settings → Devices & Services → Add Integration → Viark.

Other receivers

Developed and verified against a Viark SAT 4K (platform id 140), but the G-MScreen protocol is used by a lot of ALi, GX, HiSilicon and MStar boxes — GTMedia, Freesat, Starsat and similar. Those are untested.

If you have one, I’d be glad of a report either way. The login block reports a platform id and behaviour is known to vary by platform, so even “it works” is useful data. There’s also a list of remote key codes in the repo that appear in only one reverse-engineering source and haven’t been confirmed on hardware; a script to map them is included if you fancy it.

The protocol itself is documented in PROTOCOL.md in the repo — framing, the obfuscated login block, request numbers, status codes and the key table — in case it’s useful to anyone outside Home Assistant.

MIT licensed.

If you’d rather press buttons than write send_key calls, there’s a companion card: Viark Remote Card, a dashboard replica of the receiver’s own remote. It needs this integration installed to have anything to talk to.