E-Ink literary/weather/photoframe display powered by HA

Hi everyone,

I've been doing this for a few months and just put the
code up on GitHub: an ambient Inkplate 10 - 9.7″ e-ink dashboard ("Ink Almanac") that
HA drives almost entirely on its own. Battery-powered, estimated ~3 months between
charges. All usecases work as I want them. Claude Code ftw.

Repo: Github Ink-almanac

What it does

Five views rotate across the day:

  • Morning — a giant Didone clock, current weather with a minutely
    nowcast ("clearing in 21 min"), 3-day forecast, plus a short poem or
    aphorism with a 400-character "smart pill" gloss on one word in it.
  • Daytime — a daily curated photograph or typeset poem fills the
    panel.
  • Weather — slower, fuller view: two locations, 5-day forecast,
    sun/moon, and "what's happening this week" astronomy.
  • Night — natural-language clock ("quarter to ten") + a moonlit
    woodblock print.
  • Now-Playing — whenever Sonos starts, the panel switches to album
    art + track info. Classical recordings get a composer-anchored layout
    (work / movement / named performers); pop falls back to artist /
    title / album.

Tap the frame to flip between the day's main view and the forecast —
a small dot near the battery icon confirms the tap before the next
image actually paints.

Sample (i’m allowed to add only one image in the post)

(Screenshots of all five faces are in the README.)

How HA fits in

This is the part this forum might find most interesting — there's no
ESPHome involved; the device is custom firmware that just polls the
renderer and reads MQTT for face changes. HA does:

  • Face rotation via a per-tier alternation tick (every 15 min) that
    publishes inkplate/command/active_mode (retained).
  • Renderer-input publishing — clock every minute, weather on every
    sensor change, sonos on state_changed, all via rest_command: POSTs
    to a small Node renderer running on a Mac mini.
  • Gesture handling — tap MQTT events flip a phase-offset helper that
    XORs against the schedule's natural parity, so a tap toggles between
    main view and weather without persistent state.
  • Sonos override — when media_player.<sonos> transitions to
    playing, an input_text.inkplate_active_override flips and the
    device polls per-minute for ~60 s track-change latency.
  • Operator-pushable wake schedule — per-tier full_min / poll_min
    / partial_min lives in a YAML file; an automation validates it and
    republishes to retained MQTT on every edit. The firmware picks it up
    on the next wake.

What you need on the HA side: Mosquitto + Advanced SSH add-ons; MQTT,
Sonos, Open-Meteo, and (optional) OpenWeatherMap One Call 3.0
integrations; HA Companion for low-battery pings. Full inventory and
walkthrough in the repo's README and SETUP.md.

Costs

Total cost was around €220 + an IKEA frame:

  • Inkplate 10 (9.7″, 1200×825, 3-bit greyscale) from Soldered
  • LSM6DSO IMU breakout for tap detection (one wire to solder — explained
    in the README's Build section)
  • 5000 mAh Li-ion battery
  • IKEA RÖDALM shadow-box frame, 12×16″

Add to that Claude Code subscription + some Claude API calls (around 20$) for curation of the corpus and some realtime bits (like chosing “Starship launch today” vs “Lyrid meteor peak” in the STARS pill - something like a couple of $0.01 per day). And a lot of time (it was amazingly fun, so it is worth it).

The README is fairly detailed already, and the OpenSpec change log under openspec/ has the
design rationale for most of the trickier bits.

Have fun.

1 Like