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
71.59k stars 29.91k forks source link

Cover stop function not working when using HomeKit-Controller with a Somfy TaHoma Box #67133

Closed badewanne1234 closed 2 years ago

badewanne1234 commented 2 years ago

The problem

The stop feature of covers is not working when using HomeKit-Controller in connection with the Somfy TaHoma box. Whilst cover.close_cover, cover.open_cover, cover.toggle_cover and cover.set_cover_position work as desired, one cannot use the service cover.stop_cover, which is particularly necessary if you were to open/close the cover and want it to stop at a certain position.

If one calls the service cover.stop_cover for any HK cover, nothing happens.

What version of Home Assistant Core has the issue?

core-2022.2.9

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_controller

Link to integration documentation on our website

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

Diagnostics information

No response

Example YAML snippet

service: cover.stop_cover
data: {}
target:
  entity_id: cover.office

Anything in the logs that might be useful for us?

No response

Additional information

There is no stop button (for position and tilt) if its a cover controlled by HomeKit grafik

For reference: there is a stop button (for position and tilt) if the same cover is integrated with i.e. the Velux or myVelux Integration and a Velux KLF 200 gateway: grafik

probot-home-assistant[bot] commented 2 years ago

homekit_controller documentation homekit_controller source (message by IssueLinks)

probot-home-assistant[bot] commented 2 years ago

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

Jc2k commented 2 years ago

Can you please provide the diagnostics information requested by the template. I need it to verify the APIs your device implements.

iMicknl commented 2 years ago

@tetienne do you recall if this works via native HomeKit on iOS? In my memory, this is not (correctly) implemented on Somfy's side, but I am not sure.

Jc2k commented 2 years ago

The diagnostics data will tell me whether the device has the hold characteristic.

The code only sets the stop feature if the hold characteristic is found, and that feature flag is what controls the presence of the stop button. So the lack of a stop button implies the firmware does not expose the stop feature via homekit.

So yeah until someone provides diagnostic data I'm leaning towards closing as "device limitation, works as expected".

badewanne1234 commented 2 years ago

Here is the diagnostics data of one cover and the Tahoma Box, does that help?

  "integration_manifest": {
    "domain": "homekit_controller",
    "name": "HomeKit Controller",
    "config_flow": true,
    "documentation": "https://www.home-assistant.io/integrations/homekit_controller",
    "requirements": [
      "aiohomekit==0.6.11"
    ],
    "zeroconf": [
      "_hap._tcp.local."
    ],
    "after_dependencies": [
      "zeroconf"
    ],
    "codeowners": [
      "@Jc2k",
      "@bdraco"
    ],
    "iot_class": "local_push",
    "is_built_in": true
  },
  "data": {
    "config-entry": {
      "title": "Somfy TaHoma",
      "version": 1,
      "data": {
        "AccessoryPairingID": "xyz",
        "AccessoryLTPK": "xyz",
        "iOSPairingId": "xyz",
        "iOSDeviceLTSK": "**REDACTED**",
        "iOSDeviceLTPK": "xyz",
        "AccessoryIP": "**REDACTED**",
        "AccessoryPort": xyz,
        "Connection": "IP"
      }
    },
    "entity-map": [
      {
        "aid": 1064597543192,
        "services": [
          {
            "iid": 1,
            "type": "0000003E-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000014-0000-1000-8000-0026BB765291",
                "iid": 620020,
                "perms": [
                  "pw"
                ],
                "format": "bool",
                "description": "Identify"
              },
              {
                "type": "00000021-0000-1000-8000-0026BB765291",
                "iid": 620033,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "io:ExteriorVenetianBlindIO",
                "description": "Model",
                "maxLen": 64
              },
              {
                "type": "220",
                "iid": 620544,
                "perms": [
                  "pr"
                ],
                "format": "data",
                "value": "V2zWaxZ+1Vs="
              },
              {
                "type": "00000020-0000-1000-8000-0026BB765291",
                "iid": 620032,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Somfy",
                "description": "Manufacturer",
                "maxLen": 64
              },
              {
                "type": "00000052-0000-1000-8000-0026BB765291",
                "iid": 620082,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "2020.6.4",
                "description": "Firmware Revision",
                "maxLen": 64
              },
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 620035,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Room 1",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "00000030-0000-1000-8000-0026BB765291",
                "iid": 620048,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "**REDACTED**",
                "description": "Serial Number",
                "maxLen": 64
              }
            ]
          },
          {
            "iid": 1400000,
            "type": "0000008C-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 1400035,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Room 1",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "0000006D-0000-1000-8000-0026BB765291",
                "iid": 1400109,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 100,
                "description": "Current Position",
                "unit": "percentage",
                "minValue": 0,
                "maxValue": 100,
                "minStep": 1
              },
              {
                "type": "00000072-0000-1000-8000-0026BB765291",
                "iid": 1400114,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "uint8",
                "value": 2,
                "description": "Position State",
                "minValue": 0,
                "maxValue": 2,
                "minStep": 1,
                "valid-values": [
                  0,
                  1,
                  2
                ]
              },
              {
                "type": "0000007B-0000-1000-8000-0026BB765291",
                "iid": 1400123,
                "perms": [
                  "pr",
                  "pw",
                  "ev"
                ],
                "format": "int",
                "value": -90,
                "description": "Target Horizontal Tilt Angle",
                "unit": "arcdegrees",
                "minValue": -90,
                "maxValue": 0,
                "minStep": 1
              },
              {
                "type": "0000006C-0000-1000-8000-0026BB765291",
                "iid": 1400108,
                "perms": [
                  "pr",
                  "ev"
                ],
                "format": "int",
                "value": -90,
                "description": "Current Horizontal Tilt Angle",
                "unit": "arcdegrees",
                "minValue": -90,
                "maxValue": 90,
                "minStep": 1
              },
              {
                "type": "0000007C-0000-1000-8000-0026BB765291",
                "iid": 1400124,
                "perms": [
                  "pr",
                  "pw",
                  "ev"
                ],
                "format": "uint8",
                "value": 100,
                "description": "Target Position",
                "unit": "percentage",
                "minValue": 0,
                "maxValue": 100,
                "minStep": 1
              }
            ]
          }
        ]
      },
      {
        "aid": 1,
        "services": [
          {
            "iid": 1,
            "type": "0000003E-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000014-0000-1000-8000-0026BB765291",
                "iid": 620020,
                "perms": [
                  "pw"
                ],
                "format": "bool",
                "description": "Identify"
              },
              {
                "type": "00000021-0000-1000-8000-0026BB765291",
                "iid": 620033,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "TaHoma",
                "description": "Model",
                "maxLen": 64
              },
              {
                "type": "220",
                "iid": 620544,
                "perms": [
                  "pr"
                ],
                "format": "data",
                "value": "V2zWaxZ+1Vs="
              },
              {
                "type": "00000020-0000-1000-8000-0026BB765291",
                "iid": 620032,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Somfy",
                "description": "Manufacturer",
                "maxLen": 64
              },
              {
                "type": "00000052-0000-1000-8000-0026BB765291",
                "iid": 620082,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "2021.5.4",
                "description": "Firmware Revision",
                "maxLen": 64
              },
              {
                "type": "00000023-0000-1000-8000-0026BB765291",
                "iid": 620035,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "Somfy TaHoma",
                "description": "Name",
                "maxLen": 64
              },
              {
                "type": "00000030-0000-1000-8000-0026BB765291",
                "iid": 620048,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "**REDACTED**",
                "description": "Serial Number",
                "maxLen": 64
              }
            ]
          },
          {
            "iid": 1620000,
            "type": "000000A2-0000-1000-8000-0026BB765291",
            "characteristics": [
              {
                "type": "00000037-0000-1000-8000-0026BB765291",
                "iid": 1620055,
                "perms": [
                  "pr"
                ],
                "format": "string",
                "value": "1.1.0",
                "description": "Version",
                "maxLen": 64
              }
            ]
          }
        ]
      },
      {
    "device": {
      "name": "Room 1",
      "model": "io:ExteriorVenetianBlindIO",
      "manfacturer": "Somfy",
      "sw_version": "2020.6.4",
      "hw_version": "",
      "entities": [
        {
          "original_name": "Room 1",
          "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": "cover.room_1",
            "state": "open",
            "attributes": {
              "current_position": 100,
              "current_tilt_position": -90,
              "friendly_name": "Cover Room 1",
              "supported_features": 183,
              "device_class": "blind"
            },
            "last_changed": "2022-02-24T06:09:44.916720+00:00",
            "last_updated": "2022-02-24T06:09:44.916720+00:00"
          }
        },
        {
          "original_name": "Room 1 Identify",
          "original_device_class": null,
          "entity_category": "diagnostic",
          "original_icon": null,
          "icon": null,
          "unit_of_measurement": null,
          "device_class": null,
          "disabled": true,
          "disabled_by": "user",
          "state": null
        }
      ]
    }
  }
}
Jc2k commented 2 years ago

Yep. There is no hold characteristic in the homekit schema. This means your device does not expose a stop button, at least via homekit.

From reviewing the code I think if it did, it would work. But as it doesn't there is nothing else I can do unfortunately unless the vendor updates their firmware.

badewanne1234 commented 2 years ago

@tetienne do you recall if this works via native HomeKit on iOS? In my memory, this is not (correctly) implemented on Somfy's side, but I am not sure.

Thanks for the confirmation @Jc2k

@iMicknl @tetienne you seem to have good contacts to Somfy Devs, is this something that you could bring up with them?