Projector Pilot publishes your projector's live state and every control to Home Assistant, Hubitat and any webhook you like. Set it up once, and your smart home drives the projector on its own - no phone on the network, no cloud in the middle.
Home Automation turns Projector Pilot from a remote in your hand into a device your whole house can see. It exposes what the projector is doing - power, input, color mode, the picture figures, lamp hours - and hands your smart home a control for everything the app can change.
Settings › Home Automation is the hub. Pick the platform you run - Home Assistant, Hubitat or Webhooks - and set it up there. You can wire up more than one at a time; they are independent.
Sign in from the app, publish the projector as a sensor, paste one block into your configuration, and sync. From then on Home Assistant drives the projector itself.
http://homeassistant.local:8123 or its IP), then tap Sign in. It is a browser sign-in against your own instance - there is no token to paste. Use your normal Home Assistant login, two-factor and all.sensor.projector_pilot_epson_qb1000b_qb1000w, carrying power, input, color mode, the picture figures and lamp hours.configuration.yaml, restart Home Assistant, then tap Sync With HA.
This is the whole serverless trick. The app writes one command Home Assistant runs to talk to the projector's Web Control, and every script it syncs calls that command with a different verb. Tap Copy block in the app and paste it into configuration.yaml. The example below is illustrative - the app fills in your projector's own address and command name:
shell_command:
projector_pilot_epson: >-
curl -s --max-time 5 --digest -u 'EPSONWEB:'
-H "X-Requested-With: XMLHttpRequest"
-H "Referer: http://192.168.1.50/cgi-bin/webconf"
"http://192.168.1.50/cgi-bin/directsend?{{ verb }}={{ value | urlencode }}"
Example only. The app generates yours with the projector's real IP and a name derived from its serial.
curl runs on the Home Assistant box, not your phone. Home Assistant reaches the projector's IP directly over Web Control, so an automation fires whether or not the app is open and whether or not your phone is even home. The EPSONWEB digest user is the Web Control login; the app uses the Web Control password already saved for the projector.shell_command is actually there, so you find a typo before you build anything on top of it.The Home Assistant screen carries a Setup checklist and a What your Home Assistant has panel, so you are never guessing which step is left. Each row says whether it is done, missing, or could not be told, and says what to do next.
configuration.yaml. Each shows Found, Not installed or Could not tell, with How to install and Open in HACS buttons where they help.Projector Pilot finds out what your Home Assistant has installed and builds around it. It works with the core PJLink integration Home Assistant already ships with, so a PJLink projector you have already added there is a first-class citizen.
configuration.yaml, restart Home Assistant, then tap Sync again.A projector in standby reports very little, so a dashboard would normally go blank. The optional last-known sensor keeps your projector's last readings - the input, lamp or laser hours - in Home Assistant while the projector is off.
configuration.yaml (or add only its lines under an existing template: section) and restart Home Assistant. The app has a Check it is there button that tells you whether Home Assistant has it.After a sync, your Scenes are not stuck inside the app. Each one, plus power, each input, each color mode and each lens memory your projector actually has, is written as a Home Assistant script.
You do not have to hand-build a Lovelace view, and you no longer have to paste one either. When you tap Sync With HA, the app builds a complete Projector Pilot dashboard directly in Home Assistant over its own API: the projector's live state and a button for every Scene and control it synced. It appears in your Home Assistant sidebar as Projector Pilot - open it and it is done.
configuration.yaml once and restart Home Assistant (the one manual step - Home Assistant does not let apps add that command remotely).Whether it is built for you or you paste it, the dashboard is the same - a state card plus a button for each control (illustrative snippet):
views:
- title: Projector
cards:
- type: entity
entity: sensor.projector_pilot_epson_qb1000b_qb1000w
name: Projector
- type: button
name: Power On
tap_action:
action: perform-action
perform_action: script.turn_on
target:
entity_id: script.projector_pilot_power_on
- type: button
name: Movie Night
tap_action:
action: perform-action
perform_action: script.turn_on
target:
entity_id: script.projector_pilot_scene_movie_night
Example only. Your dashboard carries your projector's real entity and your own Scenes.
On Hubitat, Projector Pilot mirrors the projector onto a device in your hub through the Maker API, so Rule Machine can read and act on power, mute and input.
Webhooks are the catch-all. The app posts to a URL of yours when the projector powers on, powers off, changes input or recalls a Scene - a Home Assistant webhook, Node-RED, IFTTT, or anything that takes JSON.
http://homeassistant.local:8123/api/webhook/your-id.The default payload is plain JSON - an event, the projector, and the value that changed:
{
"event": "scene_recalled",
"projector": "Epson QB1000B/QB1000W",
"scene": "Movie Night",
"power": "on",
"input": "HDMI1",
"color_mode": "Cinema",
"timestamp": "2026-09-23T20:14:07Z"
}
Example payload. An input-change or power event carries the fields relevant to it.
Make sure the address you entered is the one you actually reach Home Assistant on, including the port (usually :8123). The sign-in is a real browser login against your instance, so your username, password and two-factor code all apply. On a phone the sign-in completes whether the in-app browser hands the result back or the local callback returns first; if it still stalls, close the sheet and tap Sign in again.
The sensor is published while the app is open and Send the projector's state is on, so open the app and confirm that toggle. Then check Developer Tools › States in Home Assistant and filter on projector_pilot. A projector in standby publishes very little; wake it and the readings fill in.
The scripts are written by Sync With HA, which needs the shell_command block already pasted into configuration.yaml and Home Assistant restarted once. Run Test Connection first - it tells you whether the block is present. Then Sync again. If old, dead scripts are cluttering the list, use Remove orphaned scripts.
That is the point of the shell_command block - it is what lets Home Assistant reach the projector's IP on its own. If it only works with the app open, the block is probably not pasted or Home Assistant was not restarted after pasting it. Confirm with Test Connection, restart Home Assistant, and Sync.
Home Automation is a one-time add-on. No subscription, no account, no cloud. One purchase unlocks it on every platform you own.
No. Once you paste the one shell_command block into Home Assistant and sync, Home Assistant sends commands straight to the projector's IP address. Projector Pilot is only the setup tool; after that, Home Assistant talks to the projector on its own, whether your phone is home or not.
As a sensor, for example sensor.projector_pilot_epson_qb1000b_qb1000w, carrying power, input, color mode, the picture figures and lamp hours, updated whenever they change while the app is open. Turn on Sync Advanced Controls and the app also writes a Home Assistant script for every Scene, plus power, each input, each color mode and each lens memory your projector has.
Home Automation is a paid add-on, a one-time purchase, separate from Projector Pilot Pro. A bundle buys both together at a saving. See the pricing page.