zha-device-handlers: [BUG] TS0002 switched on and off as a group from HA

Describe the bug A have many 2-gang and 4-gang tuya zigbee switches. I’m connecting them to HomeAssistant using ZHA integration with Sonoff ZigBee 3.0 USB Dongle. They are identified as zhaquirks.tuya.ts000x.Switch_(2/4)G_GPP. When I press physical buttons on switch it works normal, but if I switch any single entity in HA it switches all 2 or 4 buttons together.

To Reproduce Steps to reproduce the behavior:

  1. Connect 2-gang switch to power
  2. Go to Settings > Devices & Services > “Configure” button for ZHA integration > “+ Add Device” button
  3. New device (TS0002 by _TZ3000_fvixbt4b, Quirk: zhaquirks.tuya.ts000x.Switch_2G_GPP) with two entities (both turned off) is discovered
  4. Turn on any entity
  5. Both buttons on switch clicked (relay turn on sound) and showed they turned on with light-emitting diodes
  6. In HA we see that both devices are turned on too
  7. Turn off any entity and they both turned off same way.

Expected behavior If I turn on/off single entity in HA I’m waiting to turn on/off only one button at switch

Device signature
{
  "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *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)",
  "endpoints": {
    "1": {
      "profile_id": 260,
      "device_type": "0x0100",
      "in_clusters": [
        "0x0000",
        "0x0003",
        "0x0004",
        "0x0005",
        "0x0006",
        "0xe000",
        "0xe001"
      ],
      "out_clusters": [
        "0x000a",
        "0x0019"
      ]
    },
    "2": {
      "profile_id": 260,
      "device_type": "0x0100",
      "in_clusters": [
        "0x0004",
        "0x0005",
        "0x0006",
        "0xe001"
      ],
      "out_clusters": []
    },
    "242": {
      "profile_id": 41440,
      "device_type": "0x0061",
      "in_clusters": [],
      "out_clusters": [
        "0x0021"
      ]
    }
  },
  "manufacturer": "_TZ3000_fvixbt4b",
  "model": "TS0002",
  "class": "zhaquirks.tuya.ts000x.Switch_2G_GPP"
}
Diagnostic information - this can be acquired by clicking on the "Download Diagnostics" button in the device settings
{
  "home_assistant": {
    "installation_type": "Home Assistant Container",
    "version": "2022.5.3",
    "dev": false,
    "hassio": false,
    "virtualenv": false,
    "python_version": "3.9.9",
    "docker": true,
    "arch": "armv7l",
    "timezone": "Europe/Moscow",
    "os_name": "Linux",
    "os_version": "4.1.19-v7+",
    "run_as_root": true
  },
  "custom_components": {
    "scheduler": {
      "version": "v0.0.0",
      "requirements": []
    },
    "yandex_station": {
      "version": "3.9.1",
      "requirements": []
    },
    "apple_tv": {
      "version": "3.0.1",
      "requirements": [
        "pyatv==0.10.0"
      ]
    },
    "yandex_smart_home": {
      "version": "0.4.1",
      "requirements": []
    },
    "mikrotik_router": {
      "version": "0.0.0",
      "requirements": [
        "librouteros>=3.2.0",
        "mac-vendor-lookup>=0.1.12"
      ]
    },
    "smartir": {
      "version": "1.17.6",
      "requirements": [
        "aiofiles==0.6.0"
      ]
    },
    "localtuya": {
      "version": "3.2.1",
      "requirements": []
    },
    "pyscript": {
      "version": "1.3.3",
      "requirements": [
        "croniter==1.3.4",
        "watchdog==2.1.6"
      ]
    },
    "hacs": {
      "version": "1.24.5",
      "requirements": [
        "aiogithubapi>=21.11.0"
      ]
    },
    "mikrotik_api": {
      "version": "2.0.0",
      "requirements": [
        "librouteros~=3.1"
      ]
    }
  },
  "integration_manifest": {
    "domain": "zha",
    "name": "Zigbee Home Automation",
    "config_flow": true,
    "documentation": "https://www.home-assistant.io/integrations/zha",
    "requirements": [
      "bellows==0.29.0",
      "pyserial==3.5",
      "pyserial-asyncio==0.6",
      "zha-quirks==0.0.73",
      "zigpy-deconz==0.16.0",
      "zigpy==0.45.1",
      "zigpy-xbee==0.14.0",
      "zigpy-zigate==0.7.4",
      "zigpy-znp==0.7.0"
    ],
    "usb": [
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*2652*",
        "known_devices": [
          "slae.sh cc2652rb stick"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*sonoff*plus*",
        "known_devices": [
          "sonoff zigbee dongle plus"
        ]
      },
      {
        "vid": "10C4",
        "pid": "EA60",
        "description": "*tubeszb*",
        "known_devices": [
          "TubesZB Coordinator"
        ]
      },
      {
        "vid": "1A86",
        "pid": "7523",
        "description": "*tubeszb*",
        "known_devices": [
          "TubesZB Coordinator"
        ]
      },
      {
        "vid": "1A86",
        "pid": "7523",
        "description": "*zigstar*",
        "known_devices": [
          "ZigStar Coordinators"
        ]
      },
      {
        "vid": "1CF1",
        "pid": "0030",
        "description": "*conbee*",
        "known_devices": [
          "Conbee II"
        ]
      },
      {
        "vid": "10C4",
        "pid": "8A2A",
        "description": "*zigbee*",
        "known_devices": [
          "Nortek HUSBZB-1"
        ]
      },
      {
        "vid": "10C4",
        "pid": "8B34",
        "description": "*bv 2010/10*",
        "known_devices": [
          "Bitron Video AV2010/10"
        ]
      }
    ],
    "codeowners": [
      "@dmulcahey",
      "@adminiuga"
    ],
    "zeroconf": [
      {
        "type": "_esphomelib._tcp.local.",
        "name": "tube*"
      }
    ],
    "after_dependencies": [
      "usb",
      "zeroconf"
    ],
    "iot_class": "local_polling",
    "loggers": [
      "aiosqlite",
      "bellows",
      "crccheck",
      "pure_pcapy3",
      "zhaquirks",
      "zigpy",
      "zigpy_deconz",
      "zigpy_xbee",
      "zigpy_zigate",
      "zigpy_znp"
    ],
    "is_built_in": true
  },
  "data": {
    "ieee": "**REDACTED**",
    "nwk": 9594,
    "manufacturer": "_TZ3000_fvixbt4b",
    "model": "TS0002",
    "name": "_TZ3000_fvixbt4b TS0002",
    "quirk_applied": true,
    "quirk_class": "zhaquirks.tuya.ts000x.Switch_2G_GPP",
    "manufacturer_code": 4417,
    "power_source": "Mains",
    "lqi": 36,
    "rssi": null,
    "last_seen": "2022-05-23T23:29:24",
    "available": true,
    "device_type": "Router",
    "signature": {
      "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4417, maximum_buffer_size=66, maximum_incoming_transfer_size=66, server_mask=10752, maximum_outgoing_transfer_size=66, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *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)",
      "endpoints": {
        "1": {
          "profile_id": 260,
          "device_type": "0x0100",
          "in_clusters": [
            "0x0000",
            "0x0003",
            "0x0004",
            "0x0005",
            "0x0006",
            "0xe000",
            "0xe001"
          ],
          "out_clusters": [
            "0x000a",
            "0x0019"
          ]
        },
        "2": {
          "profile_id": 260,
          "device_type": "0x0100",
          "in_clusters": [
            "0x0004",
            "0x0005",
            "0x0006",
            "0xe001"
          ],
          "out_clusters": []
        },
        "242": {
          "profile_id": 41440,
          "device_type": "0x0061",
          "in_clusters": [],
          "out_clusters": [
            "0x0021"
          ]
        }
      }
    },
    "entities": [
      {
        "entity_id": "button.tz3000_fvixbt4b_ts0002_12e3d3f8_identify",
        "name": "_TZ3000_fvixbt4b TS0002"
      },
      {
        "entity_id": "light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off",
        "name": "_TZ3000_fvixbt4b TS0002"
      },
      {
        "entity_id": "light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off_2",
        "name": "_TZ3000_fvixbt4b TS0002"
      }
    ],
    "neighbors": [],
    "endpoint_names": [
      {
        "name": "ON_OFF_LIGHT"
      },
      {
        "name": "ON_OFF_LIGHT"
      },
      {
        "name": "unknown 97 device_type of 0xa1e0 profile id"
      }
    ],
    "user_given_name": null,
    "device_reg_id": "74708c94fb7b5f6b4731f6d6b918b9e0",
    "area_id": null
  }
}
Logs of turning on entity from HA
2022-05-23 23:37:26 DEBUG (MainThread) [zigpy_znp.api] Sending request: SYS.Ping.Req()
2022-05-23 23:37:26 DEBUG (MainThread) [zigpy_znp.api] Received command: SYS.Ping.Rsp(Capabilities=<MTCapabilities.APP_CNF|GP|UTIL|ZDO|AF|SYS: 1625>)
2022-05-23 23:37:28 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event call_service[L]: domain=light, service=turn_on, service_data=entity_id=light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off>
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, is_reply=0, disable_default_response=0, reserved=0, *is_cluster=True, *is_general=False), tsn=25, command_id=1, *is_reply=False)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Sending request: on()
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy_znp.api] Sending request: AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x257A), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=25, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK|ACK_REQUEST: 48>, Radius=30, Data=b'\x01\x19\x01')
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataConfirm.Callback(Status=<Status.SUCCESS: 0>, Endpoint=1, TSN=25)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=63, SecurityUse=<Bool.false: 0>, TimeStamp=7174501, TSN=0, Data=b'\x18\x19\x0B\x01\x00', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=63, SecurityUse=<Bool.false: 0>, TimeStamp=7174684, TSN=0, Data=b'\x18\xC4\x0A\x00\x00\x10\x01', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=63, SecurityUse=<Bool.false: 0>, TimeStamp=7174936, TSN=0, Data=b'\x18\xC6\x0A\x00\x00\x10\x01', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=2, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=60, SecurityUse=<Bool.false: 0>, TimeStamp=7175149, TSN=0, Data=b'\x18\xC7\x0A\x00\x00\x10\x01', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received ZCL frame: b'\x18\xC6\x0A\x00\x00\x10\x01'
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=198, command_id=10, *is_reply=True)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.true: 1>))])
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received command 0x0A (TSN 198): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.true: 1>))])
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Attribute report received: on_off=<Bool.true: 1>
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Received ZCL frame: b'\x18\xC7\x0A\x00\x00\x10\x01'
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=199, command_id=10, *is_reply=True)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.true: 1>))])
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Received command 0x0A (TSN 199): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.true: 1>))])
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Attribute report received: on_off=<Bool.true: 1>
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received ZCL frame: b'\x18\x19\x0B\x01\x00'
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=25, command_id=11, *is_reply=True)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Default_Response(command_id=1, status=<Status.SUCCESS: 0>)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received ZCL frame: b'\x18\xC4\x0A\x00\x00\x10\x01'
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=196, command_id=10, *is_reply=True)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.true: 1>))])
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received command 0x0A (TSN 196): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.true: 1>))])
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Attribute report received: on_off=<Bool.true: 1>
2022-05-23 23:37:28 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off, old_state=<state light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off=off; supported_color_modes=[<ColorMode.ONOFF: 'onoff'>], off_brightness=None, friendly_name=_TZ3000_fvixbt4b TS0002 12e3d3f8 on_off, supported_features=8 @ 2022-05-23T23:37:15.593513+03:00>, new_state=<state light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off=on; supported_color_modes=[<ColorMode.ONOFF: 'onoff'>], color_mode=onoff, off_brightness=None, friendly_name=_TZ3000_fvixbt4b TS0002 12e3d3f8 on_off, supported_features=8 @ 2022-05-23T23:37:28.739260+03:00>>
2022-05-23 23:37:28 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off_2, old_state=<state light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off_2=off; supported_color_modes=[<ColorMode.ONOFF: 'onoff'>], off_brightness=None, friendly_name=_TZ3000_fvixbt4b TS0002 12e3d3f8 on_off, supported_features=8 @ 2022-05-23T21:44:23.517751+03:00>, new_state=<state light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off_2=on; supported_color_modes=[<ColorMode.ONOFF: 'onoff'>], color_mode=onoff, off_brightness=None, friendly_name=_TZ3000_fvixbt4b TS0002 12e3d3f8 on_off, supported_features=8 @ 2022-05-23T23:37:28.743883+03:00>>
2022-05-23 23:37:28 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x257A:1:0x0006]: executed 'on' command with args: '()' kwargs: '{}' result: Default_Response(command_id=1, status=<Status.SUCCESS: 0>)
2022-05-23 23:37:28 DEBUG (MainThread) [homeassistant.components.zha.entity] light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off: turned on: {'on_off': Default_Response(command_id=1, status=<Status.SUCCESS: 0>)}
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=2, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=66, SecurityUse=<Bool.false: 0>, TimeStamp=7187821, TSN=0, Data=b'\x18\xC5\x0A\x00\x00\x10\x01', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Received ZCL frame: b'\x18\xC5\x0A\x00\x00\x10\x01'
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=197, command_id=10, *is_reply=True)
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.true: 1>))])
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Received command 0x0A (TSN 197): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.true: 1>))])
2022-05-23 23:37:28 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Attribute report received: on_off=<Bool.true: 1>
Logs of turning off entity from HA
2022-05-23 23:38:42 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event call_service[L]: domain=light, service=turn_off, service_data=entity_id=light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off>
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Sending request header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.CLUSTER_COMMAND: 1>, is_manufacturer_specific=False, is_reply=0, disable_default_response=0, reserved=0, *is_cluster=True, *is_general=False), tsn=26, command_id=0, *is_reply=False)
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Sending request: off()
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy_znp.api] Sending request: AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x257A), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=26, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK|ACK_REQUEST: 48>, Radius=30, Data=b'\x01\x1A\x00')
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy_znp.api] Received command: ZDO.SrcRtgInd.Callback(DstAddr=0x257A, Relays=[])
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataConfirm.Callback(Status=<Status.SUCCESS: 0>, Endpoint=1, TSN=26)
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=60, SecurityUse=<Bool.false: 0>, TimeStamp=11812600, TSN=0, Data=b'\x18\x1A\x0B\x00\x00', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=60, SecurityUse=<Bool.false: 0>, TimeStamp=11812782, TSN=0, Data=b'\x18\xC8\x0A\x00\x00\x10\x00', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=60, SecurityUse=<Bool.false: 0>, TimeStamp=11813053, TSN=0, Data=b'\x18\xCA\x0A\x00\x00\x10\x00', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=2, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=60, SecurityUse=<Bool.false: 0>, TimeStamp=11813263, TSN=0, Data=b'\x18\xCB\x0A\x00\x00\x10\x00', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received ZCL frame: b'\x18\xCA\x0A\x00\x00\x10\x00'
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=202, command_id=10, *is_reply=True)
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received command 0x0A (TSN 202): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Attribute report received: on_off=<Bool.false: 0>
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Received ZCL frame: b'\x18\xCB\x0A\x00\x00\x10\x00'
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=203, command_id=10, *is_reply=True)
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Received command 0x0A (TSN 203): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Attribute report received: on_off=<Bool.false: 0>
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received ZCL frame: b'\x18\x1A\x0B\x00\x00'
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=26, command_id=11, *is_reply=True)
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Default_Response(command_id=0, status=<Status.SUCCESS: 0>)
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received ZCL frame: b'\x18\xC8\x0A\x00\x00\x10\x00'
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=200, command_id=10, *is_reply=True)
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received command 0x0A (TSN 200): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:38:42 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Attribute report received: on_off=<Bool.false: 0>
2022-05-23 23:38:42 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off, old_state=<state light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off=on; supported_color_modes=[<ColorMode.ONOFF: 'onoff'>], color_mode=onoff, off_brightness=None, friendly_name=_TZ3000_fvixbt4b TS0002 12e3d3f8 on_off, supported_features=8 @ 2022-05-23T23:37:28.739260+03:00>, new_state=<state light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off=off; supported_color_modes=[<ColorMode.ONOFF: 'onoff'>], off_brightness=None, friendly_name=_TZ3000_fvixbt4b TS0002 12e3d3f8 on_off, supported_features=8 @ 2022-05-23T23:38:42.933074+03:00>>
2022-05-23 23:38:42 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off_2, old_state=<state light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off_2=on; supported_color_modes=[<ColorMode.ONOFF: 'onoff'>], color_mode=onoff, off_brightness=None, friendly_name=_TZ3000_fvixbt4b TS0002 12e3d3f8 on_off, supported_features=8 @ 2022-05-23T23:37:28.743883+03:00>, new_state=<state light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off_2=off; supported_color_modes=[<ColorMode.ONOFF: 'onoff'>], off_brightness=None, friendly_name=_TZ3000_fvixbt4b TS0002 12e3d3f8 on_off, supported_features=8 @ 2022-05-23T23:38:42.940437+03:00>>
2022-05-23 23:38:42 DEBUG (MainThread) [homeassistant.components.zha.core.channels.base] [0x257A:1:0x0006]: executed 'off' command with args: '()' kwargs: '{}' result: Default_Response(command_id=0, status=<Status.SUCCESS: 0>)
2022-05-23 23:38:42 DEBUG (MainThread) [homeassistant.components.zha.entity] light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off: turned off: Default_Response(command_id=0, status=<Status.SUCCESS: 0>)
2022-05-23 23:38:43 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=2, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=54, SecurityUse=<Bool.false: 0>, TimeStamp=11825376, TSN=0, Data=b'\x18\xC9\x0A\x00\x00\x10\x00', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:38:43 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Received ZCL frame: b'\x18\xC9\x0A\x00\x00\x10\x00'
2022-05-23 23:38:43 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=201, command_id=10, *is_reply=True)
2022-05-23 23:38:43 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:38:43 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Received command 0x0A (TSN 201): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:38:43 DEBUG (MainThread) [zigpy.zcl] [0x257A:2:0x0006] Attribute report received: on_off=<Bool.false: 0>
Logs of turning on entity by physical button
2022-05-23 23:38:56 DEBUG (MainThread) [zigpy_znp.api] Sending request: SYS.Ping.Req()
2022-05-23 23:38:56 DEBUG (MainThread) [zigpy_znp.api] Received command: SYS.Ping.Rsp(Capabilities=<MTCapabilities.APP_CNF|GP|UTIL|ZDO|AF|SYS: 1625>)
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=15, SecurityUse=<Bool.false: 0>, TimeStamp=12714837, TSN=0, Data=b'\x08\xCC\x0A\x00\x00\x10\x01', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=15, SecurityUse=<Bool.false: 0>, TimeStamp=12715023, TSN=0, Data=b'\x18\xCD\x0A\x00\x00\x10\x01', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received ZCL frame: b'\x08\xCC\x0A\x00\x00\x10\x01'
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True), tsn=204, command_id=10, *is_reply=True)
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.true: 1>))])
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received command 0x0A (TSN 204): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.true: 1>))])
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Attribute report received: on_off=<Bool.true: 1>
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Sending reply header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=204, command_id=<GeneralCommand.Default_Response: 11>, *is_reply=True)
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Sending reply: Default_Response(command_id=10, status=<Status.SUCCESS: 0>)
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received ZCL frame: b'\x18\xCD\x0A\x00\x00\x10\x01'
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=205, command_id=10, *is_reply=True)
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.true: 1>))])
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received command 0x0A (TSN 205): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.true: 1>))])
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Attribute report received: on_off=<Bool.true: 1>
2022-05-23 23:38:57 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off, old_state=<state light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off=off; supported_color_modes=[<ColorMode.ONOFF: 'onoff'>], off_brightness=None, friendly_name=_TZ3000_fvixbt4b TS0002 12e3d3f8 on_off, supported_features=8 @ 2022-05-23T23:38:42.933074+03:00>, new_state=<state light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off=on; supported_color_modes=[<ColorMode.ONOFF: 'onoff'>], color_mode=onoff, off_brightness=None, friendly_name=_TZ3000_fvixbt4b TS0002 12e3d3f8 on_off, supported_features=8 @ 2022-05-23T23:38:57.335885+03:00>>
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy_znp.api] Sending request: AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x257A), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=204, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=30, Data=b'\x18\xCC\x0B\x0A\x00')
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
2022-05-23 23:38:57 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataConfirm.Callback(Status=<Status.SUCCESS: 0>, Endpoint=1, TSN=204)
2022-05-23 23:39:00 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event pyscript_running[L]: name=file_mikrotik_status_sync, entity_id=pyscript.file_mikrotik_status_sync, func_args=trigger_type=time, trigger_time=2022-05-23T23:39:00+03:00>
Logs of turning off entity by physical button
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=51, SecurityUse=<Bool.false: 0>, TimeStamp=13772587, TSN=0, Data=b'\x08\xCE\x0A\x00\x00\x10\x00', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=48, SecurityUse=<Bool.false: 0>, TimeStamp=13772774, TSN=0, Data=b'\x18\xCF\x0A\x00\x00\x10\x00', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received ZCL frame: b'\x08\xCE\x0A\x00\x00\x10\x00'
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True), tsn=206, command_id=10, *is_reply=True)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received command 0x0A (TSN 206): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Attribute report received: on_off=<Bool.false: 0>
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Sending reply header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=206, command_id=<GeneralCommand.Default_Response: 11>, *is_reply=True)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Sending reply: Default_Response(command_id=10, status=<Status.SUCCESS: 0>)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received ZCL frame: b'\x18\xCF\x0A\x00\x00\x10\x00'
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=207, command_id=10, *is_reply=True)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received command 0x0A (TSN 207): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Attribute report received: on_off=<Bool.false: 0>
2022-05-23 23:39:14 DEBUG (MainThread) [homeassistant.core] Bus:Handling <Event state_changed[L]: entity_id=light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off, old_state=<state light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off=on; supported_color_modes=[<ColorMode.ONOFF: 'onoff'>], color_mode=onoff, off_brightness=None, friendly_name=_TZ3000_fvixbt4b TS0002 12e3d3f8 on_off, supported_features=8 @ 2022-05-23T23:38:57.335885+03:00>, new_state=<state light.tz3000_fvixbt4b_ts0002_12e3d3f8_on_off=off; supported_color_modes=[<ColorMode.ONOFF: 'onoff'>], off_brightness=None, friendly_name=_TZ3000_fvixbt4b TS0002 12e3d3f8 on_off, supported_features=8 @ 2022-05-23T23:39:14.260182+03:00>>
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy_znp.api] Sending request: AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x257A), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=206, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=30, Data=b'\x18\xCE\x0B\x0A\x00')
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataConfirm.Callback(Status=<Status.SUCCESS: 0>, Endpoint=1, TSN=206)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.IncomingMsg.Callback(GroupId=0x0000, ClusterId=6, SrcAddr=0x257A, SrcEndpoint=1, DstEndpoint=1, WasBroadcast=<Bool.false: 0>, LQI=33, SecurityUse=<Bool.false: 0>, TimeStamp=13785899, TSN=0, Data=b'\x08\xCE\x0A\x00\x00\x10\x00', MacSrcAddr=0x257A, MsgResultRadius=29)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received ZCL frame: b'\x08\xCE\x0A\x00\x00\x10\x00'
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=0, is_reply=1, disable_default_response=0, reserved=0, *is_cluster=False, *is_general=True), tsn=206, command_id=10, *is_reply=True)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Decoded ZCL frame: TuyaZBOnOffAttributeCluster:Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Received command 0x0A (TSN 206): Report_Attributes(attribute_reports=[Attribute(attrid=0x0000, value=TypeValue(type=Bool, value=<Bool.false: 0>))])
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Attribute report received: on_off=<Bool.false: 0>
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Sending reply header: ZCLHeader(frame_control=FrameControl(frame_type=<FrameType.GLOBAL_COMMAND: 0>, is_manufacturer_specific=False, is_reply=1, disable_default_response=1, reserved=0, *is_cluster=False, *is_general=True), tsn=206, command_id=<GeneralCommand.Default_Response: 11>, *is_reply=True)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy.zcl] [0x257A:1:0x0006] Sending reply: Default_Response(command_id=10, status=<Status.SUCCESS: 0>)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy_znp.api] Sending request: AF.DataRequestExt.Req(DstAddrModeAddress=AddrModeAddress(mode=<AddrMode.NWK: 2>, address=0x257A), DstEndpoint=1, DstPanId=0x0000, SrcEndpoint=1, ClusterId=6, TSN=206, Options=<TransmitOptions.SUPPRESS_ROUTE_DISC_NETWORK: 32>, Radius=30, Data=b'\x18\xCE\x0B\x0A\x00')
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataRequestExt.Rsp(Status=<Status.SUCCESS: 0>)
2022-05-23 23:39:14 DEBUG (MainThread) [zigpy_znp.api] Received command: AF.DataConfirm.Callback(Status=<Status.SUCCESS: 0>, Endpoint=1, TSN=206)

Additional context Here is switch that I’m testing: https://aliexpress.ru/item/1005003479909650.html I’m using this sonoff zigbee dongle: https://aliexpress.ru/item/1005003763454756.html I have home Assistant Core 2022.5.3 installed with docker homeassistant/raspberrypi2-homeassistant

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 23 (14 by maintainers)

Commits related to this issue

Most upvoted comments

🤦‍♂️ it was my mistake, thanks a lot!

@IIIEII could you test with a local quirk? There is a modified version of tx000x.py:

tx000x.py
"""tuya TS000X Switches."""

import asyncio

from zigpy.profiles import zha
from zigpy.quirks import CustomDevice
from zigpy.zcl.clusters.general import (
    Basic,
    GreenPowerProxy,
    Groups,
    Identify,
    OnOff,
    Ota,
    Scenes,
    Time,
)

from zhaquirks.const import (
    DEVICE_TYPE,
    ENDPOINTS,
    INPUT_CLUSTERS,
    MODEL,
    OUTPUT_CLUSTERS,
    PROFILE_ID,
)
from zhaquirks.tuya import (
    TuyaZBE000Cluster,
    TuyaZBExternalSwitchTypeCluster,
    TuyaZBOnOffAttributeCluster,
)


class Switch_1G_GPP(CustomDevice):
    """Tuya 1 gang switch module with restore power state support."""

    signature = {
        MODEL: "TS0001",
        ENDPOINTS: {
            # <SimpleDescriptor endpoint=1 profile=266 device_type=256
            # device_version=1
            # input_clusters=[0, 3, 4, 5, 6, 57344, 57345]
            # output_clusters=[10, 25]>
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                    TuyaZBE000Cluster.cluster_id,
                    TuyaZBExternalSwitchTypeCluster.cluster_id,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            },
            # <SimpleDescriptor endpoint=242 profile=41440 device_type=97
            # device_version=1
            # input_clusters=[]
            # output_clusters=[33]>
            242: {
                PROFILE_ID: 41440,
                DEVICE_TYPE: 97,
                INPUT_CLUSTERS: [],
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
            },
        },
    }
    replacement = {
        ENDPOINTS: {
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    TuyaZBOnOffAttributeCluster,
                    TuyaZBE000Cluster,
                    TuyaZBExternalSwitchTypeCluster,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            },
        },
    }


class TuyaMagicSpell(CustomDevice):
    """Cast a magic spell for Tuya devices that needed."""

    def __init__(self, *args, **kwargs):
        """Initialize with task."""
        super().__init__(*args, **kwargs)

        # cast_tuya_magic_spell(self, tries=3)
        self._init_plug_task = asyncio.create_task(self.spell())

    async def spell(self) -> None:
        """Initialize device so that all endpoints become available."""
        basic_cluster = self.endpoints[1].in_clusters[0]

        self.debug("Device class will cast Tuya Magic Spell")
        attr_to_read = [4, 0, 1, 5, 7, 0xFFFE]
        await basic_cluster.read_attributes(attr_to_read)


class Switch_2G_GPP(TuyaMagicSpell, CustomDevice):
    """Tuya 2 gang switch module with restore power state support."""

    signature = {
        MODEL: "TS0002",
        ENDPOINTS: {
            # <SimpleDescriptor endpoint=1 profile=260 device_type=256
            # device_version=1
            # input_clusters=[0, 3, 4, 5, 6, 57344, 57345]
            # output_clusters=[10, 25]>
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                    TuyaZBE000Cluster.cluster_id,
                    TuyaZBExternalSwitchTypeCluster.cluster_id,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            },
            # <SimpleDescriptor endpoint=2 profile=260 device_type=256
            # device_version=1
            # input_clusters=[4, 5, 6, 57345]
            # output_clusters=[]>
            2: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                    TuyaZBExternalSwitchTypeCluster.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            # <SimpleDescriptor endpoint=242 profile=41440 device_type=97
            # device_version=0
            # input_clusters=[]
            # output_clusters=[33]>
            242: {
                PROFILE_ID: 41440,
                DEVICE_TYPE: 97,
                INPUT_CLUSTERS: [],
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
            },
        },
    }
    replacement = {
        ENDPOINTS: {
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    TuyaZBOnOffAttributeCluster,
                    TuyaZBE000Cluster,
                    TuyaZBExternalSwitchTypeCluster,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            },
            2: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    TuyaZBOnOffAttributeCluster,
                    TuyaZBExternalSwitchTypeCluster,
                ],
                OUTPUT_CLUSTERS: [],
            },
            242: {
                PROFILE_ID: 41440,
                DEVICE_TYPE: 97,
                INPUT_CLUSTERS: [],
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
            },
        },
    }


class Switch_3G_GPP(CustomDevice):
    """Tuya 3 gang switch module with restore power state support."""

    signature = {
        MODEL: "TS0003",
        ENDPOINTS: {
            # <SimpleDescriptor endpoint=1 profile=260 device_type=256
            # device_version=1
            # input_clusters=[0, 3, 4, 5, 6, 57344, 57345]
            # output_clusters=[10, 25]>
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                    TuyaZBE000Cluster.cluster_id,
                    TuyaZBExternalSwitchTypeCluster.cluster_id,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            },
            # <SimpleDescriptor endpoint=2 profile=260 device_type=256
            # device_version=1
            # input_clusters=[4, 5, 6, 57345]
            # output_clusters=[]>
            2: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                    TuyaZBExternalSwitchTypeCluster.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            # <SimpleDescriptor endpoint=3 profile=260 device_type=256
            # device_version=1
            # input_clusters=[4, 5, 6, 57345]
            # output_clusters=[]>
            3: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                    TuyaZBExternalSwitchTypeCluster.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            # <SimpleDescriptor endpoint=242 profile=41440 device_type=97
            # device_version=0
            # input_clusters=[]
            # output_clusters=[33]>
            242: {
                PROFILE_ID: 41440,
                DEVICE_TYPE: 97,
                INPUT_CLUSTERS: [],
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
            },
        },
    }
    replacement = {
        ENDPOINTS: {
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    TuyaZBOnOffAttributeCluster,
                    TuyaZBE000Cluster,
                    TuyaZBExternalSwitchTypeCluster,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            },
            2: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    TuyaZBOnOffAttributeCluster,
                    TuyaZBExternalSwitchTypeCluster,
                ],
                OUTPUT_CLUSTERS: [],
            },
            3: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    TuyaZBOnOffAttributeCluster,
                    TuyaZBExternalSwitchTypeCluster,
                ],
                OUTPUT_CLUSTERS: [],
            },
            242: {
                PROFILE_ID: 41440,
                DEVICE_TYPE: 97,
                INPUT_CLUSTERS: [],
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
            },
        },
    }


class Switch_4G_GPP(CustomDevice):
    """Tuya 4 gang switch module with restore power state support."""

    signature = {
        MODEL: "TS0004",
        ENDPOINTS: {
            # <SimpleDescriptor endpoint=1 profile=260 device_type=256
            # device_version=1
            # input_clusters=[0, 3, 4, 5, 6, 57344, 57345]
            # output_clusters=[10, 25]>
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                    TuyaZBE000Cluster.cluster_id,
                    TuyaZBExternalSwitchTypeCluster.cluster_id,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            },
            # <SimpleDescriptor endpoint=2 profile=260 device_type=256
            # device_version=1
            # input_clusters=[4, 5, 6, 57345]
            # output_clusters=[]>
            2: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                    TuyaZBExternalSwitchTypeCluster.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            # <SimpleDescriptor endpoint=3 profile=260 device_type=256
            # device_version=1
            # input_clusters=[4, 5, 6, 57345]
            # output_clusters=[]>
            3: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                    TuyaZBExternalSwitchTypeCluster.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            # <SimpleDescriptor endpoint=3 profile=260 device_type=256
            # device_version=1
            # input_clusters=[4, 5, 6, 57345]
            # output_clusters=[]>
            4: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    OnOff.cluster_id,
                    TuyaZBExternalSwitchTypeCluster.cluster_id,
                ],
                OUTPUT_CLUSTERS: [],
            },
            # <SimpleDescriptor endpoint=242 profile=41440 device_type=97
            # device_version=0
            # input_clusters=[]
            # output_clusters=[33]>
            242: {
                PROFILE_ID: 41440,
                DEVICE_TYPE: 97,
                INPUT_CLUSTERS: [],
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
            },
        },
    }
    replacement = {
        ENDPOINTS: {
            1: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Basic.cluster_id,
                    Identify.cluster_id,
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    TuyaZBOnOffAttributeCluster,
                    TuyaZBE000Cluster,
                    TuyaZBExternalSwitchTypeCluster,
                ],
                OUTPUT_CLUSTERS: [Time.cluster_id, Ota.cluster_id],
            },
            2: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    TuyaZBOnOffAttributeCluster,
                    TuyaZBExternalSwitchTypeCluster,
                ],
                OUTPUT_CLUSTERS: [],
            },
            3: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    TuyaZBOnOffAttributeCluster,
                    TuyaZBExternalSwitchTypeCluster,
                ],
                OUTPUT_CLUSTERS: [],
            },
            4: {
                PROFILE_ID: zha.PROFILE_ID,
                DEVICE_TYPE: zha.DeviceType.ON_OFF_LIGHT,
                INPUT_CLUSTERS: [
                    Groups.cluster_id,
                    Scenes.cluster_id,
                    TuyaZBOnOffAttributeCluster,
                    TuyaZBExternalSwitchTypeCluster,
                ],
                OUTPUT_CLUSTERS: [],
            },
            242: {
                PROFILE_ID: 41440,
                DEVICE_TYPE: 97,
                INPUT_CLUSTERS: [],
                OUTPUT_CLUSTERS: [GreenPowerProxy.cluster_id],
            },
        },
    }

If you are not familiar with, there are some guides here to install local quirk:

At least one newly added 4-gang switch works well. I’m gonna continue tests to identify when it works and when not.