Home Assistant Control
The reverse direction from Piazza HQ's own Home Assistant integration — instead of pulling sensor data in, these let a Home Assistant automation turn a screen's TV/monitor on or off, or switch a display to a saved layout (light/dark theme included).
All three doors below do the exact same two things and talk to the same Piazza HQ device — pick one for a given device, not more than one. Running two at once just means duplicate entities in Home Assistant for the same screen.
configuration.yaml — the File Editor or Studio Code Server add-on works if you don't have another way inIn Piazza HQ: Settings → Home Assistant Control → Generate Token. This token only ever unlocks two things — turning a screen's TV/monitor on/off, and applying a saved layout to a display. It can't read your calendar, change any other setting, or do anything else.
rest_command: blockIn Home Assistant's configuration.yaml, replacing <host-pi-ip> with your Piazza HQ device's actual LAN address and YOUR_TOKEN with the token from step 1:
Find a screen's device id in Piazza HQ under Settings → Multi-Device, or by asking your token to list them (see the FAQ below).
Settings → System → Restart — a new rest_command: block doesn't take effect until Home Assistant restarts. From then on, any automation (a person leaving home, a sleep-tracker sensor, a time trigger) can call rest_command.piazzahq_screen_off / _on as its action.
Same idea, a different endpoint — POST to /api/saved-layouts/<layout-id>/apply with a JSON body of {"display": "<display-slug>"} and the same Authorization header. Applying a saved layout also switches that display's light/dark theme, since each saved layout stores its own. Find a saved layout's id from the Layout tab's Layout Library, and a display's slug from Settings → Multi-Device.
Double-check the device id and IP address in the YAML — a typo there fails silently from Home Assistant's side (it just gets a 404 back). Confirm Home Assistant actually restarted after you added the block; it won't recognize rest_command.piazzahq_screen_off until it does.
The same token also unlocks three read-only lookup endpoints, useful if you're scripting this by hand: GET /api/automation/screens, /api/automation/displays, and /api/automation/saved-layouts — each returns the exact ids and names you need, with the same Authorization: Bearer header as above.
Yes — a plain curl with the same URL, method, and header from step 2 works from any machine on your network. If that works but the Home Assistant automation doesn't, the issue is in the automation's trigger/condition, not the connection to Piazza HQ.
In Home Assistant: Settings → Add-ons → Add-on Store → search "Mosquitto broker" → install. A few clicks, nothing to configure beyond turning it on.
In Piazza HQ: Settings → Home Assistant Control → check MQTT, then fill in the broker URL (e.g. mqtt://homeassistant.local:1883), and a username/password if your broker requires them. Test Connection, then Save.
Once connected, a Power switch (per screen with TV control set up) and a Layout select (per display) appear in Home Assistant automatically via MQTT Discovery — no restart, no YAML. Look under Settings → Devices & Services → MQTT if you don't see them right away.
Confirm Test Connection actually succeeded in Piazza HQ's settings before saving — a wrong broker URL or bad credentials saves fine but never connects. Also check Home Assistant's own MQTT integration is set up and pointed at the same broker; Piazza HQ publishes discovery messages, but Home Assistant's MQTT integration is what has to be listening for them.
Correct — Piazza HQ connects to a broker, it doesn't run one itself. The Mosquitto add-on (step 1) is the easiest way to get one if you're starting from nothing.
No, and this isn't a bug — most TV remotes and CEC implementations have no reliable "are you on" signal to ask. The switch and select entities are command-only (Home Assistant shows them as assumed state): they'll do the right thing when toggled, but won't reflect a TV someone turned off with its own remote.
HACS is Home Assistant's community add-on store — a separate, well-established project, not something Piazza HQ bundles. The official install runs from a terminal with access to your Home Assistant config folder (the Terminal & SSH add-on, if you're on Home Assistant OS):
Restart Home Assistant, then finish HACS's own one-time setup: Settings → Devices & Services → Add Integration → HACS, and follow its GitHub sign-in prompt (it shows a code and a link to enter it at). Already have HACS? Skip straight to step 2.
The easiest way: in Piazza HQ, go to Settings → Home Assistant Control and click Add to Home Assistant — it hands off to your own Home Assistant instance and drops you straight into HACS's "add this repository" dialog.
Prefer to do it by hand? In HACS: Integrations → ⋮ (top right) → Custom repositories, paste https://github.com/jlauty21/piazzahq-homeassistant, category Integration.
Either way, find "Piazza HQ" in HACS afterward and tap Download, then restart Home Assistant when it asks.
Settings → Devices & Services → Add Integration, search Piazza HQ. Enter your device's address (port 3000) and an automation token — generate one in Piazza HQ under Settings → Home Assistant Control → Generate Token first, if you haven't already.
A Power switch appears for each screen with TV control set up, and a Layout select for each display — real Home Assistant entities with a proper device page, usable in dashboards and automations like anything else. New screens or layouts added in Piazza HQ later show up here automatically within a few minutes, no reload needed.
Two separate things can cause this. First, that button relies on a service (my.home-assistant.io) that needs to know your Home Assistant's address — the first time you use any such link on a given browser, it'll ask for it. Second, and more commonly: a .local address there often won't resolve unless your phone/computer is on the exact same local network as Home Assistant (it doesn't work over Tailscale, cellular, or a different Wi-Fi) — if it hangs, try Home Assistant's real IP address there instead.
This means HACS isn't installed yet — that specific button only works after HACS exists on your instance, since HACS is what registers the ability to understand that link. Go back to step 1.
Technically yes, but don't for the same device — you'd get duplicate switch/select entities for the same screens and displays. Pick whichever one door fits how you like to work.
Looking for the other direction — Home Assistant sensors and devices showing up on your Piazza HQ display? That's covered in the user guide's Settings section.