Some of the only remaining Zigbee devices I have are TS0301 roller shades. Just kind of sick of the perpetual chasing clear space in a crowded spectrum for Zigbee when I cannot control my neighbors Wi-Fi…so until I hardwire replacement I have three of these and the Zigbee coordinator is about 4 feet from them, LQI/RSSI is fine. They respond fine.
The issue is that the battery and position are not reported well. As I said, they respond fine, but they report the wrong battery and rarely report back the right position. I am wondering if anyone has any idea how to make a quirk and if it might help. I have tried to follow various how-tos but no luck in improving the situation. I started with trying to get the batter to report right - there is clearly a parameter that is called battery percentage, but no matter what I do ZHA wont grab that variable.
Anyone out there who knows something about this know if this is even worth figuring out? will it improve?
command: scan_device
command_data: null
start_time: "2025-10-22T21:08:09.552645+00:00"
errors: []
params:
dir: 0
tries: 1
expect_reply: true
args: []
kwargs: {}
event_success: scan_device_success
event_fail: scan_device_fail
read_before_write: true
read_after_write: true
scan:
ieee:
nwk: "0xeda3"
model: TS0301
manufacturer: _TZE210_h3l0cjqb
manufacturer_id: "0x4098"
endpoints:
- id: 1
device_type: "0x0202"
profile: "0x0104"
in_clusters:
"0x0000":
cluster_id: "0x0000"
title: Basic
name: basic
attributes:
"0x0000":
attribute_id: "0x0000"
attribute_name: zcl_version
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 3
"0x0001":
attribute_id: "0x0001"
attribute_name: app_version
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 66
"0x0002":
attribute_id: "0x0002"
attribute_name: stack_version
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 1
"0x0003":
attribute_id: "0x0003"
attribute_name: hw_version
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 1
"0x0004":
attribute_id: "0x0004"
attribute_name: manufacturer
value_type:
- "0x42"
- CharacterString
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: _TZE210_h3l0cjqb
"0x0005":
attribute_id: "0x0005"
attribute_name: model
value_type:
- "0x42"
- CharacterString
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: TS0301
"0x0006":
attribute_id: "0x0006"
attribute_name: date_code
value_type:
- "0x42"
- CharacterString
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: ""
"0x0007":
attribute_id: "0x0007"
attribute_name: power_source
value_type:
- "0x30"
- enum8
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: 3
"0xffde":
attribute_id: "0xffde"
attribute_name: "65502"
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|WRITE|REPORT
access_acl: 7
"0xffe0":
attribute_id: "0xffe0"
attribute_name: "65504"
value_type:
- "0x48"
- Array
- Discrete
access: READ|REPORT
access_acl: 5
"0xffe1":
attribute_id: "0xffe1"
attribute_name: "65505"
value_type:
- "0x48"
- Array
- Discrete
access: READ|REPORT
access_acl: 5
"0xffe2":
attribute_id: "0xffe2"
attribute_name: "65506"
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|REPORT
access_acl: 5
"0xffe3":
attribute_id: "0xffe3"
attribute_name: "65507"
value_type:
- "0x42"
- CharacterString
- Discrete
access: READ|REPORT
access_acl: 5
"0xfffd":
attribute_id: "0xfffd"
attribute_name: cluster_revision
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
"0xfffe":
attribute_id: "0xfffe"
attribute_name: reporting_status
value_type:
- "0x30"
- enum8
- Discrete
access: READ|REPORT
access_acl: 5
commands_received:
"0x00":
command_id: "0x00"
command_name: reset_fact_default
command_arguments: <class 'zigpy.zcl.foundation.reset_fact_default'>
commands_generated: {}
"0x0001":
cluster_id: "0x0001"
title: Power Configuration
name: power
attributes:
"0x0000":
attribute_id: "0x0000"
attribute_name: mains_voltage
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0020":
attribute_id: "0x0020"
attribute_name: battery_voltage
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0021":
attribute_id: "0x0021"
attribute_name: battery_percentage_remaining
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 68
"0xfffd":
attribute_id: "0xfffd"
attribute_name: cluster_revision
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 1
commands_received: {}
commands_generated: {}
"0x0003":
cluster_id: "0x0003"
title: Identify
name: identify
attributes:
"0x0000":
attribute_id: "0x0000"
attribute_name: identify_time
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|WRITE|REPORT
access_acl: 7
attribute_value: 0
"0xfffd":
attribute_id: "0xfffd"
attribute_name: cluster_revision
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 1
commands_received:
"0x00":
command_id: "0x00"
command_name: identify
command_arguments: <class 'zigpy.zcl.foundation.identify'>
"0x01":
command_id: "0x01"
command_name: identify_query
command_arguments: <class 'zigpy.zcl.foundation.identify_query'>
commands_generated:
"0x00":
command_id: "0x00"
command_name: identify_query_response
command_args: <class 'zigpy.zcl.foundation.identify_query_response'>
"0x0004":
cluster_id: "0x0004"
title: Groups
name: groups
attributes:
"0x0000":
attribute_id: "0x0000"
attribute_name: name_support
value_type:
- "0x18"
- bitmap8
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0xfffd":
attribute_id: "0xfffd"
attribute_name: cluster_revision
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 2
commands_received: {}
commands_generated: {}
"0x0005":
cluster_id: "0x0005"
title: Scenes
name: scenes
attributes:
"0x0000":
attribute_id: "0x0000"
attribute_name: count
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0001":
attribute_id: "0x0001"
attribute_name: current_scene
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0002":
attribute_id: "0x0002"
attribute_name: current_group
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0003":
attribute_id: "0x0003"
attribute_name: scene_valid
value_type:
- "0x10"
- Bool
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0004":
attribute_id: "0x0004"
attribute_name: name_support
value_type:
- "0x18"
- bitmap8
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0xfffd":
attribute_id: "0xfffd"
attribute_name: cluster_revision
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 2
commands_received: {}
commands_generated: {}
"0x0102":
cluster_id: "0x0102"
title: Window Covering
name: window_covering
attributes:
"0x0000":
attribute_id: "0x0000"
attribute_name: window_covering_type
value_type:
- "0x30"
- enum8
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0001":
attribute_id: "0x0001"
attribute_name: physical_closed_limit_lift
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0002":
attribute_id: "0x0002"
attribute_name: physical_closed_limit_tilt
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0003":
attribute_id: "0x0003"
attribute_name: current_position_lift
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0004":
attribute_id: "0x0004"
attribute_name: current_position_tilt
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0007":
attribute_id: "0x0007"
attribute_name: config_status
value_type:
- "0x18"
- bitmap8
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: 3
"0x0008":
attribute_id: "0x0008"
attribute_name: current_position_lift_percentage
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0009":
attribute_id: "0x0009"
attribute_name: current_position_tilt_percentage
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0010":
attribute_id: "0x0010"
attribute_name: installed_open_limit_lift
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0011":
attribute_id: "0x0011"
attribute_name: installed_closed_limit_lift
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 65535
"0x0012":
attribute_id: "0x0012"
attribute_name: installed_open_limit_tilt
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0x0013":
attribute_id: "0x0013"
attribute_name: installed_closed_limit_tilt
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 65535
"0x0017":
attribute_id: "0x0017"
attribute_name: window_covering_mode
value_type:
- "0x18"
- bitmap8
- Discrete
access: READ|WRITE|REPORT
access_acl: 7
attribute_value: 0
"0xf000":
attribute_id: "0xf000"
attribute_name: "61440"
value_type:
- "0x10"
- Bool
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0xf001":
attribute_id: "0xf001"
attribute_name: "61441"
value_type:
- "0x10"
- Bool
- Discrete
access: READ|WRITE|REPORT
access_acl: 7
attribute_value: 0
"0xf002":
attribute_id: "0xf002"
attribute_name: "61442"
value_type:
- "0x30"
- enum8
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0xf004":
attribute_id: "0xf004"
attribute_name: "61444"
value_type:
- "0x23"
- uint32_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0xf005":
attribute_id: "0xf005"
attribute_name: "61445"
value_type:
- "0x23"
- uint32_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0xf006":
attribute_id: "0xf006"
attribute_name: "61446"
value_type:
- "0x30"
- enum8
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0xf007":
attribute_id: "0xf007"
attribute_name: "61447"
value_type:
- "0x1b"
- bitmap32
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0xf008":
attribute_id: "0xf008"
attribute_name: "61448"
value_type:
- "0x30"
- enum8
- Discrete
access: READ|WRITE|REPORT
access_acl: 7
attribute_value: 0
"0xf009":
attribute_id: "0xf009"
attribute_name: "61449"
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|WRITE|REPORT
access_acl: 7
attribute_value: 0
"0xfffd":
attribute_id: "0xfffd"
attribute_name: "65533"
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 2
commands_received: {}
commands_generated: {}
"0xef00":
cluster_id: "0xef00"
title: Tuya Manufacturer Specicific
name: tuya_manufacturer
attributes:
"0x0000":
attribute_id: "0x0000"
attribute_name: "0"
value_type:
- "0x20"
- uint8_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0xfffd":
attribute_id: "0xfffd"
attribute_name: "65533"
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 2
commands_received: {}
commands_generated: {}
out_clusters:
"0x000a":
cluster_id: "0x000a"
title: Time
name: time
attributes:
"0xfffd":
attribute_id: "0xfffd"
attribute_name: cluster_revision
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 1
commands_received: {}
commands_generated: {}
"0x0019":
cluster_id: "0x0019"
title: Ota
name: ota
attributes:
"0x0000":
attribute_id: "0x0000"
attribute_name: upgrade_server_id
value_type:
- "0xf0"
- EUI64
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value:
- 255
- 255
- 255
- 255
- 255
- 255
- 255
- 255
"0x0001":
attribute_id: "0x0001"
attribute_name: file_offset
value_type:
- "0x23"
- uint32_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 4294967295
"0x0006":
attribute_id: "0x0006"
attribute_name: image_upgrade_status
value_type:
- "0x30"
- enum8
- Discrete
access: READ|REPORT
access_acl: 5
attribute_value: 0
"0xfffd":
attribute_id: "0xfffd"
attribute_name: cluster_revision
value_type:
- "0x21"
- uint16_t
- Analog
access: READ|REPORT
access_acl: 5
attribute_value: 3
commands_received: {}
commands_generated:
"0x01":
command_id: "0x01"
command_name: "1"
command_args: not_in_zcl
"0x03":
command_id: "0x03"
command_name: "3"
command_args: not_in_zcl
"0x06":
command_id: "0x06"
command_name: "6"
command_args: not_in_zcl
success: true