{"adoption": {"forks": 260, "observed_at": "2026-08-28T04:06:33.879478+00:00", "stars": 2281}, "canonical_url": "https://ross.abutalabs.com/products/dustcloud", "card": {"archived": false, "artifact_type": "application", "description": "Xiaomi Smart Home Device Reverse Engineering and Hacking", "domain": ["iot", "security", "reverse-engineering", "robotics"], "enriched": true, "function": ["reverse-engineering", "security", "embedded"], "health_score": 20, "homepage": null, "language": "C", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "abandoned", "member_repos": ["dgiese/dustcloud"], "name": "dgiese/dustcloud", "platform": ["embedded", "iot"], "pushed_at": "2024-02-16T21:41:35+00:00", "repo": "dgiese/dustcloud", "stars": 2281, "tags": ["xiaomi", "vacuum-robots", "rooting", "cloud-emulation", "smart-home", "firmware-hacking", "linux"], "topics": ["iot", "xiaomi", "xiaomi-smart", "root", "hacking", "vacuum", "vacuum-cleaner"], "urls": [], "use_cases": ["root xiaomi vacuum robot without voiding warranty", "reverse engineer xiaomi smart home devices", "emulate xiaomi cloud locally", "flash custom firmware on xiaomi vacuum", "cut xiaomi vacuum off from cloud", "hack xiaomi iot devices"], "what_it_is": "A research project for reverse engineering and rooting Xiaomi Smart Home devices, including robot vacuums, providing methods to root devices without breaking the warranty seal. It served as a reference cloud emulation for Xiaomi devices but is now outdated, with vacuum functionality integrated into Valetudo.", "when_to_avoid": ["wanting a maintained local control solution for Xiaomi vacuum robots - use Valetudo instead", "looking for actively supported rooting instructions for current devices", "needing a general-purpose Xiaomi device control library - use python-miio instead"], "when_to_choose": ["researching Xiaomi IoT device security or firmware internals", "needing historical documentation, teardowns, and UART logs for Xiaomi devices", "studying cloud emulation approaches for smart home devices"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/dustcloud", "repo": "dgiese/dustcloud", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.879478+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:41:21.137687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8d0f194ed26ab5005f8ec271fd77144dc4cc612ccc02f56ed7efb487a2f3f0b4", "fetched_at": "2026-08-28T04:06:33.879478+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dgiese/dustcloud"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.879478+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:41:21.137687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8d0f194ed26ab5005f8ec271fd77144dc4cc612ccc02f56ed7efb487a2f3f0b4", "fetched_at": "2026-08-28T04:06:33.879478+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dgiese/dustcloud"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:41:21.137687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8d0f194ed26ab5005f8ec271fd77144dc4cc612ccc02f56ed7efb487a2f3f0b4", "fetched_at": "2026-08-28T04:06:33.879478+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dgiese/dustcloud"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.879478+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.879478+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.879478+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:41:21.137687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8d0f194ed26ab5005f8ec271fd77144dc4cc612ccc02f56ed7efb487a2f3f0b4", "fetched_at": "2026-08-28T04:06:33.879478+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dgiese/dustcloud"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.879478+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.879478+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:41:21.137687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8d0f194ed26ab5005f8ec271fd77144dc4cc612ccc02f56ed7efb487a2f3f0b4", "fetched_at": "2026-08-28T04:06:33.879478+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dgiese/dustcloud"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.879478+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.879478+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.879478+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:41:21.137687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8d0f194ed26ab5005f8ec271fd77144dc4cc612ccc02f56ed7efb487a2f3f0b4", "fetched_at": "2026-08-28T04:06:33.879478+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dgiese/dustcloud"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.879478+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.879478+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:41:21.137687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8d0f194ed26ab5005f8ec271fd77144dc4cc612ccc02f56ed7efb487a2f3f0b4", "fetched_at": "2026-08-28T04:06:33.879478+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dgiese/dustcloud"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:41:21.137687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8d0f194ed26ab5005f8ec271fd77144dc4cc612ccc02f56ed7efb487a2f3f0b4", "fetched_at": "2026-08-28T04:06:33.879478+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dgiese/dustcloud"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:41:21.137687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8d0f194ed26ab5005f8ec271fd77144dc4cc612ccc02f56ed7efb487a2f3f0b4", "fetched_at": "2026-08-28T04:06:33.879478+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dgiese/dustcloud"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:41:21.137687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8d0f194ed26ab5005f8ec271fd77144dc4cc612ccc02f56ed7efb487a2f3f0b4", "fetched_at": "2026-08-28T04:06:33.879478+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dgiese/dustcloud"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3175, "days_push": 929, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}