{"id":50569763,"url":"https://github.com/agjendem/ha-spond-tracker","last_synced_at":"2026-06-04T17:30:36.102Z","repository":{"id":361375763,"uuid":"1253855616","full_name":"agjendem/ha-spond-tracker","owner":"agjendem","description":"AppDaemon app: Spond → HA local calendars + sensors + events","archived":false,"fork":false,"pushed_at":"2026-05-30T10:18:30.000Z","size":26,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-30T12:05:53.603Z","etag":null,"topics":["appdaemon","hacs","home-assistant","spond"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/agjendem.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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-05-29T22:08:59.000Z","updated_at":"2026-05-30T10:04:13.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/agjendem/ha-spond-tracker","commit_stats":null,"previous_names":["agjendem/ha-spond-tracker"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/agjendem/ha-spond-tracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agjendem%2Fha-spond-tracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agjendem%2Fha-spond-tracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agjendem%2Fha-spond-tracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agjendem%2Fha-spond-tracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/agjendem","download_url":"https://codeload.github.com/agjendem/ha-spond-tracker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agjendem%2Fha-spond-tracker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33916319,"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-04T02:00:06.755Z","response_time":64,"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":["appdaemon","hacs","home-assistant","spond"],"created_at":"2026-06-04T17:30:35.123Z","updated_at":"2026-06-04T17:30:36.086Z","avatar_url":"https://github.com/agjendem.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spond Tracker for Home Assistant\n\n[![HACS Custom](https://img.shields.io/badge/HACS-Custom-41BDF5.svg)](https://hacs.xyz/docs/faq/custom_repositories)\n[![Latest release](https://img.shields.io/github/v/release/agjendem/ha-spond-tracker?display_name=tag\u0026sort=semver)](https://github.com/agjendem/ha-spond-tracker/releases)\n[![Validate](https://github.com/agjendem/ha-spond-tracker/actions/workflows/validate.yml/badge.svg?branch=main)](https://github.com/agjendem/ha-spond-tracker/actions/workflows/validate.yml)\n[![Lint](https://github.com/agjendem/ha-spond-tracker/actions/workflows/lint.yml/badge.svg?branch=main)](https://github.com/agjendem/ha-spond-tracker/actions/workflows/lint.yml)\n[![License: MIT](https://img.shields.io/github/license/agjendem/ha-spond-tracker)](./LICENSE)\n\nA native Home Assistant integration that syncs [Spond](https://www.spond.com/)\nevents and tasks — one calendar per tracked member, per-member sensors, and\nreal-time events on the HA event bus.\n\nBuilt for households where one or more Spond accounts cover overlapping group\nmembers. Events are deduplicated across accounts and matched to the right\nmember by first name.\n\n## Features\n\n- **Per-member calendars** — one calendar entity per tracked member showing\n  upcoming Spond events with status, location, and task details.\n- **Task events** — tasks assigned to a member appear as separate calendar\n  entries (`📋` prefix) at the event's start time.\n- **Multi-account** — add multiple Spond accounts; events are deduplicated\n  across them automatically.\n- **Status-aware** — accepted / declined / unanswered / waitinglist /\n  cancelled shown as emoji prefixes. Declined events are hidden from the\n  calendar. Cancelled events stay visible with a `🚫` prefix.\n- **Per-member sensors** — event count for today and task count, with full\n  detail in attributes.\n- **HA event bus** — fires `spond_event_added`, `spond_event_removed`,\n  `spond_event_changed`, `spond_event_cancelled`, and `spond_task_assigned`\n  between polls. Use these to drive notifications and automations.\n- **Localization** — calendar text and sensor names in English (default) or\n  Norwegian Bokmål (`nb`). Follows your HA language setting automatically.\n\n## Installation\n\n### Via HACS (recommended)\n\n1. HACS → menu (top right) → **Custom repositories**\n2. URL: `https://github.com/agjendem/ha-spond-tracker`, Category: **Integration**\n3. **ADD**, then find *Spond Tracker* in the Integration list → **Download**\n4. Restart Home Assistant.\n5. Go to **Settings → Devices \u0026 Services → Add Integration → Spond Tracker**\n   and follow the setup wizard.\n\n### Manual\n\nCopy `custom_components/spond_tracker/` into your HA config directory under\n`custom_components/`. Restart Home Assistant, then add the integration via UI.\n\n## Prerequisites\n\n- Home Assistant 2023.11 or newer\n- One or more Spond accounts\n\n## Configuration\n\nSetup is fully UI-based. The wizard walks through:\n\n1. **Credentials** — Spond username (email) and password.\n2. **Members** — multi-select which family members to track. Members are\n   discovered from your Spond events automatically; one entry per first name.\n\nAfter setup, go to **Options** to:\n- Change the poll interval (default 30 minutes, range 5–1440).\n- Add a second (or third) Spond account.\n- Remove an account.\n\n## What gets created\n\n### Calendars\n\nOne `calendar.\u003cmember\u003e` entity per tracked member. Each entry shows:\n- **Summary**: `{emoji} {event title}` — emoji reflects the RSVP status\n- **Description**: status, location, address, your tasks, full task list\n- **Task entries**: `📋 {task name} — {event title}` at the event's start time\n\n### Sensors\n\n| Sensor | State | Attributes |\n|--------|-------|------------|\n| `sensor.spond_\u003cmember\u003e` | Events today (int) | `today_events`, `next_event`, `upcoming_events` |\n| `sensor.spond_\u003cmember\u003e_tasks` | Active tasks (int) | `tasks` list with event, time, co-assignees |\n\n### Event bus\n\n| Event | Fired when | Key fields |\n|-------|-----------|------------|\n| `spond_event_added` | New event appears between polls | `member`, `title`, `start`, `status`, `uid` |\n| `spond_event_removed` | Event disappears | `member`, `title`, `start`, `uid` |\n| `spond_event_changed` | Field changed (title, time, location, status) | `member`, `title`, `start`, `changed_fields`, `uid` |\n| `spond_event_cancelled` | Event flipped to cancelled | `member`, `title`, `start`, `location`, `uid` |\n| `spond_task_assigned` | New task assigned to member | `member`, `title`, `start`, `task`, `uid` |\n\n`member` is the lowercased first name (e.g. `alice`).\n\n### Example automation\n\n```yaml\nalias: \"Spond: new task assigned\"\ntrigger:\n  - platform: event\n    event_type: spond_task_assigned\n    event_data:\n      member: alice\naction:\n  - service: notify.mobile_app_alice_phone\n    data:\n      title: \"New Spond task\"\n      message: \"{{ trigger.event.data.task }} ({{ trigger.event.data.title }})\"\n```\n\n## Automation blueprints\n\nThe repo ships four blueprints that turn event-bus events into mobile\nnotifications without writing automation YAML. Import via the badges below:\n\n[![Import: new task](https://my.home-assistant.io/badges/blueprint_import.svg)](https://my.home-assistant.io/redirect/blueprint_import/?blueprint_url=https%3A%2F%2Fgithub.com%2Fagjendem%2Fha-spond-tracker%2Fblob%2Fmain%2Fblueprints%2Fautomation%2Fspond_new_task.yaml) **new task**\n\n[![Import: event cancelled](https://my.home-assistant.io/badges/blueprint_import.svg)](https://my.home-assistant.io/redirect/blueprint_import/?blueprint_url=https%3A%2F%2Fgithub.com%2Fagjendem%2Fha-spond-tracker%2Fblob%2Fmain%2Fblueprints%2Fautomation%2Fspond_event_cancelled.yaml) **event cancelled**\n\n[![Import: event changed](https://my.home-assistant.io/badges/blueprint_import.svg)](https://my.home-assistant.io/redirect/blueprint_import/?blueprint_url=https%3A%2F%2Fgithub.com%2Fagjendem%2Fha-spond-tracker%2Fblob%2Fmain%2Fblueprints%2Fautomation%2Fspond_event_changed.yaml) **event changed**\n\n[![Import: task reminder](https://my.home-assistant.io/badges/blueprint_import.svg)](https://my.home-assistant.io/redirect/blueprint_import/?blueprint_url=https%3A%2F%2Fgithub.com%2Fagjendem%2Fha-spond-tracker%2Fblob%2Fmain%2Fblueprints%2Fautomation%2Fspond_task_reminder.yaml) **task reminder (N min before task)**\n\n## Recorder / history\n\nSensor attributes (`today_events`, `upcoming_events`, `tasks`) contain full\nevent dicts and grow with the number of events. If you don't need history for\nthese attributes, exclude them in `configuration.yaml` to keep your database\nsmall:\n\n```yaml\nrecorder:\n  exclude:\n    entity_globs:\n      - sensor.spond_*\n```\n\nTo keep the numeric state but skip the large attributes, use\n`exclude_attributes` (available in HA 2024.2+).\n\n## Troubleshooting\n\n- **No events appearing** — check HA logs (Settings → System → Logs) for\n  errors under the `spond_tracker` domain. The integration logs each poll.\n- **Wrong member matched** — matching uses the first token of the Spond\n  first name (lowercased). Two members with the same first name will\n  collide; there is no workaround for that today.\n- **Entities unavailable** — the coordinator marks all entities unavailable\n  when every configured account fails to fetch. Check credentials in Options.\n- **Poll not running** — the poll interval is configurable in Options\n  (Settings → Devices \u0026 Services → Spond Tracker → Configure).\n\n## Removing the integration\n\n1. **Settings → Devices \u0026 Services → Spond Tracker**\n2. Click the three-dot menu → **Delete**\n3. Confirm. HA unloads all entities automatically.\n\n## Development\n\n```bash\ngit clone https://github.com/agjendem/ha-spond-tracker.git\ncd ha-spond-tracker\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements-dev.txt\n```\n\nRun the same checks CI runs:\n\n```bash\nruff check .\nruff format --check .\npytest\n```\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md) for commit conventions and the\nrelease workflow.\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n\n## Acknowledgements\n\nBuilt on top of [Olen/Spond](https://github.com/Olen/Spond) — the\nunofficial Spond Python client.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagjendem%2Fha-spond-tracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fagjendem%2Fha-spond-tracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagjendem%2Fha-spond-tracker/lists"}