{"id":15086132,"url":"https://github.com/faserf/ha-boulderwelt","last_synced_at":"2025-07-17T09:35:11.208Z","repository":{"id":255256904,"uuid":"849014350","full_name":"FaserF/ha-boulderwelt","owner":"FaserF","description":"Fetch Boulderwelt full utilization for Homeassistant","archived":false,"fork":false,"pushed_at":"2025-02-20T16:44:08.000Z","size":30,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-24T20:38:13.361Z","etag":null,"topics":["hacs-integration","homeassistant"],"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},"funding":{"github":"faserf","custom":"https://paypal.me/FaserF"}},"created_at":"2024-08-28T20:22:04.000Z","updated_at":"2025-02-20T16:44:10.000Z","dependencies_parsed_at":"2024-09-10T20:56:42.246Z","dependency_job_id":"61a40115-e5d9-4b12-9553-2ef4b55d02e6","html_url":"https://github.com/FaserF/ha-boulderwelt","commit_stats":null,"previous_names":["faserf/ha-boulderwelt"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2Fha-boulderwelt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2Fha-boulderwelt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2Fha-boulderwelt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FaserF%2Fha-boulderwelt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FaserF","download_url":"https://codeload.github.com/FaserF/ha-boulderwelt/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248317707,"owners_count":21083528,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","homeassistant"],"created_at":"2024-09-25T07:31:43.511Z","updated_at":"2025-04-10T23:50:29.391Z","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-Default-41BDF5.svg?style=for-the-badge)](https://github.com/hacs/integration)\n# Boulderwelt Homeassistant Sensor\nThe `boulderwelt` sensor will give you informations about the current utilization of a boulderwelt hall\n\n## Installation\n### 1. Using HACS (recommended way)\n\nThis integration is a official HACS Integration.\n\nOpen HACS then install the \"Boulderwelt\" integration or use the link below.\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-boulderwelt\u0026category=integration)\n\nIf you use this method, your component will always update to the latest version.\n\n### 2. Manual\n\n- Download the latest zip release from [here](https://github.com/FaserF/ha-boulderwelt/releases/latest)\n- Extract the zip file\n- Copy the folder \"boulderwelt\" from within custom_components with all of its components to `\u003cconfig\u003e/custom_components/`\n\nwhere `\u003cconfig\u003e` is your Home Assistant configuration directory.\n\n\u003e__NOTE__: Do not download the file by using the link above directly, the status in the \"master\" branch can be in development and therefore is maybe not working.\n\n## Configuration\n\nGo to Configuration -\u003e Integrations and click on \"add integration\". Then search for \"Boulderwelt\".\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=boulderwelt)\n\n### Configuration Variables\n- **boulder hall**: Select the boulderwelt boulder hall, from where the data should be fetched\n- **scan interval**: Choose the time in minutes when the sensor should be refreshed\n\n## Accessing the data\n\n### Custom sensor\nAdd a custom sensor in your configuration.yaml\n\n```yaml\n- platform: template\n  sensors:\n    boulderwelt_location_monday_avg:\n      friendly_name: \"Boulderwelt location Montag Durchschnitt\"\n      unit_of_measurement: \"%\"\n      value_template: \u003e\n        {% set day = now().strftime('%A') %}\n        {% if day == 'Wednesday' %}\n          {{ states('sensor.boulderwelt_location_level_mean') }}\n        {% else %}\n          {{ states('sensor.boulderwelt_location_monday_avg') }}\n        {% endif %}\n\n    boulderwelt_location_tuesday_avg:\n      friendly_name: \"Boulderwelt location Dienstag Durchschnitt\"\n      unit_of_measurement: \"%\"\n      value_template: \u003e\n        {% set day = now().strftime('%A') %}\n        {% if day == 'Thursday' %}\n          {{ states('sensor.boulderwelt_location_level_mean') }}\n        {% else %}\n          {{ states('sensor.boulderwelt_location_tuesday_avg') }}\n        {% endif %}\n\n    boulderwelt_location_wednesday_avg:\n      friendly_name: \"Boulderwelt location Mittwoch Durchschnitt\"\n      unit_of_measurement: \"%\"\n      value_template: \u003e\n        {% set day = now().strftime('%A') %}\n        {% if day == 'Wednesday' %}\n          {{ states('sensor.boulderwelt_location_level_mean') }}\n        {% else %}\n          {{ states('sensor.boulderwelt_location_wednesday_avg') }}\n        {% endif %}\n\n    boulderwelt_location_thursday_avg:\n      friendly_name: \"Boulderwelt location Donnerstag Durchschnitt\"\n      unit_of_measurement: \"%\"\n      value_template: \u003e\n        {% set day = now().strftime('%A') %}\n        {% if day == 'Thursday' %}\n          {{ states('sensor.boulderwelt_location_level_mean') }}\n        {% else %}\n          {{ states('sensor.boulderwelt_location_thursday_avg') }}\n        {% endif %}\n\n    boulderwelt_location_friday_avg:\n      friendly_name: \"Boulderwelt location Freitag Durchschnitt\"\n      unit_of_measurement: \"%\"\n      value_template: \u003e\n        {% set day = now().strftime('%A') %}\n        {% if day == 'Thursday' %}\n          {{ states('sensor.boulderwelt_location_level_mean') }}\n        {% else %}\n          {{ states('sensor.boulderwelt_location_friday_avg') }}\n        {% endif %}\n\n- platform: statistics\n  name: \"Boulderwelt Location Level Mean\"\n  entity_id: sensor.boulderwelt_location_level\n  state_characteristic: mean\n  max_age:\n    hours: 24\n  sampling_size: 24\n```\n\n### Automations\n```yaml\nautomation:\n  - id: update_boulderwelt_sensor_average\n    alias: \"Update Boulderwelt Sensor Average\"\n    trigger:\n      - platform: time\n        at: \"23:59:00\"\n    action:\n      - choose:\n          - conditions:\n              - condition: time\n                weekday:\n                  - mon\n            sequence:\n              - service: homeassistant.update_entity\n                target:\n                  entity_id:\n                    - sensor.boulderwelt_location_monday_avg\n\n          - conditions:\n              - condition: time\n                weekday:\n                  - tue\n            sequence:\n              - service: homeassistant.update_entity\n                target:\n                  entity_id:\n                    - sensor.boulderwelt_location_tuesday_avg\n\n          - conditions:\n              - condition: time\n                weekday:\n                  - wed\n            sequence:\n              - service: homeassistant.update_entity\n                target:\n                  entity_id:\n                    - sensor.boulderwelt_location_wednesday_avg\n\n          - conditions:\n              - condition: time\n                weekday:\n                  - thu\n            sequence:\n              - service: homeassistant.update_entity\n                target:\n                  entity_id:\n                    - sensor.boulderwelt_location_thursday_avg\n\n          - conditions:\n              - condition: time\n                weekday:\n                  - fri\n            sequence:\n              - service: homeassistant.update_entity\n                target:\n                  entity_id:\n                    - sensor.boulderwelt_location_friday_avg\n\n          - conditions:\n              - condition: time\n                weekday:\n                  - sat\n            sequence:\n              - service: homeassistant.update_entity\n                target:\n                  entity_id:\n                    - sensor.boulderwelt_location_saturday_avg\n\n          - conditions:\n              - condition: time\n                weekday:\n                  - sun\n            sequence:\n              - service: homeassistant.update_entity\n                target:\n                  entity_id:\n                    - sensor.boulderwelt_location_sunday_avg\n```\n\n```yaml\nautomation:\n  - id: remind_for_bouldern\n    alias: \"remind for Bouldern\"\n    trigger:\n      - platform: time\n        at: \"19:00:00\"\n    condition:\n      - condition: time\n        weekday:\n          - sun\n    action:\n      - service: telegram_bot.send_message\n        data:\n          target: !secret telegram_chat_bouldern\n          message: \u003e\n            {% set days_location = [\n              {'day': 'Montag', 'value': states('sensor.boulderwelt_location_monday_avg') | float(70)},\n              {'day': 'Dienstag', 'value': states('sensor.boulderwelt_location_tuesday_avg') | float(70)},\n              {'day': 'Mittwoch', 'value': states('sensor.boulderwelt_location_wednesday_avg') | float(70)},\n              {'day': 'Donnerstag', 'value': states('sensor.boulderwelt_location_thursday_avg') | float(70)},\n              {'day': 'Freitag', 'value': states('sensor.boulderwelt_location_friday_avg') | float(70)}\n            ] %}\n            {% set sorted_days_location = days_location | sort(attribute='value') %}\n            The best days to go to the hall in the weekdays, based on the utilization from last week are: \n            1. {{ sorted_days_location[0].day }} (Durchschnittliche Auslastung: {{ sorted_days_location[0].value }} %)\n            2. {{ sorted_days_location[1].day }} (Durchschnittliche Auslastung: {{ sorted_days_location[1].value }} %)\n            3. {{ sorted_days_location[2].day }} (Durchschnittliche Auslastung: {{ sorted_days_location[2].value }} %)\n\n            {% set days_weekend_location = [\n              {'day': 'Samstag', 'value': states('sensor.boulderwelt_location_saturday_avg') | float(70)},\n              {'day': 'Sonntag', 'value': states('sensor.boulderwelt_location_sunday_avg') | float(70)}\n            ] %}\n            {% set sorted_days_weekend_location = days_weekend_location | sort(attribute='value') %}\n            The best day at the weekend to go to the hall, based on the utilization from last week is: \n            {{ sorted_days_weekend_location[0].day }} (Durchschnittliche Auslastung: {{ sorted_days_weekend_location[0].value }} %)\n```\n\n## Bug reporting\nOpen an issue over at [github issues](https://github.com/FaserF/ha-boulderwelt/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.boulderwelt: debug\n```\n\nYou can then find the log in the HA settings -\u003e System -\u003e Logs -\u003e Enter \"boulderwelt\" in the search bar -\u003e \"Load full logs\"\n\n## Thanks to\nHuge thanks to [@knorr3](https://github.com/knorr3) for finding the json files from boulderwelt and the idea!\n\nThe data is coming from the corresponding [boulderwelt.de](https://www.boulderwelt.de/) website.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaserf%2Fha-boulderwelt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffaserf%2Fha-boulderwelt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffaserf%2Fha-boulderwelt/lists"}