# LG TV Bridge — consolidated, fixed, deployed (2026-06-01) ## State: DONE, live, verified end-to-end. Single MQTT→HA bridge now runs on **steel141** as systemd `lgtv-mqtt.service` (User=seth). Repo: `git.sethpc.xyz/Seth/lgtv` (was 0 commits; now pushed). ## What was wrong + what fixed it 1. **Flaky HA state** — old code ping-swept all 254 hosts over SSH every 30s (racy ARP). + I briefly made it worse by deploying a 2nd bridge with the same MQTT `client_id` as the pve173 one → broker eviction war. → Cached-IP probe (`~/.cache/lgtv/last_ip`), sweep only on miss. Single bridge; pve173 service retired. 2. **Won't turn ON** — weak WoL. → unicast+broadcast, ports 9/7, 3 bursts. **TV-side settings are the remaining half** (Quick Start+ / Mobile TV On; prefer wired Ethernet) — only Seth can set these. 3. **power_off failed under systemd** — bscpylgtv key DB defaulted to a CWD-relative path. → pass absolute `key_file_path`. Plus a 2× retry for the "OFF within ~30s of ON" LG quirk (TV not ready for WebSocket control yet). ## Verified live - MQTT ON → TV woke <8s, found at 192.168.0.5, IP cached. - Cache-hit status: 0.041s (was ~1s sweep). - MQTT OFF (settled): power_off in 3.4s → TV off in ~13s. - MQTT OFF (10s after ON, the hard case): retry path → rc=0 → TV off. - Broker: 0 client_id evictions; service 0 restarts. ## Decommissioned pve173 `lgtv-mqtt.service`: stopped, disabled, unit moved to `pve173:/root/.backup/lgtv-mqtt.service.retired` (+ old lgtv_mqtt.py backed up). Reversible: restore the unit file + `daemon-reload` + `enable --now`. ## If something regresses - Logs: `sudo journalctl -u lgtv-mqtt.service -f` (on steel141). - Broker churn check: mosquitto log in CT 301 on pve241, `/var/log/mosquitto/mosquitto.log`, grep `lgtv-bridge already`. - Redeploy from repo: `./install.sh` (needs `$HOMELAB_PASSWORD`). - WebOS pairing key: `/home/seth/.aiopylgtv.sqlite` (steel141, seth). If lost, re-pair with `bscpylgtvcommand ...` from seth's shell (TV prompts). ## Open / deferred - TV-side WoL settings unverified (Seth to confirm on the TV). - No DHCP reservation for the TV (Pi-hole isn't the DHCP server; router is). Not required — cache handles it — but would let us drop the sweep fallback.