zxdavb/evohome-async

The evohome API does not support cooling

slice396 opened this issue · 25 comments

I have an evoHome setup with multiple zones and a heat pump with the ability to cool.

Im not able to cool within the home assistant. I can only choose heat or off.

Am i missing something? If i change the settings to cooling on the evohome. The temperature rises on the display and on evohome. In my case evoahome still thinks we are heating but it does work. So of i lower the temperature within home assistant the heat pump starts to cool.

I would love the ability to change to cooling on heating with home assistant.

[edit] The API does not currently support cooling, see: #17 (comment)


I am keen to get cooling into the code, but - as I don't have cooling available to me (and neither the official API) - I'll need some help from someone who does.

What I need in the first instance is a coy of the JSON returned from the TCC webservers, so I can set up some virtual servers to dev/test against.

You can help with this fairly easily, if you're using HA, see:

The JSON does not contain any personally identifiable information, so you can post it here - or PM me if you prefer.

This was very challenging from a phone...

Here you have the log, it's the complete log. Could not select the evohome part as you asked. If this is not what you asked for i will bring in my laptop and do it again;


2024-05-11 12:27:13.471 INFO (MainThread) [homeassistant.setup] Setting up evohome
...
2024-05-11 12:27:13.873 INFO (MainThread) [evohomeasync2.broker] GET https://tccna.honeywell.com/WebAPI/emea/api/v1/userAccount (200) = {'userId': ...
...
2024-05-11 12:27:14.187 INFO (MainThread) [evohomeasync2.broker] GET https://tccna.honeywell.com/WebAPI/emea/api/v1/location/installationInfo?userId=2972021&includeTemperatureControlSystems=True (200) = [{'locationInfo': {'locationId': ...

Thanks for that, however...

I need this logging:

logger:
  logs:
    homeassistant.components.evohome: debug
    homeassistant.components.evohome.climate: debug
    homeassistant.components.evohome.water_heater: debug

You have provided this logging:

logger:
  logs:
    evohomeasync2: info
    evohomeasync2.broker: info

I note that you have at least two locations, so make sure you supply the JSON for the correct location.

Like this?

<< SNIP >>

Think so, lemme look at it.

OK, so the JSON schema is limited to what we know so far. In particular, all zones have:

  • the setpointCapabilities with: "canControlCool": false

I has hoping to see "canControlCool": true, alongside some new JSON.

Can you confirm that your system supports cooling?

If so, it may be useful to send me some JSON when the system is actively cooling.

Please can you turn off logging via the client library because it does report personally identifiable information:

logger:
  logs:
    evohomeasync2: warning
    evohomeasync2.broker: warning

Am i missing something? If i change the settings to cooling on the evohome. The temperature rises on the display and on evohome.

I am not sure what you mean by 'The temperature rises'?

Do you mean the current temperature, or the target temperature (the setpoint)?

In any case, both should decrease, no? (or: target heat temperature was 19.5, and target cool temperature was 20.5?)

Again, when the system is cooling, send me these two lines only:

  • [homeassistant.components.evohome] Config =
  • [homeassistant.components.evohome] Status =

Thanks for the effort so far!

First "The temperature rises" thing i said earlier;

When i change to cooling on the evoHome system itself, the setpoint of the rooms rises to 24 degrees. This is normal. What i notice within Home Assistant is that the system just thinks its still heating. Lowering the temperature will activate the heat pump in cooling. But home assistant just says "heating" or "off". But i cannot change it from heating to cooling or vise versa.

As you requested i did this;

  1. Changed the config.yaml to;
logger:
  default: info  # turn off debug messages, generally...
  logs:
    evohomeasync2: warning
    evohomeasync2.broker: warning
    homeassistant.components.evohome: debug
    homeassistant.components.evohome.climate: debug
    homeassistant.components.evohome.water_heater: debug
  1. removed the existing log file.
  2. Switched to cooling.
  3. Reboot Home Assistant.
  4. Made sure the system was actually cooling.
  5. Searched in the log for
[homeassistant.components.evohome] Config =
[homeassistant.components.evohome] Status =

And paste these lines below;

2024-05-11 20:26:16.503 DEBUG (MainThread) [homeassistant.components.evohome] Config = {'locationInfo': {'locationId': '6390479', 'timeZone': {'timeZoneId': 'WEuropeStandardTime', 'displayName': '(UTC+01:00) Amsterdam, Berlijn, Bern, Rome, Stockholm, Wenen', 'offsetMinutes': 60, 'currentOffsetMinutes': 120, 'supportsDaylightSaving': True}}, 'gateways': [{'gatewayInfo': {'gatewayId': '6008600', 'temperatureControlSystems': [{'systemId': '8222003', 'modelType': 'EvoTouch', 'zones': [{'zoneId': '8222000', 'modelType': 'HeatingZone', 'setpointCapabilities': {'maxHeatSetpoint': 35.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': 'Woonkamer', 'zoneType': 'UnderfloorHeating'}, {'zoneId': '8222001', 'modelType': 'HeatingZone', 'setpointCapabilities': {'maxHeatSetpoint': 35.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': 'MBR', 'zoneType': 'UnderfloorHeating'}, {'zoneId': '8222002', 'modelType': 'HeatingZone', 'setpointCapabilities': {'maxHeatSetpoint': 35.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': 'BK', 'zoneType': 'UnderfloorHeating'}, {'zoneId': '8403459', 'modelType': 'HeatingZone', 'setpointCapabilities': {'maxHeatSetpoint': 35.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': 'Kantoor', 'zoneType': 'UnderfloorHeating'}, {'zoneId': '8403460', 'modelType': 'HeatingZone', 'setpointCapabilities': {'maxHeatSetpoint': 35.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': 'Sauna', 'zoneType': 'UnderfloorHeating'}, {'zoneId': '8403596', 'modelType': 'HeatingZone', 'setpointCapabilities': {'maxHeatSetpoint': 35.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': 'Hut', 'zoneType': 'UnderfloorHeating'}, {'zoneId': '8222004', 'modelType': 'Unknown', 'setpointCapabilities': {'maxHeatSetpoint': 30.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': '', 'zoneType': 'Unknown'}], 'allowedSystemModes': [{'systemMode': 'Auto', 'canBePermanent': True, 'canBeTemporary': False}, {'systemMode': 'AutoWithEco', 'canBePermanent': True, 'canBeTemporary': True, 'maxDuration': '1.00:00:00', 'timingResolution': '01:00:00', 'timingMode': 'Duration'}, {'systemMode': 'AutoWithReset', 'canBePermanent': True, 'canBeTemporary': False}, {'systemMode': 'Away', 'canBePermanent': True, 'canBeTemporary': True, 'maxDuration': '99.00:00:00', 'timingResolution': '1.00:00:00', 'timingMode': 'Period'}, {'systemMode': 'DayOff', 'canBePermanent': True, 'canBeTemporary': True, 'maxDuration': '99.00:00:00', 'timingResolution': '1.00:00:00', 'timingMode': 'Period'}, {'systemMode': 'HeatingOff', 'canBePermanent': True, 'canBeTemporary': False}, {'systemMode': 'Custom', 'canBePermanent': True, 'canBeTemporary': True, 'maxDuration': '99.00:00:00', 'timingResolution': '1.00:00:00', 'timingMode': 'Period'}]}]}, 'temperatureControlSystems': [{'systemId': '8222003', 'modelType': 'EvoTouch', 'zones': [{'zoneId': '8222000', 'modelType': 'HeatingZone', 'setpointCapabilities': {'maxHeatSetpoint': 35.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': 'Woonkamer', 'zoneType': 'UnderfloorHeating'}, {'zoneId': '8222001', 'modelType': 'HeatingZone', 'setpointCapabilities': {'maxHeatSetpoint': 35.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': 'MBR', 'zoneType': 'UnderfloorHeating'}, {'zoneId': '8222002', 'modelType': 'HeatingZone', 'setpointCapabilities': {'maxHeatSetpoint': 35.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': 'BK', 'zoneType': 'UnderfloorHeating'}, {'zoneId': '8403459', 'modelType': 'HeatingZone', 'setpointCapabilities': {'maxHeatSetpoint': 35.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': 'Kantoor', 'zoneType': 'UnderfloorHeating'}, {'zoneId': '8403460', 'modelType': 'HeatingZone', 'setpointCapabilities': {'maxHeatSetpoint': 35.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': 'Sauna', 'zoneType': 'UnderfloorHeating'}, {'zoneId': '8403596', 'modelType': 'HeatingZone', 'setpointCapabilities': {'maxHeatSetpoint': 35.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': 'Hut', 'zoneType': 'UnderfloorHeating'}, {'zoneId': '8222004', 'modelType': 'Unknown', 'setpointCapabilities': {'maxHeatSetpoint': 30.0, 'minHeatSetpoint': 5.0, 'valueResolution': 0.5, 'canControlHeat': True, 'canControlCool': False, 'allowedSetpointModes': ['PermanentOverride', 'FollowSchedule', 'TemporaryOverride'], 'maxDuration': '1.00:00:00', 'timingResolution': '00:10:00'}, 'scheduleCapabilities': {'maxSwitchpointsPerDay': 6, 'minSwitchpointsPerDay': 1, 'timingResolution': '00:10:00', 'setpointValueResolution': 0.5}, 'name': '', 'zoneType': 'Unknown'}], 'allowedSystemModes': [{'systemMode': 'Auto', 'canBePermanent': True, 'canBeTemporary': False}, {'systemMode': 'AutoWithEco', 'canBePermanent': True, 'canBeTemporary': True, 'maxDuration': '1.00:00:00', 'timingResolution': '01:00:00', 'timingMode': 'Duration'}, {'systemMode': 'AutoWithReset', 'canBePermanent': True, 'canBeTemporary': False}, {'systemMode': 'Away', 'canBePermanent': True, 'canBeTemporary': True, 'maxDuration': '99.00:00:00', 'timingResolution': '1.00:00:00', 'timingMode': 'Period'}, {'systemMode': 'DayOff', 'canBePermanent': True, 'canBeTemporary': True, 'maxDuration': '99.00:00:00', 'timingResolution': '1.00:00:00', 'timingMode': 'Period'}, {'systemMode': 'HeatingOff', 'canBePermanent': True, 'canBeTemporary': False}, {'systemMode': 'Custom', 'canBePermanent': True, 'canBeTemporary': True, 'maxDuration': '99.00:00:00', 'timingResolution': '1.00:00:00', 'timingMode': 'Period'}]}]}]}

2024-05-11 20:26:16.657 DEBUG (MainThread) [homeassistant.components.evohome] Status = {'locationId': '6390479', 'gateways': [{'gatewayId': '6008600', 'temperatureControlSystems': [{'systemId': '8222003', 'zones': [{'zoneId': '8222000', 'temperatureStatus': {'temperature': 23.0, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 23.0, 'setpointMode': 'FollowSchedule'}, 'name': 'Woonkamer'}, {'zoneId': '8222001', 'temperatureStatus': {'temperature': 25.0, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 21.0, 'setpointMode': 'TemporaryOverride', 'until': '2024-05-11T20:30:00Z'}, 'name': 'MBR'}, {'zoneId': '8222002', 'temperatureStatus': {'temperature': 22.0, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 23.0, 'setpointMode': 'FollowSchedule'}, 'name': 'BK'}, {'zoneId': '8403459', 'temperatureStatus': {'temperature': 23.5, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 23.0, 'setpointMode': 'FollowSchedule'}, 'name': 'Kantoor'}, {'zoneId': '8403460', 'temperatureStatus': {'temperature': 25.5, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 23.0, 'setpointMode': 'FollowSchedule'}, 'name': 'Sauna'}, {'zoneId': '8403596', 'temperatureStatus': {'temperature': 23.0, 'isAvailable': True}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 23.0, 'setpointMode': 'FollowSchedule'}, 'name': 'Hut'}, {'zoneId': '8222004', 'temperatureStatus': {'isAvailable': False}, 'activeFaults': [], 'setpointStatus': {'targetHeatTemperature': 62.0, 'setpointMode': 'PermanentOverride'}, 'name': ''}], 'activeFaults': [], 'systemModeStatus': {'mode': 'Auto', 'isPermanent': True}}], 'activeFaults': []}]}

I guess home assistant logs into the normal portal and changes settings like i would. I cannot change the system to cooling or heating within the portal. Only locally on the Evohome itself. So i guess its not easely fixable.

My best guess is that I'd have to use a different API...

I am not even sure if ramses_rf would work, either.

I am pretty sure I need to use another API - I will see I can contact the vendor & get access to it.

I guess you are right. After testing i noticed some problems with cooling because home assistant thinks its saving energie by lowering the temperature. Because cooling is active the opposite is true. Im searching for a workaround but for now havent found a simple solution.

I've send a mail to my sales representative as well. Perhaps he knows a solution.

There are several versions of API that speak to TCC/evohome - evohome-async can use two (of the earlier APIs).

I know another coder (who wrote an Amazon Alexa skill that can handle cooling) has been given access to a 3rd API, but his code - unlike mine - is not open source.

I will reach out to them and request advice, but because this library is open source, we may not get anywhere.

Just received access to https://developer.honeywellhome.com/

perhaps there is a use within; https://developer.honeywellhome.com/lyric/apis/post/devices/thermostats/%7BdeviceId%7D

Also requested the cooling capability for the portal. They told me the request has been added to the list, so i guess this will not happen soon.

@slice396 Could you PM me at your convenience - either via github, or via https://community.home-assistant.io/

Like right here?

No, I want a private channel - PM or email.

Tried to share my mail but ghost removed it. Do you have another way to communicate private?

Tried to share my mail but ghost removed it. Do you have another way to communicate private?

No, I got it.

@slice396 Can you confirm that you can control cooling via the TCC app?

At the moment i can only enable cooling through the evoHome. Resideo (Roy
de Vos) told me they want to make this happen but it is, as of this moment,
not possible.

Oh! I had assumed the TCC app (on apple/android) was working!

What about the TCC website - can you control cooling there?

Nope same story. Roy told me they are busy fixing this. He also told me the API has more possibilities. See my message from May 13.

Just received access to https://developer.honeywellhome.com/

perhaps there is a use within; https://developer.honeywellhome.com/lyric/apis/post/devices/thermostats/%7BdeviceId%7D

Also requested the cooling capability for the portal. They told me the request has been added to the list, so i guess this will not happen soon.

I’m afraid I have bad news…

There is very good evidence that the TCC Web API simply does not support cooling for EMEA-based systems, and also:

  • no support in TCC mobile App
  • no support in TCC website

There is only support via the Evohome controller UI.

All: if you want cooling to be added to the API, I can only suggest you approach Resideo and ask that things change.