diff --git a/README.md b/README.md index ca5f8b2..d55057f 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,62 @@ # Home Assistant Dual Smart Thermostat component +The `dual_smart_thermostat` is an enhanced verion of generic thermostat implemented in Home Assistant. + [![hacs_badge](https://img.shields.io/badge/HACS-Default-41BDF5.svg?style=for-the-badge)](https://github.com/swingerman/ha-dual-smart-thermostat) ![Release](https://img.shields.io/github/v/release/swingerman/ha-dual-smart-thermostat?style=for-the-badge) [![Donate](https://img.shields.io/badge/Donate-PayPal-yellowgreen?style=for-the-badge&logo=paypal)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=S6NC9BYVDDJMA&source=url) -The `dual_smart_thermostat` is an enhanced verion of generic thermostat implemented in Home Assistant. It uses several sensors and dedicated switches connected to a heater and air conditioning under the hood. When in heater-cooler mode, if the measured temperature is cooler than the target low `target_temp_low` temperature, the heater will be turned on off when the required low temperature is reached, if the measured temperature is hotter than the target high temperature, the cooling (air conditioning) will be turned on and turned off when the required high `target_temp_high` temperature is reached. When in heater mode, if the measured temperature is cooler than the target temperature, the heater will be turned on and turned off when the required temperature is reached. When in cooling mode, if the measured temperature is hotter than the target temperature, the cooler (air conditioning) will be turned on and turned off when required high temperature is reached. +## Features + + +| | | | +| :--- | :---: | :---: | +| **Heater/Cooler Mode** | | [](#heater-cooler-mdoe) | +| **Heater Only Mode** | | [](#heater-only-mode) | +| **Two Stage Heating Mode** | | [](#two-stage-heating) | +| **Cooler Only mode** | | [](#cooler-only-mode) | +| **Floor Temperature Control** | | [](#floor-heating-temperature-control) | +| **Window/Door sensor integration** | | [](#openings) | +| **Presets** | | [](#presets) | + + +## Heat/Cool Mdoe + +If both [`heater`](#heater) and [`cooler`](#cooler) entities configured. The thermostat can control heaing and cooling and you sare able to set min/max low and min/max high temperatures. +In this mode you can turn the thermostat to heat only, cooler only and back to heat/cool mode. + +[all features ⤴️](#features) + +## Heater Only Mode + +If only the [`heater`](#heater) entity is set the thermostat works only in heater mode. + +[all features ⤴️](#features) + +## Two Stage Heating + +Thwo stage heating canbe anabled by cadding the [required configuration](#two-stage-heating-example) netities: [`secondary_heater`](#secondary_heater), [`secondary heater_timeout`](#secondar_heater_timeout). If these are set the feature will enable automatically. + +### How Two Stage Heating Works? + +If the timout ends and the [`heater`](#heater) was on for the whole time the thermostate switches to the [`secondary heater`](#secondary_heater). In this case the primarey heater ([`heater`](#heater)) will be turned off. This will be rmemebered for the day it turned on and in the next heating cycle the [`secondary heater`](#secondary_heater) will trun on automatically. +On the next day the primary heater will turn on again the second stage will again only turn on after a timeout. + +### Two Stage Heating Example + +```yaml +openings: + - sensor.window1 + - sensor.window2 + - entity_id: binary_sensor.window3 + timeout: 00:00:30 # cosnidered to be open if still open after 30 seconds +``` + +## Cooler Only Mode + +If only the [`cooler`](#cooler) entity is set the thermostat works only in cooling mode. + +[all features ⤴️](#features) + ## Openings @@ -15,19 +68,28 @@ The `openings` configuration variable accepts a list of opening entities and ope An opening entity is a sensor that can be in two states: `on` or `off`. If the state is `on` the opening is considered open, if the state is `off` the opening is considered closed. The opening object can conatin a timout property that defines the time in seconds after which the opening is considered open even if the state is still `on`. This is useful if you would want to ignor windows opened only for a short time. -### Example +## Openings Configuration ```yaml -openings: - - sensor.window1 - - sensor.window2 - - entity_id: binary_sensor.window3 - timeout: 00:00:30 # cosnidered to be open if still open after 30 seconds +# Example configuration.yaml entry +climate: + - platform: dual_smart_thermostat + name: Study + heater: switch.study_heater + cooler: switch.study_cooler + openings: + - binary_sensor.window1 + - binary_sensor.window2 + - entity_id: binary_sensor.window3 + timeout: 00:00:30 + target_sensor: sensor.study_temperature ``` +[all features ⤴️](#features) -## Floor heating temperature cap +## Floor heating temperature control ### Maximum floor temperature + The `dual_smart_thermostat` can turn off if the floor heating reaches the maximum allowed temperature you define in order to protect the floor from overheating and damage. To enable this protection you need to set two variables: ```yaml @@ -36,9 +98,10 @@ max_floor_temp: 28 ``` ### Minimum floor temperature + The `dual_smart_thermostat` can turn on if the floor temperature reaches the minimum required temperature you define in order to protect the floor from freezing or to keep it on a comfortbale temperature. -## Configuration +### Floor Temoerature COntrol Configuration ```yaml # Example configuration.yaml entry @@ -47,14 +110,37 @@ climate: name: Study heater: switch.study_heater cooler: switch.study_cooler - openings: - - binary_sensor.window1 - - binary_sensor.window2 - - entity_id: binary_sensor.window3 - timeout: 00:00:30 target_sensor: sensor.study_temperature + floor_sensor: sensor.floor_temp + max_floor_temp: 28 + min_floor_temp: 5 ``` +[all features ⤴️](#features) + +## Presets + +Currrnetly supported presets are: + +* none +* [home](#home) +* [away](#away) +* [eco](#eco) +* [sleep](#sleep) +* [comfort](#comfort) +* [anti freeze](#anti_freeze) + +To set presets you need to add entries for them in the configuration file like this: + +```yaml +preset_name: + temperature: 13 + target_temp_low: 12 + target_temp_high: 14 +``` + +[all features ⤴️](#features) + ## Configuration variables ### name diff --git a/docs/images/air-conditioner.svg b/docs/images/air-conditioner.svg new file mode 100644 index 0000000..460c692 --- /dev/null +++ b/docs/images/air-conditioner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/chevron-right.svg b/docs/images/chevron-right.svg new file mode 100644 index 0000000..a763cfd --- /dev/null +++ b/docs/images/chevron-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/door-open.svg b/docs/images/door-open.svg new file mode 100644 index 0000000..fbac13d --- /dev/null +++ b/docs/images/door-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/file-document-outline.svg b/docs/images/file-document-outline.svg new file mode 100644 index 0000000..ea8867f --- /dev/null +++ b/docs/images/file-document-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/heat-wave.svg b/docs/images/heat-wave.svg new file mode 100644 index 0000000..e50f267 --- /dev/null +++ b/docs/images/heat-wave.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/heating-coil.svg b/docs/images/heating-coil.svg new file mode 100644 index 0000000..fa21c1f --- /dev/null +++ b/docs/images/heating-coil.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/hvac-off.svg b/docs/images/hvac-off.svg new file mode 100644 index 0000000..0ea0a67 --- /dev/null +++ b/docs/images/hvac-off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/plus.svg b/docs/images/plus.svg new file mode 100644 index 0000000..bb280a8 --- /dev/null +++ b/docs/images/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/radiator.svg b/docs/images/radiator.svg new file mode 100644 index 0000000..8e9f9af --- /dev/null +++ b/docs/images/radiator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/shield-lock-outline.svg b/docs/images/shield-lock-outline.svg new file mode 100644 index 0000000..2f5a947 --- /dev/null +++ b/docs/images/shield-lock-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/sleep.svg b/docs/images/sleep.svg new file mode 100644 index 0000000..0d6dbc0 --- /dev/null +++ b/docs/images/sleep.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/snowflake-thermometer.svg b/docs/images/snowflake-thermometer.svg new file mode 100644 index 0000000..d252a72 --- /dev/null +++ b/docs/images/snowflake-thermometer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/sun-snowflake.svg b/docs/images/sun-snowflake.svg new file mode 100644 index 0000000..b325fb3 --- /dev/null +++ b/docs/images/sun-snowflake.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/thermometer-alert.svg b/docs/images/thermometer-alert.svg new file mode 100644 index 0000000..e1689a4 --- /dev/null +++ b/docs/images/thermometer-alert.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/timer-cog-outline.svg b/docs/images/timer-cog-outline.svg new file mode 100644 index 0000000..ace2ddd --- /dev/null +++ b/docs/images/timer-cog-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/images/window-open.svg b/docs/images/window-open.svg new file mode 100644 index 0000000..554150e --- /dev/null +++ b/docs/images/window-open.svg @@ -0,0 +1 @@ + \ No newline at end of file