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
834 stars 126 forks source link

BT keeps heating after reaching set temperature #889

Closed chuckfy closed 1 year ago

chuckfy commented 1 year ago

Prerequisites

HmIP-eTRV-B-2 R4M

{
{
  "home_assistant": {
    "installation_type": "Home Assistant OS",
    "version": "2023.1.4",
    "dev": false,
    "hassio": true,
    "virtualenv": false,
    "python_version": "3.10.7",
    "docker": true,
    "arch": "x86_64",
    "timezone": "Europe/Berlin",
    "os_name": "Linux",
    "os_version": "5.15.80",
    "supervisor": "2022.12.1",
    "host_os": "Home Assistant OS 9.4",
    "docker_version": "20.10.19",
    "chassis": "vm",
    "run_as_root": true
  },
  "custom_components": {
    "better_thermostat": {
      "version": "1.0.0",
      "requirements": []
    },
    "hacs": {
      "version": "1.29.1",
      "requirements": [
        "aiogithubapi>=22.10.1"
      ]
    },
    "localtuya": {
      "version": "5.0.0",
      "requirements": []
    },
    "homematicip_local": {
      "version": "1.26.1",
      "requirements": [
        "hahomematic==2023.1.2"
      ]
    }
  },
  "integration_manifest": {
    "domain": "better_thermostat",
    "name": "Better Thermostat",
    "documentation": "https://github.com/KartoffelToby/better_thermostat",
    "issue_tracker": "https://github.com/KartoffelToby/better_thermostat/issues",
    "iot_class": "local_push",
    "version": "1.0.0",
    "config_flow": true,
    "dependencies": [
      "climate",
      "recorder"
    ],
    "after_dependencies": [
      "climate"
    ],
    "codeowners": [
      "@kartoffeltoby"
    ],
    "requirements": [],
    "is_built_in": false
  },
  "data": {
    "info": {
      "name": "betterthermostat_WZ",
      "temperature_sensor": "sensor.a4_c1_38_ae_8d_7c_8d7c_temperature",
      "off_temperature": 20,
      "humidity_sensor": "sensor.a4_c1_38_ae_8d_7c_8d7c_humidity",
      "window_off_delay": 180,
      "window_sensors": null,
      "outdoor_sensor": null,
      "weather": null,
      "model": "HmIP-eTRV-B-2 R4M"
    },
    "thermostat": {
      "climate.hmip_etrv_b_2_r4m_00399f299d07c8": {
        "name": "HmIP-eTRV-B-2 R4M 00399F299D07C8",
        "state": "heat",
        "attributes": {
          "hvac_modes": [
            "auto",
            "heat",
            "off"
          ],
          "min_temp": 5.0,
          "max_temp": 26.0,
          "target_temp_step": 0.5,
          "preset_modes": [
            "boost",
            "none"
          ],
          "current_temperature": 25.0,
          "temperature": 23.0,
          "hvac_action": "heating",
          "preset_mode": "none",
          "interface_id": "RM-HmIP-RF",
          "address": "00399F299D07C8:1",
          "model": "HmIP-eTRV-B-2 R4M",
          "entity_type": "custom",
          "value_state": "valid",
          "friendly_name": "HmIP-eTRV-B-2 R4M 00399F299D07C8",
          "supported_features": 17
        },
        "bt_config": {
          "calibration": "target_temp_based",
          "calibration_mode": "default",
          "protect_overheating": true,
          "no_off_system_mode": true,
          "heat_auto_swapped": false,
          "child_lock": false,
          "homaticip": true
        },
        "bt_adapter": "homematicip_local",
        "bt_integration": "homematicip_local",
        "model": "HmIP-eTRV-B-2 R4M"
      }
    },
    "external_temperature_sensor": {
      "entity_id": "sensor.a4_c1_38_ae_8d_7c_8d7c_temperature",
      "state": "21.0",
      "attributes": {
        "state_class": "measurement",
        "unit_of_measurement": "\u00b0C",
        "device_class": "temperature",
        "friendly_name": "WohnzimmerXiaomiTemp"
      },
      "last_changed": "2023-01-14T16:15:24.269014+00:00",
      "last_updated": "2023-01-14T16:15:24.269014+00:00",
      "context": {
        "id": "01GPRH0XKD9Q7TEA8C1XCMANTF",
        "parent_id": null,
        "user_id": null
      }
    },
    "window_sensor": "-"
  }
}
}

Description

After reaching the set temperature the TRVs keeps heating. After rebooting the VM running HA and reinstalling the BT entities it seemed to have worked for the night. All TRVs eventually stopped heating and did so over night (where a lower temperature was set). This morning on the heating phase none of the TRVs stopped heating after reaching the setpoint. At 7:15 i lowered the target temp to 20 °C because I recognized the overheating. Still the overheating continued.

image

Purple = target temp / set temp Blue = current temp at TVR (measured internally)

Steps to Reproduce

  1. Set a higher target temperature than currently
  2. Heating starts
  3. Heating does not stop

Expected behavior:

I expected the temperature to be set to 5 °C (in lieu of turning to 'off') so no heating occurs after setpoint is reached.

Actual behavior:

Valves do not close, because a higher target temperature is set for the TVRs so they keep heating. The BT Cards shows the heating should have stopped.

Versions

Home Assistant 2023.1.4 Supervisor 2022.12.1 Operating System 9.4 Frontend 20230110.0 - latest

Better Thermostat 1.0.0

Additional Information

Set temperature: 20 °C

image After reaching the setpoint around 16:40 the valve did not fully shut. The BT integrations seems to indicate (orange area) that no heating occured afterwards. This is taken from the history of the BT card. The lower graph shows the valve opening. The integration also shows heating is off: image

image This is taken from the history of the HM IP device. I assume the higher set temperature is the one calculated by BT and send to the HM IP integration in order to facilitate heating.

image When I manually click the I/O button on the BT card so it greys out, the new temperature is 5 °C (turned off). So that communication seems to work.

image This is the log for the earlier mentioned time frame around 16:40.

Is there a bug that keeps sending higher target temperatures to the TVR or is there any additional setting you need to take with HM IP devices?

I also tested the function swap auto and heat, but the behaviour was the same:

image Purple = target temp of BT ingeration Blue = external temp sensor

and the corresponding history of the HM IP unit: image

wtom commented 1 year ago

It doesn't set it to 5, that's not wanted. Also you have an off mode so uncheck that option in the configuration. I would also uncheck the overheating prevention. And just leave the Homematic option.

Leave default calibration since the Homematic TRVs are very good.

chuckfy commented 1 year ago

@wtom Thank you!

In order to rule out a bad setupo on my part I created a new Home Assistant VM and installed Raspberrymatic, Homematic IP integration and better thermostat from scratch.

I left all settings unchecked except for the HM Option and swap auto and heat.

The swap function seemed to be necessary because now the state gets actually set to auto instead of heating.

I also set the mode to normal as per your recommendation. Unfortunately the behavior is the same. After reaching the setpoint, the TVR keeps on heating.

After betterthermostat sets the heating mode to off, the target temperature of the TVR is increased furthermore and I can't figure out why. For a short while it will be at Idle (Auto) and some target temperature and then switch to Heating WP1 and some (rather high target temperature) and will keep increasing it.

So the idle state is not kept and somehow new target temperatures are generated.

bsafh commented 1 year ago

"I left all settings unchecked except for the HM Option and swap auto and heat.

The swap function seemed to be necessary because now the state gets actually set to auto instead of heating."

This activates the locally programmed schedules in the TRV as programmedin RaspberryMatic, interfering with the control from BT (overriding BT). Is that what you want?

All my HM-CC-RT-DN Homematic TRV run without the swap option in BT, with BT in "AI" or "normal" mode and with "target calibration".

They all heat up to the desired target temperature and then close the valve to the needed value to keep the room temperature.

It took BT around 2 days to learn the heating power of radiators though, dringend this period there was some over- and underheating (with any TRV, not only Homematic).

Screenshot_20230116_004404_Home Assistant Screenshot_20230116_004330_Home Assistant Screenshot_20230116_004227_Home Assistant Screenshot_20230116_004217_Home Assistant Screenshot_20230116_004155_Home Assistant Screenshot_20230116_004144_Home Assistant Screenshot_20230116_004056_Home Assistant Screenshot_20230116_003954_Home Assistant Screenshot_20230116_003927_Home Assistant

Screenshot_20230116_004823_Home Assistant

chuckfy commented 1 year ago

Thank you!

This activates the locally programmed schedules in the TRV as programmedin RaspberryMatic, interfering with the control from BT (overriding BT). Is that what you want?

No. But are you sure this applies to HM IP devices? I set 15 °C for a room (currently at 20 °C) and the TVR set the internal temperature to 17 °C and changed it a few minutes later to 16.5°C. The Raspberry Matic setpoint is 19 °C for this timeframe.

It took BT around 2 days to learn the heating power of radiators though, dringend this period there was some over- and underheating (with any TRV, not only Homematic)

I figured as much, however when the TVRs kept hearing and heating I started intervening. The whole point is to save some energy (probably not enough to justify the cost of the TVRs, server etc. but it should add some comfort. The user before recommended the normal mode, because the TVRs are pretty good themselves.

I'll deactivate the swap function and will leave the settings for one 1 TVR untouched for this night and the day tomorrow and will see how it goes. Maybe you are right and I just need to wait longer and live with a few days of overheating for the system to start working properly. Edit: Screenshot_20230116-011338 This is with Normal mode, according to the description the internal TVR temperature should be adjusted to the external sensor. What is to be expected? Should the displayed current temperature actually be equal to the external sensor? This is not the case.

bsafh commented 1 year ago

I'm pretty sure that's the same for HM-IP, yes.

The logic within RaspberryMatic/CCU3 is the same: definitiv a schedule with various temperature-time points, min/max, window-open recognition etc and transfer all that to the TRV. After that, the TRV acts autonomously on it's own as long as there are no changes from the CCU3.

(Homematic does all the logic locally in the TRV, HomeAssistant does all the logic in HomeAssistant assuming dumb TRVs).

The HM TRV have some internal "learning" as well as to which "internal" temperature they have to heat in order to reach the desired target temperature. Do you have an external HM-temperature sensor coupled to the TRV via RaspberryMatic?

chuckfy commented 1 year ago

The logic within RaspberryMatic/CCU3 is the same: definitiv a schedule with various temperature-time points, min/max, window-open recognition etc and transfer all that to the TRV. After that, the TRV acts autonomously on it's own as long as there are no changes from the CCU3.

Yes, that would be my understanding too!

The HM TRV have some internal "learning" as well as to which "internal" temperature they have to heat in order to reach the desired target temperature. Do you have an external HM-temperature sensor coupled to the TRV via RaspberryMatic?

No the whole point of me using betterthermostat is that I am able to use cheaper hardware (like aquara window contacts and xiaomi temperature sensosrs.

In my RM there are only my HM IP TVRs.

@bsafh Regarding your screenshots, assuming assuming Diele Homematic is the hm integration and AI Diele is the bt integration and our graphs look the same: Between 8 and 21 no heating should have occured according to BT, the radiator symbol shouldn't glow. Because the setpoint is lower than the external temp reading all the time. Still some heating was done. However the qualitative trend fits, you raised the target temperature and heating started. With my graphs for the BT integration heating is only indicated if target temp is > external temp see below: image

Unfortunately I have basically no programming experience (except for some matlab stuff). I tried to look at the code but failed to gain any insights due to my lack of understanding. First, the calibration is mode set in config_flow.py and stored (?) in const.py. I didn't find any instance in controlling or tvr where this mode would be used to determine the type of control. I wanted to check if it is set to normal (CalibrationMode.DEFAULT) what would happen in the control loop that causes the extreme overshoot.

from tvr.py # TODO: async def in controlling? if self.real_trvs[entity_id]["calibration_received"] is False: self.real_trvs[entity_id]["calibration_received"] = True _LOGGER.debug( f"better_thermostat {self.name}: calibration accepted by TRV {entity_id}" ) _main_change = False self.old_internal_temp = self.real_trvs[entity_id]["current_temperature"] self.old_external_temp = self.cur_temp if self.real_trvs[entity_id]["calibration"] == 0: self.real_trvs[entity_id][ "last_calibration" ] = await get_current_offset(self, entity_id) I would assume this is where the normal mode sets the new internal temperature for the TVR. Hence I'd expect to see the logger line calibration accepted by TRV in the logs, but I don't. Scrolling through the code I just want to say thank you @KartoffelToby and all contributors. When everything is working it is easy to overlook how much work went into a HA integration you'd use.

Results of my overnight experiment:

Target until 0600: 18 °C Target after 0600: 20 °C

(I placed the sensor closer to the radiator around 08:10 in order to speed up the process because I didn't want to overheat the whole room)

The TVR still reads its actual temperature instead of beeing overriden by betterthermostat and hence letting the TVR handle the control loop. At least that is what I would understand from "Normal". Especially with heating rooms, the overshoot shouldn't bee several degrees but rather decimal points, therefore I assume there is some bug going on.

Screenshot_20230116-090040 Screenshot_20230116-085954

Here is the debugging log file for further insight in what's going on: home-assistant_2023-01-16T07-50-46.186Z.log

edit: and this is the diag info for the current config / debug log: { "home_assistant": { "installation_type": "Home Assistant OS", "version": "2023.1.4", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.10.7", "docker": true, "arch": "x86_64", "timezone": "Europe/Berlin", "os_name": "Linux", "os_version": "5.15.80", "supervisor": "2022.12.1", "host_os": "Home Assistant OS 9.4", "docker_version": "20.10.19", "chassis": "vm", "run_as_root": true }, "custom_components": { "better_thermostat": { "version": "1.0.0", "requirements": [] }, "hacs": { "version": "1.29.1", "requirements": [ "aiogithubapi>=22.10.1" ] }, "homematicip_local": { "version": "1.26.2", "requirements": [ "hahomematic==2023.1.3" ] } }, "integration_manifest": { "domain": "better_thermostat", "name": "Better Thermostat", "documentation": "https://github.com/KartoffelToby/better_thermostat", "issue_tracker": "https://github.com/KartoffelToby/better_thermostat/issues", "iot_class": "local_push", "version": "1.0.0", "config_flow": true, "dependencies": [ "climate", "recorder" ], "after_dependencies": [ "climate" ], "codeowners": [ "@kartoffeltoby" ], "requirements": [], "is_built_in": false }, "data": { "info": { "name": "btAZ", "temperature_sensor": "sensor.atc_bdbe_temperature", "off_temperature": 20, "humidity_sensor": "sensor.atc_bdbe_humidity", "window_sensors": null, "outdoor_sensor": null, "weather": null, "window_off_delay": 0, "model": "HmIP-eTRV-B-2 R4M" }, "thermostat": { "climate.hmip_etrv_b_2_r4m_00399f299d07c0": { "name": "Arbeitszimmer", "state": "heat", "attributes": { "hvac_modes": [ "auto", "heat", "off" ], "min_temp": 5.0, "max_temp": 30.5, "target_temp_step": 0.5, "preset_modes": [ "boost", "none" ], "current_temperature": 25.2, "temperature": 23.0, "hvac_action": "idle", "preset_mode": "none", "interface_id": "HMIP-HmIP-RF", "address": "00399F299D07C0:1", "model": "HmIP-eTRV-B-2 R4M", "entity_type": "custom", "value_state": "valid", "friendly_name": "Arbeitszimmer", "supported_features": 17 }, "bt_config": { "calibration": "target_temp_based", "calibration_mode": "default", "protect_overheating": false, "no_off_system_mode": false, "heat_auto_swapped": false, "child_lock": false, "homaticip": true }, "bt_adapter": "homematicip_local", "bt_integration": "homematicip_local", "model": "HmIP-eTRV-B-2 R4M" } }, "external_temperature_sensor": { "entity_id": "sensor.atc_bdbe_temperature", "state": "22.31", "attributes": { "state_class": "measurement", "unit_of_measurement": "\u00b0C", "device_class": "temperature", "friendly_name": "ArbeitszimmerXiaomiTemp" }, "last_changed": "2023-01-16T09:00:17.481671+00:00", "last_updated": "2023-01-16T09:00:17.481671+00:00", "context": { "id": "01GPWWXMP97N8GEW4AZ5GDE6A3", "parent_id": null, "user_id": null } }, "window_sensor": "-" } }

chuckfy commented 1 year ago

From the log I deemed

2023-01-16 08:32:58.135 DEBUG (MainThread) [custom_components.better_thermostat.climate] better_thermostat btAZ: calculate_heating_power / temp_diff: 3.5 - time: 21.2 - degrees_time: 0.1651 - heating_power: 0.0255 - heating_power_stats: [{'temp_diff': 3.5, 'time': 21.2, 'degrees_time': 0.1651, 'heating_power': 0.0255}] interesting.

Since heating startet at 06:00 (when the target changed from 18 °C to 20 °C), I checked the temps:

16/01/2023 06:00:34 19.86 16/01/2023 08:32:07 23.3

So the temperature difference is 3,44 degree which could correspond to 3.5 degree. I can't figure out what the time diff corresponds to though, there was no 21 minute window I could find:

image BT Integration

image Homematic integration

image Valve state.

I guess it would be interesting now to see how the heating power calculation will behave over time.

On a side note, because the HM IP devices are not supported I assume it is because @KartoffelToby does not own one (or hasn't had the freetime yet to work on it). If you have the HM IP USB stick to get the signals or are able to aquire one, I could send you one of my HM IP devices for testing purposes, since I really only need to integrate 3 of the 4 I currently own. I don't have a spare HM IP USB stick though.

wtom commented 1 year ago

It's your Homematic TRV that still is not calibrated. They have their own algorithm and you see that on the chart.

You are putting the target temperature below the actual temperature, but the TRV keeps heating (probably their algorithm thinks it the right thing to do at the moment, why? no one knows). On the BT integration you see, when BT wants to get some heating from the TRV, that's the only moment where the target temperature is above the actual temperature.

So my question, do you have somehow the external sensor attached to the homematic trv, maybe that's why it's thinking, "i need to heat a little more, to have a longer pause". Or you can try to set the overheat protection in the BT config, that will lower the target temperature on the TRV even more.

In the end, BT does everything right.

I have to say, the Homematic TRVs are very good. Their behavior is adapted also to the previous heating situations. They try to learn and adjust their heating so you have it as comfortable as possible. I personally don't have any (sadly), but i saw that now several times. I also saw for example, that sometimes randomly they keep the valve open (3-5%) to just have a little flow to keep the temperature. But it's not always. I'm thinking, maybe they measure the internal temperature and if the difference is getting to big they start something like this. You know the windows are mostly the weakest isolation in the room and the heaters are placed below the windows, so they might then have an algorithm to detect the situation where the window is colder than normal and then they try to open the valve a little to prevent too much cold are "falling" down.

chuckfy commented 1 year ago

@wtom Thanks!

Okay, I will continue leaving the one TVR at Normal instead of AI Times Based for now and see how the calibration will work out.

I disabled overheat protection because you mentioned it in your original post.

What steps lead to BT forgetting the calibration? Everything reinstall of the climate entity? Reinstall of BT? Change of Calibration mode? I assume setting the overheat flag won't affect the calibration for now if I don't set anything else.

If I get everything right the order is now something like this: BT needs to learn / calibrate what target temperatures to send to the TVR. These will lower overtime I guess? And then the TVR will learn additionally how to respond to the target temperatures. This in return will lead to BT to adjust the calibration again until everything works?

No I don't have any external sensor connected to my TVR, because I only own the Xiaomi ones, that cannot be added / grouped in Raspberrymatic, hence my need for the BT integration.

So now I just have to wait and decide if I want to keep it at Normal or AI Time based.

Thank you all for.your input so far!

bsafh commented 1 year ago

Both "normal " and "AI" mode work for my HM-CC-RT-DN TRVs, but it took a few days for everything to settle.

wtom commented 1 year ago

@chuckfy

I disabled overheat protection because you mentioned it in your original post. Yes, in general it's best. But i would activate it now for a bit until the Homematic adapts a bit. Because now it's overshooting so much. Maybe you will even see a little difference. And after some days, that you see, it's adapted you could disable the option and then wait again a little (it will most probably again overshoot).

If I get everything right the order is now something like this: BT needs to learn / calibrate what target temperatures to send to the TVR. These will lower overtime I guess? And then the TVR will learn additionally how to respond to the target temperatures. This in return will lead to BT to adjust the calibration again until everything works?

In Normal mode BT doesn't need to learn anything. It's just correcting the difference between the internal TRV temperature and the external sensor temperature. Nothing else. And this should be the best option for the Homematic.

@bsafh Those are the Homematic and not HomematicIP right? How happy are you with them? How is the integration? I'm thinking now to buy an access point or CCU3 and one TRV the HomematicIP e-TRV2.

bsafh commented 1 year ago

Yes they are Homematic and not Homematic-IP, I bought a dozen or so used.

They are working just fine with BT.

I'm running RaspberryMatic / debmatic in a virtual maschine, but any x86_64 based used thin client ( HP T610/630, Dell..) with Debian would do just fine, no need for an exzessive CCU3 ;)

chuckfy commented 1 year ago

In Normal mode BT doesn't need to learn anything. It's just correcting the difference between the internal TRV temperature and the external sensor temperature. Nothing else. And this should be the best option for the Homematic.

Sorry if I'm a little dense here. See my reply.

Did BT or the HM IP kept sending the increasing target temperatures after 6:40?

chuckfy commented 1 year ago

Excuse if I'm on the wrong track here. I tried to investigate the code a little bit and checked the log files myself (I'm picking the TVR that experiences the worst overshoot right now).

Complete debug log at the end.

The target temperatures I set were:

17 °C until 06:00, 19 °C until 09:00 and 20 °C after 09:00

023-01-18 06:00:00.392 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 16.5 to: 19.5

2023-01-18 06:00:03.646 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 19.5 - _current: 16.5

2023-01-18 06:00:04.647 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 19.5 - _current: 19.5

2023-01-18 06:01:54.762 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 19.5 - _new_heating_setpoint: 19.5 - _last_temperature: 19.5

Apparently the change in target temp got recognized and a new setpoint was chosen: 16.5 to: 19.5 This makes sense if you want to get to 19 °C now.

An hour later the temperature was reached:

2023-01-18 06:59:32.703 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.0 to 19.2

2023-01-18 06:59:32.704 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 21.5 to: 22.5

2023-01-18 06:59:33.511 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 22.5 - _current: 21.5

2023-01-18 06:59:34.512 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 22.5 - _current: 22.5

And now the temperature keeps rising although the bt target temp is reached by over > 0.1 °C

2023-01-18 07:02:40.964 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 22.9 to 24.1

2023-01-18 07:02:40.965 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 22.5 - _new_heating_setpoint: 22.5 - _last_temperature: 22.5

2023-01-18 07:07:48.229 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 22.5 - _new_heating_setpoint: 22.5 - _last_temperature: 22.5

2023-01-18 07:09:57.543 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.2 to 19.4

2023-01-18 07:09:57.544 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 22.5 to: 23.0

2023-01-18 07:09:58.382 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 23.0 - _current: 22.5

2023-01-18 07:09:59.383 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 23.0 - _current: 23.0

2023-01-18 07:15:49.246 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 24.1 to 25.2

2023-01-18 07:15:49.246 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 23.0 - _new_heating_setpoint: 23.0 - _last_temperature: 23.0

2023-01-18 07:15:49.246 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 23.0 to: 23.5

2023-01-18 07:15:51.551 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 23.5 - _current: 23.0

2023-01-18 07:15:52.551 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 23.5 - _current: 23.5

2023-01-18 07:18:22.031 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 23.5 - _new_heating_setpoint: 23.5 - _last_temperature: 23.5

2023-01-18 07:21:50.461 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.4 to 19.5

2023-01-18 07:22:44.581 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 23.5 - _new_heating_setpoint: 23.5 - _last_temperature: 23.5

2023-01-18 07:28:17.291 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 25.2 to 25.9

2023-01-18 07:28:17.291 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 23.5 - _new_heating_setpoint: 23.5 - _last_temperature: 23.5

2023-01-18 07:28:17.291 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 23.5 to: 24.0

2023-01-18 07:28:19.540 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 24.0 - _current: 23.5

2023-01-18 07:28:20.541 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 24.0 - _current: 24.0

2023-01-18 07:31:53.689 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.5 to 19.6

From in controlling.py

# set new target temperature
        if _temperature is not None and _new_hvac_mode != HVACMode.OFF:
            if _temperature != _current_set_temperature:
                old = self.real_trvs[heater_entity_id].get("last_temperature", "?")
                _LOGGER.debug(
                    f"better_thermostat {self.name}: TO TRV set_temperature: {heater_entity_id} from: {old} to: {_temperature}"
                )

I would assume the HVACMode meant here is the mode of the TVR not of BT (because BT didn't heat during that time according to the history, but the TVR did).

image image

I lack the understanding in python to figure out where the new _temperature comes from. I don't want to try to find a fault in the code just because I don't understand what's going on. However:

# helpers.py:
  231:     if _overheating_protection is True:
  232          if (self.cur_temp + 0.10) >= self.bt_target_temp:
  233              _calibrated_setpoint -= 1.0
# helpers.py:
    if _calibration_mode == CONF_FIX_CALIBRATION:
        _temp_diff = float(float(self.bt_target_temp) - float(self.cur_temp))
        if _temp_diff > 0.0 and _calibrated_setpoint - _cur_trv_temp < 2.5:
            _calibrated_setpoint += 2.5

In my current example I'm at:

self.cur_temp (is the external temp?) = 21.4 self.bt_target_temp = 20 cur_trv_temp (the current internalt TVR temp?) = 30

then _temp_diff should be negative. Where is the action triggered if _temp_diff < 0.0?

Again, I understand the TVR needs time to learn in Normal mode, however I'm almost convinced that it cannot be desirable to have TO TRV set_temperature reading a higher than temperature than before when cleary the target temp is reached.

Maybe there is some kind of treshold that is set too high? It seems to be working over night, when the target temp is well below the current external sensor temperature. When the difference gets smaller, for me it feels like the system is going into a heating loop.

Complete debug log:

2023-01-17 19:00:29.055 WARNING (MainThread) [custom_components.better_thermostat.utils.bridge] better_thermostat btAZ: intigration: homematicip_local isn't native supported, feel free to open an issue, fallback adapter generic

2023-01-17 19:00:29.058 INFO (MainThread) [custom_components.better_thermostat.climate] better_thermostat btAZ: Waiting for entity to be ready...

2023-01-17 19:00:36.307 INFO (MainThread) [custom_components.better_thermostat.climate] better_thermostat btAZ: Starting version 1.0.0. Waiting for entity to be ready...

2023-01-17 19:00:36.307 DEBUG (MainThread) [custom_components.better_thermostat.climate] better_thermostat btAZ: detected window state at startup: Closed

2023-01-17 19:00:36.307 DEBUG (MainThread) [custom_components.better_thermostat.climate] better_thermostat btAZ: Startup config, BT hvac mode is heat, Target temp 17.0

2023-01-17 19:00:36.307 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 27.0 to: 19.5

2023-01-17 19:00:38.277 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 19.5 - _current: 27.0

2023-01-17 19:00:39.278 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 19.5 - _current: 19.5

2023-01-17 19:00:41.278 DEBUG (MainThread) [custom_components.better_thermostat.climate] better_thermostat btAZ: get last avg outdoor temps...

2023-01-17 19:00:46.279 INFO (MainThread) [custom_components.better_thermostat.climate] better_thermostat btAZ: startup completed.

2023-01-17 19:03:05.070 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 22.4 to 22.5

2023-01-17 19:03:05.070 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 19.5 - _new_heating_setpoint: 19.5 - _last_temperature: 19.5

2023-01-17 19:03:05.071 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 19.5 to: 20.0

2023-01-17 19:03:07.383 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 20.0 - _current: 19.5

2023-01-17 19:03:08.384 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 20.0 - _current: 20.0

2023-01-17 19:03:59.968 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.5 to 18.6

2023-01-17 19:05:25.429 DEBUG (MainThread) [custom_components.better_thermostat.utils.helpers] better thermostat btAZ: Could not convert 'unavailable' to float in humidity_update

2023-01-17 19:14:44.980 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.6 to 19.0

2023-01-17 19:14:44.982 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 20.0 to: 19.5

2023-01-17 19:14:45.786 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 19.5 - _current: 20.0

2023-01-17 19:14:45.974 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 22.5 to 22.8

2023-01-17 19:14:46.787 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 19.5 - _current: 19.5

2023-01-17 19:25:15.106 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.0 to 19.2

2023-01-17 19:35:40.193 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.2 to 19.4

2023-01-17 19:45:40.328 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.4 to 19.6

2023-01-17 19:45:40.330 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 19.5 to: 19.0

2023-01-17 19:45:41.679 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 19.0 - _current: 19.5

2023-01-17 19:45:42.681 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 19.0 - _current: 19.0

2023-01-17 20:11:32.212 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 22.8 to 22.5

2023-01-17 20:11:32.212 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 19.0 - _new_heating_setpoint: 19.0 - _last_temperature: 19.0

2023-01-17 20:11:32.212 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 19.0 to: 18.5

2023-01-17 20:11:34.408 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 18.5 - _current: 19.0

2023-01-17 20:11:35.408 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 18.5 - _current: 18.5

2023-01-17 20:32:09.952 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.6 to 19.7

2023-01-17 20:34:31.976 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 22.5 to 22.2

2023-01-17 20:34:31.976 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 18.5 - _new_heating_setpoint: 18.5 - _last_temperature: 18.5

2023-01-17 20:44:01.626 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.7 to 19.6

2023-01-17 21:00:06.532 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 22.2 to 21.9

2023-01-17 21:00:06.532 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 18.5 - _new_heating_setpoint: 18.5 - _last_temperature: 18.5

2023-01-17 21:04:31.628 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.6 to 19.7

2023-01-17 21:04:31.629 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 18.5 to: 18.0

2023-01-17 21:04:32.337 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 18.0 - _current: 18.5

2023-01-17 21:04:33.339 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 18.0 - _current: 18.0

2023-01-17 21:14:53.849 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.7 to 19.8

2023-01-17 21:14:53.851 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 18.0 to: 18.5

2023-01-17 21:14:55.390 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 18.5 - _current: 18.0

2023-01-17 21:14:55.396 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 21.9 to 21.8

2023-01-17 21:14:56.392 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 18.5 - _current: 18.5

2023-01-17 21:25:12.252 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.8 to 19.9

2023-01-17 21:25:12.254 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 18.5 to: 17.5

2023-01-17 21:25:12.890 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 21.8 to 21.7

2023-01-17 21:25:12.890 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.5 - _current: 17.5

2023-01-17 21:32:30.094 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 17.5 - _new_heating_setpoint: 17.5 - _last_temperature: 17.5

2023-01-17 21:32:59.548 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 17.5 to: 13.5

2023-01-17 21:33:00.278 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 13.5 - _current: 13.5

2023-01-17 21:33:10.695 DEBUG (MainThread) [custom_components.better_thermostat.events.window] better_thermostat btAZ: Window state did not change, skipping event

2023-01-17 21:33:24.561 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: control_trv: window is open or status of window is unknown, setting window open

2023-01-17 21:33:24.561 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_hvac_mode: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: heat to: off

2023-01-17 21:33:39.561 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_hvac_mode: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: heat to: off

2023-01-17 21:35:41.642 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.9 to 18.6

2023-01-17 21:35:41.643 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_hvac_mode: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: heat to: off

2023-01-17 21:35:42.558 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 21.7 to 21.5

2023-01-17 21:37:39.455 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 5.0 - _new_heating_setpoint: 5.0 - _last_temperature: 13.5

2023-01-17 21:39:27.310 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 the real TRV did not respond to the system mode change

2023-01-17 21:39:53.045 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 5.0 - _new_heating_setpoint: 5.0 - _last_temperature: 13.5

2023-01-17 21:39:54.997 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: control_trv: window is closed, setting window closed restoring mode: heat

2023-01-17 21:39:54.997 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 13.5 to: 13.5

2023-01-17 21:39:55.730 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 13.5 - _current: 5.0

2023-01-17 21:39:56.730 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 13.5 - _current: 13.5

2023-01-17 21:42:55.007 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 13.5 - _new_heating_setpoint: 13.5 - _last_temperature: 13.5

2023-01-17 21:46:12.302 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.6 to 16.2

2023-01-17 21:46:12.304 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 13.5 to: 15.0

2023-01-17 21:46:13.132 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 15.0 - _current: 13.5

2023-01-17 21:46:13.384 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 21.5 to 19.4

2023-01-17 21:46:14.133 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 15.0 - _current: 15.0

2023-01-17 21:50:27.523 DEBUG (MainThread) [custom_components.better_thermostat.utils.helpers] better thermostat btAZ: Could not convert 'unavailable' to float in humidity_update

2023-01-17 21:55:35.958 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 15.0 - _new_heating_setpoint: 15.0 - _last_temperature: 15.0

2023-01-17 21:56:55.648 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 16.2 to 17.7

2023-01-17 21:56:55.650 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 15.0 to: 14.5

2023-01-17 21:56:56.501 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 14.5 - _current: 15.0

2023-01-17 21:56:56.580 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 19.4 to 19.9

2023-01-17 21:56:57.501 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 14.5 - _current: 14.5

2023-01-17 21:58:22.551 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 14.5 to: 18.0

2023-01-17 21:58:24.790 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 18.0 - _current: 14.5

2023-01-17 21:58:25.791 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 18.0 - _current: 18.0

2023-01-17 22:07:04.415 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 17.7 to 18.2

2023-01-17 22:07:04.417 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 18.0 to: 17.5

2023-01-17 22:07:06.660 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 19.9 to 20.1

2023-01-17 22:07:06.661 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.5 - _current: 17.5

2023-01-17 22:17:13.479 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.2 to 18.5

2023-01-17 22:27:14.558 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.5 to 18.6

2023-01-17 22:37:17.174 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.6 to 18.7

2023-01-17 22:48:04.948 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.7 to 18.8

2023-01-17 22:48:04.949 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 17.5 to: 17.0

2023-01-17 22:48:07.201 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.0 - _current: 17.5

2023-01-17 22:48:08.203 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.0 - _current: 17.0

2023-01-17 22:58:24.948 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.8 to 18.9

2023-01-17 22:58:24.949 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 17.0 to: 17.5

2023-01-17 22:58:25.818 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.5 - _current: 17.5

2023-01-17 23:30:25.349 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.9 to 19.0

2023-01-17 23:30:25.350 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 17.5 to: 17.0

2023-01-17 23:30:27.417 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.0 - _current: 17.0

2023-01-17 23:40:43.001 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.0 to 18.9

2023-01-17 23:40:43.001 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 17.0 to: 17.5

2023-01-17 23:40:43.887 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.5 - _current: 17.0

2023-01-17 23:40:44.889 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.5 - _current: 17.5

2023-01-17 23:54:56.804 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 20.1 to 20.0

2023-01-17 23:54:56.804 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 17.5 - _new_heating_setpoint: 17.5 - _last_temperature: 17.5

2023-01-17 23:54:56.805 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 17.5 to: 17.0

2023-01-17 23:54:59.068 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.0 - _current: 17.5

2023-01-17 23:55:00.069 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.0 - _current: 17.0

2023-01-18 00:00:45.787 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.9 to 18.8

2023-01-18 00:29:17.885 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 20.0 to 19.8

2023-01-18 00:29:17.885 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 17.0 - _new_heating_setpoint: 17.0 - _last_temperature: 17.0

2023-01-18 00:47:43.718 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.8 to 18.7

2023-01-18 01:00:09.803 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.7 to 18.8

2023-01-18 01:10:13.952 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.8 to 18.7

2023-01-18 01:26:00.290 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.7 to 18.6

2023-01-18 01:36:19.290 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.6 to 18.7

2023-01-18 01:47:04.404 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.7 to 18.6

2023-01-18 02:10:58.901 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 19.8 to 19.5

2023-01-18 02:10:58.901 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 17.0 - _new_heating_setpoint: 17.0 - _last_temperature: 17.0

2023-01-18 02:10:58.901 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 17.0 to: 16.5

2023-01-18 02:11:00.395 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 16.5 - _current: 16.5

2023-01-18 02:34:47.392 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.6 to 18.5

2023-01-18 02:34:47.393 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 16.5 to: 17.0

2023-01-18 02:34:49.412 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.0 - _current: 16.5

2023-01-18 02:34:50.413 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.0 - _current: 17.0

2023-01-18 02:44:47.489 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.5 to 18.6

2023-01-18 02:44:47.489 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 17.0 to: 16.5

2023-01-18 02:44:48.825 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 16.5 - _current: 17.0

2023-01-18 02:44:49.520 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 19.5 to 19.4

2023-01-18 02:44:49.826 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 16.5 - _current: 16.5

2023-01-18 02:55:05.934 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.6 to 18.5

2023-01-18 03:24:05.341 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.5 to 18.4

2023-01-18 03:24:05.341 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 16.5 to: 17.0

2023-01-18 03:24:07.376 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.0 - _current: 16.5

2023-01-18 03:24:07.381 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 19.4 to 19.3

2023-01-18 03:24:08.377 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 17.0 - _current: 17.0

2023-01-18 03:35:07.869 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.4 to 18.5

2023-01-18 03:35:07.869 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 17.0 to: 16.5

2023-01-18 03:35:08.654 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 16.5 - _current: 16.5

2023-01-18 03:45:15.445 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.5 to 18.4

2023-01-18 03:52:03.794 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 19.3 to 19.2

2023-01-18 03:52:03.794 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 16.5 - _new_heating_setpoint: 16.5 - _last_temperature: 16.5

2023-01-18 04:24:28.422 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.4 to 18.3

2023-01-18 04:35:16.016 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.3 to 18.4

2023-01-18 04:45:26.111 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.4 to 18.3

2023-01-18 04:57:30.592 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.3 to 18.4

2023-01-18 05:08:06.308 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.4 to 18.3

2023-01-18 05:39:01.591 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 19.2 to 19.0

2023-01-18 05:39:01.592 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 16.5 - _new_heating_setpoint: 16.5 - _last_temperature: 16.5

2023-01-18 05:44:09.146 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.3 to 18.4

2023-01-18 05:55:21.991 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.4 to 18.3

2023-01-18 06:00:00.392 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 16.5 to: 19.5

2023-01-18 06:00:03.646 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 19.5 - _current: 16.5

2023-01-18 06:00:04.647 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 19.5 - _current: 19.5

2023-01-18 06:01:54.762 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 19.5 - _new_heating_setpoint: 19.5 - _last_temperature: 19.5

2023-01-18 06:05:36.809 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.3 to 18.4

2023-01-18 06:14:02.524 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 19.0 to 19.3

2023-01-18 06:14:02.524 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 19.5 - _new_heating_setpoint: 19.5 - _last_temperature: 19.5

2023-01-18 06:17:21.887 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.4 to 18.5

2023-01-18 06:19:45.854 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 19.5 - _new_heating_setpoint: 19.5 - _last_temperature: 19.5

2023-01-18 06:22:16.090 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 19.5 - _new_heating_setpoint: 19.5 - _last_temperature: 19.5

2023-01-18 06:26:33.321 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 19.3 to 20.4

2023-01-18 06:26:33.321 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 19.5 - _new_heating_setpoint: 19.5 - _last_temperature: 19.5

2023-01-18 06:26:33.322 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 19.5 to: 20.5

2023-01-18 06:26:35.026 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 20.5 - _current: 19.5

2023-01-18 06:26:36.027 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 20.5 - _current: 20.5

2023-01-18 06:28:07.326 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.5 to 18.6

2023-01-18 06:29:24.512 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 20.5 - _new_heating_setpoint: 20.5 - _last_temperature: 20.5

2023-01-18 06:34:22.455 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 20.5 - _new_heating_setpoint: 20.5 - _last_temperature: 20.5

2023-01-18 06:38:42.871 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.6 to 18.8

2023-01-18 06:38:42.872 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 20.5 to: 21.5

2023-01-18 06:38:43.467 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 21.5 - _current: 20.5

2023-01-18 06:38:43.513 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 20.4 to 21.8

2023-01-18 06:38:44.469 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 21.5 - _current: 21.5

2023-01-18 06:39:27.079 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 21.5 - _new_heating_setpoint: 21.5 - _last_temperature: 21.5

2023-01-18 06:42:09.836 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 21.5 - _new_heating_setpoint: 21.5 - _last_temperature: 21.5

2023-01-18 06:46:52.518 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 21.5 - _new_heating_setpoint: 21.5 - _last_temperature: 21.5

2023-01-18 06:49:22.669 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 18.8 to 19.0

2023-01-18 06:49:55.710 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 21.8 to 22.9

2023-01-18 06:49:55.710 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 21.5 - _new_heating_setpoint: 21.5 - _last_temperature: 21.5

2023-01-18 06:52:44.891 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 21.5 - _new_heating_setpoint: 21.5 - _last_temperature: 21.5

2023-01-18 06:55:19.280 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 21.5 - _new_heating_setpoint: 21.5 - _last_temperature: 21.5

2023-01-18 06:57:40.095 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 21.5 - _new_heating_setpoint: 21.5 - _last_temperature: 21.5

2023-01-18 06:59:32.703 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.0 to 19.2

2023-01-18 06:59:32.704 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 21.5 to: 22.5

2023-01-18 06:59:33.511 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 22.5 - _current: 21.5

2023-01-18 06:59:34.512 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 22.5 - _current: 22.5

2023-01-18 07:02:40.964 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 22.9 to 24.1

2023-01-18 07:02:40.965 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 22.5 - _new_heating_setpoint: 22.5 - _last_temperature: 22.5

2023-01-18 07:07:48.229 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 22.5 - _new_heating_setpoint: 22.5 - _last_temperature: 22.5

2023-01-18 07:09:57.543 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.2 to 19.4

2023-01-18 07:09:57.544 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 22.5 to: 23.0

2023-01-18 07:09:58.382 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 23.0 - _current: 22.5

2023-01-18 07:09:59.383 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 23.0 - _current: 23.0

2023-01-18 07:15:49.246 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 24.1 to 25.2

2023-01-18 07:15:49.246 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 23.0 - _new_heating_setpoint: 23.0 - _last_temperature: 23.0

2023-01-18 07:15:49.246 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 23.0 to: 23.5

2023-01-18 07:15:51.551 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 23.5 - _current: 23.0

2023-01-18 07:15:52.551 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 23.5 - _current: 23.5

2023-01-18 07:18:22.031 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 23.5 - _new_heating_setpoint: 23.5 - _last_temperature: 23.5

2023-01-18 07:21:50.461 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.4 to 19.5

2023-01-18 07:22:44.581 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 23.5 - _new_heating_setpoint: 23.5 - _last_temperature: 23.5

2023-01-18 07:28:17.291 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 25.2 to 25.9

2023-01-18 07:28:17.291 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 23.5 - _new_heating_setpoint: 23.5 - _last_temperature: 23.5

2023-01-18 07:28:17.291 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 23.5 to: 24.0

2023-01-18 07:28:19.540 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 24.0 - _current: 23.5

2023-01-18 07:28:20.541 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 24.0 - _current: 24.0

2023-01-18 07:31:53.689 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.5 to 19.6

2023-01-18 07:31:53.690 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 24.0 to: 24.5

2023-01-18 07:31:55.683 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 24.5 - _current: 24.0

2023-01-18 07:31:56.684 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 24.5 - _current: 24.5

2023-01-18 07:32:52.354 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 24.5 - _new_heating_setpoint: 24.5 - _last_temperature: 24.5

2023-01-18 07:38:37.606 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 25.9 to 26.5

2023-01-18 07:38:37.606 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 24.5 - _new_heating_setpoint: 24.5 - _last_temperature: 24.5

2023-01-18 07:42:08.656 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.6 to 19.7

2023-01-18 07:45:27.552 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 24.5 - _new_heating_setpoint: 24.5 - _last_temperature: 24.5

2023-01-18 07:53:19.450 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 26.5 to 27.2

2023-01-18 07:53:19.450 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 24.5 - _new_heating_setpoint: 24.5 - _last_temperature: 24.5

2023-01-18 07:53:19.451 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 24.5 to: 25.5

2023-01-18 07:53:21.578 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 25.5 - _current: 24.5

2023-01-18 07:53:22.579 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 25.5 - _current: 25.5

2023-01-18 07:55:27.801 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 25.5 - _new_heating_setpoint: 25.5 - _last_temperature: 25.5

2023-01-18 07:57:14.848 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.7 to 19.8

2023-01-18 08:01:09.608 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 25.5 - _new_heating_setpoint: 25.5 - _last_temperature: 25.5

2023-01-18 08:07:53.775 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 27.2 to 27.9

2023-01-18 08:07:53.775 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 25.5 - _new_heating_setpoint: 25.5 - _last_temperature: 25.5

2023-01-18 08:07:53.775 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 25.5 to: 26.5

2023-01-18 08:07:55.335 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 26.5 - _current: 25.5

2023-01-18 08:07:56.337 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 26.5 - _current: 26.5

2023-01-18 08:08:03.077 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.8 to 19.9

2023-01-18 08:08:03.077 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 26.5 to: 26.0

2023-01-18 08:08:05.135 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 26.0 - _current: 26.5

2023-01-18 08:08:06.136 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 26.0 - _current: 26.0

2023-01-18 08:13:19.633 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 26.0 - _new_heating_setpoint: 26.0 - _last_temperature: 26.0

2023-01-18 08:18:29.340 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 19.9 to 20.1

2023-01-18 08:18:29.342 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 26.0 to: 26.5

2023-01-18 08:18:31.545 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 26.5 - _current: 26.0

2023-01-18 08:18:31.649 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 27.9 to 28.5

2023-01-18 08:18:32.547 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 26.5 - _current: 26.5

2023-01-18 08:20:43.465 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 26.5 - _new_heating_setpoint: 26.5 - _last_temperature: 26.5

2023-01-18 08:28:05.594 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 26.5 - _new_heating_setpoint: 26.5 - _last_temperature: 26.5

2023-01-18 08:29:38.342 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 20.1 to 20.3

2023-01-18 08:36:30.064 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 28.5 to 29.2

2023-01-18 08:36:30.065 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 26.5 - _new_heating_setpoint: 26.5 - _last_temperature: 26.5

2023-01-18 08:38:49.286 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 26.5 - _new_heating_setpoint: 26.5 - _last_temperature: 26.5

2023-01-18 08:43:24.139 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 20.3 to 20.4

2023-01-18 08:46:28.767 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 26.5 - _new_heating_setpoint: 26.5 - _last_temperature: 26.5

2023-01-18 08:54:06.193 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 29.2 to 29.9

2023-01-18 08:54:06.193 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 26.5 - _new_heating_setpoint: 26.5 - _last_temperature: 26.5

2023-01-18 08:54:06.194 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 26.5 to: 27.5

2023-01-18 08:54:08.591 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 27.5 - _current: 26.5

2023-01-18 08:54:08.907 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 20.4 to 20.5

2023-01-18 08:54:09.592 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 27.5 - _current: 27.5

2023-01-18 08:54:11.592 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 27.5 to: 27.0

2023-01-18 08:54:13.846 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 27.0 - _current: 27.5

2023-01-18 08:54:14.847 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 27.0 - _current: 27.0

2023-01-18 09:00:00.462 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 27.0 to: 28.0

2023-01-18 09:00:02.063 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 28.0 - _current: 28.0

2023-01-18 09:04:19.252 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 20.5 to 20.7

2023-01-18 09:06:37.964 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 29.9 to 30.1

2023-01-18 09:06:37.964 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 28.0 - _new_heating_setpoint: 28.0 - _last_temperature: 28.0

2023-01-18 09:06:37.964 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 28.0 - _new_heating_setpoint: 28.0 - _last_temperature: 28.0

2023-01-18 09:15:01.456 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 20.7 to 20.9

2023-01-18 09:24:18.064 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 30.1 to 29.9

2023-01-18 09:24:18.064 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 28.0 - _new_heating_setpoint: 28.0 - _last_temperature: 28.0

2023-01-18 09:24:18.065 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 28.0 - _new_heating_setpoint: 28.0 - _last_temperature: 28.0

2023-01-18 09:25:42.553 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 20.9 to 20.8

2023-01-18 09:25:42.554 DEBUG (MainThread) [custom_components.better_thermostat.climate] better_thermostat btAZ: calculate_heating_power / temp_diff: 2.5 - time: 44.3 - degrees_time: 0.0564 - heating_power: 0.0146 - heating_power_stats: [{'temp_diff': 2.5, 'time': 44.3, 'degrees_time': 0.0564, 'heating_power': 0.0146}]

2023-01-18 09:35:54.352 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 20.8 to 20.9

2023-01-18 09:41:37.637 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: control_trv: window is open or status of window is unknown, setting window open

2023-01-18 09:41:37.637 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_hvac_mode: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: heat to: off

2023-01-18 09:41:55.952 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: control_trv: window is closed, setting window closed restoring mode: heat

2023-01-18 09:41:55.952 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 28.0 to: 28.0

2023-01-18 09:41:56.148 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 28.0 - _current: 28.0

2023-01-18 09:44:24.288 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 29.9 to 30.0

2023-01-18 09:44:24.288 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 28.0 - _new_heating_setpoint: 28.0 - _last_temperature: 28.0

2023-01-18 09:44:24.290 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 28.0 - _new_heating_setpoint: 28.0 - _last_temperature: 28.0

2023-01-18 09:47:41.118 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 the real TRV did not respond to the system mode change

2023-01-18 09:52:04.471 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 20.9 to 21.0

2023-01-18 09:52:30.792 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 28.0 - _new_heating_setpoint: 28.0 - _last_temperature: 28.0

2023-01-18 09:52:30.792 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 28.0 - _new_heating_setpoint: 28.0 - _last_temperature: 28.0

2023-01-18 10:02:26.328 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 28.0 - _new_heating_setpoint: 28.0 - _last_temperature: 28.0

2023-01-18 10:02:26.331 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 28.0 - _new_heating_setpoint: 28.0 - _last_temperature: 28.0

2023-01-18 10:02:42.104 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 21.0 to 21.1

2023-01-18 10:02:42.106 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: TO TRV set_temperature: climate.hmip_etrv_b_2_r4m_00399f299d07c0 from: 28.0 to: 27.5

2023-01-18 10:02:43.477 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 27.5 - _current: 28.0

2023-01-18 10:02:44.478 DEBUG (MainThread) [custom_components.better_thermostat.utils.controlling] better_thermostat btAZ: climate.hmip_etrv_b_2_r4m_00399f299d07c0 / check_target_temp / _last: 27.5 - _current: 27.5

2023-01-18 10:12:42.242 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 21.1 to 21.2

2023-01-18 10:22:59.949 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 21.2 to 21.3

2023-01-18 10:25:23.776 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 30.0 to 30.1

2023-01-18 10:25:23.776 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 27.5 - _new_heating_setpoint: 27.5 - _last_temperature: 27.5

2023-01-18 10:25:23.776 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 27.5 - _new_heating_setpoint: 27.5 - _last_temperature: 27.5

2023-01-18 10:33:25.116 DEBUG (MainThread) [custom_components.better_thermostat.events.temperature] better_thermostat btAZ: external_temperature changed from 21.3 to 21.4

2023-01-18 10:40:53.290 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 30.1 to 30.0

2023-01-18 10:40:53.290 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 27.5 - _new_heating_setpoint: 27.5 - _last_temperature: 27.5

2023-01-18 10:40:53.290 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 27.5 - _new_heating_setpoint: 27.5 - _last_temperature: 27.5

2023-01-18 11:07:38.142 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: TRV climate.hmip_etrv_b_2_r4m_00399f299d07c0 sends new internal temperature from 30.0 to 30.1

2023-01-18 11:07:38.142 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 27.5 - _new_heating_setpoint: 27.5 - _last_temperature: 27.5

2023-01-18 11:07:38.142 DEBUG (MainThread) [custom_components.better_thermostat.events.trv] better_thermostat btAZ: trigger_trv_change / _old_heating_setpoint: 27.5 - _new_heating_setpoint: 27.5 - _last_temperature: 27.5
chuckfy commented 1 year ago

Heating power calculation seems to be off. Hopefully I provided enough / relevant information to be able to look into this issue. I'd love to hear back if you need more information or have a suspiscion if / what is going on here.

Kinderzimmer remained untouched since 4 days when I started waiting for the calibration to settle. Arbeitszimmer - I set it to AI Time Based 2 days ago

Arbeitszimmer image

Kinderzimmer image

Corresponding debug logs: debug_az_200123.txt debug_kz_200123.txt

wtom commented 1 year ago

Did we not say to use normal calibration mode? And also check the overheating protection.

chuckfy commented 1 year ago

Thank you for your reply.

Did we not say to use normal calibration mode? And also check the overheating protection.

With

Kinderzimmer remained untouched since 4 days when I started waiting for the calibration to settle.

I meant I set it to normal as per your recommendation and left it there. Same for Wohnzimmer (I didn't want to attach too many diagrams at once), it is also set to normal.

image

Kinderzimmer: image

Wohnzimmer: image

As for the overheat protection, since other settings from the CCU are still applied like max valve opening or the window open temperature + delay* I could try and limit the max. temperature there. I already limited the max. valve opening in the smaller rooms (AZ and KZ) because the air is unbearable after heating at 50-100 % valve opening for a longer time. This could solve the extreme overheating, but still my setpoints are not reached and held inside a tolerance I could live with (say +- 0.5 °C).

When I initially used the TVRs with the HM AP and App and later when I migrated to the Raspberrymatic CCU and simple-thermostat, the learning phase for the TVRs was not really observeable, i.e. there were no extreme overheating issues and higher valve openings were only used for very limited amounts of time.

*(disabled because afterwards BT will set a new target temperature and I want to control everything from BT ideally, I'll do some testing next week to reproduce when the target temps get set to new values after certain events)

Kinderzimmer:

{
  "home_assistant": {
    "installation_type": "Home Assistant OS",
    "version": "2023.1.4",
    "dev": false,
    "hassio": true,
    "virtualenv": false,
    "python_version": "3.10.7",
    "docker": true,
    "arch": "x86_64",
    "timezone": "Europe/Berlin",
    "os_name": "Linux",
    "os_version": "5.15.80",
    "supervisor": "2022.12.1",
    "host_os": "Home Assistant OS 9.4",
    "docker_version": "20.10.19",
    "chassis": "vm",
    "run_as_root": true
  },
  "custom_components": {
    "better_thermostat": {
      "version": "1.0.0",
      "requirements": []
    },
    "hacs": {
      "version": "1.29.1",
      "requirements": [
        "aiogithubapi>=22.10.1"
      ]
    },
    "homematicip_local": {
      "version": "1.26.2",
      "requirements": [
        "hahomematic==2023.1.3"
      ]
    }
  },
  "integration_manifest": {
    "domain": "better_thermostat",
    "name": "Better Thermostat",
    "documentation": "https://github.com/KartoffelToby/better_thermostat",
    "issue_tracker": "https://github.com/KartoffelToby/better_thermostat/issues",
    "iot_class": "local_push",
    "version": "1.0.0",
    "config_flow": true,
    "dependencies": [
      "climate",
      "recorder"
    ],
    "after_dependencies": [
      "climate"
    ],
    "codeowners": [
      "@kartoffeltoby"
    ],
    "requirements": [],
    "is_built_in": false
  },
  "data": {
    "info": {
      "name": "btKZ",
      "temperature_sensor": "sensor.atc_7c8f_temperature",
      "off_temperature": 20,
      "humidity_sensor": "sensor.atc_7c8f_humidity",
      "window_sensors": "binary_sensor.lumi_lumi_sensor_magnet_aq2_opening_2",
      "outdoor_sensor": null,
      "weather": null,
      "window_off_delay": 15,
      "model": "HmIP-eTRV-B-2 R4M"
    },
    "thermostat": {
      "climate.hmip_etrv_b_2_r4m_00399f299d0c47": {
        "name": "Kinderzimmer",
        "state": "heat",
        "attributes": {
          "hvac_modes": [
            "auto",
            "heat",
            "off"
          ],
          "min_temp": 5.0,
          "max_temp": 28.0,
          "target_temp_step": 0.5,
          "preset_modes": [
            "boost",
            "none"
          ],
          "current_temperature": 22.2,
          "temperature": 20.0,
          "hvac_action": "idle",
          "preset_mode": "none",
          "interface_id": "HMIP-HmIP-RF",
          "address": "00399F299D0C47:1",
          "model": "HmIP-eTRV-B-2 R4M",
          "entity_type": "custom",
          "value_state": "valid",
          "friendly_name": "Kinderzimmer",
          "supported_features": 17
        },
        "bt_config": {
          "calibration": "target_temp_based",
          "calibration_mode": "default",
          "protect_overheating": true,
          "no_off_system_mode": false,
          "heat_auto_swapped": false,
          "child_lock": true,
          "homaticip": true
        },
        "bt_adapter": "homematicip_local",
        "bt_integration": "homematicip_local",
        "model": "HmIP-eTRV-B-2 R4M"
      }
    },
    "external_temperature_sensor": {
      "entity_id": "sensor.atc_7c8f_temperature",
      "state": "19.03",
      "attributes": {
        "state_class": "measurement",
        "unit_of_measurement": "\u00b0C",
        "device_class": "temperature",
        "friendly_name": "KinderzimmerXiaomiTemp"
      },
      "last_changed": "2023-01-20T23:38:45.270343+00:00",
      "last_updated": "2023-01-20T23:38:45.270343+00:00",
      "context": {
        "id": "01GQ8RS14PWRC9N5HKJ4Y1120B",
        "parent_id": null,
        "user_id": null
      }
    },
    "window_sensor": {
      "entity_id": "binary_sensor.lumi_lumi_sensor_magnet_aq2_opening_2",
      "state": "off",
      "attributes": {
        "device_class": "window",
        "friendly_name": "windowctc_kz Opening"
      },
      "last_changed": "2023-01-20T21:58:05.852228+00:00",
      "last_updated": "2023-01-20T21:58:05.852228+00:00",
      "context": {
        "id": "01GQ8K0Q8WDGSFT6P1GZTV7T3G",
        "parent_id": null,
        "user_id": null
      }
    }
  }
}
chuckfy commented 1 year ago

@wtom After adding some more debug outputs and trying to examine the code further I'm almost positive I found the underlying problem.

From todays (not posted) Kinderzimmer debug log:

image

and an additional test in Arbeitszimmer: image

I deducted, that the overheating occurs because the internal TVR has risen so high, that the overheat protection is not able to bring it down in a timely manner.

It was visible in my earlier logs and screenshots, the setpoint keeps rising although the target temp is long reached. Apart from Arbeitszimmer no TVR is obstructed in any way. I'd think the setup should be pretty common for most housing in my area.

I'm testing a more aggressive overheat protection for larger overshoots tomorrow in the day.

I'll report back if the overshooting got better.

wtom commented 1 year ago

https://github.com/wtom/better_thermostat/commit/4805b48d672855b7979de69bd389110087dda8d1 You could try to apply this change. That should help i think.

wtom commented 1 year ago

Amy news?

chuckfy commented 1 year ago

@wtom Sorry, I already typed an answer to your reply containing the new commit, however it does seem that I got interrupted before I sent it and didn't realize.

Yes, thank you that worked. I was already working on my own version of a more aggressive overheat protection but ran the fix for half a day as a test.

image The overshoot was non existent afterwards.

However I was missing that the HM IP TVRs were using lower valve openings throughout the heating period to keep the temperature. It was a rather harsh profile of all or nothing basically.

Right now I'm running two modified versions to evaluate how to smoothen that out too. My suspicion is (but I hadn't had the fix running too long) that the setpoint of bttemp is too low and when a heating demand occurs the "jump" of the internal tvr target is too high. Example:

BT Target 19 °C, external temp 18.8 °C, tvr temp 22.7 °C Heating demand occurs and the TVR target temperature gets set to 22.5 °C. (round down from 22.9 °C) The TVR now sees that its setpoint increased by 3.5 °C and thinks it needs to fire at almost fully opened valve as a reaction. My suspicion is: when using the original approach of -1 °C as overheat protection the tvr internal target slowly drops until the difference between the internal target and tvr temperature are so small that it also stops heating. According to the original calibration that should be the case with 22.5 °C. Because at some point this will be the calculated setpoint, the TVR will (hopefully, but that is my observation so far) stop heating because 22.5 °C set vs 22.7 °C internal temp does not call for an open valve. Hence we could have two starting points for the next heating cycle (either because the temperature dropped enough or because I want to increase the bt target temp, maybe to 20 °C). One starts with a setpoint of 19 °C and one with 22.5 °C. I suspect the latter will give the smoother heating profile and also don't act like an I/O switch basically.

Idea 1

    if _overheating_protection is True:
        if self.cur_temp > (self.bt_target_temp + 0.50): 
            _calibrated_setpoint = self.bt_target_temp
        elif self.cur_temp > (self.bt_target_temp + 0.40):
            _calibrated_setpoint -= 4
        elif self.cur_temp > (self.bt_target_temp + 0.30):
            _calibrated_setpoint -= 3
        elif self.cur_temp > (self.bt_target_temp + 0.20):
            _calibrated_setpoint -= 2
        elif self.cur_temp > (self.bt_target_temp + 0.10):
            _calibrated_setpoint -= 1.5

Use the bt target as a fallback solution and try to lower the setpoint gradually before.

Idea 2

# controlling.py
150        # set new target temperature
151        if _temperature is not None and _new_hvac_mode != HVACMode.OFF:
152            if _temperature != _current_set_temperature:
153                old = self.real_trvs[heater_entity_id].get("last_temperature", "?")
154                if _temperature >= (old+1.5):
155                    _temperature = old+1.5

Limit how much the temperature can be increased at once and a slightly different approach in overheat protection

    if _overheating_protection is True:
        if self.cur_temp > (self.bt_target_temp+ 0.5):
            _calibrated_setpoint = self.bt_target_temp
        elif self.cur_temp > (self.bt_target_temp+ 0.35):
            _calibrated_setpoint -= 2
        elif self.cur_temp >= (self.bt_target_temp+ 0.1):
            _calibrated_setpoint -= 1

The part in controlling.py may fall short if the time difference between the calls is very small though.

Currently I'm collecting data on these two models and at the weekend I can evaluate that.

For now I'm just glad that I wasn't too impatient with TVR calibration and indeed the overheat protection wasn't working (at least for my residence, again, I'm sure the radiator / tvr location is the same as in tenthousands of other apartments).

Thank you for your help and input!

ministryofsillywalks commented 1 year ago

I have exactly the same issue with homematic IP tvrs. So it isn't just normal homematic. I guess they all use the same logic. So I'm curious to see where this is going to. Once the main version is update I will try it out with my IP tvrs.

chuckfy commented 1 year ago

@ministryofsillywalks I also use HM IP

I was rather busy the past weeks, I collected data on the two ideas I had and changed it a bit for a final test. I will report back next week.

Have a nice weekend!

wtom commented 1 year ago

@chuckfy could you try my changes? I hope that solves your problem.

chuckfy commented 1 year ago

@wtom I'm on mobile right now. I didn't see the latest commit with * 10 before. I originally planned coincidentally for this evening to create a pull request for my solution / tweak. I'll reply later again and post screenshots of the new temperature graphs and then I'd create the pull request. Basically I went with multiple checks (+0.1 °C, ..., 0.5 °C) and gradually got more aggressive, with the newest addition that bt target is the minimum temperature.

chuckfy commented 1 year ago

@wtom

I just uploaded your change to my test tvr and will report back tomorrow. Your solution, just judging from the code will work as good as my proposal if not better (and is more elegantly written). Thank you for your help with my issue, really appreciated!

As a reference this was the curve I achieved: image

chuckfy commented 1 year ago

@wtom can confirm https://github.com/KartoffelToby/better_thermostat/pull/954 working.

Please add in helpers.py

    # check if new setpoint is above bt_target_temp
    if _calibrated_setpoint < self.bt_target_temp:
        _calibrated_setpoint = self.bt_target_temp

to your commit though. That was the fallback setting I used in combination with your fix and I don't see any harm in locking the temperatur are bt_target_temp as it should never be necessary to set it lower.

Thank you for your support!

raoulbhatia commented 1 year ago

I think this is a good approach. Additionally, wouldn't it also make sense to use the temperature offset adjustment to ensure the TRV's internal sensor is up-to-date as well?

I imagine the following scenario:

So by making sure the offset is correct, the TRV could/should behave more appropriately.

chuckfy commented 1 year ago

In my experience, at least for the HM IP devices I known, rising the internal temperature target from 18 to 22 °C creates a higher heating load than from 20 °C to 22 °C. Thus you end up with pretty sharp heating profiles, let's say 60-80 % valve opening, overheating, closing again instead if maybe 20-30 % opening.

The internal TVR temperature will not be (significantly) lower than the external temperature. An object in a room cannot be colder than the room temperature unless actively cooled. For example today the sun heating my office to 21.5 °C, the internal TVR recorded 21.4 °C. No heating occured with a setpoint of 20 °C. I can only think of maybe a few cases where this could be an issue: You heat the room with another external source like a fire place and it is far away from the TVR but close to the external sensor. But even then the difference will evolve to almost 0 over time. You placed the external sensor in a way that it is directly hit by then sun. In both cases I'd say the sensor placement is poor though.

ministryofsillywalks commented 1 year ago

Any news on this?

folfy commented 11 months ago

Honestly, the more aggressive overheat protection is helping, but tbh, this still isn't fully solving the issue. If you have a small room (e.g. bathroom), the TRV temperature will run away quicker than the room sensor responding, which in my case means jumping between 20 and 20.7C every couple of hours. Like this, the HmIP Thermostat still works way better on it's own (with no calibration, if it would correctly in BT, see my last comment in #1133).

grafik

I'm planning to make a PR for a "static" calibration method, once I got all the variables for it implemented. It will be a simple trv_setpoint = setpoint + offset, with offset = (setpoint - t_sensor) <user_factor, e.g. 4>, and offset being limited to +/- <max user offset, e.g. 1>. So this will slightly* lower or raise the TRV setpoint around the actual setpoint, based on the room temperature being too high or low, but it won't conside the TRV's temperature, as e.g. Homematic has a pretty good internal calibration for this already. Currently I'm testing this with static values at home, will probably look into coding it properly with variables on the weekend, hoping it will get approval / being merged soon.

wtom commented 10 months ago

@folfy any news on the progress?