Skip to content

Remotely controlling a ViewSonic PX728-4K's power with Google Home + Home Assistant

Posted on:September 3, 2023
5 minute read

My theater setup of projector/AV Reciever/NVIDIA Shield works fairly well, save for one problem: if I want to stream music to the Shield, I want the AV Reciever to turn on, but not the projector. If I stream a video, I want the projector on. Controlling the projector’s power through Google Home sounds the most flexible for this.

What protocol?

My ViewSonic PX728-4K touts “Remote Management”, but doesn’t really say “how”.

Any mention of Google Home or Alexa integrations links to their vRemote support articles, an app which now appears to be broken/delisted. I have to assume the vRemote accounts/services the app relies on, are also poor/broken.

A RS-232/LAN Control Protocol Spec exists for this projector family, but surely a homegrown implementation wasn’t necessary, right?

Some ViewSonic devices support older smart-home ecosystems & business-centric device management. I can’t find any mention of this in my projector’s manual or data sheet, but marketing material indicates “Control 4, Crestron, AMX, PJ Link, and Network Control”, & ViewSonic’s PJ-link troubleshooting article lists the PX728-4K as an applicable model.

Of the listed home automation systems, I could only find Home Assistant support for Crestron and PJLink. Crestron requires a separate controller system, & the PJLink platform is built-in to Home Assistant, so PJLink it is.

Assuming the PJLink troubleshooting article above is accurate, this process should apply to all the following ViewSonic projector models:

LS600W
PG707X
PG707W
PG706HD
PG706WU
LS831WU
LS750WU
LS850WU
LS860WU
LS920WU
LS921WU
PX728-4K
PX748-4K

Note: The PJLink troubleshooting article recommends setting a password, but the password is not used for Home Assistant’s PJLink integration. Set it if you have issues, or if settings passwords gives you the warm fuzzies.

Confirming PJLink compatibility was the most novel part of this journey: the rest is just a combination of other tutorials, nothing novel. That said, I hope this helps confirm someone’s projector is indeed LAN-controllable!

Home Assistant + PJLink

Install Home Assistant

Home Assistant offers several methods for getting a server up and running, or use Home Assistant Yellow if you like paying someone else to set up a Raspberry Pi.

Get your projector’s IP

Follow the “Configuring the LAN Control Settings” portion in your projector’s manual to connect it to your local network/confirm its IP address.

Don’t forget to set “Standby LAN Control” to “On”.

Home Assistant allows you to configure your projector as a Media Player on the PJLink platform.

media_player:
  - platform: pjlink
    host: 192.168.1.232
    name: Projector

Once the projector is added under pjlink, it should appear on Home Assistant’s main dashboard. Try clicking the power button & see what happens!

cross your fingers

Home Assistant may log an error:

2023-09-03 16:28:58.728 ERROR (MainThread) [homeassistant.core] Error executing service: <ServiceCall media_player.turn_on (c:01H9DY0EZ788WH9STDQ2Q3QKG6): entity_id=['media_player.projector']>
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/core.py", line 1990, in _run_service_call_catch_exceptions
    await coro_or_task
  File "/usr/src/homeassistant/homeassistant/core.py", line 2011, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 235, in handle_service
    return await service.entity_service_call(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 870, in entity_service_call
    response_data = await _handle_entity_call(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 942, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/media_player/__init__.py", line 704, in async_turn_on
    await self.hass.async_add_executor_job(self.turn_on)
TimeoutError: timed out

I’m unsure if this is caused by the projector not responding fast enough, or at all. Home Assistant’s service timeouts are not configurable, so not much we can do here.

If nothing happens, ensure your projector is at the IP you specified in configuration.yaml. In my case, I checked http://192.168.1.232/index.asp resolved in my web browser.

Google Assistant + Home Assistant

At this point, the projector’s power can be completely controlled with Home Assistant, either through the web interface or the app.

If you still want Google Home integration (so you can say “Hey Google, turn on the projector”), you’ll need Home Assistant’s Google Assistant integration. This bridges the existing Home Assistant <-> Projector functionality with new Google Home <-> Home Assistant functionality.

If you don’t want to pay for Home Assistant Cloud, the Home Assistant documentation does a thorough job of explaining the manual GCP Project configuration process. If you’ve never set up an externally accessible with a hostname and SSL certificate, Cloudflare Tunnels are a great option: cloudflared connects Home Assistant to Cloudflare’s network, and Cloudflare manages the necessary DNS & SSL certificates.