home-assistant / core

:house_with_garden: Open source home automation that puts local control and privacy first.
https://www.home-assistant.io
Apache License 2.0
74.14k stars 31.12k forks source link

Honeywell T6 Pro Z-wave fan setting doesn't work in HomeKit Bridge #93412

Closed UltraPhil closed 1 year ago

UltraPhil commented 1 year ago

The problem

Even if the fan mode and fan state are well detected by ZwaveJS, it doesn't appear right in HomeKit.

Also, changing the fan speed in HomeKit doesn't seem to do anything -- it is always reset to ON/100%.

I'ved used the ZwaveJS debugging tool, and I see no command sent when I change the fan settings in HomeKit.

I'm a bit at lost to diagnose this further.

Thanks!

What version of Home Assistant Core has the issue?

core-2023.5.3

What was the last working version of Home Assistant Core?

No response

What type of installation are you running?

Home Assistant OS

Integration causing the issue

HomeKit Bridge

Link to integration documentation on our website

https://www.home-assistant.io/integrations/homekit/

Diagnostics information

No response

Example YAML snippet

No response

Anything in the logs that might be useful for us?

No response

Additional information

Both ZwaveJS and HomeKit Bridge are on the default configuration (not overrided by configuration.yaml).

home-assistant[bot] commented 1 year ago

Hey there @bdraco, mind taking a look at this issue as it has been labeled with an integration (homekit) you are listed as a code owner for? Thanks!

Code owner commands Code owners of `homekit` can trigger bot actions by commenting: - `@home-assistant close` Closes the issue. - `@home-assistant rename Awesome new title` Renames the issue. - `@home-assistant reopen` Reopen the issue. - `@home-assistant unassign homekit` Removes the current integration label and assignees on the issue, add the integration domain after the command.

(message by CodeOwnersMention)


homekit documentation homekit source (message by IssueLinks)

bdraco commented 1 year ago

Only the predefined fan modes are supported

UltraPhil commented 1 year ago

Only the predefined fan modes are supported

I'm not sure I understand. Does that mean that it'll never work with HomeKit Bridge? Is HomeKit Bridge able to expose the predefined fan modes?

bdraco commented 1 year ago

https://developers.home-assistant.io/docs/core/entity/climate#fan-modes

UltraPhil commented 1 year ago

Yes, I confirm that the Honeywell T6 Pro Z-Wave fan modes are supported and works well in the Home Assistant UI. However, something is wrong in the way it interacts with HomeKit Bridge.

UltraPhil commented 1 year ago

Ah, I think I understand. You mean that HomeKit Bridge can only use the modes listes on the URI you provided.

Name -- FAN_ON FAN_OFF FAN_AUTO FAN_LOW FAN_MEDIUM FAN_HIGH FAN_MIDDLE FAN_FOCUS FAN_DIFFUSE

That means there is still something wrong with the integration. It should at least support ON/OFF, which it doesn't.

Is that what you meant?

bdraco commented 1 year ago

It only supports these literal values, https://github.com/home-assistant/core/blob/f09abb0f2e0da4fb5158608652a85cb1bb4c110c/homeassistant/components/climate/const.py#L70, and only the subset of them that refer to actual speeds

bdraco commented 1 year ago

The only one that should show up for your device is low which means you'll always get 100% of the only value supported

Your device doesn't support on, only:

Auto Low - not a known mode so not supported Low - should be supported assuming it maps to low (not sure if Low is actually supported it may only work with low) Circulation - not a known mode so not supported

UltraPhil commented 1 year ago

Ah ok, I see!

For the T6 Pro, Auto low is basically OFF' since it won't start the fan unless it is actively heating/cooling. So I think it should be mapped as OFF.

"Low" is, as you said, basically ON at "100%". I don't even think the T6 Pro supports multiple fan modes with the HVAC pinout. However, HomeKit Bridge doesn't even seem to get the Low setting. Maybe because of the uppcase as you pointed out?

Here is an output of the developer tools for climate.t6_pro_z_wave_programmable_thermostat:

hvac_modes:
  - 'off'
  - heat
  - cool
min_temp: 7
max_temp: 35
fan_modes:
  - Auto low
  - Low
  - Circulation
preset_modes:
  - none
  - Auxiliary
  - Energy heat
  - Energy cool
current_temperature: 21.5
temperature: 18
current_humidity: 32
fan_mode: Low
hvac_action: idle
preset_mode: none
fan_state: Running / running low
friendly_name: T6 Pro Z-Wave Programmable Thermostat
supported_features: 25

Would there be any way to map:

plfaucher commented 1 year ago

T6 Pro Z-Wave + Homekit owner facing the same issue here. If possible at all, I think that the mapping suggested by @UltraPhil would be a good workaround.

bdraco commented 1 year ago

The fans modes would need to be added to the homekit integration and since they are not predefined there is no way to know them in advance here

https://github.com/home-assistant/core/blob/f8d8f5cabac197d18b55185aaa4940558a78e657/homeassistant/components/homekit/type_thermostats.py#L121

UltraPhil commented 1 year ago

Would it be preferable to map them to default (known) values in ZwaveJS instead then? So no modification would be required in HomeKit Bridge?

bdraco commented 1 year ago

Would it be preferable to map them to default (known) values in ZwaveJS instead then? So no modification would be required in HomeKit Bridge?

Yes. The other option would be an architecture change to make climate fans work the same way as fan entities

jcconnell commented 1 year ago

Would it be preferable to map them to default (known) values in ZwaveJS instead then? So no modification would be required in HomeKit Bridge?

As a ZwaveJS user with a T6 Pro, how would I do this? Would like to map the three modes you suggested in the earlier comment, but not sure how.

UltraPhil commented 1 year ago

I don't know if the mapping could be done on HomeAssistant' side, or ZwaveJS side. Changing the mapping on ZwaveJS side would means that all ZwaveJS projets that use them as an upstream dependency would be subject to the change.

ZwaveJS isn't mapping incorrectly the fan settings: it represents what you see on the device and in the user's manual. It's just not aligned with HASS defaults.

I'm wondering if HomeAssistant provides a way to "transform" the states received from ZwaveJS, but I'm completely new to the codebase, I haven't had a look except for what @bdraco referred to in his comments.

bdraco commented 1 year ago

Usually use can use a template entity to do this but do thermostats it’s the generic thermostat integration. I don’t believe it supports fan moss’s though

UltraPhil commented 1 year ago

I did a quick test using a switch template entity:

switch:
  - platform: template
    switches:
      t6_pro_fan_mode:
        unique_id: t6_pro_fan_mode
        value_template: "{{ 'off' if is_state_attr('climate.t6_pro_z_wave_programmable_thermostat', 'fan_mode', 'Auto low') else 'on' }}"
        turn_on:
          service: climate.set_fan_mode
          data:
            entity_id: climate.t6_pro_z_wave_programmable_thermostat
            fan_mode: "Low"
        turn_off:
          service: climate.set_fan_mode
          data:
            entity_id: climate.t6_pro_z_wave_programmable_thermostat
            fan_mode: "Auto low"
        availability_template: "{{ is_state('sensor.node_13_node_status', 'alive') }}"

While this works, Imgur, I still have the fan component of the climate entity of the T6, even if the fan component of the T6 is disabled: Imgur.

From what's I've seen in the HASS forums, many people have used fan templates to define precentages steps that basically represents a fan preset mode. So, yes, has @bdraco mentioned, we can use a fan template entity to correctly present the fan modes, for example by using 0% => Auto Low, 50% => circulate and 100% => low.

It seems the HomeKit fan settings is pulled from the climate component.

issue-triage-workflows[bot] commented 1 year ago

There hasn't been any activity on this issue recently. Due to the high number of incoming GitHub notifications, we have to clean some of the old issues, as many of them have already been resolved with the latest updates. Please make sure to update to the latest Home Assistant version and check if that solves the issue. Let us know if that works for you by adding a comment 👍 This issue has now been marked as stale and will be closed if no further activity occurs. Thank you for your contributions.