🔥 Advanced Heating Control 🔥
2 | 3 | ## ⏲️ Thermostats and 🌡️ Temperatures 4 | 5 | ### 🔥 Thermostats / Climates 6 | 7 | ### 🌱 Eco Temperature 8 | 9 | ### 🛋️ Comfort Temperature 10 | 11 | ## 🎛️ Heating Schedule Adjustments 12 | 13 | ## 👥 People and ↔️ Proximity 14 | 15 | ### 👥 People 16 | 17 | #### 🏠 Enter Home Duration 18 | 19 | #### 💨 Leaving Home Duration 20 | 21 | ### ↔️ Proximity 22 | 23 | ### ↔️ Proximity Device 24 | 25 | #### ⏰ Proximity Duration 26 | 27 | #### ↔️ Proximity Distance 28 | 29 | ## 🗓️ Scheduling 30 | 31 | ### 🗓️ Scheduler 32 | 33 | ### ☝🏻 Scheduler Selector 34 | 35 | ## 🚶 Presence Detection 36 | 37 | ### 🚶 Presence Sensor 38 | 39 | #### ⏲️ Presence Sensor Scheduler 40 | 41 | ### ⏳ Presence Reaction On Time 42 | 43 | ### ⌛ Presence Reaction Off Time 44 | 45 | ## 🎈 Party mode 46 | 47 | ## 🤝 Guest mode 48 | 49 | ## 🪟 Windows & Doors 50 | 51 | ### ⏳ Window & Door Reaction Time Open 52 | 53 | ### ⌛ Window & Door Reaction Time Close 54 | 55 | ## ❄️ Frost Protection 56 | 57 | ### ❄️ Frost Protection Fallback Duration 58 | 59 | ## 🌡️ Calibration Temperature Sensor -------------------------------------------------------------------------------- /rounded/templates/base/background_color.yaml: -------------------------------------------------------------------------------- 1 | background_color: 2 | styles: 3 | card: 4 | - background: > 5 | [[[ 6 | if(variables.background_color) { 7 | return 'var(--'+variables.background_color+')'; 8 | } 9 | 10 | let colors = ['purple','red', 'blue', 'green', 'yellow','orange']; 11 | let colorCount = Math.floor(Math.random() * colors.length); 12 | return 'var(--'+colors[colorCount]+')'; 13 | ]]] 14 | icon: 15 | - color: "[[[ return variables.background_color && variables.background_color.includes('tint') ? 'var(--white5)' : 'var(--black)'; ]]] " 16 | name: 17 | - color: "[[[ return variables.background_color && variables.background_color.includes('tint') ? 'var(--white5)' : 'var(--black)'; ]]] " 18 | label: 19 | - color: "var(--darker60)" 20 | custom_fields: 21 | cs: 22 | - color: "[[[ return variables.background_color && variables.background_color.includes('tint') ? 'var(--white5)' : 'var(--black)'; ]]] " 23 | es: 24 | - color: "[[[ return variables.background_color && variables.background_color.includes('tint') ? 'var(--white5)' : 'var(--black)'; ]]] " -------------------------------------------------------------------------------- /docs_src/ahc/sections/adjustments_heating_plan.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | - toc 4 | --- 5 | # 🎛️ Adjustments / Heating Plan 6 | 7 | In the adjustments, you can set your temperatures or enable/disable the calibration of your thermostats. 8 | You can set these settings for a specific time, but also specify that they only apply on certain days or only when a specific schedule is active. The time is a mandatory field. 9 | 10 | ## Modifier and Filter 11 | 12 | | Modifier | Values | Example | Description | 13 | | --------------- | ------- | ------- |------- | 14 | | 🕔 Time | HH:MM | 21:30 | The time when the adjustment should take place. | 15 | | 📆 Days | Mon, Tue, Wed, Thu, Fri, Sat, Sun | ['Mon','Fri'] | Filter if the adjustment should only take place on certain days. | 16 | | 🗓️ Scheduler | friendly name | Heating Schedule | Filter if the adjustment should only be set when a specific schedule is active. | 17 | | 🛋️ Comfort | 0-100 | 24 | Modifier that changes the comfort temperature to a different value at the specified time. | 18 | | 🌱 Eco | 0-100 | 17 | Modifier that changes the eco temperature to a different value at the specified time. | 19 | | 🧭 Calibration | on/off | on | Modifier that can turn the calibration on or off. | -------------------------------------------------------------------------------- /docs_src/ahc/sections/persons.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | - toc 4 | --- 5 | # 👥 Persons 6 | 7 | Persons are used as triggers to set the comfort temperature. If one of the defined persons is at home, the comfort temperature is set. 8 | For example, if schedules or presence sensors are also defined, they are evaluated together with the persons in a logic. 9 | 10 | !!! warning "An overview explaining the logic will follow later in the documentation." 11 | 12 | ## 👥 Persons 13 | 14 | Here you specify the persons who usually occupy the room to be heated. 15 | 16 | ## 🏠 Enter Home Duration 17 | 18 | Sometimes you just need to be in the apartment briefly without heating. Therefore, a time tolerance can be specified for how long a person must be at home before the heating starts. 19 | 20 | ## 💨 Leaving Home Duration 21 | 22 | Sometimes you just leave the house for a few minutes. To avoid unnecessarily draining the batteries of the thermostats, you can prevent setting the eco temperature by also setting a time tolerance here. 23 | 24 | ## 🤝 Guest Mode 25 | 26 | If you have guests in the house but you are not at home, you can specify a boolean entity here that you can manually trigger. Even if you do not use the person integration, you can specify a boolean entity here that has its own logic to simulate persons being at home. -------------------------------------------------------------------------------- /docs_src/ahc/sections/windows_doors.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | - toc 4 | --- 5 | # 🪟 Windows & Doors Detection 6 | 7 | To ensure your thermostats deactivate or lower the temperature when your doors or windows are open, you need to add your contact sensors here. 8 | 9 | !!! info "Thermostats that do not support the *off* mode are automatically set to their minimum temperature." 10 | 11 | ## 🪟 Windows & Doors 12 | 13 | Füge hier deine Türen und Fenster hinzu, auf die deine Automation reagieren soll. 14 | 15 | ## ⏳ Window & Door Reaction Time Open 16 | 17 | Here you can set a time that your windows or doors must be open before your thermostats are lowered. This prevents the thermostats from lowering just because you briefly open the door, for example, to leave the house. 18 | 19 | ## ⌛ Window & Door Reaction Time Close 20 | 21 | If your window briefly slams shut due to the wind or you want to wait a while until your room acclimatizes, you can set a duration here that the window must be closed before your thermostats are reset to their original state. 22 | 23 | ## 🌡️ Window Open Temperature 24 | 25 | If you only want to lower your thermostats slightly when the window is open, for example, to save battery or because it is so cold that the pipes might freeze, you can set a temperature here that will be applied in this case. -------------------------------------------------------------------------------- /docs_src/ahc/hints/keywords.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | - toc 4 | --- 5 | # 🔑 Keywords 6 | 7 | To find the keywords for calibration or valve position, this guide should serve as a help. 8 | 9 | ## Navigate to device section 10 | 11 | Press the *D-Key* on your keyboard anywhere in Home Assistant and type the name of your thermostat. Select it and press *Enter*. 12 | 13 |Under construction!
This is currently under construction! The contents are therefore to be enjoyed with caution and can still change at any time.
"},{"location":"ahc/adjustments_heating_plan/","title":"\ud83c\udf9b\ufe0f Adjustments / Heating Plan","text":"In the adjustments, you can set your temperatures or enable/disable the calibration of your thermostats. You can set these settings for a specific time, but also specify that they only apply on certain days or only when a specific schedule is active. The time is a mandatory field.
"},{"location":"ahc/adjustments_heating_plan/#modifier-and-filter","title":"Modifier and Filter","text":"Modifier Values Example Description \ud83d\udd54 Time HH:MM 21:30 The time when the adjustment should take place. \ud83d\udcc6 Days Mon, Tue, Wed, Thu, Fri, Sat, Sun ['Mon','Fri'] Filter if the adjustment should only take place on certain days. \ud83d\uddd3\ufe0f Scheduler friendly name Heating Schedule Filter if the adjustment should only be set when a specific schedule is active. \ud83d\udecb\ufe0f Comfort 0-100 24 Modifier that changes the comfort temperature to a different value at the specified time. \ud83c\udf31 Eco 0-100 17 Modifier that changes the eco temperature to a different value at the specified time. \ud83e\udded Calibration on/off on Modifier that can turn the calibration on or off."},{"location":"ahc/temperatures/","title":"\ud83c\udf21\ufe0f Temperatures","text":""},{"location":"ahc/temperatures/#static-comfort-temperature","title":"\ud83d\udecb\ufe0f Static Comfort Temperature","text":"The comfort temperature is the temperature that is set when you might be at home or your presence sensor is triggered or your heating schedule is on. This temperature setting serves as a fallback temperature. If a static temperature is sufficient for you and you do not want to adjust it further via the UI, this setting is sufficient. However, temporal temperature adjustments can be made via the adjustments.
"},{"location":"ahc/temperatures/#static-eco-temperature","title":"\ud83c\udf31 Static Eco Temperature","text":"The eco temperature is the temperature that is set when you are not at home, for example, or your schedule does not prescribe heating to the comfort temperature. This temperature setting serves as a fallback temperature. If a static temperature is sufficient for you and you do not want to adjust it further via the UI, this setting is sufficient. However, temporal temperature adjustments can be made via the adjustments.
"},{"location":"ahc/temperatures/#comfort-temperature","title":"\ud83d\udecb\ufe0f Comfort Temperature","text":"If you want to control the comfort temperature via the UI, you can specify an input number helper here. This overrides the static comfort temperature.
"},{"location":"ahc/temperatures/#eco-temperature","title":"\ud83c\udf31 Eco Temperature","text":"If you want to control the eco temperature via the UI, you can specify an input number helper here. This overrides the static eco temperature.
"},{"location":"ahc/thermostats_sensors/","title":"\ud83d\udd18 Thermostats & Sensors","text":""},{"location":"ahc/thermostats_sensors/#thermostats-climates","title":"\ud83d\udd25 Thermostats / Climates","text":"In the first step, you need to specify your thermostats or the climate entities that your new AHC automation should control.
"},{"location":"ahc/thermostats_sensors/#operation-hvac-mode","title":"\ud83c\udf9b\ufe0f Operation / HVAC Mode","text":"Here you select the manual heating mode of your thermostats so that AHC can take full control. Usually, the manual HVAC mode is heat. However, for some thermostats this mode also stands for the boost mode and another mode like auto must be selected.
"},{"location":"ahc/thermostats_sensors/#room-temperature-sensor","title":"\ud83c\udf21\ufe0f Room Temperature Sensor","text":"The sensor of your room temperature is useful for many features: It ensures the accurate calibration of your thermostats and can be used for functions that are described in other sections here.
"}]} -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.sv.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lunr languages, `Swedish` language 3 | * https://github.com/MihaiValentin/lunr-languages 4 | * 5 | * Copyright 2014, Mihai Valentin 6 | * http://www.mozilla.org/MPL/ 7 | */ 8 | /*! 9 | * based on 10 | * Snowball JavaScript Library v0.3 11 | * http://code.google.com/p/urim/ 12 | * http://snowball.tartarus.org/ 13 | * 14 | * Copyright 2010, Oleg Mazko 15 | * http://www.mozilla.org/MPL/ 16 | */ 17 | 18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); -------------------------------------------------------------------------------- /blueprints/automation/panhans/binary_sensor_notification.yaml: -------------------------------------------------------------------------------- 1 | blueprint: 2 | name: "Binary Sensor Notification" 3 | description: 'Send a notification or trigger a custom action depending on the state switch of a binary_sensor' 4 | source_url: https://github.com/panhans/homeassistant/blob/main/blueprints/automation/panhans/binary_sensor_notification.yaml 5 | domain: automation 6 | input: 7 | sensor_entity: 8 | name: "Sensor" 9 | description: "Sensor which triggers the notification." 10 | selector: 11 | entity: 12 | domain: binary_sensor 13 | 14 | from: 15 | name: "From" 16 | description: "State which triggers the notification" 17 | default: 'on' 18 | selector: 19 | select: 20 | options: 21 | - 'on' 22 | - 'off' 23 | 24 | to: 25 | name: "To" 26 | description: "State which triggers the notification" 27 | default: 'off' 28 | selector: 29 | select: 30 | options: 31 | - 'on' 32 | - 'off' 33 | 34 | debounce_duration: 35 | name: "Debounce duration" 36 | description: "Duration time the notification won't be sent again after sensor changed its state." 37 | default: 10 38 | selector: 39 | number: 40 | min: 0 41 | max: 100 42 | unit_of_measurement: "s" 43 | mode: slider 44 | step: 1 45 | 46 | notify_device: 47 | name: "Device to notify" 48 | description: Device which gets a notification. 49 | default: false 50 | selector: 51 | device: 52 | integration: mobile_app 53 | 54 | notify_group: 55 | name: Notification Group 56 | description: "The name of the notification group to call. ('notify' for all devices)" 57 | default: "" 58 | 59 | title: 60 | name: "Title" 61 | description: "Notification title" 62 | message: 63 | name: "Message" 64 | description: "Message to be sent" 65 | 66 | tag: 67 | name: "Tag" 68 | description: "If you want to do something in another automation" 69 | default: "tag-{{ trigger.entity_id }}" 70 | 71 | status_bar_icon: 72 | name: "Status bar icon" 73 | description: "Sets the status bar icon. (Android only)" 74 | default: mdi:home-assistant 75 | selector: 76 | icon: 77 | placeholder: mdi:home-assistant 78 | 79 | custom_action: 80 | name: "Custom Action" 81 | description: "An action which can be processed if notification is triggered" 82 | default: [] 83 | selector: 84 | action: {} 85 | 86 | variables: 87 | to: !input to 88 | message: !input message 89 | title: !input title 90 | sensor_entity: !input sensor_entity 91 | debounce_duration: !input debounce_duration 92 | group_target: !input notify_group 93 | custom_action: !input custom_action 94 | notify_device: !input notify_device 95 | 96 | trigger: 97 | - platform: state 98 | entity_id: !input 'sensor_entity' 99 | to: !input to 100 | from: !input from 101 | 102 | condition: 103 | condition: template 104 | value_template: >- 105 | {{ iif(this.attributes.last_triggered == None, 9999, as_timestamp(now()) - as_timestamp(this.attributes.last_triggered, default=0) ) >= (debounce_duration | int) }} 106 | 107 | action: 108 | - choose: 109 | - conditions: "{{ not group_target }}" 110 | sequence: 111 | - service: 'notify.mobile_app_{{ device_attr(notify_device, "name") | slugify }}' 112 | data: 113 | title: "{{ title }}" 114 | message: "{{ message }}" 115 | data: 116 | ttl: 0 117 | priority: high 118 | notification_icon: !input 'status_bar_icon' 119 | tag: !input tag 120 | - conditions: "{{ group_target is defined }}" 121 | sequence: 122 | - service: notify.{{ group_target }} 123 | data: 124 | title: "{{ title }} | {{ states('sensor.time') }}" 125 | message: "{{ message }}" 126 | data: 127 | ttl: 0 128 | priority: high 129 | notification_icon: !input 'status_bar_icon' 130 | tag: !input tag 131 | - choose: 132 | - conditions: 133 | - '{{ custom_action is defined }}' 134 | sequence: !input 'custom_action' 135 | -------------------------------------------------------------------------------- /docs_src/ahc/sections/dynamic_valve_positioning.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | - toc 4 | --- 5 | # ⌖ Dynamic Valve Positioning 6 | 7 | Usually, the valves of your thermostats are always 100% open, except the target temperature is reached. To prevent your thermostat from behaving like a relay, i.e., only opening and closing, you can dynamically influence the valve position here. 8 | 9 | !!! info "Your thermostat must support this and the respective integration must provide an entity for the valve opening." 10 | 11 | ## ⌖ Valve Positioning Mode 12 | 13 | The positioning mode determines when and how much the valve is closed or opened. This depends on your rooms, the heating surface, the flow temperature, etc. 14 | 15 || Regular | 23 |Optimisitc | 24 |Pessimistic | 25 |
|---|---|---|
| This is the default setting and should be chosen if the radiators and flow temperature are ideally matched to your room. | 28 |Here the valve closes faster at the beginning because your radiators still have enough heat to heat the room or the flow temperature for the said room is set too high. | 29 |Here the valve closes faster at the beginning because your radiators still have enough heat to heat the room or the flow temperature for the said room is set too high. | 30 |
| 33 | ``` mermaid 34 | --- 35 | config: 36 | themeVariables: 37 | xyChart: 38 | plotColorPalette: "#e52000" 39 | xAxisTitleColor: "#e52000" 40 | --- 41 | xychart-beta 42 | title "Regular" 43 | x-axis "Temperature (in °C)" 15 --> 20 44 | y-axis "Valve Opening (in %)" 0 --> 100 45 | line [100, 100, 100, 87.5, 75, 62.5, 50, 37.5, 25, 12.5, 0] 46 | ``` 47 | | 48 |49 | ``` mermaid 50 | --- 51 | config: 52 | themeVariables: 53 | xyChart: 54 | plotColorPalette: "#e52000" 55 | xAxisTitleColor: "#e52000" 56 | --- 57 | xychart-beta 58 | title "Optimistic" 59 | x-axis "Temperature (in °C)" 15 --> 20 60 | y-axis "Valve Opening (in %)" 0 --> 100 61 | line [100, 100, 100, 76, 56, 39, 25, 14, 6, 1.5, 0] 62 | ``` 63 | | 64 |65 | ``` mermaid 66 | --- 67 | config: 68 | themeVariables: 69 | xyChart: 70 | plotColorPalette: "#e52000" 71 | xAxisTitleColor: "#e52000" 72 | --- 73 | xychart-beta 74 | title "Pessimistic" 75 | x-axis "Temperature (in °C)" 15 --> 20 76 | y-axis "Valve Opening (in %)" 0 --> 100 77 | line [100, 100, 100, 93.5, 86.6, 79.05, 70.71, 61.24, 50, 35.5, 0] 78 | ``` 79 | | 80 |