{"id":21379056,"url":"https://github.com/faserf/ha-kadermanager","last_synced_at":"2026-01-31T22:04:44.264Z","repository":{"id":243134049,"uuid":"811569051","full_name":"FaserF/ha-kadermanager","owner":"FaserF","description":"HA Kadermanager integration, to view Kadermanager events","archived":false,"fork":false,"pushed_at":"2025-12-16T09:20:58.000Z","size":274,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-19T22:31:27.848Z","etag":null,"topics":["hacs-integration","home-assistant","integration"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FaserF.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","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},"funding":{"github":"faserf","custom":"https://paypal.me/FaserF"}},"created_at":"2024-06-06T21:19:32.000Z","updated_at":"2025-12-16T09:21:01.000Z","dependencies_parsed_at":"2024-06-06T22:48:32.206Z","dependency_job_id":"e270809c-4d4c-4ba2-8e4b-6d2d35d13d8c","html_url":"https://github.com/FaserF/ha-kadermanager","commit_stats":null,"previous_names":["faserf/ha-kadermanager"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/FaserF/ha-kadermanager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2Fha-kadermanager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2Fha-kadermanager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2Fha-kadermanager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2Fha-kadermanager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FaserF","download_url":"https://codeload.github.com/FaserF/ha-kadermanager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2Fha-kadermanager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28956947,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T18:30:42.805Z","status":"ssl_error","status_checked_at":"2026-01-31T18:30:19.593Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["hacs-integration","home-assistant","integration"],"created_at":"2024-11-22T10:16:51.914Z","updated_at":"2026-01-31T22:04:44.252Z","avatar_url":"https://github.com/FaserF.png","language":"Python","funding_links":["https://github.com/sponsors/faserf","https://paypal.me/FaserF"],"categories":[],"sub_categories":[],"readme":"[![hacs_badge](https://img.shields.io/badge/HACS-Custom-41BDF5.svg?style=for-the-badge)](https://github.com/hacs/integration)\n\n# Kadermanager Home Assistant Integration ⚽\n\nThe `kadermanager` integration retrieves event and participant information from [Kadermanager](https://kadermanager.de/).\n\n\u003cimg src=\"https://assets1.nimenhuuto.com/assets/logos/kadermanager.de/logo_h128-9f99c175236041ce4e42e770ed364faad6945c046539b14d1828720df6baa426.png\" alt=\"Kadermanager\" width=\"300px\"\u003e\n\u003cimg src=\"images/sensor.png\" alt=\"Kadermanager Sensor\" width=\"300px\"\u003e\n\n## Features ✨\n\n- **Event Tracking**: See upcoming games/trainings, dates, and locations.\n- **Participation Stats**: Monitor how many people accepted or declined.\n- **Comments**: View latest comments on events.\n- **Robustness**: Uses browser sessions and headers to avoid blocking.\n- **Authentication**: Supports login to fetch internal team events.\n- **Self-Repair**: Automatically detects persistent failures (\u003e24h) and creates a generic Repair issue in Home Assistant.\n\n## Installation 🛠️\n\n### 1. Using HACS (Recommended)\n\nThis integration works as a **Custom Repository** in HACS.\n\n1.  Open HACS.\n2.  Add Custom Repository: `https://github.com/FaserF/ha-kadermanager` (Category: Integration).\n3.  Click **Download**.\n4.  Restart Home Assistant.\n\n[![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=FaserF\u0026repository=ha-kadermanager\u0026category=integration)\n\n### 2. Manual Installation\n\n1.  Download the latest [Release](https://github.com/FaserF/ha-kadermanager/releases/latest).\n2.  Extract the ZIP file.\n3.  Copy the `kadermanager` folder to `\u003cconfig\u003e/custom_components/`.\n4.  Restart Home Assistant.\n\n## Configuration ⚙️\n\n1.  Go to **Settings** -\u003e **Devices \u0026 Services**.\n2.  Click **Add Integration**.\n3.  Search for \"Kadermanager\".\n\n[![Open your Home Assistant instance and start setting up a new integration.](https://my.home-assistant.io/badges/config_flow_start.svg)](https://my.home-assistant.io/redirect/config_flow_start/?domain=kadermanager)\n\n### Configuration Variables\n- **Team Name**: Your subdomain (e.g., `teamname` for `teamname.kadermanager.de`).\n- **Username/Password**: (Optional) Providing credentials allows the integration to log in and fetch non-public events/details.\n- **Additional Settings**: Refresh interval, event limits, comment fetching.\n\n## Sensor Attributes\nThe data is being refreshed every 30 minutes by default.\n\n### General attributes\n- events:\n  - original_date: Displays the Date and Time for the event\n  - comments: Displays event specific comments (author, text)\n  - date: extracted date (ISO format)\n  - time: extracted time\n  - in_count: Current count of people in for the event\n  - title: Event title\n  - type: Event type (Training/Spiel/Sonstiges)\n  - link: Link to the event\n  - location: Location of the event\n\n### Attributes available with public events\nIf your events are public, the following data can also be fetched:\n\n- events:\n  - players:\n    - accepted_players: Players that accepted\n    - declined_players: Players that declined\n    - no_response_players: Players that gave no response\n\n## Troubleshooting ⚠️\n\n### Status \"Unknown\"\nIf the sensor status shows \"Unknown\":\n1.  **Check Team Name**: Ensure your team name corresponds exactly to the subdomain (e.g., `https://myteam.kadermanager.de` -\u003e `myteam`).\n2.  **Access/Login**: Ensure your \"Events\" page allows public viewing OR that you have provided valid username/password in the configuration. The integration attempts to log in if credentials are provided.\n3.  **Logs**: Enable debug logging to see what the scraper is receiving.\n\n```yaml\nlogger:\n    logs:\n        custom_components.kadermanager: debug\n```\n\n## Automation Examples 🤖\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e📅 Reminder: Upcoming Event (2 days before)\u003c/b\u003e\u003c/summary\u003e\n\nSend a notification 48 hours before the next event starts.\n\n```yaml\nautomation:\n  - alias: \"Kadermanager Reminder - 2 Days Warning\"\n    trigger:\n      - platform: template\n        value_template: \"{{ as_timestamp(state_attr('sensor.kadermanager_teamname', 'events')[0].date) - as_timestamp(now()) \u003c= 2 * 24 * 3600 }}\"\n    condition:\n      - condition: template\n        value_template: \"{{ state_attr('sensor.kadermanager_teamname', 'events') }}\"\n    action:\n      - service: notify.notify\n        data_template:\n          title: \"Upcoming Event\"\n          message: \u003e\n            Next Event: {{ state_attr('sensor.kadermanager_teamname', 'events')[0].title }}\n            Date: {{ state_attr('sensor.kadermanager_teamname', 'events')[0].original_date }}\n            Participants: {{ state_attr('sensor.kadermanager_teamname', 'events')[0].in_count }}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e⚠️ Alert: Low Participation Count\u003c/b\u003e\u003c/summary\u003e\n\nWarn if less than 6 players are signed up 24 hours before a game.\n\n```yaml\nautomation:\n  - alias: \"Kadermanager - Low Participation Warning\"\n    trigger:\n      - platform: template\n        value_template: \"{{ as_timestamp(state_attr('sensor.kadermanager_teamname', 'events')[0].date) - as_timestamp(now()) \u003c 24 * 3600 }}\"\n    condition:\n      # Ensure there are events\n      - condition: template\n        value_template: \"{{ state_attr('sensor.kadermanager_teamname', 'events') }}\"\n      # Check it is a Game (\"Spiel\")\n      - condition: template\n        value_template: \"{{ state_attr('sensor.kadermanager_teamname', 'events')[0].type == 'Spiel' }}\"\n      # Check count safe casting to int\n      - condition: template\n        value_template: \"{{ state_attr('sensor.kadermanager_teamname', 'events')[0].in_count | int(0) \u003c 6 }}\"\n    action:\n      - service: notify.notify\n        data:\n          title: \"Low Player Count!\"\n          message: \"Warning: Only {{ state_attr('sensor.kadermanager_teamname', 'events')[0].in_count }} players for tomorrow's game!\"\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e💬 Notification: New Comment Posted\u003c/b\u003e\u003c/summary\u003e\n\nGet notified when a teammate writes a new comment.\n\n```yaml\nautomation:\n  - alias: \"Notification on New Comment\"\n    trigger:\n      - platform: state\n        entity_id: sensor.kadermanager_teamname\n    condition:\n      - condition: template\n        value_template: \u003e\n          {% set old_comments = trigger.from_state.attributes.events[0].comments if trigger.from_state.attributes.events else [] %}\n          {% set new_comments = trigger.to_state.attributes.events[0].comments if trigger.to_state.attributes.events else [] %}\n          {{ new_comments | length \u003e old_comments | length }}\n    action:\n      - service: notify.notify\n        data:\n          message: \u003e\n            New comment by {{ state_attr('sensor.kadermanager_teamname', 'events')[0].comments[0].author }}:\n            {{ state_attr('sensor.kadermanager_teamname', 'events')[0].comments[0].text }}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🏟️ Announcement: Game Day!\u003c/b\u003e\u003c/summary\u003e\n\nSend a morning briefing if a game is scheduled for today.\n\n```yaml\nautomation:\n  - alias: \"Kadermanager - Game Day\"\n    trigger:\n      - platform: time\n        at: \"08:00:00\"\n    condition:\n      - condition: template\n        value_template: \"{{ state_attr('sensor.kadermanager_teamname', 'events') }}\"\n      - condition: template\n        value_template: \"{{ state_attr('sensor.kadermanager_teamname', 'events')[0].date == now().strftime('%Y-%m-%d') }}\"\n      - condition: template\n        value_template: \"{{ state_attr('sensor.kadermanager_teamname', 'events')[0].type == 'Spiel' }}\"\n    action:\n      - service: notify.notify\n        data:\n          title: \"Matchday!\"\n          message: \"Ready for the game against {{ state_attr('sensor.kadermanager_teamname', 'events')[0].title }} today at {{ state_attr('sensor.kadermanager_teamname', 'events')[0].time }}?\"\n```\n\u003c/details\u003e\n\n## Bug reporting\nOpen an issue over at [github issues](https://github.com/FaserF/ha-kadermanager/issues). Please prefer sending over a log with debugging enabled.\n\nTo enable debugging enter the following in your configuration.yaml\n\n```yaml\nlogger:\n    logs:\n        custom_components.kadermanager: debug\n```\n\nYou can then find the log in the HA settings -\u003e System -\u003e Logs -\u003e Enter \"kadermanager\" in the search bar -\u003e \"Load full logs\"\n\n## Thanks to\nThanks to Kadermanager for their great free software!\nThe data is coming from the [kadermanager.de](https://kadermanager.de/) website.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaserf%2Fha-kadermanager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaserf%2Fha-kadermanager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaserf%2Fha-kadermanager/lists"}