core: Ecobee Fan Mode Not Supported In Homekit Controller

The problem

I am testing out the new homekit_controller support for ecobee preset modes and fan. The fan mode always shows auto and there is no info on whether or not the fan is currently running. It seems that in general the integration is supposed to support this, so I am not sure why the ecobee does not present this information.

What version of Home Assistant Core has the issue?

core-2022.3.0b0

What was the last working version of Home Assistant Core?

No response

What type of installation are you running?

Home Assistant Container

Integration causing the issue

homekit_controller

Link to integration documentation on our website

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

Diagnostics information

{
  "home_assistant": {
    "installation_type": "Home Assistant Container",
    "version": "2022.3.0b0",
    "dev": false,
    "hassio": false,
    "virtualenv": false,
    "python_version": "3.9.9",
    "docker": true,
    "arch": "x86_64",
    "timezone": "America/Denver",
    "os_name": "Linux",
    "os_version": "5.10.28-Unraid",
    "run_as_root": true
  },
  "custom_components": {
    "frigate": {
      "version": "2.2.2",
      "requirements": []
    },
    "vesync_humidifier": {
      "version": "1.0.0",
      "requirements": []
    },
    "zha_toolkit": {
      "version": "v0.7.18",
      "requirements": []
    },
    "garbage_collection": {
      "version": "4.5",
      "requirements": [
        "python-dateutil>=2.8.2"
      ]
    },
    "hacs": {
      "version": "1.23.0",
      "requirements": [
        "aiogithubapi>=21.11.0"
      ]
    },
    "grocy": {
      "version": "v3.0.1",
      "requirements": [
        "pygrocy==0.30.0",
        "iso8601==0.1.12",
        "integrationhelper==0.2.2"
      ]
    }
  },
  "integration_manifest": {
    "domain": "homekit_controller",
    "name": "HomeKit Controller",
    "config_flow": true,
    "documentation": "https://www.home-assistant.io/integrations/homekit_controller",
    "requirements": [
      "aiohomekit==0.7.14"
    ],
    "zeroconf": [
      "_hap._tcp.local."
    ],
    "after_dependencies": [
      "zeroconf"
    ],
    "codeowners": [
      "@Jc2k",
      "@bdraco"
    ],
    "iot_class": "local_push",
    "loggers": [
      "aiohomekit",
      "commentjson"
    ],
    "is_built_in": true
  },
  "data": {
    "config-entry": {
      "title": "Thermostat",
      "version": 1,
      "data": {
        "AccessoryPairingID": "69:BF:EE:A5:EB:5F",
        "AccessoryLTPK": "83560f758a9261dad018499f4ca30d2059d1f8ed5247b485afca14c7b2decbf7",
        "iOSPairingId": "9c14b1f6-0f83-48ad-ab0e-f3b14f9f59b8",
        "iOSDeviceLTSK": "**REDACTED**",
        "iOSDeviceLTPK": "c2a791d9eefb4aef19c65ede221ef824fa96ef728a541cc99b209a8aa14e03cc",
        "AccessoryIP": "**REDACTED**",
        "AccessoryPort": 48585,
        "Connection": "IP"
      }
    },
    "entity-map": [
      {
        "aid": 1,
        "services": [
          {
            "iid": 1,
            "type": "0000003E-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000014-0000-1000-8000-0026BB765291",
                "iid": 6,
                "perms": [
                  "pw"
                ],
                "format": "bool",
                "description": "Identify"
              },
              {
                "type": "00000020-0000-1000-8000-0026BB765291",
                "iid": 3,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "ecobee Inc.",
                "description": "Manufacturer",
                "maxLen": 64
              },
              {
                "type": "00000021-0000-1000-8000-0026BB765291",
                "iid": 5,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "ecobee3 lite",
                "description": "Model",
                "maxLen": 64
              },
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 2,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Thermostat",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "00000030-0000-1000-8000-0026BB765291",
                "iid": 4,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "**REDACTED**",
                "description": "Serial Number",
                "maxLen": 64
              },
              {
                "type": "00000052-0000-1000-8000-0026BB765291",
                "iid": 8,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "4.7.50244",
                "description": "Firmware Revision",
                "maxLen": 64
              },
              {
                "type": "34AB8811-AC7F-4340-BAC3-FD6A85F9943B",
                "iid": 11,
                "perms": [
                  "pr",
                  "hd"
                ],
                "format": "string",
                "value": "4.1;3fac0fb4",
                "maxLen": 64
              },
              {
                "type": "00000220-0000-1000-8000-0026BB765291",
                "iid": 10,
                "perms": [
                  "pr",
                  "hd"
                ],
                "format": "data",
                "value": "u4qz9YgSXzQ="
              },
              {
                "type": "000000A6-0000-1000-8000-0026BB765291",
                "iid": 9,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint32",
                "value": 0,
                "description": "Accessory Flags"
              }
            ]
          },
          {
            "iid": 30,
            "type": "000000A2-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000037-0000-1000-8000-0026BB765291",
                "iid": 31,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "1.1.0",
                "description": "Version",
                "maxLen": 64
              }
            ]
          },
          {
            "iid": 16,
            "type": "0000004A-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "0000000F-0000-1000-8000-0026BB765291",
                "iid": 17,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Current Heating Cooling State",
                "minValue": 0,
                "maxValue": 2,
                "minStep": 1,
                "valid-values": [
                  0,
                  1,
                  2
                ]
              },
              {
                "type": "00000033-0000-1000-8000-0026BB765291",
                "iid": 18,
                "perms": [
                  "pr",
                  "pw",
                  "ev"
                ],
                "format": "uint8",
                "value": 3,
                "description": "Target Heating Cooling State",
                "minValue": 0,
                "maxValue": 3,
                "minStep": 1,
                "valid-values": [
                  0,
                  1,
                  2,
                  3
                ]
              },
              {
                "type": "00000011-0000-1000-8000-0026BB765291",
                "iid": 19,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "float",
                "value": 22.9,
                "description": "Current Temperature",
                "unit": "celsius",
                "minValue": 0,
                "maxValue": 40.0,
                "minStep": 0.1
              },
              {
                "type": "00000035-0000-1000-8000-0026BB765291",
                "iid": 20,
                "perms": [
                  "pr",
                  "pw",
                  "ev"
                ],
                "format": "float",
                "value": 24.5,
                "description": "Target Temperature",
                "unit": "celsius",
                "minValue": 7.2,
                "maxValue": 33.3,
                "minStep": 0.1
              },
              {
                "type": "00000036-0000-1000-8000-0026BB765291",
                "iid": 21,
                "perms": [
                  "pr",
                  "pw",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Temperature Display Units",
                "minValue": 0,
                "maxValue": 1,
                "minStep": 1,
                "valid-values": [
                  0,
                  1
                ]
              },
              {
                "type": "0000000D-0000-1000-8000-0026BB765291",
                "iid": 22,
                "perms": [
                  "pr",
                  "pw",
                  "ev"
                ],
                "format": "float",
                "value": 25.6,
                "description": "Cooling Threshold Temperature",
                "unit": "celsius",
                "minValue": 18.3,
                "maxValue": 33.3,
                "minStep": 0.1
              },
              {
                "type": "00000012-0000-1000-8000-0026BB765291",
                "iid": 23,
                "perms": [
                  "pr",
                  "pw",
                  "ev"
                ],
                "format": "float",
                "value": 23.4,
                "description": "Heating Threshold Temperature",
                "unit": "celsius",
                "minValue": 7.2,
                "maxValue": 26.1,
                "minStep": 0.1
              },
              {
                "type": "00000010-0000-1000-8000-0026BB765291",
                "iid": 24,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "float",
                "value": 41.0,
                "description": "Current Relative Humidity",
                "unit": "percentage",
                "minValue": 0,
                "maxValue": 100.0,
                "minStep": 1.0
              },
              {
                "type": "00000034-0000-1000-8000-0026BB765291",
                "iid": 25,
                "perms": [
                  "pr",
                  "pw",
                  "ev"
                ],
                "format": "float",
                "value": 50.0,
                "description": "Target Relative Humidity",
                "unit": "percentage",
                "minValue": 20.0,
                "maxValue": 50.0,
                "minStep": 1.0
              },
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 27,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Thermostat",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "000000BF-0000-1000-8000-0026BB765291",
                "iid": 75,
                "perms": [
                  "pr",
                  "pw",
                  "ev"
                ],
                "format": "uint8",
                "value": 1,
                "description": "Target Fan State",
                "minValue": 0,
                "maxValue": 1,
                "minStep": 1
              },
              {
                "type": "000000AF-0000-1000-8000-0026BB765291",
                "iid": 76,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Current Fan State",
                "minValue": 0,
                "maxValue": 2,
                "minStep": 1
              },
              {
                "type": "B7DDB9A3-54BB-4572-91D2-F1F5B0510F8C",
                "iid": 33,
                "perms": [
                  "pr"
                ],
                "format": "uint8",
                "value": 0,
                "minValue": 0,
                "maxValue": 3,
                "minStep": 1
              },
              {
                "type": "E4489BBC-5227-4569-93E5-B345E3E5508F",
                "iid": 34,
                "perms": [
                  "pr",
                  "pw"
                ],
                "format": "float",
                "value": 23.5,
                "unit": "celsius",
                "minValue": 7.2,
                "maxValue": 26.1,
                "minStep": 0.1
              },
              {
                "type": "7D381BAA-20F9-40E5-9BE9-AEB92D4BECEF",
                "iid": 35,
                "perms": [
                  "pr",
                  "pw"
                ],
                "format": "float",
                "value": 25.5,
                "unit": "celsius",
                "minValue": 18.3,
                "maxValue": 33.3,
                "minStep": 0.1
              },
              {
                "type": "73AAB542-892A-4439-879A-D2A883724B69",
                "iid": 36,
                "perms": [
                  "pr",
                  "pw"
                ],
                "format": "float",
                "value": 21.0,
                "unit": "celsius",
                "minValue": 7.2,
                "maxValue": 26.1,
                "minStep": 0.1
              },
              {
                "type": "5DA985F0-898A-4850-B987-B76C6C78D670",
                "iid": 37,
                "perms": [
                  "pr",
                  "pw"
                ],
                "format": "float",
                "value": 26.0,
                "unit": "celsius",
                "minValue": 18.3,
                "maxValue": 33.3,
                "minStep": 0.1
              },
              {
                "type": "05B97374-6DC0-439B-A0FA-CA33F612D425",
                "iid": 38,
                "perms": [
                  "pr",
                  "pw"
                ],
                "format": "float",
                "value": 22.4,
                "unit": "celsius",
                "minValue": 7.2,
                "maxValue": 26.1,
                "minStep": 0.1
              },
              {
                "type": "A251F6E7-AC46-4190-9C5D-3D06277BDF9F",
                "iid": 39,
                "perms": [
                  "pr",
                  "pw"
                ],
                "format": "float",
                "value": 24.6,
                "unit": "celsius",
                "minValue": 18.3,
                "maxValue": 33.3,
                "minStep": 0.1
              },
              {
                "type": "1B300BC2-CFFC-47FF-89F9-BD6CCF5F2853",
                "iid": 40,
                "perms": [
                  "pw"
                ],
                "format": "uint8",
                "minValue": 0,
                "maxValue": 3,
                "minStep": 1
              },
              {
                "type": "1621F556-1367-443C-AF19-82AF018E99DE",
                "iid": 41,
                "perms": [
                  "pr",
                  "pw"
                ],
                "format": "string",
                "value": "2035-01-01T00:00:00-07:00T",
                "maxLen": 64
              },
              {
                "type": "FA128DE6-9D7D-49A4-B6D8-4E4E234DEE38",
                "iid": 48,
                "perms": [
                  "pw"
                ],
                "format": "bool"
              },
              {
                "type": "4A6AE4F6-036C-495D-87CC-B3702B437741",
                "iid": 49,
                "perms": [
                  "pr"
                ],
                "format": "uint8",
                "value": 1,
                "minValue": 0,
                "maxValue": 4,
                "minStep": 1
              },
              {
                "type": "DB7BF261-7042-4194-8BD1-3AA22830AEDD",
                "iid": 50,
                "perms": [
                  "pr"
                ],
                "format": "uint8",
                "value": 0,
                "minValue": 0,
                "maxValue": 3,
                "minStep": 1
              },
              {
                "type": "41935E3E-B54D-42E9-B8B9-D33C6319F0AF",
                "iid": 51,
                "perms": [
                  "pr"
                ],
                "format": "bool",
                "value": 0
              },
              {
                "type": "C35DA3C0-E004-40E3-B153-46655CDD9214",
                "iid": 52,
                "perms": [
                  "pr",
                  "pw"
                ],
                "format": "uint8",
                "value": 100,
                "unit": "percentage",
                "minValue": 0,
                "maxValue": 100,
                "minStep": 1
              },
              {
                "type": "48F62AEC-4171-4B4A-8F0E-1EEB6708B3FB",
                "iid": 53,
                "perms": [
                  "pr"
                ],
                "format": "uint8",
                "value": 100,
                "unit": "percentage",
                "minValue": 0,
                "maxValue": 100,
                "minStep": 1
              },
              {
                "type": "1B1515F2-CC45-409F-991F-C480987F92C3",
                "iid": 54,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Your ecobee thermostat is now paired with HomeKit.",
                "maxLen": 64
              }
            ]
          }
        ]
      },
      {
        "aid": 4297415482,
        "services": [
          {
            "iid": 1,
            "type": "0000003E-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 2,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Bedroom",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "00000020-0000-1000-8000-0026BB765291",
                "iid": 3,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "ecobee Inc.",
                "description": "Manufacturer",
                "maxLen": 64
              },
              {
                "type": "00000030-0000-1000-8000-0026BB765291",
                "iid": 4,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "**REDACTED**",
                "description": "Serial Number",
                "maxLen": 64
              },
              {
                "type": "00000021-0000-1000-8000-0026BB765291",
                "iid": 5,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "EBERS41",
                "description": "Model",
                "maxLen": 64
              },
              {
                "type": "00000052-0000-1000-8000-0026BB765291",
                "iid": 8,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "1.0.0",
                "description": "Firmware Revision",
                "maxLen": 64
              },
              {
                "type": "00000014-0000-1000-8000-0026BB765291",
                "iid": 6,
                "perms": [
                  "pw"
                ],
                "format": "bool",
                "description": "Identify"
              }
            ]
          },
          {
            "iid": 192,
            "type": "00000096-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "0000008F-0000-1000-8000-0026BB765291",
                "iid": 193,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 2,
                "description": "Charging State",
                "minValue": 0,
                "maxValue": 2,
                "minStep": 1
              },
              {
                "type": "00000068-0000-1000-8000-0026BB765291",
                "iid": 194,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 100,
                "description": "Battery Level",
                "unit": "percentage",
                "minValue": 0,
                "maxValue": 100,
                "minStep": 1
              },
              {
                "type": "00000079-0000-1000-8000-0026BB765291",
                "iid": 195,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Status Low Battery",
                "minValue": 0,
                "maxValue": 1,
                "minStep": 1
              },
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 196,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Bedroom",
                "description": "Name",
                "maxLen": 64
              }
            ]
          },
          {
            "iid": 208,
            "type": "0000008A-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000011-0000-1000-8000-0026BB765291",
                "iid": 209,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "float",
                "value": 26.3,
                "description": "Current Temperature",
                "unit": "celsius",
                "minValue": 0,
                "maxValue": 100.0,
                "minStep": 0.1
              },
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 210,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Bedroom",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "00000075-0000-1000-8000-0026BB765291",
                "iid": 211,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "bool",
                "value": 1,
                "description": "Status Active"
              },
              {
                "type": "00000079-0000-1000-8000-0026BB765291",
                "iid": 212,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Status Low Battery",
                "minValue": 0,
                "maxValue": 1,
                "minStep": 1
              }
            ]
          },
          {
            "iid": 57,
            "type": "00000086-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000071-0000-1000-8000-0026BB765291",
                "iid": 65,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Occupancy Detected",
                "minValue": 0,
                "maxValue": 1,
                "minStep": 1
              },
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 29,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Bedroom",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "00000075-0000-1000-8000-0026BB765291",
                "iid": 117,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "bool",
                "value": 1,
                "description": "Status Active"
              },
              {
                "type": "00000079-0000-1000-8000-0026BB765291",
                "iid": 116,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Status Low Battery",
                "minValue": 0,
                "maxValue": 1,
                "minStep": 1
              },
              {
                "type": "A8F798E0-4A40-11E6-BDF4-0800200C9A66",
                "iid": 68,
                "perms": [
                  "pr"
                ],
                "format": "int",
                "value": -1,
                "unit": "seconds",
                "minValue": -1,
                "maxValue": 86400,
                "minStep": 1
              }
            ]
          },
          {
            "iid": 56,
            "type": "00000085-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000022-0000-1000-8000-0026BB765291",
                "iid": 66,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "bool",
                "value": 0,
                "description": "Motion Detected"
              },
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 28,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Bedroom",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "00000075-0000-1000-8000-0026BB765291",
                "iid": 101,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "bool",
                "value": 1,
                "description": "Status Active"
              },
              {
                "type": "00000079-0000-1000-8000-0026BB765291",
                "iid": 100,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Status Low Battery",
                "minValue": 0,
                "maxValue": 1,
                "minStep": 1
              },
              {
                "type": "BFE61C70-4A40-11E6-BDF4-0800200C9A66",
                "iid": 67,
                "perms": [
                  "pr"
                ],
                "format": "int",
                "value": -1,
                "unit": "seconds",
                "minValue": -1,
                "maxValue": 86400,
                "minStep": 1
              }
            ]
          }
        ]
      },
      {
        "aid": 4297415498,
        "services": [
          {
            "iid": 1,
            "type": "0000003E-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 2,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Stairway",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "00000020-0000-1000-8000-0026BB765291",
                "iid": 3,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "ecobee Inc.",
                "description": "Manufacturer",
                "maxLen": 64
              },
              {
                "type": "00000030-0000-1000-8000-0026BB765291",
                "iid": 4,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "**REDACTED**",
                "description": "Serial Number",
                "maxLen": 64
              },
              {
                "type": "00000021-0000-1000-8000-0026BB765291",
                "iid": 5,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "EBERS41",
                "description": "Model",
                "maxLen": 64
              },
              {
                "type": "00000052-0000-1000-8000-0026BB765291",
                "iid": 8,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "1.0.0",
                "description": "Firmware Revision",
                "maxLen": 64
              },
              {
                "type": "00000014-0000-1000-8000-0026BB765291",
                "iid": 6,
                "perms": [
                  "pw"
                ],
                "format": "bool",
                "description": "Identify"
              }
            ]
          },
          {
            "iid": 192,
            "type": "00000096-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "0000008F-0000-1000-8000-0026BB765291",
                "iid": 193,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 2,
                "description": "Charging State",
                "minValue": 0,
                "maxValue": 2,
                "minStep": 1
              },
              {
                "type": "00000068-0000-1000-8000-0026BB765291",
                "iid": 194,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 100,
                "description": "Battery Level",
                "unit": "percentage",
                "minValue": 0,
                "maxValue": 100,
                "minStep": 1
              },
              {
                "type": "00000079-0000-1000-8000-0026BB765291",
                "iid": 195,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Status Low Battery",
                "minValue": 0,
                "maxValue": 1,
                "minStep": 1
              },
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 196,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Stairway",
                "description": "Name",
                "maxLen": 64
              }
            ]
          },
          {
            "iid": 208,
            "type": "0000008A-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000011-0000-1000-8000-0026BB765291",
                "iid": 209,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "float",
                "value": 23.7,
                "description": "Current Temperature",
                "unit": "celsius",
                "minValue": 0,
                "maxValue": 100.0,
                "minStep": 0.1
              },
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 210,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Stairway",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "00000075-0000-1000-8000-0026BB765291",
                "iid": 211,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "bool",
                "value": 1,
                "description": "Status Active"
              },
              {
                "type": "00000079-0000-1000-8000-0026BB765291",
                "iid": 212,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Status Low Battery",
                "minValue": 0,
                "maxValue": 1,
                "minStep": 1
              }
            ]
          },
          {
            "iid": 57,
            "type": "00000086-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000071-0000-1000-8000-0026BB765291",
                "iid": 65,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Occupancy Detected",
                "minValue": 0,
                "maxValue": 1,
                "minStep": 1
              },
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 29,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Stairway",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "00000075-0000-1000-8000-0026BB765291",
                "iid": 117,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "bool",
                "value": 1,
                "description": "Status Active"
              },
              {
                "type": "00000079-0000-1000-8000-0026BB765291",
                "iid": 116,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Status Low Battery",
                "minValue": 0,
                "maxValue": 1,
                "minStep": 1
              },
              {
                "type": "A8F798E0-4A40-11E6-BDF4-0800200C9A66",
                "iid": 68,
                "perms": [
                  "pr"
                ],
                "format": "int",
                "value": -1,
                "unit": "seconds",
                "minValue": -1,
                "maxValue": 86400,
                "minStep": 1
              }
            ]
          },
          {
            "iid": 56,
            "type": "00000085-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000022-0000-1000-8000-0026BB765291",
                "iid": 66,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "bool",
                "value": 0,
                "description": "Motion Detected"
              },
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 28,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Stairway",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "00000075-0000-1000-8000-0026BB765291",
                "iid": 101,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "bool",
                "value": 1,
                "description": "Status Active"
              },
              {
                "type": "00000079-0000-1000-8000-0026BB765291",
                "iid": 100,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 0,
                "description": "Status Low Battery",
                "minValue": 0,
                "maxValue": 1,
                "minStep": 1
              },
              {
                "type": "BFE61C70-4A40-11E6-BDF4-0800200C9A66",
                "iid": 67,
                "perms": [
                  "pr"
                ],
                "format": "int",
                "value": -1,
                "unit": "seconds",
                "minValue": -1,
                "maxValue": 86400,
                "minStep": 1
              }
            ]
          }
        ]
      }
    ],
    "devices": [
      {
        "name": "Thermostat",
        "model": "ecobee3 lite",
        "manfacturer": "ecobee Inc.",
        "sw_version": "4.7.50244",
        "hw_version": "",
        "entities": [
          {
            "original_name": "Thermostat",
            "original_device_class": null,
            "entity_category": null,
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "climate.thermostat",
              "state": "heat_cool",
              "attributes": {
                "hvac_modes": [
                  "off",
                  "heat",
                  "cool",
                  "heat_cool"
                ],
                "min_temp": 7.2,
                "max_temp": 33.3,
                "min_humidity": 20,
                "max_humidity": 50,
                "current_temperature": 22.9,
                "temperature": null,
                "target_temp_high": 25.6,
                "target_temp_low": 23.4,
                "current_humidity": 41.0,
                "humidity": 50.0,
                "hvac_action": "idle",
                "friendly_name": "Thermostat",
                "supported_features": 7
              },
              "last_changed": "2022-02-23T23:52:33.978924+00:00",
              "last_updated": "2022-02-24T00:26:25.120002+00:00"
            }
          },
          {
            "original_name": "Thermostat Away Cool Target",
            "original_device_class": null,
            "entity_category": "config",
            "original_icon": "mdi:thermometer-minus",
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "number.thermostat_away_cool_target",
              "state": "24.6",
              "attributes": {
                "min": 18.3,
                "max": 33.3,
                "step": 0.1,
                "mode": "auto",
                "icon": "mdi:thermometer-minus",
                "friendly_name": "Thermostat Away Cool Target"
              },
              "last_changed": "2022-02-23T23:52:33.977704+00:00",
              "last_updated": "2022-02-23T23:52:33.977704+00:00"
            }
          },
          {
            "original_name": "Thermostat Away Heat Target",
            "original_device_class": null,
            "entity_category": "config",
            "original_icon": "mdi:thermometer-plus",
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "number.thermostat_away_heat_target",
              "state": "22.4",
              "attributes": {
                "min": 7.2,
                "max": 26.1,
                "step": 0.1,
                "mode": "auto",
                "icon": "mdi:thermometer-plus",
                "friendly_name": "Thermostat Away Heat Target"
              },
              "last_changed": "2022-02-23T23:52:33.977604+00:00",
              "last_updated": "2022-02-23T23:52:33.977604+00:00"
            }
          },
          {
            "original_name": "Thermostat Clear Hold",
            "original_device_class": null,
            "entity_category": null,
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "button.thermostat_clear_hold",
              "state": "unknown",
              "attributes": {
                "friendly_name": "Thermostat Clear Hold"
              },
              "last_changed": "2022-02-23T23:52:33.978360+00:00",
              "last_updated": "2022-02-23T23:52:33.978360+00:00"
            }
          },
          {
            "original_name": "Thermostat Current Humidity",
            "original_device_class": "humidity",
            "entity_category": null,
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": "%",
            "device_class": "humidity",
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "sensor.thermostat_humidity",
              "state": "41.0",
              "attributes": {
                "state_class": "measurement",
                "unit_of_measurement": "%",
                "device_class": "humidity",
                "friendly_name": "Thermostat Humidity"
              },
              "last_changed": "2022-02-24T00:22:40.193825+00:00",
              "last_updated": "2022-02-24T00:22:40.193825+00:00"
            }
          },
          {
            "original_name": "Thermostat Current Mode",
            "original_device_class": "homekit_controller__ecobee_mode",
            "entity_category": null,
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "select.thermostat_current_mode",
              "state": "home",
              "attributes": {
                "options": [
                  "home",
                  "sleep",
                  "away"
                ],
                "device_class": "homekit_controller__ecobee_mode",
                "friendly_name": "Thermostat Current Mode"
              },
              "last_changed": "2022-02-23T23:52:33.976964+00:00",
              "last_updated": "2022-02-23T23:52:33.976964+00:00"
            }
          },
          {
            "original_name": "Thermostat Current Temperature",
            "original_device_class": "temperature",
            "entity_category": null,
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": "\u00b0C",
            "device_class": "temperature",
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "sensor.thermostat_current_temperature",
              "state": "22.9",
              "attributes": {
                "state_class": "measurement",
                "unit_of_measurement": "\u00b0C",
                "device_class": "temperature",
                "friendly_name": "Thermostat Current Home Temp"
              },
              "last_changed": "2022-02-24T00:26:25.117773+00:00",
              "last_updated": "2022-02-24T00:26:25.117773+00:00"
            }
          },
          {
            "original_name": "Thermostat Fan Mode",
            "original_device_class": null,
            "entity_category": null,
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "number.thermostat_fan_mode",
              "state": "100",
              "attributes": {
                "min": 0.0,
                "max": 100,
                "step": 1,
                "mode": "auto",
                "friendly_name": "Thermostat Fan Mode"
              },
              "last_changed": "2022-02-23T23:52:33.977833+00:00",
              "last_updated": "2022-02-23T23:52:33.977833+00:00"
            }
          },
          {
            "original_name": "Thermostat Home Cool Target",
            "original_device_class": null,
            "entity_category": "config",
            "original_icon": "mdi:thermometer-minus",
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "number.thermostat_home_cool_target",
              "state": "25.5",
              "attributes": {
                "min": 18.3,
                "max": 33.3,
                "step": 0.1,
                "mode": "auto",
                "icon": "mdi:thermometer-minus",
                "friendly_name": "Thermostat Home Cool Target"
              },
              "last_changed": "2022-02-24T00:14:04.312893+00:00",
              "last_updated": "2022-02-24T00:14:04.312893+00:00"
            }
          },
          {
            "original_name": "Thermostat Home Heat Target",
            "original_device_class": null,
            "entity_category": "config",
            "original_icon": "mdi:thermometer-plus",
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "number.thermostat_home_heat_target",
              "state": "23.5",
              "attributes": {
                "min": 7.2,
                "max": 26.1,
                "step": 0.1,
                "mode": "auto",
                "icon": "mdi:thermometer-plus",
                "friendly_name": "Thermostat Home Heat Target"
              },
              "last_changed": "2022-02-24T00:14:02.082079+00:00",
              "last_updated": "2022-02-24T00:14:02.082079+00:00"
            }
          },
          {
            "original_name": "Thermostat Identify",
            "original_device_class": null,
            "entity_category": "diagnostic",
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "button.thermostat_identify",
              "state": "unknown",
              "attributes": {
                "friendly_name": "Thermostat Identify"
              },
              "last_changed": "2022-02-23T23:52:33.978255+00:00",
              "last_updated": "2022-02-23T23:52:33.978255+00:00"
            }
          },
          {
            "original_name": "Thermostat Sleep Cool Target",
            "original_device_class": null,
            "entity_category": "config",
            "original_icon": "mdi:thermometer-minus",
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "number.thermostat_sleep_cool_target",
              "state": "26.0",
              "attributes": {
                "min": 18.3,
                "max": 33.3,
                "step": 0.1,
                "mode": "auto",
                "icon": "mdi:thermometer-minus",
                "friendly_name": "Thermostat Sleep Cool Target"
              },
              "last_changed": "2022-02-23T23:52:33.977502+00:00",
              "last_updated": "2022-02-23T23:52:33.977502+00:00"
            }
          },
          {
            "original_name": "Thermostat Sleep Heat Target",
            "original_device_class": null,
            "entity_category": "config",
            "original_icon": "mdi:thermometer-plus",
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "number.thermostat_sleep_heat_target",
              "state": "21.0",
              "attributes": {
                "min": 7.2,
                "max": 26.1,
                "step": 0.1,
                "mode": "auto",
                "icon": "mdi:thermometer-plus",
                "friendly_name": "Thermostat Sleep Heat Target"
              },
              "last_changed": "2022-02-23T23:52:33.977401+00:00",
              "last_updated": "2022-02-23T23:52:33.977401+00:00"
            }
          }
        ]
      },
      {
        "name": "Bedroom",
        "model": "EBERS41",
        "manfacturer": "ecobee Inc.",
        "sw_version": "1.0.0",
        "hw_version": "",
        "entities": [
          {
            "original_name": "Bedroom",
            "original_device_class": "motion",
            "entity_category": null,
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": null,
            "device_class": "motion",
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "binary_sensor.bedroom_ecoobee_motion",
              "state": "off",
              "attributes": {
                "device_class": "motion",
                "friendly_name": "Bedroom Ecobee Motion"
              },
              "last_changed": "2022-02-23T23:52:33.978006+00:00",
              "last_updated": "2022-02-23T23:52:33.978006+00:00"
            }
          },
          {
            "original_name": "Bedroom",
            "original_device_class": "occupancy",
            "entity_category": null,
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": null,
            "device_class": "occupancy",
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "binary_sensor.bedroom_ecobee_occupancy",
              "state": "off",
              "attributes": {
                "device_class": "occupancy",
                "friendly_name": "Bedroom Ecobee Occupancy"
              },
              "last_changed": "2022-02-23T23:52:33.977924+00:00",
              "last_updated": "2022-02-23T23:52:33.977924+00:00"
            }
          },
          {
            "original_name": "Bedroom Battery",
            "original_device_class": "battery",
            "entity_category": null,
            "original_icon": "mdi:battery-unknown",
            "icon": null,
            "unit_of_measurement": "%",
            "device_class": "battery",
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "sensor.bedroom_ecoobee_battery",
              "state": "100",
              "attributes": {
                "unit_of_measurement": "%",
                "device_class": "battery",
                "icon": "mdi:battery",
                "friendly_name": "Bedroom Ecobee Battery"
              },
              "last_changed": "2022-02-23T23:52:33.975958+00:00",
              "last_updated": "2022-02-23T23:52:33.975958+00:00"
            }
          },
          {
            "original_name": "Bedroom Identify",
            "original_device_class": null,
            "entity_category": "diagnostic",
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "button.bedroom_ecobee_identify",
              "state": "unknown",
              "attributes": {
                "friendly_name": "Bedroom Ecobee Identify"
              },
              "last_changed": "2022-02-23T23:52:33.978427+00:00",
              "last_updated": "2022-02-23T23:52:33.978427+00:00"
            }
          },
          {
            "original_name": "Bedroom Temperature",
            "original_device_class": "temperature",
            "entity_category": null,
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": "\u00b0C",
            "device_class": "temperature",
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "sensor.bedroom_ecobee_temperature",
              "state": "26.3",
              "attributes": {
                "unit_of_measurement": "\u00b0C",
                "device_class": "temperature",
                "friendly_name": "Bedroom Ecobee Temp"
              },
              "last_changed": "2022-02-24T00:26:33.373140+00:00",
              "last_updated": "2022-02-24T00:26:33.373140+00:00"
            }
          }
        ]
      },
      {
        "name": "Stairway",
        "model": "EBERS41",
        "manfacturer": "ecobee Inc.",
        "sw_version": "1.0.0",
        "hw_version": "",
        "entities": [
          {
            "original_name": "Stairway",
            "original_device_class": "motion",
            "entity_category": null,
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": null,
            "device_class": "motion",
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "binary_sensor.stairway_ecobee_motion",
              "state": "off",
              "attributes": {
                "device_class": "motion",
                "friendly_name": "Stairway Ecobee Motion"
              },
              "last_changed": "2022-02-23T23:52:33.978157+00:00",
              "last_updated": "2022-02-23T23:52:33.978157+00:00"
            }
          },
          {
            "original_name": "Stairway",
            "original_device_class": "occupancy",
            "entity_category": null,
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": null,
            "device_class": "occupancy",
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "binary_sensor.stairway_ecobee_occupancy",
              "state": "off",
              "attributes": {
                "device_class": "occupancy",
                "friendly_name": "Stairway Ecobee Occupancy"
              },
              "last_changed": "2022-02-24T00:26:18.670881+00:00",
              "last_updated": "2022-02-24T00:26:18.670881+00:00"
            }
          },
          {
            "original_name": "Stairway Battery",
            "original_device_class": "battery",
            "entity_category": null,
            "original_icon": "mdi:battery-unknown",
            "icon": null,
            "unit_of_measurement": "%",
            "device_class": "battery",
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "sensor.stairway_ecobee_battery",
              "state": "100",
              "attributes": {
                "unit_of_measurement": "%",
                "device_class": "battery",
                "icon": "mdi:battery",
                "friendly_name": "Stairway Ecobee Battery"
              },
              "last_changed": "2022-02-23T23:52:33.976313+00:00",
              "last_updated": "2022-02-23T23:52:33.976313+00:00"
            }
          },
          {
            "original_name": "Stairway Identify",
            "original_device_class": null,
            "entity_category": "diagnostic",
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": null,
            "device_class": null,
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "button.stairway_ecobee_identify",
              "state": "unknown",
              "attributes": {
                "friendly_name": "Stairway Ecobee Identify"
              },
              "last_changed": "2022-02-23T23:52:33.978494+00:00",
              "last_updated": "2022-02-23T23:52:33.978494+00:00"
            }
          },
          {
            "original_name": "Stairway Temperature",
            "original_device_class": "temperature",
            "entity_category": null,
            "original_icon": null,
            "icon": null,
            "unit_of_measurement": "\u00b0C",
            "device_class": "temperature",
            "disabled": false,
            "disabled_by": null,
            "state": {
              "entity_id": "sensor.stairway_ecobee_temperature",
              "state": "23.7",
              "attributes": {
                "unit_of_measurement": "\u00b0C",
                "device_class": "temperature",
                "friendly_name": "Stairway Ecobee Temp"
              },
              "last_changed": "2022-02-24T00:26:17.662227+00:00",
              "last_updated": "2022-02-24T00:26:17.662227+00:00"
            }
          }
        ]
      }
    ]
  }
}

Example YAML snippet

No response

Anything in the logs that might be useful for us?

No response

Additional information

No response

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Reactions: 2
  • Comments: 28 (22 by maintainers)

Most upvoted comments

I was just testing out setting the fan mode via climate.set_fan_mode to on or auto on my Ecobee3 thermostats and the fan setting is backwards for me. Setting the fan mode to auto via the climate.xxx entity turns the fan “on” and setting it to on switches it to “auto”.

Both also put the thermostat into a “range” hold (heat/cool) that I need to resume from.

Would you please open a fresh issue. Thanks 👍

@bdraco, I tested the climate.set_fan_mode from the dev branch cloned today. There were three issues that I have found:

  1. Sending the service call does not change the fan mode on ecobee. I had this issue as well when I implemented the number fan_mode entity. To turn the fan mode on, I had to send a call to climate.set_fan_mode with value of on, then value of auto. Similarly, to set the fan mode to auto, I had to send a call with value of auto, then value of on. Just sending one request didn’t cause any changes.
  2. Are on/auto values swapped? Because the second value I set in the call is what I would think is the target value, and I had to send an auto to turn the fan on.
  3. climate.fan_mode did not change state as I confirmed the changes on ecobee thermostat fan mode switch between on and auto.

@imle The important thing with HomeKit is that its mostly about the services and characteristics the device implements. We implement the thermostat and fan services, and if a single accesory implements both that is something we totally support already. But the device itself has to actually support it!

The interfaces we support are largely driven by the diagnostics data we have captured from real world devices, as theres a lot of detail not quite captured in the specs. That said, if a device implements the required parts of the thermostat service only, and has no optional characteristics and no vendor characteristics, then absolutely there is no fan support and no way for us to provide fan support, even if the native API does indeed have a fan. It is completely out of our hands. The manufacturer has to wire it up in the HomeKit API first.

This sort of thing does happen - e.g. i’m aware of a window covering that can’t be stopped mid open/close using homekit (even though we absolutely have implemented the “stop” interface), but you can stop it using the devices native app. That is completely out of our hands, and with the manufacturer.

An ecobee implements the thermostat service. We know from the documentation Apple has released that there is an alternative interface called heater-cooler. This does have fan control (and iirc slat control). But ecobee implements thermostat, not heater-cooler.

The documentation for thermostat does not list any fan control characteristics as required or even optional, and until this ticket we had not encountered any way of doing fan control for a thermostat. So our assumption for the last few years has been it was not supported.

But as hinted at in the comments of this ticket it looks like Ecobee is using TargetFanState and CurrentFanState characteristics within the thermostat service. These 2 characterstics are normally part of the fan service, and if Ecobee had implemented a fan service we’d in theory already support them. If we assume this is an undocumented but supported extension to the documented thermostat interface, this means that homekit will let us pick between “Manual” and “Auto”. “Auto” is available for home assistant (see https://developers.home-assistant.io/docs/core/entity/climate/#fan-modes), but “Manual” isn’t. Luckily we are allowed to use custom modes. But it’s not clear what “Manual” and “Auto” actually mean. There doesn’t seem to be “On” or “Off” here.

I don’t have much free time right now, so this ticket is unlikely to move forward in the next few months unless soemone else comes forward to take a crack at it.