zxdavb / evohome-async

An asyncio Python client to access the Evohome web service
http://evohome-client.readthedocs.org/en/latest/
Apache License 2.0
11 stars 10 forks source link

Cooling within evoHome #17

Open slice396 opened 1 month ago

slice396 commented 1 month ago

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.

zxdavb commented 1 month ago

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.

slice396 commented 1 month ago

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': ...
zxdavb commented 1 month ago

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.

slice396 commented 1 month ago

Like this?

<< SNIP >>

zxdavb commented 1 month ago

Think so, lemme look at it.

zxdavb commented 1 month ago

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

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
zxdavb commented 1 month ago

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:

slice396 commented 1 month ago

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
  2. removed the existing log file.
  3. Switched to cooling.
  4. Reboot Home Assistant.
  5. Made sure the system was actually cooling.
  6. 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': []}]}

slice396 commented 1 month ago

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.

zxdavb commented 1 month ago

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

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

zxdavb commented 1 month ago

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

slice396 commented 1 month ago

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.

zxdavb commented 1 month ago

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 access, but because this library is open source, we may not get anywhere.

slice396 commented 1 month ago

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.

zxdavb commented 2 weeks ago

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

slice396 commented 2 weeks ago

Like right here?

zxdavb commented 2 weeks ago

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

slice396 commented 2 weeks ago

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

zxdavb commented 2 weeks ago

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

No, I got it.