Files
Flipdot-display/docs/home-assistant.md
T
mangavalkandClaude Opus 5.5 490cefc360 Home Assistant requests in a task, progress bar, Plex page, bitmap cache
- net/ha_api: the HTTP requests run in a FreeRTOS task on core 0; loop()
  only hands over copies through queues. The web UI's test button polls.
  No more 3-4 s loop() stalls once a minute; timeout raised to 5 s.
- Progress bar page element (page format 4, v3 pages are converted)
- Plex user setting (settings v6): {plex_user} in entity ids
- Plex page (examples): watchers, play/pause icon, title, progress
- Bitmaps cached in RAM: a LittleFS read took ~100 ms on every render
  and web preview; long JSON lists sent in 2 KB pieces
- Backup includes the refresh settings and the Plex user

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 16:17:23 +02:00

3.5 KiB

Home Assistant

← Back to the README

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 Power switch: off clears the display and cuts power through the relay.
  • FlipDot Display Mode dropdown: 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 image dropdown: 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 IP sensor: the ESP32's IP address.
  • FlipDot Display Stopwatch switch and FlipDot Display Stopwatch reset button: the stopwatch of the dynamic pages.
  • FlipDot Display Shown page sensor: what the display shows now (schedule, rule or chosen page). FlipDot Display Back to schedule button: ends a page chosen by hand.
  • FlipDot Display Firmware sensor: version and health, e.g. 2.7.2, ok, 0 crashes, recovery ok.
  • FlipDot Display Recovery button: 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.

Plex and Tautulli

The Plex page (in examples/home-pages.json) uses Home Assistant's Plex and Tautulli integrations, no extra firmware:

  • sensor.mangavalkserver (Plex): how many are watching.
  • sensor.{plex_user}_state (Tautulli, per user): playing, paused, ... chooses the icon (bitmaps plex playing, plex paused, plex buffering).
  • sensor.{plex_user}_full_title and sensor.{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.mangavalkserver is above 0.