{"id":51082039,"url":"https://github.com/michailjovic/anyvac-card","last_synced_at":"2026-06-26T01:00:44.402Z","repository":{"id":364842119,"uuid":"1269203554","full_name":"Michailjovic/anyvac-card","owner":"Michailjovic","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-20T16:36:21.000Z","size":245,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-23T19:29:29.090Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Michailjovic.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-14T12:33:15.000Z","updated_at":"2026-06-20T16:35:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Michailjovic/anyvac-card","commit_stats":null,"previous_names":["michailjovic/anyvac-card"],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/Michailjovic/anyvac-card","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michailjovic%2Fanyvac-card","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michailjovic%2Fanyvac-card/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michailjovic%2Fanyvac-card/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michailjovic%2Fanyvac-card/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Michailjovic","download_url":"https://codeload.github.com/Michailjovic/anyvac-card/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Michailjovic%2Fanyvac-card/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34798183,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-23T19:02:12.095Z","updated_at":"2026-06-26T01:00:44.365Z","avatar_url":"https://github.com/Michailjovic.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AnyVac Card\n\nA modern, universal Home Assistant Lovelace card for robot vacuums.\n\nPick **where** to clean, not **how**: put a custom floorplan (or the vacuum's map) behind\nclickable rooms, prepare 1–3 presets per vacuum, and clean a room — or the whole flat — in a\nsingle tap. Room cleaning is **calibration-free** thanks to native Home Assistant Areas.\n\n\u003e Successor to the Roborock-only `roborock-vacuum-card`, rebuilt around a vendor-agnostic model.\n\u003e Roborock first; Valetudo and others to follow.\n\n## Features\n\n- **Configurable image base** — a custom photo / SVG floorplan, the vacuum's map, or both\n  (`combined`).\n- **Calibration-free room cleaning** — clickable rooms mapped to Home Assistant Areas, cleaned\n  via native `vacuum.clean_area`. No pixel↔millimetre calibration required.\n- **Presets** — 1–3 named presets per vacuum (suction, mop mode/intensity, water, repeats),\n  decoupled from room selection. Set a per-vacuum default and just pick rooms.\n- **Basic control** — start / pause / stop / dock / locate, plus select-all (whole flat).\n- **Status** — mapped status label and colour, battery, current room, error, progress.\n- **GUI editor** — configure everything (vacuums, rooms, presets, appearance) without writing YAML.\n\n## Requirements\n\n- A vacuum integration exposing a `vacuum.*` entity (Roborock official integration recommended).\n- For calibration-free room cleaning: Home Assistant **2026.3+** (native `vacuum.clean_area`)\n  with your vacuum's segments mapped to HA Areas (vacuum entity → settings → *Map vacuum\n  segments to areas*). Older setups can use the `segment` or `script` clean strategies.\n\n## Installation\n\n### HACS (recommended)\n\n1. HACS → **⋮** → **Custom repositories**.\n2. Add `https://github.com/Michailjovic/anyvac-card` with category **Dashboard**.\n3. Install **AnyVac Card** and reload your browser.\n\n### Manual\n\nCopy `dist/anyvac-card.js` to `config/www/` and add it as a dashboard resource\n(`/local/anyvac-card.js`, type *JavaScript Module*).\n\n## Configuration\n\nMinimal:\n\n```yaml\ntype: custom:anyvac-card\nvacuums:\n  - entity: vacuum.s8\n```\n\nFull example:\n\n```yaml\ntype: custom:anyvac-card\nbase: image\nvacuums:\n  - entity: vacuum.s8\n    name: S8\n    clean_strategy: area          # area (default) | segment | script\n    image_base:\n      src: /local/anyvac/flat.svg\n    regions:\n      - id: kitchen\n        name: Kitchen\n        area_id: kitchen          # HA Area → used by vacuum.clean_area\n        icon: mdi:silverware-fork-knife\n        shape: { kind: rect, x: 10, y: 12, w: 28, h: 22 }   # percentages\n      - id: living\n        name: Living room\n        area_id: living_room\n        shape: { kind: rect, x: 40, y: 12, w: 35, h: 30 }\n    presets:\n      - id: dry_max\n        name: Dry · max\n        icon: mdi:fan\n        default: true\n        clean_type: dry\n        suction: max\n      - id: wet_deep\n        name: Wet · deep\n        icon: mdi:water\n        clean_type: wet\n        suction: \"off\"\n        mop_mode: deep\n        mop_mode_entity: select.s8_mop_mode\n        water: medium\n        water_entity: select.s8_water\n```\n\n### Options (summary)\n\n| Card | Type | Description |\n|------|------|-------------|\n| `base` | `image` \\| `map` \\| `combined` | Default base layer (per-vacuum override available). |\n| `vacuums` | list | One entry per vacuum. |\n| `region_border_normal` / `region_border_selected` | number | Room outline widths (px). |\n| `region_icon_hidden` | bool | Hide all room icons. |\n\n| Vacuum | Type | Description |\n|--------|------|-------------|\n| `entity` | string | The `vacuum.*` entity (required). |\n| `image_base.src` | string | Custom photo / SVG floorplan URL. |\n| `map_source.entity` | string | Camera/image entity for the vacuum map. |\n| `clean_strategy` | `area` \\| `segment` \\| `script` | How cleaning is issued (default `area`). |\n| `regions` | list | Clickable rooms (see below). |\n| `presets` | list | 1–3 cleaning presets (see below). |\n\n| Region | Type | Description |\n|--------|------|-------------|\n| `id` / `name` | string | Identifier and label. |\n| `area_id` | string | HA Area for `vacuum.clean_area`. |\n| `segment_id` | number | Fallback for `app_segment_clean`. |\n| `shape` | object | `{ kind: rect, x, y, w, h }` or `{ kind: point, x, y }` (percent). |\n\n| Preset | Type | Description |\n|--------|------|-------------|\n| `name` / `icon` / `color` | string | Display. |\n| `default` | bool | Use when the user just picks rooms. |\n| `suction` | string | `vacuum.set_fan_speed` option. |\n| `mop_mode` / `mop_intensity` / `water` | string | Target values for the bound `select` entities. |\n| `mop_mode_entity` / `mop_intensity_entity` / `water_entity` | string | Entities to apply the above. |\n| `repeats` | number | Passes per room. |\n\n## Roadmap\n\n- **Now:** configurable image base, calibration-free rooms, presets, basic control, editor.\n- **Next:** calibrated interactive map (zones, pin \u0026 go, live robot position).\n- **Later:** companion `anyvac` integration (clean-history thresholds, statistics), more vendors,\n  built-in automation builder.\n\n## License\n\nMIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichailjovic%2Fanyvac-card","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichailjovic%2Fanyvac-card","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichailjovic%2Fanyvac-card/lists"}