Custom HA Projects
Echo Hack · After the install

Home Assistant side

Everything the Show shows and hears comes from Home Assistant. This page covers the dashboard choices, the voice pipeline the Show will talk to, the optional streaming server, and what to build with it.

Where the dashboards come from

You build dashboards in Home Assistant exactly as usual. On the Show's device page in HA (Settings → Devices & services → the Show → Configuration) there are two settings that decide what it displays:

SettingChoices
Dashboard modeOff, Drawn on the device, or Streamed
Dashboard to showA list of every dashboard and view you have. The list refreshes within five minutes when you add or rename one. Automatic means a Rooms dashboard built from your HA areas (drawn mode) or your default dashboard (streamed mode).
Dashboard when idleOn: the dashboard replaces the clock whenever nothing else is on screen.

Drawn on the device

The Show reads the dashboard's card configuration from HA and draws it itself, in your theme's colours, at 960 × 480. Taps are instant, edits appear within a second or two. Tap a tile to toggle, slide across a light, cover or thermostat to set brightness, position or temperature, drag up and down to scroll.

Works: tile, button, entity, light, thermostat, entities, glance, heading, markdown, sensor and graph cards (history, statistics, mini-graph-card, apexcharts), gauge, picture cards, grid, stacks, layout-card, conditional and visibility rules, and the Mushroom entity, chips, title and template cards.

Does not draw: other custom cards, card-mod, button-card JavaScript (a placeholder tile names the card), and built-in pages such as Energy, History and Logbook.

Streamed (dashcast)

A small server called dashcast runs in Docker next to HA. It opens the dashboard in a headless Chrome, signed in with a long-lived token, and streams only the changed pixels to the Show, encrypted with a key you choose. The Show shows exactly what a browser would, custom cards and Energy page included, with about a fifth of a second of touch lag.

Best for the fancy dashboards. Drawn mode is best for a snappy room controller.

Running dashcast

dashcast needs a Docker host that can reach Home Assistant over HTTP. Not napoli: the HA VM uses a macvtap NIC and napoli itself cannot talk to it. Rabies (10.0.0.36) already runs the observability compose stack and reaches 10.0.0.50, so it is the natural home; Roma or torino work too.

Make a token

In HA, create a user that is not an administrator (Settings → People → Users), log in as it once, and create a long-lived access token from its profile. dashcast signs in with that token; a non-admin user limits what a leaked token could do.

Compose file

mkdir -p /opt/dashcast && cd /opt/dashcast
cat > .env <<'END'
HA_TOKEN=paste-the-long-lived-token
DASHCAST_KEY=a-long-random-string
END
cat > docker-compose.yml <<'END'
services:
  dashcast:
    image: ghcr.io/huskerminion/techo5-dashcast:latest
    restart: unless-stopped
    ports:
      - "10.0.0.36:9555:9555"
    environment:
      HA_URL: http://10.0.0.50
      HA_TOKEN: ${HA_TOKEN}
      DASHCAST_KEY: ${DASHCAST_KEY}
    shm_size: 256m
END
docker compose up -d

Port 9555 stays on the LAN. Never forward it from the router.

Point the Show at it

Swipe down on the Show → Connections → Dashboard server: enter 10.0.0.36:9555 and the key. Or from HA call the action esphome.<node>_dashboard_server with address and key. Then set Dashboard mode to Streamed and pick the dashboard.

Voice pipeline

The Show detects the wake word by itself and streams the speech to Home Assistant's Assist. Assist needs a speech-to-text engine and a text-to-speech voice. Nothing is configured yet on ha.daha.us, so this is the work to do before the Show arrives:

PiecePlan
Speech to textWhisper (Wyoming add-on). On the HA VM's two vCPUs a command takes two to four seconds to transcribe. For snappy replies run Whisper on kuru, which already serves Ollama, and point HA at it over the Wyoming protocol.
Text to speechPiper (Wyoming add-on). Fast enough on the VM.
Wake wordOn the device (microWakeWord). No openWakeWord add-on needed.
ConversationAssist handles device control ("turn off the office lights", "set a timer for ten minutes", "is the front door open"). For open questions, add Ollama on kuru as the conversation agent with "prefer handling commands locally" turned on.
Exposed entitiesSettings → Voice assistants → Expose. Lights, plugs, the alarm, covers, and the cameras for "show me the driveway".

The Show's speaker is fine for spoken replies and radio. For music, send Music Assistant to a Cast speaker or a TV instead.

What the Show exposes in HA

Beyond the voice satellite and the dashboard settings, the device offers a media player, its front camera, an update entity, and a set of ESPHome actions you can call from automations:

ActionUse
home_show_cameraPop a camera on the screen for N seconds. Doorbell rings, show the front door.
home_camerasSet the list of cameras available on its Cameras page.
announce_houseSay something on every other techo5 Show in the house.
timer_start, alarm_set, reminder_setTimers, alarms and reminders that ring on the device even if HA is down. alarms_follow wires input_datetime helpers to it.
screen_night_hoursDim or black out the screen between two times.
calendar_sources, calendar_showWhich HA calendars to show and pop up.
home_weather, home_slideshow, home_radioWeather entity for the clock, photo source for the idle screen, radio stations.
intercom_call, phone_call, phone_accountShow-to-Show intercom, and SIP calling if you sign it into a provider.
ssh_keysDrop an SSH public key on it. SSH is off by default and key-only.

Ideas for this house

Trusted network note: the Show's camera and screenshot pages (http://<show>:8181/screen.png) have no authentication. Keep it on the IoT VLAN with the other cameras, not on a guest network.