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
72.11k stars 30.18k forks source link

ZHA Develco Frient Devices #49127

Closed Veldkornet closed 1 year ago

Veldkornet commented 3 years ago

The problem

I’ve paired a couple of Develco Frient devices with ZHA, and while they mostly work, the experience is not great.

In general, the devices seem to work a bit buggy compared to the other devices i have on ZHA. They are either slow to react or fail completely. Below my observations for the devices I already own:

SPLZB-131 Smart Plug Mini:

WISZB-120 Entry Sensor Pro:

SMSZB-120 Intelligent Smoke Alarm:

MOSZB-140 Motion Sensor Pro:

What is version of Home Assistant Core has the issue?

core-2021.4.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

zha

Link to integration documentation on our website

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

Example YAML snippet

No response

Anything in the logs that might be useful for us?

No response

Veldkornet commented 3 years ago

SPLZB-131 Signature:

{
  "node_descriptor": "NodeDescriptor(byte1=1, byte2=64, mac_capability_flags=142, manufacturer_code=4117, maximum_buffer_size=72, maximum_incoming_transfer_size=1560, server_mask=0, maximum_outgoing_transfer_size=1560, descriptor_capability_field=0, *allocate_address=True, *complex_descriptor_available=False, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False, *is_valid=True, *logical_type=<LogicalType.Router: 1>, *user_descriptor_available=False)",
  "endpoints": {
    "1": {
      "profile_id": 49353,
      "device_type": "0x0001",
      "in_clusters": [
        "0x0005",
        "0x0006"
      ],
      "out_clusters": []
    },
    "2": {
      "profile_id": 260,
      "device_type": "0x0051",
      "in_clusters": [
        "0x0000",
        "0x0002",
        "0x0003",
        "0x0004",
        "0x0005",
        "0x0006",
        "0x0009",
        "0x0702",
        "0x0b04"
      ],
      "out_clusters": [
        "0x0000",
        "0x0003",
        "0x000a",
        "0x0019",
        "0x0406"
      ]
    }
  },
  "manufacturer": "frient A/S",
  "model": "SPLZB-131",
  "class": "zigpy.device.Device"
}
probot-home-assistant[bot] commented 3 years ago

Hey there @dmulcahey, @adminiuga, mind taking a look at this issue as its been labeled with an integration (zha) you are listed as a codeowner for? Thanks! (message by CodeOwnersMention)

Veldkornet commented 3 years ago

WISZB-120 Signature:

{
  "node_descriptor": "NodeDescriptor(byte1=2, byte2=64, mac_capability_flags=0, manufacturer_code=4117, maximum_buffer_size=80, maximum_incoming_transfer_size=80, server_mask=0, maximum_outgoing_transfer_size=80, descriptor_capability_field=0, *allocate_address=False, *complex_descriptor_available=False, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False, *is_valid=True, *logical_type=<LogicalType.EndDevice: 2>, *user_descriptor_available=False)",
  "endpoints": {
    "1": {
      "profile_id": 49353,
      "device_type": "0x0001",
      "in_clusters": [
        "0x0003",
        "0x0005",
        "0x0006"
      ],
      "out_clusters": []
    },
    "35": {
      "profile_id": 260,
      "device_type": "0x0402",
      "in_clusters": [
        "0x0000",
        "0x0001",
        "0x0003",
        "0x000f",
        "0x0020",
        "0x0500"
      ],
      "out_clusters": [
        "0x000a",
        "0x0019"
      ]
    },
    "38": {
      "profile_id": 260,
      "device_type": "0x0302",
      "in_clusters": [
        "0x0000",
        "0x0003",
        "0x0402"
      ],
      "out_clusters": [
        "0x0003"
      ]
    }
  },
  "manufacturer": "frient A/S",
  "model": "WISZB-120",
  "class": "zigpy.device.Device"
}
Veldkornet commented 3 years ago

SMSZB-120 Signature:

{
  "node_descriptor": "NodeDescriptor(byte1=2, byte2=64, mac_capability_flags=0, manufacturer_code=4117, maximum_buffer_size=80, maximum_incoming_transfer_size=80, server_mask=0, maximum_outgoing_transfer_size=80, descriptor_capability_field=0, *allocate_address=False, *complex_descriptor_available=False, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False, *is_valid=True, *logical_type=<LogicalType.EndDevice: 2>, *user_descriptor_available=False)",
  "endpoints": {
    "1": {
      "profile_id": 49353,
      "device_type": "0x0001",
      "in_clusters": [
        "0x0003",
        "0x0005",
        "0x0006"
      ],
      "out_clusters": []
    },
    "35": {
      "profile_id": 260,
      "device_type": "0x0402",
      "in_clusters": [
        "0x0000",
        "0x0001",
        "0x0003",
        "0x000f",
        "0x0020",
        "0x0500",
        "0x0502"
      ],
      "out_clusters": [
        "0x000a",
        "0x0019"
      ]
    },
    "38": {
      "profile_id": 260,
      "device_type": "0x0302",
      "in_clusters": [
        "0x0000",
        "0x0003",
        "0x0402"
      ],
      "out_clusters": [
        "0x0003"
      ]
    }
  },
  "manufacturer": "frient A/S",
  "model": "SMSZB-120",
  "class": "zigpy.device.Device"
}
Veldkornet commented 3 years ago

I also get errors in the log for these devices like this Failed to parse message (b'099c00300000') on cluster 1280, because Data is too short to contain 1 bytes:

2021-04-16 10:13:30 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0020] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=True> manufacturer=None tsn=154 command_id=0>
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0020] ZCL request 0x0000: []
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0020] No handler for cluster command 0
2021-04-16 10:13:30 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x17E8:35:0x0020]: Received 154 tsn command 'checkin': []
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy.device] [0x17e8] Extending timeout for 0x9a request
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.zigbee.application] Sending Zigbee request with tsn 154 under 182 request id, data: b'019a00010800'
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x17e8>, ep: 35, profile: 0x0104, cluster_id: 0x0020, data: b'199a00'
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_request (21, 182, 0, <DeconzAddressEndpoint address_mode=2 address=0x17E8 endpoint=35>, 260, 32, 1, b'\x01\x9a\x00\x01\x08\x00', 2, 0)
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] APS data request response: [2, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, 182]
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_CONFIRM|2: 166>, 0]
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_confirm (0,)
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] APS data confirm response for request with id 182: 00
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Request id: 0xb6 'aps_data_confirm' for <DeconzAddressEndpoint address_mode=ADDRESS_MODE.NWK address=0x17e8 endpoint=35>, status: 0x00
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 170>, 0]
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_indication (1, 1)
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] APS data indication response: [28, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x0000>, 1, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x17e8>, 35, 260, 10, b'\x00\x9b\x00\x00\x00', 0, 175, 191, 114, 243, 120, 0, -70]
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x000a] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=False disable_default_response=False> manufacturer=None tsn=155 command_id=Command.Read_Attributes>
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x000a] ZCL request 0x0000: [[0]]
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.zigbee.application] Sending Zigbee request with tsn 155 under 183 request id, data: b'189b01000000e2aa030c28'
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x17e8>, ep: 35, profile: 0x0104, cluster_id: 0x000a, data: b'009b000000'
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_request (26, 183, 0, <DeconzAddressEndpoint address_mode=2 address=0x17E8 endpoint=35>, 260, 10, 1, b'\x18\x9b\x01\x00\x00\x00\xe2\xaa\x03\x0c(', 2, 0)
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] APS data request response: [2, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, 183]
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_CONFIRM|2: 166>, 0]
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_confirm (0,)
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] APS data confirm response for request with id 183: 00
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Request id: 0xb7 'aps_data_confirm' for <DeconzAddressEndpoint address_mode=ADDRESS_MODE.NWK address=0x17e8 endpoint=35>, status: 0x00
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 170>, 0]
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_indication (1, 1)
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] APS data indication response: [32, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x0000>, 1, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x17e8>, 35, 260, 1280, b'\t\x9c\x000\x00\x00\x00\xff\xff', 0, 175, 183, 114, 243, 120, 0, -71]
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0500] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=156 command_id=0>
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0500] ZCL request 0x0000: [<ZoneStatus.Restore_reports|Supervision_reports: 48>, <bitmap8.0: 0>, 0, 65535]
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0500] No handler for cluster command 0
2021-04-16 10:13:30 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x17E8:35:0x0500]: Updated alarm state: ZoneStatus.0
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x17e8>, ep: 35, profile: 0x0104, cluster_id: 0x0500, data: b'099c0030000000ffff'
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 170>, 0]
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_indication (1, 1)
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] APS data indication response: [29, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x0000>, 1, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x17e8>, 35, 260, 1280, b'\t\x9c\x000\x00\x00', 0, 175, 191, 114, 243, 120, 0, -70]
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0500] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=156 command_id=0>
2021-04-16 10:13:30 ERROR (MainThread) [zigpy.device] Failed to parse message (b'099c00300000') on cluster 1280, because Data is too short to contain 1 bytes
2021-04-16 10:13:30 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x17e8>, ep: 35, profile: 0x0104, cluster_id: 0x0500, data: b'099c00300000'
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 170>, 0]
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_indication (1, 1)
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] APS data indication response: [28, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x0000>, 1, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x17e8>, 35, 260, 32, b'\x18\x9a\x0b\x00\x00', 0, 175, 191, 114, 243, 120, 0, -70]
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0020] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=True disable_default_response=True> manufacturer=None tsn=154 command_id=Command.Default_Response>
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x17e8>, ep: 35, profile: 0x0104, cluster_id: 0x0020, data: b'189a0b0000'
2021-04-16 10:13:31 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x17E8:35:0x0020]: executed 'checkin_response' command with args: '(True, 8)' kwargs: '{'tsn': 154}' result: [0, <Status.SUCCESS: 0>]
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy.device] [0x17e8] Extending timeout for 0xb8 request
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.zigbee.application] Sending Zigbee request with tsn 184 under 185 request id, data: b'01b80218000000'
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_request (22, 185, 0, <DeconzAddressEndpoint address_mode=2 address=0x17E8 endpoint=35>, 260, 32, 1, b'\x01\xb8\x02\x18\x00\x00\x00', 2, 0)
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] APS data request response: [2, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, 185]
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_CONFIRM|2: 166>, 0]
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_confirm (0,)
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] APS data confirm response for request with id 185: 00
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] Request id: 0xb9 'aps_data_confirm' for <DeconzAddressEndpoint address_mode=ADDRESS_MODE.NWK address=0x17e8 endpoint=35>, status: 0x00
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 170>, 0]
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_indication (1, 1)
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] APS data indication response: [28, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x0000>, 1, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x17e8>, 35, 260, 32, b'\x18\xb8\x0b\x02\x00', 0, 175, 191, 114, 243, 120, 0, -70]
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0020] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=GLOBAL_COMMAND manufacturer_specific=False is_reply=True disable_default_response=True> manufacturer=None tsn=184 command_id=Command.Default_Response>
2021-04-16 10:13:31 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x17e8>, ep: 35, profile: 0x0104, cluster_id: 0x0020, data: b'18b80b0200'
2021-04-16 10:13:31 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x17E8:35:0x0020]: executed 'set_long_poll_interval' command with args: '(24,)' kwargs: '{}' result: [2, <Status.SUCCESS: 0>]
Adminiuga commented 3 years ago

This device would need a quirk in zha-device-handlers repo as it doesn't confirm to ZCL specs and sends an incorrectly formatted message on cluster 0x0500

For the redundant entity, just disable it in ha.

Veldkornet commented 3 years ago

Hmm, that seems to happen for the two battery devices indeed, where the battery and binary sensors don't work.

WISZB-120

2021-04-16 17:42:15 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=50 command_id=0>
2021-04-16 17:42:15 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] ZCL request 0x0000: [<ZoneStatus.Restore_reports|Supervision_reports|Tamper|Alarm_1: 53>, <bitmap8.0: 0>, 0, 65535]
2021-04-16 17:42:15 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] No handler for cluster command 0
...
2021-04-16 17:46:29 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=51 command_id=0>
2021-04-16 17:46:29 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] ZCL request 0x0000: [<ZoneStatus.Restore_reports|Supervision_reports|Tamper|Alarm_1: 53>, <bitmap8.0: 0>, 0, 65535]
2021-04-16 17:46:29 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] No handler for cluster command 0
...
2021-04-16 17:48:04 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 170>, 0]
2021-04-16 17:48:04 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_indication (1, 1)
2021-04-16 17:48:04 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 170>, 0]
2021-04-16 17:48:04 DEBUG (MainThread) [zigpy_deconz.api] APS data indication response: [32, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 42>, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x0000>, 1, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x7562>, 35, 260, 1280, b'\t4\x005\x00\x00\x00\xff\xff', 0, 175, 215, 162, 27, 121, 0, -67]
2021-04-16 17:48:04 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=52 command_id=0>
2021-04-16 17:48:04 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] ZCL request 0x0000: [<ZoneStatus.Restore_reports|Supervision_reports|Tamper|Alarm_1: 53>, <bitmap8.0: 0>, 0, 65535]
2021-04-16 17:48:04 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] No handler for cluster command 0
2021-04-16 17:48:04 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x7562>, ep: 35, profile: 0x0104, cluster_id: 0x0500, data: b'09340035000000ffff'
2021-04-16 17:48:04 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_indication (1, 1)
2021-04-16 17:48:04 DEBUG (MainThread) [zigpy_deconz.api] APS data indication response: [29, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x0000>, 1, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x7562>, 35, 260, 1280, b'\t4\x005\x00\x00', 0, 175, 215, 162, 27, 121, 0, -67]
2021-04-16 17:48:04 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=52 command_id=0>
2021-04-16 17:48:04 ERROR (MainThread) [zigpy.device] Failed to parse message (b'093400350000') on cluster 1280, because Data is too short to contain 1 bytes
2021-04-16 17:48:04 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x7562>, ep: 35, profile: 0x0104, cluster_id: 0x0500, data: b'093400350000'
2021-04-16 17:48:11 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 170>, 0]
2021-04-16 17:48:11 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_indication (1, 1)
2021-04-16 17:48:11 DEBUG (MainThread) [zigpy_deconz.api] Device state changed response: [<DeviceState.128|APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 170>, 0]
2021-04-16 17:48:11 DEBUG (MainThread) [zigpy_deconz.api] APS data indication response: [32, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|APSDE_DATA_INDICATION|2: 42>, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x0000>, 1, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x7562>, 35, 260, 1280, b'\t5\x005\x00\x00\x00\xff\xff', 0, 175, 223, 162, 27, 121, 0, -66]
2021-04-16 17:48:11 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=53 command_id=0>
2021-04-16 17:48:12 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] ZCL request 0x0000: [<ZoneStatus.Restore_reports|Supervision_reports|Tamper|Alarm_1: 53>, <bitmap8.0: 0>, 0, 65535]
2021-04-16 17:48:12 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] No handler for cluster command 0
2021-04-16 17:48:12 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x7562>, ep: 35, profile: 0x0104, cluster_id: 0x0500, data: b'09350035000000ffff'
2021-04-16 17:48:12 DEBUG (MainThread) [zigpy_deconz.api] Command Command.aps_data_indication (1, 1)
2021-04-16 17:48:12 DEBUG (MainThread) [zigpy_deconz.api] APS data indication response: [29, <DeviceState.APSDE_DATA_REQUEST_SLOTS_AVAILABLE|2: 34>, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x0000>, 1, <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x7562>, 35, 260, 1280, b'\t5\x005\x00\x00', 0, 175, 223, 162, 27, 121, 0, -66]
2021-04-16 17:48:12 DEBUG (MainThread) [zigpy.zcl] [0x7562:35:0x0500] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=53 command_id=0>
2021-04-16 17:48:12 ERROR (MainThread) [zigpy.device] Failed to parse message (b'093500350000') on cluster 1280, because Data is too short to contain 1 bytes
2021-04-16 17:48:12 DEBUG (MainThread) [zigpy_deconz.api] 'aps_data_indication' response from <DeconzAddress address_mode=ADDRESS_MODE.NWK address=0x7562>, ep: 35, profile: 0x0104, cluster_id: 0x0500, data: b'093500350000'

SMSZB-120

2021-04-16 17:43:50 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0500] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=61 command_id=0>
2021-04-16 17:43:50 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0500] ZCL request 0x0000: [<ZoneStatus.Restore_reports|Supervision_reports: 48>, <bitmap8.0: 0>, 0, 65535]
2021-04-16 17:43:50 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0500] No handler for cluster command 0
...
2021-04-16 17:48:50 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0500] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=62 command_id=0>
2021-04-16 17:48:50 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0500] ZCL request 0x0000: [<ZoneStatus.Restore_reports|Supervision_reports: 48>, <bitmap8.0: 0>, 0, 65535]
2021-04-16 17:48:50 DEBUG (MainThread) [zigpy.zcl] [0x17e8:35:0x0500] No handler for cluster command 0
deapstack commented 3 years ago

Hello @Veldkornet Did you find any solution? I have Frient motion and door sensors which are not working correclty. The alarm binary status does not come back to default value (no alarm) because the Frient devices awaits a ZCL defaut response message to acknowledge the alarm status. If this default response is not sent by zha, the alarm stays triggered.

deapstack commented 3 years ago

As information, here is the note about alarm reset in the Develco device technical documenation :

Note: How to clear a alarm in the “Zone status”: The sensor requests ZCL Default Response on the Zone Status Change notification, if any new Alarm bit has been set.Until the IAS CIE has acknowledged the received alarm by sending the mandated Default Response, the Alarm bits are not cleared –even if there is no longer an alarm situation on either tamper or movement. When the Default Response is received, a new Zone Status Change notification is sent with the Alarm bits cleared, if the alarm situation has disappeared since sending the Zone Status message with alarm set

Veldkornet commented 3 years ago

Unfortunately no, all of my Frient devices just report the temperature at the moment (for the sensors). Nothing else works. The switches you can at least turn on and off.

Pity...

I'm hoping that someone with ZHA knowledge and an interest in the Frient devices will come along and help out getting them supported.

deapstack commented 3 years ago

Yes, this is pity since these devices are well made.

I'll try to develop a quirck for these.

@Adminiuga , even if I can improve the integration of Frient devices, I will not be able to handle the ZCL default response issue (Frient devices awaits a ZCL default response as acknowledge). Do you have any hint for this ?

THanks

Adminiuga commented 3 years ago

Here's Tuya sending a default response on a zcl cluster command https://github.com/zigpy/zha-device-handlers/blob/eecdcb4364d5846d6635985b60765177fd7c1930/zhaquirks/tuya/__init__.py#L223

Zigpy would send default response for attribute reports

deapstack commented 3 years ago

Thanks @Adminiuga . Do you know if there is a possibility to generate "manually" the ZCL default response using ZHA?

In order to check if this commands solves the binary status locked issue before making the custom quirk,

Thanks

Adminiuga commented 3 years ago

Not with zha. The default response needs to have the same sequence number as the request.

Adminiuga commented 3 years ago

I meant with ZHA services you can't send the response, but if you modify the IASZoneChannel you could craft a default response, although currently we do not pass the ZCL header down to the channel cluster_command() listener, so you won't know if the default response was disabled. Until that is fixed, you would need to always reply, something like:

on top:

import zigpy.zcl.foundation as zcl_f

and in the IASZoneChannel

if command_id == 0:
    hdr = zcl_f.ZCLHeader.cluster(tsn, command_id, is_reply=True)
    self.send_default_rsp(hdr, status=foundation.Status.SUCCESS)
deapstack commented 3 years ago

@Adminiuga Thanks for this information.

I am totally new to this. I have some difficulties to locate the directory where I have to put custom quirks in HA OS and how to force HA to use them?

Do you have any help for that?

Thanks

deapstack commented 3 years ago

Hi, @Adminiuga @Veldkornet

By browsing custom quirks, I have found a quirk for a "develco open-close" sensor in the zhaquirks folder of my HAOS

"""Door/Windows sensors."""
from zigpy.profiles import zha
from zigpy.quirks import CustomCluster, CustomDevice
import zigpy.types as t
from zigpy.zcl.clusters.general import (
    Basic,
    BinaryInput,
    Identify,
    OnOff,
    Ota,
    PollControl,
    PowerConfiguration,
    Scenes,
    Time,
)
from zigpy.zcl.clusters.measurement import TemperatureMeasurement
from zigpy.zcl.clusters.security import IasZone

from zhaquirks.const import (
    DEVICE_TYPE,
    ENDPOINTS,
    INPUT_CLUSTERS,
    MODELS_INFO,
    OUTPUT_CLUSTERS,
    PROFILE_ID,
)
from zhaquirks.develco import DEVELCO, DevelcoPowerConfiguration

class DevelcoIASZone(CustomCluster, IasZone):
    """IAS Zone."""

    manufacturer_client_commands = {
        0x0000: (
            "status_change_notification",
            (
                IasZone.ZoneStatus,
                t.bitmap8,
                t.Optional(t.uint8_t),
                t.Optional(t.uint16_t),
            ),
            False,
        )
    }

class WISZB120(CustomDevice):
    """Custom device representing door/windows sensors."""

    signature = {
        # <SimpleDescriptor endpoint=1 profile=49353 device_type=1 device_version=1
        # input_clusters=[3, 5, 6] output_clusters=[]>
        # <SimpleDescriptor endpoint=35 profile=260 device_type=1026 device_version=0
        # input_clusters=[0, 1, 3, 15, 32, 1280] output_clusters=[10, 25]>
        # <SimpleDescriptor endpoint=38 profile=260 device_type=770 device_version=0
        # input_clusters=[0, 3, 1026] output_clusters=[3]>
        MODELS_INFO: [(DEVELCO, "WISZB-120")],
        ENDPOINTS: {
            1: {
                PROFILE_ID: 0xC0C9,
                DEVICE_TYPE: 1,
                INPUT_CLUSTERS: [
                    Identify.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            35: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.IAS_ZONE,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    PowerConfiguration.cluster_id,
                    Identify.cluster_id,
                    BinaryInput.cluster_id,
                    PollControl.cluster_id,
                    IasZone.cluster_id,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            },
            38: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.TEMPERATURE_SENSOR,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    TemperatureMeasurement.cluster_id,
                ],
                OUTPUT_CLUSTERS: [Identify.cluster_id],
            },
        },
    }

    replacement = {
        ENDPOINTS: {
            1: {
                INPUT_CLUSTERS: [
                    Identify.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            35: {
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    DevelcoPowerConfiguration,
                    Identify.cluster_id,
                    BinaryInput.cluster_id,
                    PollControl.cluster_id,
                    DevelcoIASZone,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            },
            38: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.TEMPERATURE_SENSOR,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    TemperatureMeasurement.cluster_id,
                ],
                OUTPUT_CLUSTERS: [Identify.cluster_id],
            },
        }
    }

I am not sure that it handles default response, but this can be a starting point...

Veldkornet commented 3 years ago

Ah yes, I found that too, thought I mentioned it somewhere in https://github.com/zigpy/zha-device-handlers/issues/853 ; it was added via https://github.com/zigpy/zha-device-handlers/issues/317

Anyway, even the model number is the same. I don’t know if there is a difference between the Develco vs Develco Frient version, but my guess is there’s not.

Adminiuga commented 3 years ago

I am totally new to this. I have some difficulties to locate the directory where I have to put custom quirks in HA OS and how to force HA to use them?

The changes I outlined, are for ZHA integration. You could copy zha folder into /config/custom_components/zha and run it from there (just need to add "version": "0.1.0" to manifest.json

If you go the quirk route, then check the contribution guide and afaik you could drop a new quirk in some special folder in your /config

@puddly how do you test a quirk with the latest zha changes? What was the configuration or folder name?

Adminiuga commented 3 years ago

For default response handling in quirks, there's one of Tuya s quirk that does that. Check my earlier messages

puddly commented 3 years ago

Configure the custom quirks folder:

zha:
    custom_quirks_path: /config/custom_zha_quirks/

And then download any quirk submodule (.py file) and put it in that folder. Restarting HA will get the new quirk to load.

The "old way" works better if you're editing more than a single file because the custom quirk loads constants and things like that from the main zhaquirks package. Maybe using the /config/deps/ folder is better?

deapstack commented 3 years ago

Hi,

That's useful hints, thank you. I think that I have all I need to write custom quirks. I have 3 devices from Frient (motion, door & humidity sensors), I'll try to make them all compatible.

Just one thing : Is it necessary to reset the zigbee association of the device in order to change the quirk used by ZHA? How ZHA is able to associate one custom quirk to a device? is it just with the "MODELS_INFO: [(DEVELCO, "WISZB-120")]," line ?

Thanks,

Sam

Adminiuga commented 3 years ago

You don't have to re-pair the device, just restart the ha and if the quirk match the device signature it would be applied

Adminiuga commented 3 years ago

The folder structure should look like /config/custom_components/zha/...

deapstack commented 3 years ago

Okay, I was able to use it as custom_component.

I have cloned the right issue under git, added it as a custom comp, modified the security.py and reloaded.

The (custom zha) integration is correclty loaded, but the acknowledge is not working:

2021-06-05 17:20:35 DEBUG (MainThread) [zigpy_xbee.api] _handle_explicit_rx: (00:15:bc:00:1a:01:ab:e7, 0xbcd7, 1, 1280, 0, b'096f0031000000ffff') 2021-06-05 17:20:35 DEBUG (MainThread) [zigpy.zcl] [0xbcd7:35:0x0500] ZCL deserialize: <ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=False> manufacturer=None tsn=111 command_id=0> 2021-06-05 17:20:35 DEBUG (MainThread) [zigpy.zcl] [0xbcd7:35:0x0500] ZCL request 0x0000: [<ZoneStatus.Restore_reports|Supervision_reports|Alarm_1: 49>, <bitmap8.0: 0>, 0, 65535] 2021-06-05 17:20:35 DEBUG (MainThread) [zigpy.zcl] [0xbcd7:35:0x0500] No handler for cluster command 0 2021-06-05 17:20:35 WARNING (MainThread) [zigpy.util] Error calling listener.cluster_command: 'method' object has no attribute '__name__'

Adminiuga commented 3 years ago

Can you post the changes for security.py

deapstack commented 3 years ago
@registries.ZIGBEE_CHANNEL_REGISTRY.register(security.IasZone.cluster_id)
class IASZoneChannel(ZigbeeChannel):
    """Channel for the IASZone Zigbee cluster."""

    @callback
    def cluster_command(self, tsn, command_id, args):
        """Handle commands received to this cluster."""
        if command_id == 0:
            header = zcl_f.ZCLHeader.cluster(tsn, command_id, is_reply=True)
            self.send_default_rsp(hdr=header, status=foundation.Status.SUCCESS)
            state = args[0] & 3
            self.async_send_signal(
                f"{self.unique_id}_{SIGNAL_ATTR_UPDATED}", 2, "zone_status", state
            )
            self.debug("Updated alarm state: %s", state)

        elif command_id == 1:
            self.debug("Enroll requested")
            res = self._cluster.enroll_response(0, 0)
            asyncio.create_task(res)
deapstack commented 3 years ago

issue seems to be linked with the line :

self.send_default_rsp(hdr=header, status=foundation.Status.SUCCESS)

deapstack commented 3 years ago

I have enabled zha debug log and placed some .debug lines in security.py.

Is it normal that the header, i.e output of :

zcl_f.ZCLHeader.cluster(tsn, command_id, is_reply=True)

has the following content :

<ZCLHeader frame_control=<FrameControl frame_type=CLUSTER_COMMAND manufacturer_specific=False is_reply=True disable_default_response=True> manufacturer=None tsn=55 command_id=0>

the disable_default_response is = true...

Adminiuga commented 3 years ago

Try instead

self._cluster.send_default_rsp(hdr=header, status=foundation.Status.SUCCESS)
deapstack commented 3 years ago

Ok that works.

Could you explain me why?

Adminiuga commented 3 years ago

Send_default_response is a method of a zcl Cluster instance. Original example was for the reply bro be generated by the cluster instance. Since it was moved to the channel instance (of zha component) it should have been adjusted accordingly. There's some trickery to expose most of the cluster methods at the channel methods, but iirc it works only for async methods

oppsig commented 3 years ago

I have a Develco Motion Sensor Mini (moszb-140) not a Frient but I think it is the same device. Having the same issues as @Veldkornet as far as I can tell. So if you manage to write a custom quirk I can try out on my device as well. Link to Develco Motion Sensor Mini Technical Manual

oppsig commented 3 years ago

@Adminiuga do you know of a good way to monkey patch IASZoneChannel and then change that cluster_command function from within a quirk to send the desired default response instead of cloning zha as a custom component? Not sure how I can access this class from within a quirk at all.

Another thing is that this device MOSZB-140 and probably the other develco devices has a cluster 0x0006 on the 0x01 endpoint. And those are not working as OnOff switch. The technical manual does not have any documentation about 0x01 endpoint either. I was thinking maybe groups. Like is there anyway to list unknown attributes on a spesific cluster to see what they contain?

Anyway as far as I can tell, by testing with quirk, all 3 occupancy, illuminance, temperature, and power endpoints are working fine on MOSZB-140.

Adminiuga commented 3 years ago

Why not send the response in the quirk?

silversmarty commented 3 years ago

Hello, I've just bought a frient smoke sensor, and I can't make it work with Home Assistant (abviously for the same reasons that are developed in this thread). @samuelAN-GH : if you figured out to make it work, can you detail the solution ? What's the custom quirk to be added to ZHA ?

Thanks Paul

oppsig commented 3 years ago

I've made a custom quirk for both the smoke detector and the motion detector that works for me at least. My sd card got corrupt due to some power issues so ha not running atm but managed to secure backup. Was thinking about making a pr later this week, Will imagine it works fine for frient ones aswell.

deapstack commented 3 years ago

Hi,

I have modified the zha component in order to send default zcl response when requested. This works but require to have a custom zha component. I can send you the modification if you want @silversmarty .

Nevertheless, @oppsig I am very very interested by your solution if you can manage it just by using a custom quirk!

Thanks

silversmarty commented 3 years ago

Hi,

I have modified the zha component in order to send default zcl response when requested. This works but require to have a custom zha component. I can send you the modification if you want @silversmarty .

Nevertheless, @oppsig I am very very interested by your solution if you can manage it just by using a custom quirk!

Thanks

I'm not familiar with ZCL (yet), but I'd love to have the fix, yes: Thanks a lot

deapstack commented 3 years ago

@silversmarty

You have to modify the file in custom_components\zha\core\channels\security.py

at line ~346, you should find the definition of the IASZoneChannel class. Replace the lines by these ones :

...
class IASZoneChannel(ZigbeeChannel):
    """Channel for the IASZone Zigbee cluster."""

    @callback
    def cluster_command(self, tsn, command_id, args):
        """Handle commands received to this cluster."""
        if command_id == 0:
            header = zcl_f.ZCLHeader.cluster(tsn, command_id, is_reply=True)
            self.debug("Header of the cluster cmd: %s", header)
            self.debug("Will send default ZCL response...")
            self._cluster.send_default_rsp(hdr=header, status=zcl_f.Status.SUCCESS)

            state = args[0] & 3
            self.async_send_signal(
                f"{self.unique_id}_{SIGNAL_ATTR_UPDATED}", 2, "zone_status", state
            )
            self.debug("Updated alarm state: %s", state)
        elif command_id == 1:
            self.debug("Enroll requested")
            res = self._cluster.enroll_response(0, 0)
            asyncio.create_task(res)

    async def async_configure(self):
...
silversmarty commented 3 years ago

@samuelAN-GH : I'm afraid I don't have this folder, not in my root folder (seen throught SMB) nor in config/ (seen through the File Editor addon). Should I create a /zha folder in my config/custom_components folder ?

deapstack commented 3 years ago

Hi,

You have to download zha from the home assistant repository on github, then copy the folder on your HA installation in a "custom_components" directory located on the root ;)

deapstack commented 3 years ago

Hi @oppsig , could you please share your custom quirk for these devices?

Thanks

silversmarty commented 3 years ago

Hi,

You have to download zha from the home assistant repository on github, then copy the folder on your HA installation in a "custom_components" directory located on the root ;)

thanks, but I don't understand how this "Custom ZHA" will behave with my "built-in ZHA" taht I use for all my devices... Is it possible to use the two versions side by side ?

erikkt commented 3 years ago

Anyone have a working custom quirk for this smoke detector that they are willing to share?

MattWestb commented 3 years ago

@silversmarty If installing one local quirk is overriding the installed by HA package. One example i have making one custom quirk for IKEA Styrbar and its one in HA package and is being used of the the device if not installing the local quirk. If i installing one local quirk is ZHA using the one from the custom path and not the installed by ZHA but all others quirks is being used the original from the ZHA installation.

Veldkornet commented 2 years ago

I've made a custom quirk for both the smoke detector and the motion detector that works for me at least. My sd card got corrupt due to some power issues so ha not running atm but managed to secure backup. Was thinking about making a pr later this week, Will imagine it works fine for frient ones aswell.

@oppsig Any luck with this https://github.com/home-assistant/core/issues/49127#issuecomment-909229552 ?

Stefano0042 commented 2 years ago

@oppsig I'm anxious to see your PR... :)

hansworst24 commented 2 years ago

Me too ! I've got everything connected through ZHA, and it works perfectly. Changing over to MQTT to get these nice devices 100% working would really be my last resort, because probably something elso won't work then :)

nomad-cyanide commented 2 years ago

I must admit, I have read this entire post and I am not any wiser. I have 2 SMSZB-120 Smoke detectors that are exhibiting the exact behavior in the top post. I have tried to get the firmware updated using the OTA and zigpy, but no success. All this talk about quirk, I don't understand any of it. :(

All I would like is to see battery status and use the siren by "call service" in automations. Currently this is not possible in ZHA.