better_thermostat
better_thermostat copied to clipboard
BT Entity (and card) does not correctly show heating status all the time
Prerequisites
- [x] Model name of your Devices: TS0601 (_TZE200_cpmgn2cf)
- [x] Output from Home Assistant Developer Tools state e.g.
Output
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
- [x] Output from Home Assistant Device Diagnostic from BT
Output
{
"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:
Real TRV
As you can see, BT only shows the larger heating moments, but not smaller ones.
Steps to Reproduce
- Configure temperature to 19.5
- 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
- Wait for temperature to drop to 19.5 again
- 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
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.
Your issue is different than mine - my problem is only visual as the thermostats are behaving perfectly!
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:
but this is the status of the TRV climate entity:
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:
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)
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
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?
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!
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?
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.
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 😉
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
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.