- Home Assistant attributes can be paths into lists (forecast.1.condition). - Date elements can show a day ahead (day offset 0-7). - Pages hold 16 elements (page format 6; the old formats are frozen at 8). Pages are reset in place (clearPage), not through a 4 KB temporary. - Verwachting page: today (icon, temperature, max/min) and the next 2 days with 7 x 7 icons (weer7 <condition>), from a template sensor (docs/home-assistant.md). - examples/home-pages.json is exported from the display with all pages and their icons, private entity id parts replaced by placeholders (tools/export_examples.py replaces tools/make_example_pages.py). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4.8 KiB
Home Assistant
The ESP32 connects to Home Assistant in two ways:
- MQTT (with discovery): the display's own switches, dropdowns, sensors and buttons.
Broker, user and password are in the web UI, Home Assistant tab (an empty broker uses
secrets.h). Changing them restarts the ESP32. - REST API: values of any entity for the dynamic pages and the trigger rules. Set the
URL (empty:
http://<broker>:8123, plain http only, use the IP address) and a long-lived access token (Home Assistant, your profile, Security tab) in the same tab.
Entities
FlipDot Display Powerswitch: off clears the display and cuts power through the relay.FlipDot Display Modedropdown: what is shown during the day, a dynamic page ("Clock" first) or one of the bitmaps (the same choice as in the web UI).FlipDot Display Off imagedropdown: what is left on the dots when the display switches off (at night or with the Power switch): blank or one of the bitmaps.FlipDot Display IPsensor: the ESP32's IP address.FlipDot Display Stopwatchswitch andFlipDot Display Stopwatch resetbutton: the stopwatch of the dynamic pages.FlipDot Display Shown pagesensor: what the display shows now (schedule, rule or chosen page).FlipDot Display Back to schedulebutton: ends a page chosen by hand.FlipDot Display Firmwaresensor: version and health, e.g.2.7.2, ok, 0 crashes, recovery ok.FlipDot Display Recoverybutton: restarts into the recovery app for 10 minutes.
The unique ids of these entities never change, so automations and dashboards keep working after firmware updates.
Values on dynamic pages
A Home Assistant value element on a page shows an entity's state or one of its attributes, as a number (multiplier, decimals, auto unit, without minus sign), a duration, a time from a timestamp, or with own texts per state (see the web UI).
Home Assistant values on the shown page are read every minute, one entity at a time,
by a task of their own (on the ESP32's other core), so a slow or unreachable Home
Assistant never holds up the display or the web UI. An unknown or unreachable value shows
--. The display only changes
when the shown text changes, so round values with the decimals setting.
Rules
The schedule can bring a page to the front from a Home Assistant
state, e.g. the 3D printer page while sensor.mainsailos_current_print_state is
printing. Each rule is read at its own interval; when Home Assistant can't be reached it
is read once a minute at most, so the display keeps running.
Weather forecast
Weather entities have no forecast attribute anymore (since Home Assistant 2024.3); the
forecast comes from the weather.get_forecasts action. The Verwachting page reads it
from a template sensor that keeps the next days as an attribute. Add to
configuration.yaml (and restart Home Assistant, or reload the template entities):
template:
- trigger:
- trigger: time_pattern
minutes: /30
- trigger: homeassistant
event: start
action:
- action: weather.get_forecasts
data: { type: daily }
target: { entity_id: weather.knmi_home }
response_variable: f
sensor:
- name: Weer verwachting
unique_id: weer_verwachting
state: "{{ f['weather.knmi_home'].forecast[0].condition }}"
attributes:
forecast: "{{ f['weather.knmi_home'].forecast[:4] }}"
The page then reads sensor.weer_verwachting with attribute paths: forecast.0 is today,
forecast.1 tomorrow, forecast.2 the day after, e.g. forecast.1.condition (chooses the icon weer7 <condition>,
7 x 7 dots), forecast.1.temperature (max) and forecast.1.templow (min). The weekdays
are Date elements with a day offset. Use another weather entity by replacing
weather.knmi_home in the YAML (and on the page, for today's icon and temperature).
Plex and Tautulli
The Plex page (in examples/home-pages.json) uses Home Assistant's Plex and Tautulli integrations, no extra firmware:
sensor.plex_server(Plex, named after your server): how many are watching.sensor.{plex_user}_state(Tautulli, per user):playing,paused, ... chooses the icon (iconsplex playing,plex paused,plex buffering).sensor.{plex_user}_full_titleandsensor.{plex_user}_progress(Tautulli, per user): the title and the progress bar. Home Assistant creates these disabled: enable them on the Tautulli user's device in Home Assistant.
{plex_user} is the Plex user set in the web UI (Home Assistant tab), written the way Home
Assistant puts it in entity ids (MangaValk -> mangavalk). A rule (Schedule tab) adds
the page to the rotation while sensor.plex_server is above 0.