{"id":18960559,"url":"https://github.com/tvalley71/dantherm","last_synced_at":"2025-06-28T21:37:50.870Z","repository":{"id":234706191,"uuid":"789397431","full_name":"Tvalley71/dantherm","owner":"Tvalley71","description":"Dantherm Integration for Home Assistant","archived":false,"fork":false,"pushed_at":"2025-06-23T07:30:06.000Z","size":647,"stargazers_count":21,"open_issues_count":3,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-23T08:25:52.199Z","etag":null,"topics":["custom-integration","home-assistant","home-assistant-integration","ventilation"],"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/Tvalley71.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2024-04-20T12:38:02.000Z","updated_at":"2025-06-23T07:30:10.000Z","dependencies_parsed_at":"2024-04-20T14:01:41.144Z","dependency_job_id":"a1a6f65d-9450-4b83-b995-5c829e661b63","html_url":"https://github.com/Tvalley71/dantherm","commit_stats":null,"previous_names":["tvalley71/dantherm"],"tags_count":83,"template":false,"template_full_name":null,"purl":"pkg:github/Tvalley71/dantherm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tvalley71%2Fdantherm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tvalley71%2Fdantherm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tvalley71%2Fdantherm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tvalley71%2Fdantherm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tvalley71","download_url":"https://codeload.github.com/Tvalley71/dantherm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tvalley71%2Fdantherm/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262503156,"owners_count":23321181,"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":["custom-integration","home-assistant","home-assistant-integration","ventilation"],"created_at":"2024-11-08T14:08:16.617Z","updated_at":"2025-06-28T21:37:50.860Z","avatar_url":"https://github.com/Tvalley71.png","language":"Python","funding_links":["https://www.buymeacoffee.com/tvalley71"],"categories":[],"sub_categories":[],"readme":"# Dantherm\n\nHome Assistant integration for Dantherm ventilation units.\n\n\u003e [!TIP]\n\u003e The integration also exist in a version for Pluggit ventilation units [here](https://github.com/Tvalley71/pluggit).\n\n\u003c!-- START:shared-section --\u003e\n\n\u003ca href=\"https://www.buymeacoffee.com/tvalley71\" target=\"_blank\"\u003e\u003cimg src=\"https://www.buymeacoffee.com/assets/img/custom_images/yellow_img.png\" alt=\"Buy Me A Coffee\" style=\"height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;\" \u003e\u003c/a\u003e\n\n### ⚠️ Compatibility Notice\n\nThis custom integration requires:\n\n- Home Assistant version **2025.1.0** or newer\n\nOnly support for Modbus over TCP/IP.\n\n\u003c!-- END:shared-section --\u003e\n\nKnown supported units:\n\n- HCV300 ALU\n- HCV700 ALU\n- HCV400 P2\n- HCV460 P2/E1\n- RCV320 P1/P2\n- HCH5 MKII\n- RCC220 P2\n\n\u003c!-- START:shared-section --\u003e\n\n\u003c!-- START:no-replace-section --\u003e\nThe listed units are known to work with this integration. Basically, all units compatible with the **_Dantherm Residential_** or **_Pluggit iFlow_** apps should work with the integration as well.\n\u003c!-- END:no-replace-section --\u003e\n\n\u003e [!NOTE]  \n\u003e If you have a model not listed and are using this integration, please let me know by posting [here](https://github.com/Tvalley71/dantherm/discussions/new?category=general). Make sure to include both the model name and the unit type number.  \n\u003e The number can be found in the **Device Info** section on the integration page; if the unit is not recognized, it will be listed as \"Unknown\" followed by the number.\n\n\n### Controls and sensors\n\n#### Buttons Entities\n\n| Entity            | Description       |\n|-------------------|-------------------|\n| `alarm_reset`     | Reset alarm       |\n| `filter_reset`    | Reset filter      |\n\n#### Calendar Entity\n\n| Entity        | Description              |\n|---------------|--------------------------|\n| ~~`calendar`~~ | ~~Operation Calendar~~  |\n\n#### Cover Entity\n\n| Entity           | Description              |\n|------------------|--------------------------|\n| `bypass_damper`  | Bypass damper [1]        |\n\n#### Number Entities\n\n| Entity                      | Description                        |\n|-----------------------------|------------------------------------|\n| `boost_mode_timeout`        | Boost mode timeout [3]             |\n| `bypass_minimum_temperature`| Bypass minimum temperature [2]     |\n| `bypass_maximum_temperature`| Bypass maximum temperature [2]     |\n| `eco_mode_timeout`          | Eco mode timeout [3]               |\n| `filter_lifetime`           | Filter lifetime [2]                |\n| `home_mode_timeout`         | Home mode timeout [3]              |\n| `manual_bypass_duration`    | Manual bypass duration [1][2]      |\n\n#### Select Entities\n\n| Entity                      | Description                        |\n|-----------------------------|------------------------------------|\n| `boost_operation_selection` | Boost operation selection [3]      |\n| ~~`default_operation_selection`~~ | ~~Default operation selection~~ |\n| `eco_operation_selection`   | Eco operation selection [3]        |\n| `fan_level_selection`       | Fan level selection                |\n| `home_operation_selection`  | Home operation selection [3]       |\n| `operation_selection`       | Mode of operation selection        |\n| `week_program_selection`    | Week program selection [2]         |\n\n#### Sensor Entities\n\n| Entity                        | Description                          |\n|-------------------------------|--------------------------------------|\n| `air_quality`                 | Air quality sensor [1]               |\n| `alarm`                       | Alarm sensor                         |\n| `exhaust_temperature`         | Exhaust temperature sensor           |\n| `extract_temperature`         | Extract temperature sensor           |\n| `fan_level`                   | Fan level                            |\n| `fan1_speed`                  | Fan 1 speed [2]                      |\n| `fan2_speed`                  | Fan 2 speed [2]                      |\n| `filter_remain`               | Filter remain                        |\n| `filter_remain_level`         | Filter remain level [2]              |\n| `humidity`                    | Humidity sensor [1]                  |\n| `adaptive_state`              | Adaptive state [4]                   |\n| `internal_preheater_dutycycle`| Preheater power dutycycle [1][2]     |\n| `operation_mode`              | Operation mode                       |\n| `outdoor_temperature`         | Outdoor temperature sensor           |\n| `room_temperature`            | Room temperature sensor [1][2]       |\n| `supply_temperature`          | Supply temperature sensor            |\n| `work_time`                   | Work time [2]                        |\n\n#### Switch Entities\n\n| Entity                 | Description                     |\n|------------------------|---------------------------------|\n| `away_mode`            | Away mode                       |\n| `boost_mode`           | Boost mode [3]                  |\n| `disable_bypass`       | Disable bypass [2]              |\n| `eco_mode`             | Eco mode [3]                    |\n| `fireplace_mode`       | Fireplace mode                  |\n| `home_mode`            | Home mode [3]                   |\n| `manual_bypass_mode`   | Manual bypass mode [1]          |\n| `night_mode`           | Night mode [2]                  |\n| `sensor_filtering`     | Sensor filtering [2]            |\n| `summer_mode`          | Summer mode                     |\n\n#### Text Entities\n\n| Entity                   | Description                     |\n|--------------------------|---------------------------------|\n| `night_mode_end_time`    | Night mode end time text [2]    |\n| `night_mode_start_time`  | Night mode start time text [2]  |\n\n### Notes\n\n[1] The entity may not install due to lack of support or installation in the particular unit.  \n[2] The entity is disabled by default.  \n[3] The entity will be enabled or disabled depending on whether the corresponding adaptive trigger is configured.  \n[4] The entity can only be enabled if any of the adaptive triggers are configured.\n\n_~~Strikethrough~~ is a work in progress, planned for version 0.5.0._\n\n### Installation\n\n\u003c!-- START:replace-section --\u003e\n\n#### Installation via HACS (Home Assistant Community Store)\n\n1. Ensure you have HACS installed and configured in your Home Assistant instance.\n2. Open the HACS (Home Assistant Community Store) by clicking **HACS** in the side menu.\n3. Click on **Integrations** and then click the **Explore \u0026 Download Repositories** button.\n4. Search for \"Dantherm\" in the search bar.\n5. Locate the \"Dantherm Integration\" repository and click on it.\n6. Click the **Install** button.\n7. Once installed, restart your Home Assistant instance.\n\n#### Manual Installation\n\n1. Navigate to your Home Assistant configuration directory.\n    - For most installations, this will be **'/config/'**.\n2. Inside the configuration directory, create a new folder named **'custom_components'** if it does not already exist.\n3. Inside the **'custom_components'** folder, create a new folder named **'dantherm'**.\n4. Download the latest release of the Dantherm integration from the [releases page](https://github.com/Tvalley71/dantherm/releases/latest) into the **'custom_components/dantherm'** directory:\n5. Once the files are in place, restart your Home Assistant instance.\n\n\u003c!-- END:replace-section --\u003e\n\n### Configuration\n\nAfter installation, add the Dantherm integration to your Home Assistant configuration.\n\n1. In Home Assistant, go to **Configuration \u003e Integrations.**\n2. Click the **+** button to add a new integration.\n3. Search for \"Dantherm\" and select it from the list of available integrations.\n4. Follow the on-screen instructions to complete the integration setup.\n\n![Skærmbillede 2024-05-04 090018](https://github.com/user-attachments/assets/a5c2faad-2b96-438b-a761-4e24075efbf3)\n![Skærmbillede 2024-05-04 090125](https://github.com/user-attachments/assets/7869346c-04e0-4980-9536-bf2cdd27cbc0)\n\n\u003c!-- END:shared-section --\u003e\n\n### Support\n\nIf you encounter any issues or have questions regarding the Dantherm integration for Home Assistant, feel free to [open an issue](https://github.com/Tvalley71/dantherm/issues/new) or [start a discussion](https://github.com/Tvalley71/dantherm/discussions) on this repository. I welcome any contributions or feedback.\n\n\u003c!-- START:shared-section --\u003e\n\n### Languages\n\nCurrently supported languages:\n\nDanish, Dutch, English, German and French.\n\n\u003e [!NOTE]\n\u003e Want to help translate? Grab a language file on GitHub [here](./custom_components/dantherm/translations) and post it [here](https://github.com/Tvalley71/dantherm/discussions/new?category=general). You are also welcome to submit a PR.\n\n\n## Screenshots\n\n![Skærmbillede fra 2025-02-09 15-49-04](https://github.com/user-attachments/assets/81ded97a-ff08-41f6-8ac4-8042501e355d)\n\n![Skærmbillede fra 2025-02-09 15-26-39](https://github.com/user-attachments/assets/f12ce875-5f48-47d2-a975-3872f6415c07)\n![Skærmbillede fra 2025-02-09 15-27-48](https://github.com/user-attachments/assets/2ca03de0-a469-4b0e-b362-5f6d486d1f9e)\n\n![Skærmbillede fra 2025-02-09 15-28-23](https://github.com/user-attachments/assets/0efe815a-51fb-4e4b-bee8-d62bea40d4a7)\n![Skærmbillede fra 2025-02-09 15-28-58](https://github.com/user-attachments/assets/6c192224-03cf-4094-b944-942c7395cd5b)\n\n![Skærmbillede fra 2025-02-09 15-31-03](https://github.com/user-attachments/assets/1d17f88b-c3f0-441a-917c-55bee87f287e)\n\n\n\u003e [!NOTE]\n\u003e The HAC module functions are currently unsupported due to limited testing possibilities. If support for these functions are desired, please contact me for potential collaborative efforts to provide the support.\n\n\n## Examples\n\n#### Picture-elements card\n\nThis picture-elements card provides a dynamic and intuitive interface for monitoring and controlling your Dantherm ventilation unit. Designed to resemble the Dantherm app, it visually adapts based on the unit’s bypass state while displaying key real-time data:\n\n*\tAlarms – Stay alerted to system issues.\n*\tFilter Remaining Level – Easily check when filter replacement is needed.\n*\tVentilation Temperatures – View four key temperature readings: Supply, Extract, Outdoor, and Exhaust.\n*\tHumidity Level – Monitor indoor humidity for optimal air quality.\n\nClicking on any displayed entity allows you to adjust its state or explore detailed history graphs for deeper insights.\n\n![Skærmbillede 2024-05-21 182357](https://github.com/Tvalley71/dantherm/assets/83084467/220edf94-71aa-4c29-abd4-c9ed191abd32)\n\n![Skærmbillede 2024-05-21 182443](https://github.com/Tvalley71/dantherm/assets/83084467/91ab4cf7-d7cb-4df9-a602-0d8955203b70)\n\n![Skærmbillede 2024-05-21 182154](https://github.com/Tvalley71/dantherm/assets/83084467/66fc2c18-7db1-403e-ae2b-fc32a4734d6d)\n\n\u003cdetails\u003e\n\n\u003csummary\u003eThe details for the above picture-elements card 👈 Click to open\n    \n_(YAML updated for better image scaling on 2025-5-19, adjusted state image behavior on 2025-6-9)_\u003c/summary\u003e\n\n####\n\nTo integrate this into your dashboard, begin by downloading and extracting this \u003c!-- END:shared-section --\u003e[zip file](https://github.com/Tvalley71/dantherm/files/15397672/picture-elements-card.zip)\u003c!-- START:shared-section --\u003e. Copy the contained files into the \"www\" folder within your configuration directory on Home Assistant. You can use the _Samba share_ add-on, the upload feature in the _Studio Code Server_ add-on, or other preferred methods.\n\nNext, insert the following code into your dashboard. If your Home Assistant setup uses a language other than English, make sure to modify the entity names in the code accordingly. You also need to enable the filter_remain_level sensor.\n\n#### The code\n\n```yaml\n\ntype: picture-elements\nimage: /local/dantherm1.png\nelements:\n  - type: image\n    entity: sensor.dantherm_filter_remain_level\n    state_image:\n      '0': /local/dantherm4.png\n      '1': /local/dantherm5.png\n      '2': /local/dantherm6.png\n      '3': /local/dantherm7.png\n    style:\n      left: 50%\n      top: 50%\n      width: 100%\n    tap_action:\n      action: none\n  - type: conditional\n    conditions:\n      - entity: sensor.dantherm_operation_mode\n        state_not: '6'\n    elements:\n      - type: image\n        entity: cover.dantherm_bypass_damper\n        state_image:\n          closed: /local/dantherm2.png\n          closing: /local/dantherm2.png\n          open: /local/dantherm3.png\n          opening: /local/dantherm3.png\n        style:\n          left: 63.3%\n          top: 75%\n          width: 50.87%\n        tap_action:\n          action: more-info\n      - type: conditional\n        conditions:\n          - entity: cover.dantherm_bypass_damper\n            state:\n              - closed\n              - closing\n        elements:\n          - type: state-label\n            entity: sensor.dantherm_outdoor_temperature\n            style:\n              top: 64.5%\n              left: 78%\n          - type: state-label\n            entity: sensor.dantherm_extract_temperature\n            style:\n              top: 64.5%\n              left: 49%\n          - type: state-label\n            entity: sensor.dantherm_exhaust_temperature\n            style:\n              top: 81%\n              left: 78%\n          - type: state-label\n            entity: sensor.dantherm_supply_temperature\n            style:\n              top: 81%\n              left: 49%\n      - type: conditional\n        conditions:\n          - entity: cover.dantherm_bypass_damper\n            state:\n              - open\n              - opening\n        elements:\n          - type: state-label\n            entity: sensor.dantherm_extract_temperature\n            style:\n              top: 64.5%\n              left: 49%\n          - type: state-label\n            entity: sensor.dantherm_outdoor_temperature\n            style:\n              top: 81%\n              left: 78%\n  - type: conditional\n    conditions:\n      - entity: sensor.dantherm_operation_mode\n        state: '6'\n    elements:\n      - type: image\n        image: /local/dantherm8.png\n        style:\n          left: 63.3%\n          top: 75%\n          width: 50.87%\n        tap_action:\n          action: none\n      - type: state-label\n        entity: sensor.dantherm_extract_temperature\n        style:\n          top: 64.5%\n          left: 49%\n  - type: conditional\n    conditions:\n      - entity: sensor.dantherm_alarm\n        state_not: '0'\n    elements:\n      - type: state-label\n        entity: sensor.dantherm_alarm\n        style:\n          top: 15%\n          left: 50%\n          width: 100%\n          font-weight: bold\n          text-align: center\n          color: white\n          background-color: red\n          opacity: 70%\n  - type: state-label\n    entity: select.dantherm_operation_selection\n    style:\n      top: 45%\n      left: 36%\n      font-weight: bold\n      text-align: center;\n      font-size: 100%\n  - type: state-label\n    entity: sensor.dantherm_humidity\n    style:\n      top: 29%\n      left: 38%\n      font-size: 100%\n  - type: state-label\n    entity: select.dantherm_fan_selection\n    style:\n      top: 29%\n      left: 63%\n      font-weight: bold\n      font-size: 100%\n\n```\n\u003c/details\u003e\n\n#### Dashboard Badges\n\nHere are some examples of badges added to the dashboard. The pop-up that appears when clicking on a badge will vary depending on the selected entities, either displaying information or enabling manipulation of the Dantherm unit.\n\n![Skærmbillede badge example](https://github.com/user-attachments/assets/bbaac388-0e40-48cf-a0d1-7b42fb5a4234)\n\n\n#### Apex-chart\n\n![Skærmbillede 2025-06-23 092901](https://github.com/user-attachments/assets/29cabc96-54d5-42db-bedc-ae381c8f5c94)\n\n\u003cdetails\u003e\n\n\u003csummary\u003eThe details for the above Apex-chart card (Can be found on HACS) 👈 Click to open\u003c/summary\u003e\n\n```yaml\n\ntype: custom:apexcharts-card\nupdate_interval: 5min\napex_config:\n  stroke:\n    width: 2\n    curve: smooth\ngraph_span: 24h\nseries:\n  - entity: sensor.dantherm_extract_temperature\n    name: Extract Temperature\n    extend_to: false\n    show:\n      extremas: true\n      legend_value: false\n    group_by:\n      duration: 5min\n      func: avg\n  - entity: sensor.dantherm_outdoor_temperature\n    name: Outdoor Temperature\n    extend_to: false\n    show:\n      extremas: true\n      legend_value: false\n    group_by:\n      duration: 5min\n      func: avg\n  - entity: sensor.dantherm_exhaust_temperature\n    name: Exhaust Temperature\n    extend_to: false\n    show:\n      legend_value: false\n    group_by:\n      duration: 5min\n      func: avg\n  - entity: sensor.dantherm_supply_temperature\n    name: Supply Temperature\n    extend_to: false\n    show:\n      legend_value: false\n    group_by:\n      duration: 5min\n      func: avg\n\n```\n    \n\u003c/details\u003e\n\n\n## Sensor Filtering\n\nTo improve the stability and reliability of sensor readings, the integration now supports **sensor filtering** for key environmental data collected from the Dantherm unit. This filtering mechanism is applied to the following sensors:\n\n- **Humidity**\n- **Air Quality**\n- **Exhaust Temperature**\n- **Extract Temperature**\n- **Supply Temperature**\n- **Outdoor Temperature**\n- **Room Temperature**\n\n### Control via Home Assistant Switch\n\nThe filtering feature can be enabled or disabled via the **\"Sensor Filtering\"** switch entity. By default, the filtering is **disabled**, ensuring the system behaves as it did previously. When the switch is enabled, the filtering logic described below will be applied.\n\n### How It Works\n\nEach sensor is equipped with a sliding history buffer, storing the last 5 readings. The filter applies two techniques:\n\n1. **Initialization Smoothing**  \n   For the first few readings (up to 5), the filter calculates a simple average. This helps the sensor start off with a stable baseline, preventing a single bad initial reading from influencing the system.\n\n2. **Spike Filtering**  \n   After initialization, every new reading is compared to a rolling average of the last 5 readings.  \n   If the new reading changes more than a defined threshold (`max_change`) compared to the rolling average, the spike is rejected, and the system uses the current rolling average instead.\n\n### Individual Thresholds per Sensor\n\nEach sensor type has a predefined maximum allowed change per reading:\n\n| Sensor      | Max Change |\n|-------------|------------|\n| Humidity    | 5% RH      |\n| Air Quality | 50 PPM     |\n| Temperatures| 2°C        |\n\nThis ensures the filtering logic fits the natural dynamics of each sensor type.\n\n\u003e This feature was inspired by [issue #68](https://github.com/Tvalley71/dantherm/issues/68), reported by a community user.\n\n## Actions\n\n### Using the \"Dantherm: Set State\" and \"Dantherm: Set configuration\" Actions\n\nThe **Dantherm: Set state** action allows you to control the state of your Dantherm ventilation unit directly from a Home Assistant automation. This action provides a wide range of options to customize the operation of your unit, making it suitable for various scenarios.\n\n#### Steps to Use the \"Set State\" Action\n\n1. **Create a New Automation:**\n   - Navigate to `Settings` \u003e `Automations \u0026 Scenes`.\n   - Click on **Add Automation** and select **Start with an empty automation**.\n\n2. **Configure a Trigger:**\n   - Add a trigger that fits your use case. For example:\n     - A time-based trigger to schedule changes.    \n     - A sensor-based trigger to react to environmental changes.\n        - Air Quality Sensor: Trigger when CO2 levels exceed a threshold, e.g., 1000 ppm.\n        - Humidity Sensor: Trigger when humidity exceeds, e.g., 70%.\n        - Window Sensor: Trigger when a window opens.\n        - Cooker Hood: Trigger when the smart plug detects power usage above a threshold.\n\n3. **Add the \"Dantherm: Set State\" Action:**\n   - Under the **Actions** section, click **Add Action**.\n   - Search for `Dantherm: Set state` in the action picker and select it.\n\n4. **Configure the Action:**\n   - Use the options provided to control the Dantherm ventilation unit:\n     - **Targets:** Choose the area, device, or entity to apply the action.\n     - **Operation Selection:** Set the desired operating mode (e.g., Standby, Automatic, Manual, or Week Program).\n     - **Fan Selection:** Choose the desired fan level (Level 0–4).\n     - **Modes:** Toggle special modes like:\n       - **Away Mode**: Enable or disable away mode.\n       - **Summer Mode**: Turn summer mode on or off.\n       - **Fireplace Mode**: Activate fireplace mode for a limited period.\n       - **Manual Bypass Mode**: Enable or disable manual bypass.\n\n![Skærmbillede fra 2025-02-09 14-46-28](https://github.com/user-attachments/assets/679f4582-4fcf-4adf-bb71-6042409aadb9)\n\n5. **Save the Automation:**\n   - Once configured, save the automation. The Dantherm unit will now respond to the specified trigger and perform the desired action.\n\nThe **Dantherm: Set configuration** action allows you to adjust various configuration settings of your Dantherm device directly from Home Assistant. This action can be used in automations, scripts, or manually through the Developer Tools.\n\n![Skærmbillede fra 2025-02-09 14-49-25](https://github.com/user-attachments/assets/2fad1928-d028-45cb-9bea-147944adf2ab)\n\n## ⏳ The following sections are a work in progress  \nThese features are planned for version **0.5.0**. The calendar function is currently still under development.\n\n## Integration enhancements\n\nThe integration enhances the control of Dantherm ventilation units by introducing **Boost Mode**, **Eco Mode**, **Home Mode**, and a **Calendar Function** for advanced scheduling and automation. These features ensure efficient operation based on both **schedules** and **various triggers**, providing a comfortable and energy-efficient environment.\n\n\n### Boost Mode 🚀  \nBoost Mode is designed for short bursts of increased ventilation, useful after activities like cooking or showering.\n\n- **Boost Mode Switch**: This must be **enabled** for Boost Mode to activate.  \n- **Trigger-Based Activation**: If Boost Mode is **enabled** and the **Boost Mode Trigger** is active, the unit switches to the **Boost Operation Selection**.  \n- **Timeout Handling**: [See Trigger Timeout](#trigger-timeout) for details on how long Boost Mode remains active after the trigger is deactivated.  \n- **Available Operations**: `Level 4`, `Level 3`, or `Level 2`.\n\n\u003e **Important**  \n\u003e The Dantherm unit has a built-in **automatic setback** from `Level 4` to `Level 3` after a fixed time period. This may cause Boost Mode to behave unexpectedly if `Level 4` is used for longer periods.\n\n\n### Eco Mode 🌱  \nEco Mode is designed to **reduce fan speed** under specific environmental conditions, optimizing efficiency and supporting the unit’s **defrost mechanism** in cold weather.\n\n- **Eco Mode Switch**: This must be **enabled** for Eco Mode to activate.  \n- **Trigger-Based Activation**: If Eco Mode is **enabled** and the **Eco Mode Trigger** is active, the unit switches to the **Eco Operation Selection**.  \n- **Timeout Handling**: [See Trigger Timeout](#trigger-timeout) for details on how long Eco Mode remains active after the trigger is deactivated.  \n- **Available Operations**: `Standby` and `Level 1`.\n\n\u003e **Important**  \n\u003e The Dantherm unit has a built-in **automatic setback** from `Standby` to `Level 3` after a fixed time period. This may cause Eco Mode to behave unexpectedly if `Standby` is used for longer periods.\n\n\n### Home Mode 🏡  \nHome Mode allows for automatic adjustments based on a **Home Mode Trigger**, ensuring efficient ventilation when you are at home.\n\n- **Home Mode Switch**: This must be **enabled** for Home Mode to activate.  \n- **Trigger-Based Activation**: If Home Mode is **enabled** and the **Home Mode Trigger** is active, the unit switches to the **Home Operation Selection**.  \n- **Timeout Handling**: [See Trigger Timeout](#trigger-timeout) for details on how long Home Mode remains active after the trigger is deactivated.  \n- **Available Operations**: `Automatic`, `Level 3`, `Level 2`, `Level 1`, or `Week Program`.\n\n\n\u003ch3 id=\"trigger-timeout\"\u003eTrigger Timeout ⏱️\u003c/h3\u003e\n\nEach mode trigger (Boost, Eco, Home) includes a configurable timeout that defines how long the mode remains active after the trigger is deactivated.\n\n- **Timeout Behavior**: After the trigger turns off, the unit continues operating in the triggered mode for the remaining timeout period.  \n- **Reset on Re-trigger**: If the trigger is activated again *within the timeout window*, the countdown restarts.  \n- **Automatic Revert**: When the timeout expires without further trigger activity, the unit reverts to the operation mode that was active before the trigger event—unless this has been overridden by a calendar schedule.\n\nThis mechanism ensures that temporary conditions (e.g., presence, humidity, low temperature) cause a short-term mode change without disrupting long-term schedules.\n\n\n### Adaptive Triggers ⚡\n\nBoost, Eco, and Home Modes rely on **Adaptive Triggers** — binary sensors or helpers that determine **when a mode should activate**.\n\nAn **Adaptive Trigger** can be:\n\n- A **motion sensor** (e.g., presence detection for Home Mode)  \n- A **humidity sensor** (e.g., high humidity after a shower for Boost Mode)  \n- A **power sensor** (e.g., detecting stove or shower fan usage)  \n- An **outdoor temperature sensor** (e.g., reducing fan speed in cold weather for Eco Mode)  \n- A **custom helper** combining multiple conditions\n\nAdaptive Triggers are configured manually in the integration options and linked to each mode individually.\n\n\u003e ⚠️ **Note**  \n\u003e Only entities of type `binary_sensor` or `input_boolean` are supported as Adaptive Triggers.  \n\u003e Make sure the entity returns an `on` or `off` state.\n\n\n### Trigger Entity Availability 🛑\n\nEntities related to Boost, Eco, and Home Modes (e.g., mode switch, timeout, operation selection) are **disabled by default** unless a corresponding trigger is configured.\n\nIf you manually enable these entities via Home Assistant, they will be **automatically disabled again after a reload** of the integration unless a valid trigger is set in the integration options.\n\n\n### Configuring an Adaptive Trigger\n\n#### Steps to set up an Adaptive Trigger:\n\n1. **Go to Home Assistant → Integrations → Dantherm.**\n\n![Skærmbillede 23-04-2025 kl  07 04 48 AM](https://github.com/user-attachments/assets/185aca8c-7d31-4f1b-925e-4088829e9e13)\n\n2. **Click the Configure button** for the desired Dantherm integration instance.\n\n![Skærmbillede 23-04-2025 kl  07 15 19 AM](https://github.com/user-attachments/assets/550e7bde-6993-46bd-823f-82db0067ad89)\n\n3. **Enter the trigger entity**:\n   - Use the appropriate field (e.g., `Boost Mode Trigger`, `Eco Mode Trigger`, `Home Mode Trigger`)\n   - Examples: `binary_sensor.kitchen_motion`, `binary_sensor.living_room_presence`, `binary_sensor.outdoor_temperature_low`\n4. **Click Submit** to save the configuration.\n5. **Enable the corresponding mode** in the UI.\n\nOnce configured, the Dantherm unit will automatically switch to the selected **operation mode** whenever the **Adaptive Trigger** becomes active. ⚡\n\n\n### Calendar Function 📅  \nThe Calendar Function allows precise scheduling of different operation modes, providing full automation of the ventilation system.  \n\n- **Integration - Calendar Events**:  \n  By entering an event word into the **summary** of a calendar event, the selected operation will take effect when the event starts, assuming it has a **higher priority** event words than an ongoing event. When the event ends, the system will revert to the **previously active event**. If no underlying event exists, the unit will revert to the **Default Operation Selection**.\n\n- **Event Words**: You can schedule \"**Level 1**\", \"**Level 2**\", \"**Level 3**\", \"**Automatic**\", \"**Away Mode**\", \"**Night Mode**\", \"**Boost Mode**\", \"**Home Mode**\", \"**Eco Mode**\", and \"**Week Program**\". These terms will be translated according to the selected language in Home Assistant, assuming your language is supported by the integration.\n  \n  - If **Level 1** to **Level 3** is scheduled, the unit will run in Manual mode at the selected fan level.\n  - If **Automatic** is scheduled, the unit will operate in Demand Mode.\n  - If **Away Mode** is scheduled, Away Mode will be **enabled at the start** and **disabled at the end** of the event.\n  - If **Night Mode** is scheduled, Night Mode will be **enabled at the start** and **disabled at the end** of the event.\n  - If **Boost Mode**, **Home Mode**, or **Eco Mode** is scheduled, the respective mode’s trigger will be **enabled at the start** and **disabled at the end**, allowing the unit to switch modes dynamically.\n  - If **Week Program** is scheduled, the unit will follow the selected program in **Week Program Selection**.\n\n- **Priority System**: The following is the **priority order** for calendar scheduling:  \n  1. **Away Mode** (highest priority)  \n  2. **Boost Mode**  \n  3. **Night Mode**  \n  4. **Home Mode**  \n  5. **Eco Mode**  \n  6. **Level 3**  \n  7. **Level 2**  \n  8. **Level 1**  \n  9. **Automatic**  \n  10. **Week Program** (lowest priority)  \n\nThe available operations in **Default Operation Selection** are **Automatic**, **Level 3**, **Level 2**, **Level 1**, or **Week Program**.\n\n\u003e [!IMPORTANT]\n\u003e The Dantherm unit has built-in **Night Mode Start Time** and **Night Mode End Time**. Scheduling Night Mode outside of these times may not function as expected.\n\nThese features provide **seamless automation and intelligent airflow control**, ensuring the ventilation system adapts dynamically to both **planned schedules** and **real-time environmental conditions**. 🚀🏡🌱📅\n\n\u003c!-- END:shared-section --\u003e\n\n## Disclaimer\n\nThe trademark \"Dantherm\" is owned by Dantherm Group A/S.\n\nThe trademark \"Pluggit\" is owned by Pluggit GmbH.\n\nAll product names, trademarks, and registered trademarks mentioned in this repository are the property of their respective owners.\n\n#### I am not affiliated with Dantherm or Pluggit, except as the owner of a Dantherm HCV400 P2 unit.\n\n### The author does not guarantee the functionality of this integration and is not responsible for any damage.\n\n_Tvalley71_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftvalley71%2Fdantherm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftvalley71%2Fdantherm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftvalley71%2Fdantherm/lists"}