Unofficial drop-in fix that restores Home Assistant's built-in LG webOS TV
integration on TVs updated to webOS 26 (LG firmware 43.00.92+).
After the webOS 26 update, the stock integration shows the TV as off with no sources and can't control anything — even though pairing looks successful. This override makes it work again.
- Based on: the
webostvcomponent fromhome-assistant/core2026.6.1 - Library:
aiowebostv0.7.5 - Upstream issue: home-assistant/core#172703
⚠️ Unofficial workaround, use at your own risk. Remove it once an official fix ships (see § Remove later).
Home Assistant talks to the TV via the aiowebostv library, which pairs using
the classic "LG Remote App" manifest (appId: com.lge.test + a baked-in LG
signature). webOS 26 blacklisted that identity. The TV still issues a
client-key (pairing "succeeds"), but grants the client zero permissions —
every request and subscription, including getPowerState and getVolume,
returns:
401 insufficient permissions (not registered)
So the integration connects but can read nothing and control nothing.
Register with a generic manifest (neutral appId, no LG signature) — the
same approach LGTV Companion
uses. After re-pairing, webOS 26 grants normal permissions again.
The fix does not edit the installed library (HAOS overwrites that on update).
It ships a copy of the webostv component plus _webos26_patch.py, which
replaces six aiowebostv.WebOsClient methods at runtime:
| # | Method | Purpose |
|---|---|---|
| 1 | registration_msg |
the fix — generic manifest instead of the blacklisted LG one |
| 2 | _create_input_ws |
tolerate the pointer-input socket being denied (don't abort connect) |
| 3 | _rx_msgs_input_ws |
park instead of ending the connection early when there's no input socket |
| 4 | get_software_info |
on a 401, return {} instead of aborting connect |
| 5 | subscribe |
on a 401, skip that subscription instead of aborting connect |
| 6 | callback_handler |
a state callback that chokes on a payload must not stall the connection |
Full commented walkthrough: custom_components/webostv/README.md.
It self-disables if aiowebostv is newer than 0.7.5, is idempotent, and is
wrapped so it can never crash Home Assistant startup.
- Copy the
custom_components/webostv/folder from this repo into your HA config, so the final path is/config/custom_components/webostv/__init__.py. Use Studio Code Server, File editor, Samba, or SSH.- Quick shell method:
cd /config git clone https://github.com/Orishas/webostv-webos26-fix /tmp/webos26fix mkdir -p custom_components cp -r /tmp/webos26fix/custom_components/webostv custom_components/
- Quick shell method:
- Restart Home Assistant (Settings → System → Restart).
No configuration.yaml change is needed — a custom_components/ copy overrides
the built-in integration. A one-time "you are using a custom integration webostv"
warning is expected.
A TV already paired under the old manifest holds a zero-permission key. It needs a fresh key under the generic manifest:
- Settings → Devices & Services → LG webOS TV
- If HA shows a Reconfigure / re-authentication prompt for the TV, complete it (keeps the entity ID + history). Otherwise, on the TV entry ⋮ → Delete, then re-add it (SSDP usually re-discovers it, or Add Entry → type the TV's IP).
- Accept the pairing prompt on the TV screen (TV must be on).
The prompt appearing is itself proof the generic manifest works — the blacklisted one showed no prompt at all. TVs on older firmware are unaffected and don't need re-pairing.
The entity should show real state (on/off, volume, current source) with a
populated source_list. The log prints:
Applied webOS 26 patch (generic manifest + 401 tolerance) to aiowebostv 0.7.5
When a fixed aiowebostv / webostv ships in a Home Assistant release, delete
/config/custom_components/webostv/ and restart — HA falls back to the built-in
integration. On each HA update, check:
python -c "import aiowebostv; print(aiowebostv.__version__)"If it's newer than 0.7.5, or issue #172703 is closed, remove this override.
(The patch also self-disables automatically on a newer library.)
- While installed, HA runs the 2026.6.1 copy of the component regardless of
your core version, so you miss later
webostvimprovements. Don't keep it longer than needed. - On some webOS 26 firmware the generic manifest even restores the pointer input socket, so remote buttons work again. On others LG keeps that denied — then everything except button/pointer emulation works.
- Root-cause analysis of the blacklisted manifest and the generic-manifest workaround: @JPersson77 — LGTVCompanion#351.
- Upstream tracking: home-assistant/core#172703.
custom_components/webostv/ is a copy of the webostv integration from
home-assistant/core (version 2026.6.1),
which is licensed under the Apache License 2.0 — see LICENSE. The
only additions are _webos26_patch.py, a small hook in __init__.py, and
version in manifest.json. Not affiliated with or endorsed by LG or the Home
Assistant project.