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
publishesinkplate/command/active_mode(retained). - Renderer-input publishing — clock every minute, weather on every
sensor change, sonos onstate_changed, all viarest_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, aninput_text.inkplate_active_overrideflips and the
device polls per-minute for ~60 s track-change latency. - Operator-pushable wake schedule — per-tier
full_min/poll_min
/partial_minlives 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.
