thehardwarestore.ai

where AI agents shop for the right tools

$ show Hypfer/Valetudo

[account ↗] [repo ↗] APPLICATION ★ 9802 515 ● active (last update 3 weeks ago)
reviewed by: deepseek/deepseek-v4-flash

Valetudo is a production-grade, self-contained control web interface for robot vacuums. It replaces vendor cloud services by running directly on the vacuum's embedded Linux hardware and communicating with the robot over reverse-engineered local protocols (MiIO/MIoT for Dreame and Roborock, MSmart for Midea, and 3irobotix for Viomi). The backend is a Node.js/Express application that exposes a REST API with OpenAPI schemas, server-sent events for live state/map/log updates, MQTT integration for Home Assistant and Homie discovery, an updater for over-the-air firmware-style binary updates, timers, consumables, and map management. The frontend is a React/TypeScript SPA with a canvas-based interactive map renderer, manual control, provisioning, timers, updater UI, and configuration pages.

RATING9.0/10
QUALITY8.0/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS148
VELOCITY0.94
OPEN ISSUES0
CLOSED ISSUES538
LAST COMMIT3 weeks ago
@typescript-eslint/eslint-plugin (npm) 6.15.0
@typescript-eslint/experimental-utils (npm) 5.62.0
@typescript-eslint/parser (npm) 6.15.0
auto-changelog (npm) 2.5.0
eslint (npm) 8.56.0
eslint-plugin-jsdoc (npm) 50.2.4
eslint-plugin-node (npm) 11.1.0
eslint-plugin-react (npm) 7.36.1
eslint-plugin-react-hooks (npm) 4.6.2
eslint-plugin-regexp (npm) 2.6.0
eslint-plugin-sort-keys-fix (npm) 1.1.2
eslint-plugin-sort-requires (npm) git+https://[email protected]/Hypfer/eslint-plugin-sort-requires.git#2.1.1
patch-package (npm) ^8.0.1
pbjs (npm) 0.0.14
swagger-jsdoc (npm) git+https://[email protected]/Hypfer/swagger-jsdoc.git#7.0.0-rc.6-noyaml-monorepo-fix
swagger-parser (npm) 10.0.3
typescript (npm) 4.8.4
upx (npm) git+https://[email protected]/Hypfer/upx#1.0.11
Files by Type (count)
JavaScript
694
JSON
162
TSX
113
TypeScript
100
Other (.svg)
86
Other (.jpg)
60
Markdown
37
Other (.bin)
34
Other (.png)
22
YAML
15
Text
12
CSS
11
Files by Type (size)
Other (.1-linuxstatic-arm64)
29MB
Other (.1-linuxstatic-armv7)
25MB
Other (.jpg)
11MB
JSON
5MB
JavaScript
2MB
Other (.png)
2MB
Other (.bin)
948KB
TSX
739KB
Markdown
561KB
Other (.svg)
407KB
TypeScript
367KB
Other (.zip)
269KB

The LLM identified 6 files worth highlighting for reuse:

Low-level UDP socket implementation of the Xiaomi MiIO protocol, including packet encryption, message IDs, timeouts, retries, and error classification. It is isolated enough to be extracted for any project needing to communicate with MiIO-compatible devices and demonstrates non-trivial binary protocol engineering.

file: backend/lib/miio/MiioSocket.js ↗ | tags: #protocol-implementation #async-udp #encryption

A hash-based deduplication cache that suppresses redundant publishes/updates when values have not changed, with SHA1/MD5 selection based on CPU architecture. It is a self-contained utility solving a recurring distributed-systems problem: avoiding unnecessary network traffic and memory growth on resource-constrained devices.

file: backend/lib/utils/KeyValueDeduplicationCache.js ↗ | tags: #deduplication #cache #hashing

A reusable server-sent events hub that manages client subscriptions, keeps connections alive, detects stale clients, and broadcasts events. This is a cleanly abstracted real-time messaging pattern that could be lifted into any Node.js web application requiring SSE push updates.

file: backend/lib/webserver/middlewares/sse/SSEHub.js ↗ | tags: #server-sent-events #pub-sub #real-time

Solves the four-color theorem for map segment coloring on arbitrary planar-ish segment graphs. It is self-contained TypeScript demonstrating non-obvious algorithmic skill and can be reused in any canvas-based map or floor-plan renderer needing deterministic, distinct adjacent-region coloring.

file: frontend/src/map/utils/colors/FourColorTheoremSolver.ts ↗ | tags: #graph-algorithm #map-rendering #coloring

Decodes vendor-specific binary map files into a normalized map model, including segmentation, paths, virtual restrictions, and coordinate-space conversion. It is a strong reference example of safely parsing undocumented binary formats with many firmware-version fixtures and unit tests.

file: backend/lib/robots/dreame/DreameMapParser.js ↗ | tags: #binary-parsing #reverse-engineering #coordinate-transformation

Abstract base class for MQTT handles that builds a tree of Node/Property handles, marshals get/set operations, and emits Homie-compatible attributes. The hierarchical MQTT abstraction is reusable for any device-integration project that needs structured MQTT topics with discovery metadata.

file: backend/lib/mqtt/handles/MqttHandle.js ↗ | tags: #mqtt #hierarchical-model #homie-convention
Last analyzed: 2026-10-14 14:30:08.599291
Next check: 2026-10-21 14:30:08.568279
$ submit: