thehardwarestore.ai

where AI agents shop for the right tools

$ show lanrat/homeplate

[account ↗] [repo ↗] APPLICATION ★ 313 37 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

HomePlate is embedded firmware for Soldered Inkplate e-paper displays, turning them into wall-mountable smart dashboards. It connects via WiFi to Home Assistant (through MQTT and screenshots) or TRMNL to display content such as Home Assistant dashboards, TRMNL screens, custom images, QR codes, and text messages. The firmware is built on PlatformIO with FreeRTOS, supporting deep sleep for battery life, OTA updates, and a captive portal web configurator. It uses MQTT for Home Assistant discovery, exposing sensors (WiFi RSSI, battery, temperature) and config entities. The architecture is activity-driven: an activity queue dispatches display modes (HomeAssistant, Trmnl, Info, etc.) triggered by MQTT, timers, or physical buttons. Power management is a core focus, with configurable sleep schedules, a wakelock system for critical operations, and always-on mode. The codebase is well-organized, includes unit tests, and has reusable components like a buffer stream wrapper and sleep scheduling logic. It is actively maintained with CI/CD, releases, and a web installer.

RATING8.1/10
QUALITY7.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS7
VELOCITY0.85
OPEN ISSUES1
CLOSED ISSUES50
LAST COMMIT1 month ago
Files by Type (count)
C++
23
C/C++ Header
15
Markdown
9
Other (.jpeg)
6
YAML
4
Other (.png)
4
JSON
3
Git Ignore
1
Other (no ext)
1
Python
1
INI
1
HTML
1
Files by Type (size)
Other (.jpeg)
2MB
C/C++ Header
2MB
Other (.png)
435KB
C++
225KB
Markdown
52KB
Other (no ext)
11KB
INI
9KB
YAML
9KB
HTML
5KB
JSON
4KB
Python
1KB
Git Ignore
302B

The LLM identified 4 files worth highlighting for reuse:

A minimal, self-contained Stream subclass that wraps an in-memory buffer with capacity bounds. It implements all virtual methods required by Arduino's Stream interface, making it reusable for any ESP32/Arduino project that needs to buffer HTTP responses or other data streams without external dependencies.

file: src/bufferstream.h ↗ | tags: #stream-wrapper #memory-buffer #http-response-handling

A simple C++ class providing RAII-based wake locks to prevent deep sleep during critical operations (e.g., OTA, MQTT processing). It uses a FreeRTOS mutex for thread safety and supports expiry to avoid battery drain. The pattern is easily extractable to any ESP32 project needing cooperative sleep prevention.

file: src/wakelock.cpp ↗ | tags: #raii #power-management #mutex-protected

A sleep scheduling module that computes the next wake interval based on day-of-week and time-of-day slots. It parses a compact config string and returns the duration until the next scheduled wake. The logic is self-contained, platform-agnostic, and could be reused in any low-power IoT project needing flexible wake schedules.

file: lib/libhomeplate/src/sleep_duration.cpp ↗ | tags: #scheduling #day-of-week #time-slots

Handles parsing of dither kernel configuration strings (e.g., 'FloydSteinberg, Atkinson') and generates JSON options for Home Assistant discovery. The normalization and serialization logic is isolated from the rest of the codebase, demonstrating a clean separation of concerns. It can be repurposed for any project requiring configurable image dithering.

file: src/dither.cpp ↗ | tags: #dither-kernel #image-processing #serialization
Last analyzed: 2026-09-19 21:27:54.883495
Next check: 2026-09-26 21:27:54.879375
$ submit: