KartoffelToby / better_thermostat

This custom component for Home Assistant will add crucial features to your climate-controlling TRV (Thermostatic Radiator Valves) to save you the work of creating automations to make it smart. It combines a room-temperature sensor, window/door sensors, weather forecasts, or an ambient temperature probe to decide when it should call for heat and automatically calibrate your TRVs to fix the imprecise measurements taken in the radiator's vicinity.
https://better-thermostat.org
GNU Affero General Public License v3.0
763 stars 122 forks source link

BT Entity (and card) does not correctly show heating status all the time #1161

Open auanasgheps opened 10 months ago

auanasgheps commented 10 months ago

Prerequisites


hvac_modes: heat, off
min_temp: 5
max_temp: 35
target_temp_step: 0.5
current_temperature: 19.9
temperature: 19.5
hvac_action: off
window_open: false
call_for_heat: true
last_change: 2023-11-27T10:37:43.530313
saved_temperature: null
humidity: 53.5
main_mode: auto
tolerance: 0
heating_power: 0.0232
errors: []
batteries: {"sensor.studio_th_temperature": {"battery": "60", "battery_id": "sensor.studio_th_battery"}, "sensor.studio_th_humidity": {"battery": "60", "battery_id": "sensor.studio_th_battery"}, "binary_sensor.studio_finestra_contact": {"battery": "90", "battery_id": "sensor.studio_finestra_battery"}, "climate.studio_valvola": {"battery": "off", "battery_id": "binary_sensor.studio_valvola_battery_low"}}
friendly_name: Studio Riscaldamento
supported_features: 1

Output ```json { "home_assistant": { "installation_type": "Home Assistant OS", "version": "2023.11.3", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.11.6", "docker": true, "arch": "aarch64", "timezone": "Europe/Rome", "os_name": "Linux", "os_version": "6.1.21-v8", "supervisor": "2023.11.3", "host_os": "Home Assistant OS 11.1", "docker_version": "24.0.6", "chassis": "embedded", "run_as_root": true }, "custom_components": { "smartir": { "version": "1.17.8", "requirements": [ "aiofiles>=0.6.0" ] }, "climate_group": { "version": "0.4.2", "requirements": [] }, "xiaomi_cloud_map_extractor": { "version": "v2.2.0", "requirements": [ "pillow", "pybase64", "python-miio", "requests", "pycryptodome" ] }, "asuswrt_custom": { "version": "0.8.5", "requirements": [ "aioasuswrt==1.4.0", "pyasuswrt==0.1.20" ] }, "spotcast": { "version": "v3.6.30", "requirements": [] }, "scheduler": { "version": "v0.0.0", "requirements": [] }, "adaptive_lighting": { "version": "1.19.0", "requirements": [ "ulid-transform" ] }, "xiaomi_miot": { "version": "0.7.13", "requirements": [ "construct>=2.10.56", "python-miio>=0.5.6", "micloud>=0.3" ] }, "hacs": { "version": "1.33.0", "requirements": [ "aiogithubapi>=22.10.1" ] }, "yi_hack": { "version": "0.4.6", "requirements": [] }, "alarmo": { "version": "v1.9.13", "requirements": [] }, "better_thermostat": { "version": "1.4.0", "requirements": [] }, "meross_lan": { "version": "4.4.1", "requirements": [] } }, "integration_manifest": { "domain": "better_thermostat", "name": "Better Thermostat", "after_dependencies": [ "climate" ], "codeowners": [ "@kartoffeltoby" ], "config_flow": true, "dependencies": [ "climate", "recorder" ], "documentation": "https://github.com/KartoffelToby/better_thermostat", "iot_class": "local_push", "issue_tracker": "https://github.com/KartoffelToby/better_thermostat/issues", "requirements": [], "version": "1.4.0", "is_built_in": false }, "data": { "info": { "name": "Studio Riscaldamento", "temperature_sensor": "sensor.studio_th_temperature", "off_temperature": 17, "humidity_sensor": "sensor.studio_th_humidity", "window_sensors": "binary_sensor.studio_finestra_contact", "weather": null, "window_off_delay": 30, "outdoor_sensor": "sensor.balcone_th_temperature", "model": "TS0601_thermostat", "window_off_delay_after": 30, "tolerance": 0.0 }, "thermostat": { "climate.studio_valvola": { "name": "Studio Valvola", "state": "auto", "attributes": { "hvac_modes": [ "heat", "auto", "off" ], "min_temp": 5.0, "max_temp": 35.0, "target_temp_step": 0.5, "preset_modes": [ "none", "schedule", "manual", "boost", "complex", "comfort", "eco", "away" ], "current_temperature": 21.5, "temperature": 19.5, "hvac_action": "off", "preset_mode": "complex", "auto_lock": "MANUAL", "away_mode": "OFF", "away_preset_days": 1, "away_preset_temperature": 15, "battery_low": false, "boost_time": 300, "child_lock": "UNLOCK", "comfort_temperature": 20, "current_heating_setpoint": 19.5, "eco_temperature": 15, "force": "normal", "holidays": [ { "hour": 6, "minute": 0, "temperature": 20 }, { "hour": 8, "minute": 0, "temperature": 15 }, { "hour": 11, "minute": 30, "temperature": 15 }, { "hour": 12, "minute": 30, "temperature": 15 }, { "hour": 17, "minute": 30, "temperature": 20 }, { "hour": 22, "minute": 0, "temperature": 15 } ], "holidays_schedule": "06:00/20\u00b0C 08:00/15\u00b0C 11:30/15\u00b0C 12:30/15\u00b0C 17:30/20\u00b0C 22:00/15\u00b0C", "last_seen": "2023-11-27T14:44:36+01:00", "linkquality": 255, "local_temperature": 21.5, "local_temperature_calibration": 0, "max_temperature": 29, "min_temperature": 5, "position": 0, "preset": "complex", "programming_mode": null, "running_state": "idle", "system_mode": "auto", "update": { "installed_version": 87, "latest_version": 87, "state": "idle" }, "update_available": false, "valve_detection": null, "week": "5+2", "window_detection": "OFF", "window_detection_params": { "minutes": 10, "temperature": 5 }, "window_open": false, "workdays": [ { "hour": 6, "minute": 0, "temperature": 20 }, { "hour": 8, "minute": 0, "temperature": 15 }, { "hour": 11, "minute": 30, "temperature": 15 }, { "hour": 12, "minute": 30, "temperature": 15 }, { "hour": 17, "minute": 30, "temperature": 20 }, { "hour": 22, "minute": 0, "temperature": 15 } ], "workdays_schedule": "06:00/20\u00b0C 08:00/15\u00b0C 11:30/15\u00b0C 12:30/15\u00b0C 17:30/20\u00b0C 22:00/15\u00b0C", "friendly_name": "Studio Valvola", "supported_features": 17 }, "bt_config": { "calibration": "target_temp_based", "calibration_mode": "heating_power_calibration", "protect_overheating": true, "no_off_system_mode": false, "heat_auto_swapped": true, "valve_maintenance": false, "child_lock": true, "homaticip": false }, "bt_adapter": "mqtt", "bt_integration": "mqtt", "model": "TS0601_thermostat" } }, "external_temperature_sensor": { "entity_id": "sensor.studio_th_temperature", "state": "19.9", "attributes": { "state_class": "measurement", "battery": 60, "humidity": 53.5, "last_seen": "2023-11-27T14:43:27+01:00", "linkquality": 255, "temperature": 19.9, "unit_of_measurement": "\u00b0C", "device_class": "temperature", "friendly_name": "Studio TH Temperature" }, "last_changed": "2023-11-27T13:40:12.099102+00:00", "last_updated": "2023-11-27T13:43:27.426022+00:00", "context": { "id": "01HG8GAHE2QZTWN4A1T0SHC36Z", "parent_id": null, "user_id": null } }, "window_sensor": { "entity_id": "binary_sensor.studio_finestra_contact", "state": "off", "attributes": { "battery": 90, "contact": true, "device_temperature": 23, "last_seen": "2023-11-27T14:35:32+01:00", "linkquality": 255, "power_outage_count": 17, "voltage": 2985, "device_class": "door", "friendly_name": "Studio Finestra Door" }, "last_changed": "2023-11-27T11:38:37.810955+00:00", "last_updated": "2023-11-27T13:35:32.797465+00:00", "context": { "id": "01HG8FW1XXMRE18NHMQTCNQ881", "parent_id": null, "user_id": null } } } } ```

Description

BT does not always report when the real valve is heating. Usually small adjustments are not shown, larger ones do.

Please note that BT is working perfectly and I'm not having any functional issues whatsoever, but to know if the valve is heating I can't trust the BT Entity but I have to use the Valve entity, which ideally I'd like to ignore.

Here's an example: BT Entity:

Better Thermostat Entity

Real TRV

Real TRV

As you can see, BT only shows the larger heating moments, but not smaller ones.

Steps to Reproduce

  1. Configure temperature to 19.5
  2. Wait for temperature to exceed heating point to stop - my temp sensors have 0.2° C precision, so it will reach 19.7, then heating will stop
  3. Wait for temperature to drop to 19.5 again
  4. BT logic kicks in by opening the valve a little bit, but BT entity will not show the valve is open or heating

Expected behavior:

BT entity should always show when the TRV is heating.

Actual behavior: BT entity shows heating only sometimes, usually when there's a substantial temperature gap.

Versions

HA: 2023.11.3 BT: 1.4.0

Additional Information

kallejoken commented 10 months ago

i have the same phenomenon with my homematic ip thermostats. however, my thermostats are switched off completely - when the target temperature has been reached. they do not go back into heating mode even when the temperature drops. in other words, the rooms cool down overnight and i have to switch the thermostats on again manually in the morning. they then run until the target temperature has been reached, then they go back into off mode. tested with the 1.3.0 and 1.4.0 version. Screenshot 2023-11-29 121750

auanasgheps commented 10 months ago

Your issue is different than mine - my problem is only visual as the thermostats are behaving perfectly!

niddu85 commented 10 months ago

Same issue here. I use to switch the heating system on / off the hvac_action state of the BT climate entity This is the status of the BT climate entity: image

but this is the status of the TRV climate entity: image

the TRV wants to start heating, but BT says no. I also noticed that in this status the TRV valve position is also partially opened: image

This leads to some heaters heating even if they are not calling for heat.

example: i have 3 heaters on a floor: kitchen, living room and bathroom; only kitchen is calling for heat (using hvac_action from BT) but also the bathroom heater is heating up since the valve is partially open (and the TRV hvac_action is calling for heat)

auanasgheps commented 10 months ago

This leads to some heaters heating even if they are not calling for heat.

This is not my issue, I suggest to report your issue in a separate case.

My problem is only cosmetic: BT and the valves are functioning correctly

niddu85 commented 10 months ago

This leads to some heaters heating even if they are not calling for heat.

This is not my issue, I suggest to report your issue in a separate case.

My problem is only cosmetic: BT and the valves are functioning correctly

thanks, i just addressed this to a new issue

BetterThermostat Climate HVAC action not accurate #1165

Just for info, what logic do you use to drive your heating system?

auanasgheps commented 10 months ago

I use https://github.com/nielsfaber/scheduler-component and https://github.com/nielsfaber/scheduler-card to program heating based on time and my location. It's great!

niddu85 commented 10 months ago

I use https://github.com/nielsfaber/scheduler-component and https://github.com/nielsfaber/scheduler-card to program heating based on time and my location. It's great!

thanks, this is exactly what i use as well, but this component just sets the target temperature on the TRV/BT.

Which device do you use to turn the water heater on? i guess a relay. Which signal is driving this relay?

auanasgheps commented 10 months ago

I don't have a relay because I don't need it: i live in an apartment where we have "central heating", the heater for the apartments is in the basement and is on most of the day.

By the way yes, you could use a relay (like a Shelly) and combine the action when BT is requesting for heat.

niddu85 commented 10 months ago

I don't have a relay because I don't need it: i live in an apartment where we have "central heating", the heater for the apartments is in the basement and is on most of the day.

By the way yes, you could use a relay (like a Shelly) and combine the action when BT is requesting for heat.

All right, understood. That's the reason why you don't see the heating issue I see but just a GUI issue 😉

R1DEN commented 9 months ago

That also raises the question what should be the trigger for activating the heating itself (heater/boiler) - the BT thermostats, or the TRVs themselves. In my practice I had better results with triggering on BT ones, but your mileage may vary

auanasgheps commented 9 months ago

That also raises the question what should be the trigger for activating the heating itself (heater/boiler) - the BT thermostats, or the TRVs themselves. In my practice I had better results with triggering on BT ones, but your mileage may vary

In an ideal scenario, the user should follow the BT logic. Hopefully we can get it perfect. BT has made a long way since the "betas" of last winter.