{"adoption": {"forks": 41, "observed_at": "2026-08-28T04:04:02.911686+00:00", "stars": 1224}, "canonical_url": "https://ross.abutalabs.com/products/ha_washdata", "card": {"archived": false, "artifact_type": "plugin", "description": "Home Assistant integration for smart-plug appliance monitoring: detects cycles, matches programs, estimates time remaining. Supports washing machines, dryers, dishwashers and more.", "domain": ["iot", "monitoring", "energy"], "enriched": true, "function": ["monitoring", "analytics", "machine-learning", "workflow-automation", "iot"], "health_score": 100, "homepage": "https://3dg1luk43.github.io/washdata-store/", "language": "Python", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["3dg1luk43/ha_washdata"], "name": "3dg1luk43/ha_washdata", "platform": ["python", "self-hosted", "iot"], "pushed_at": "2026-08-26T08:17:26+00:00", "repo": "3dg1luk43/ha_washdata", "stars": 1224, "tags": ["home-assistant", "hacs", "custom-component", "smart-plug", "washing-machine", "dryer", "dishwasher", "power-monitoring", "cycle-detection", "time-remaining", "home-automation", "automation"], "topics": ["appliance-monitoring", "automation", "custom-components", "energy-monitoring", "hacs", "home-assistant", "iot", "numpy", "power-profile", "smart-plug", "time-remaining", "washing-machine", "dishwasher", "dryer"], "urls": [], "use_cases": ["detect when my washing machine finishes its cycle", "estimate time remaining on a dishwasher run from smart plug power data", "track energy usage and cost per laundry cycle in Home Assistant", "recognize which washer program is running based on power curve", "get notified when the dryer is done", "monitor sump pump or air fryer cycles via a smart socket"], "what_it_is": "A Home Assistant custom integration that monitors smart-plug-connected appliances like washing machines, dryers, and dishwashers. It learns appliance power profiles, detects cycle start/stop, matches which program ran via shape correlation, and estimates time remaining and per-cycle energy cost.", "when_to_avoid": ["your smart plug is not rated for the appliance's peak power (fire risk with high-amperage loads)", "you don't use Home Assistant", "you need whole-home energy monitoring rather than single-appliance cycle detection"], "when_to_choose": ["you use Home Assistant with a smart plug (e.g., Shelly, Sonoff) on a high-power appliance", "you want program recognition and phase-aware time-remaining estimates without extra sensors", "you want per-cycle energy and cost tracking frozen at historical prices"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/ha_washdata", "repo": "3dg1luk43/ha_washdata", "role": "main", "score": 83}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.911686+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:15:25.159505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2402fccc9e6c91528924489a70be879511f407b81301eeaa7b31e278bda17277", "fetched_at": "2026-08-28T04:04:02.911686+00:00", "kind": "readme", "missing": false, "url": "https://github.com/3dg1luk43/ha_washdata"}, {"content_hash": "a60f70089a50a113db38d21bfd40486f72fd12291f727a3f0ff83043739ace3c", "fetched_at": "2026-08-29T12:23:38.996470+00:00", "kind": "homepage", "missing": false, "url": "https://3dg1luk43.github.io/washdata-store/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.911686+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:15:25.159505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2402fccc9e6c91528924489a70be879511f407b81301eeaa7b31e278bda17277", "fetched_at": "2026-08-28T04:04:02.911686+00:00", "kind": "readme", "missing": false, "url": "https://github.com/3dg1luk43/ha_washdata"}, {"content_hash": "a60f70089a50a113db38d21bfd40486f72fd12291f727a3f0ff83043739ace3c", "fetched_at": "2026-08-29T12:23:38.996470+00:00", "kind": "homepage", "missing": false, "url": "https://3dg1luk43.github.io/washdata-store/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:15:25.159505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2402fccc9e6c91528924489a70be879511f407b81301eeaa7b31e278bda17277", "fetched_at": "2026-08-28T04:04:02.911686+00:00", "kind": "readme", "missing": false, "url": "https://github.com/3dg1luk43/ha_washdata"}, {"content_hash": "a60f70089a50a113db38d21bfd40486f72fd12291f727a3f0ff83043739ace3c", "fetched_at": "2026-08-29T12:23:38.996470+00:00", "kind": "homepage", "missing": false, "url": "https://3dg1luk43.github.io/washdata-store/"}], "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:04:02.911686+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.911686+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.911686+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:15:25.159505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2402fccc9e6c91528924489a70be879511f407b81301eeaa7b31e278bda17277", "fetched_at": "2026-08-28T04:04:02.911686+00:00", "kind": "readme", "missing": false, "url": "https://github.com/3dg1luk43/ha_washdata"}, {"content_hash": "a60f70089a50a113db38d21bfd40486f72fd12291f727a3f0ff83043739ace3c", "fetched_at": "2026-08-29T12:23:38.996470+00:00", "kind": "homepage", "missing": false, "url": "https://3dg1luk43.github.io/washdata-store/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.911686+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.911686+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:15:25.159505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2402fccc9e6c91528924489a70be879511f407b81301eeaa7b31e278bda17277", "fetched_at": "2026-08-28T04:04:02.911686+00:00", "kind": "readme", "missing": false, "url": "https://github.com/3dg1luk43/ha_washdata"}, {"content_hash": "a60f70089a50a113db38d21bfd40486f72fd12291f727a3f0ff83043739ace3c", "fetched_at": "2026-08-29T12:23:38.996470+00:00", "kind": "homepage", "missing": false, "url": "https://3dg1luk43.github.io/washdata-store/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.911686+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.911686+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.911686+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:15:25.159505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2402fccc9e6c91528924489a70be879511f407b81301eeaa7b31e278bda17277", "fetched_at": "2026-08-28T04:04:02.911686+00:00", "kind": "readme", "missing": false, "url": "https://github.com/3dg1luk43/ha_washdata"}, {"content_hash": "a60f70089a50a113db38d21bfd40486f72fd12291f727a3f0ff83043739ace3c", "fetched_at": "2026-08-29T12:23:38.996470+00:00", "kind": "homepage", "missing": false, "url": "https://3dg1luk43.github.io/washdata-store/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.911686+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.911686+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:15:25.159505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2402fccc9e6c91528924489a70be879511f407b81301eeaa7b31e278bda17277", "fetched_at": "2026-08-28T04:04:02.911686+00:00", "kind": "readme", "missing": false, "url": "https://github.com/3dg1luk43/ha_washdata"}, {"content_hash": "a60f70089a50a113db38d21bfd40486f72fd12291f727a3f0ff83043739ace3c", "fetched_at": "2026-08-29T12:23:38.996470+00:00", "kind": "homepage", "missing": false, "url": "https://3dg1luk43.github.io/washdata-store/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:15:25.159505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2402fccc9e6c91528924489a70be879511f407b81301eeaa7b31e278bda17277", "fetched_at": "2026-08-28T04:04:02.911686+00:00", "kind": "readme", "missing": false, "url": "https://github.com/3dg1luk43/ha_washdata"}, {"content_hash": "a60f70089a50a113db38d21bfd40486f72fd12291f727a3f0ff83043739ace3c", "fetched_at": "2026-08-29T12:23:38.996470+00:00", "kind": "homepage", "missing": false, "url": "https://3dg1luk43.github.io/washdata-store/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:15:25.159505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2402fccc9e6c91528924489a70be879511f407b81301eeaa7b31e278bda17277", "fetched_at": "2026-08-28T04:04:02.911686+00:00", "kind": "readme", "missing": false, "url": "https://github.com/3dg1luk43/ha_washdata"}, {"content_hash": "a60f70089a50a113db38d21bfd40486f72fd12291f727a3f0ff83043739ace3c", "fetched_at": "2026-08-29T12:23:38.996470+00:00", "kind": "homepage", "missing": false, "url": "https://3dg1luk43.github.io/washdata-store/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:15:25.159505+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2402fccc9e6c91528924489a70be879511f407b81301eeaa7b31e278bda17277", "fetched_at": "2026-08-28T04:04:02.911686+00:00", "kind": "readme", "missing": false, "url": "https://github.com/3dg1luk43/ha_washdata"}, {"content_hash": "a60f70089a50a113db38d21bfd40486f72fd12291f727a3f0ff83043739ace3c", "fetched_at": "2026-08-29T12:23:38.996470+00:00", "kind": "homepage", "missing": false, "url": "https://3dg1luk43.github.io/washdata-store/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 19, "rhythm": 99}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 269, "days_push": 7, "days_rel": 11, "gap_med": 4, "n_releases_24m": 24}, "score": 83, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}