Tuya Zigbee Roller Shade Blind Motor - Hubitat Issues

Well it worked great for 6 weeks without issue and the last couple of days it's gone wrong. Nothing has been altered/changed but I'm having issues with my blind again. Looking at the logs - if it's closed and I send an open, it goes to 'opening' only briefly, then 'closed' (while in transit) before correctly going to 'open' on arrival. Send a close and it goes to 'closing' only briefly, then 'open' (while in transit), before correctly going to 'closed' on arrival (though I have seen it remain on 'opening' or 'closing'. The logs below show a cycle from fully open to fully closed - I'm not sure why it's gone wrong:

Summary

dev:10932022-07-04 22:15:44.695 traceparse: ACK command=9216

dev:10932022-07-04 22:15:44.590 debugKitchen Blind sending time data : [he cmd 0xB7F4 0x01 0xEF00 0x24 {000862C3588062C36690}, delay 2000]

dev:10932022-07-04 22:15:44.587 debugKitchen Blind time synchronization request

dev:10932022-07-04 22:15:44.585 traceparse: SET_TIME data=[20, C8]

dev:10932022-07-04 22:12:01.073 infoKitchen Blind is closed

dev:10932022-07-04 22:12:01.071 debugupdateWindowShadeArrived: position=0

dev:10932022-07-04 22:12:01.068 debugsetPosition: no need to move!

dev:10932022-07-04 22:12:01.066 traceisWithinOne:true (position=0, lastPosition=0)

dev:10932022-07-04 22:11:58.451 infoKitchen Blind is closed

dev:10932022-07-04 22:11:58.449 debugupdateWindowShadeArrived: position=0

dev:10932022-07-04 22:11:58.447 traceendOfMovement

dev:10932022-07-04 22:11:55.987 debugparse: stopping (DP=1, data=0)

dev:10932022-07-04 22:11:55.932 traceparseSetDataResponse: descMap=[raw:catchall: 0104 EF00 01 01 0040 00 B7F4 01 00 0000 02 01 00000104000100, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:B7F4, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 00, 01, 04, 00, 01, 00]]

dev:10932022-07-04 22:11:55.851 infoKitchen Blind is closed

dev:10932022-07-04 22:11:55.848 debugupdateWindowShadeArrived: position=0

dev:10932022-07-04 22:11:55.835 debugupdatePosition: arrived!

dev:10932022-07-04 22:11:55.832 traceisWithinOne:true (position=0, lastPosition=0)

dev:10932022-07-04 22:11:55.815 traceupdatePosition: position=0

dev:10932022-07-04 22:11:55.811 infoKitchen Blind is closed

dev:10932022-07-04 22:11:55.809 debugupdateWindowShadeArrived: position=0

dev:10932022-07-04 22:11:55.790 debugparse: arrived at position 0

dev:10932022-07-04 22:11:55.788 traceparseSetDataResponse: descMap=[raw:catchall: 0104 EF00 01 01 0040 00 B7F4 01 00 0000 02 01 00000302000400000000, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:B7F4, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 00, 03, 02, 00, 04, 00, 00, 00, 00]]

dev:10932022-07-04 22:11:16.380 infoKitchen Blind is open

dev:10932022-07-04 22:11:16.378 debugupdateWindowShadeArrived: position=100

dev:10932022-07-04 22:11:16.376 traceendOfMovement

dev:10932022-07-04 22:11:13.887 traceupdateWindowShadeClosing

dev:10932022-07-04 22:11:13.885 debugparse: closing (DP=1, data=1)

dev:10932022-07-04 22:11:13.862 traceparseSetDataResponse: descMap=[raw:catchall: 0104 EF00 01 01 0040 00 B7F4 01 00 0000 02 01 00000104000101, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:B7F4, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 00, 01, 04, 00, 01, 01]]

dev:10932022-07-04 22:11:13.746 debugupdateSpeed: speed=100

dev:10932022-07-04 22:11:13.744 debugparse: speed=100

dev:10932022-07-04 22:11:13.742 traceparseSetDataResponse: descMap=[raw:catchall: 0104 EF00 01 01 0040 00 B7F4 01 00 0000 02 01 00006902000400000064, profileId:0104, clusterId:EF00, clusterInt:61184, sourceEndpoint:01, destinationEndpoint:01, options:0040, messageType:00, dni:B7F4, isClusterSpecific:true, isManufacturerSpecific:false, manufacturerId:0000, command:02, direction:01, data:[00, 00, 69, 02, 00, 04, 00, 00, 00, 64]]

dev:10932022-07-04 22:11:12.284 traceparse: ACK command=0

dev:10932022-07-04 22:11:11.619 tracesendTuyaCommand: message=EFF40202000400000000

dev:10932022-07-04 22:11:11.616 tracesendTuyaCommand: dp=0x02, dpType=0x02, fnCmd=0x00000000, fnCmdLength=8

dev:10932022-07-04 22:11:11.551 debugsetPosition: target is 0, currentPosition=100

dev:10932022-07-04 22:11:11.548 infoKitchen Blind is closing

dev:10932022-07-04 22:11:11.546 traceupdateWindowShadeClosing

dev:10932022-07-04 22:11:11.543 debugupdateWindowShadeMoving: position=0 (lastPosition=100), target=0

dev:10932022-07-04 22:11:11.540 traceisWithinOne:false (position=0, lastPosition=100)

dev:10932022-07-04 22:11:11.538 debugclose mode == substituted with setPosition(0)

dev:10932022-07-04 22:11:11.536 debugclose, direction = 0

1 Like

What is your blind current "Position report timeout" ? What I see from the logs is that the watchdog timer kicks in 3 seconds after HE receives a confirmation for the start of the Close movement.

Your AM43 blind 'Stopped' confirmation was received about 44 seconds later. Is this period close to the time needed for a full Open->Close cycle?

Try setting the "Position report timeout" preference to 45000 milliseconds ( I should have better used seconds here...). Will this fix the issue?

It's currently set to 2500. I'm fairly sure it's always been at that default - set by the driver when hitting 'configure'

Yes that's about right.

I'll give that a try and let you know. I can see that it's reporting 'open'/'closed' incorrectly while in motion. What I didn't check last night was whether it still correctly reports 'partially open' if I stop it midway.

Although I checked the previous drivers thoroughly to see that they were reporting all positions and movements correctly, I didn't check this one (the final version) when I updated it some time ago. It could be that it's been this way since update - I only looked into it as it failed to open/close as part of an automation.

I did keep a copy of both 3.15 and 3.17 drivers so I can switch back if needed.

@kkossev After a lot of messing around, switching back to the old drivers etc - I just got it working. On my model Kitchen Blind model=TS0601 manufacturer=_TZE200_rddyvrci for it to report correctly ('opening' & 'closing') the Position Timeout has to be set to 0 ms. On any other value it goes straight to 'closed' or 'open' once moving.

I can only think that at some point (how I've no idea) that the device driver got initialised and applied the default setting of 2500 ms. Putting it back to 0 ms was all I needed to do to restore correct operation/position reporting.

hello friends, I'm looking to buy a zemismart roller blind, I've seen that they come with a dongle, that doesn't work for hubitat right? Let's see if any of you have it and help me, thanks friends

Going solely from the image you posted (so, no guarantees!), that looks like a motor I've got; that will work with HE using a slightly modified version of the @kkossev/@amosyuen driver detailed above.

I've found that the big weakness of the dongle arrangement is there's no motor --> hub feedback, so all you can do is send "open" or "close" commands - no intermediate positions, and no reliable indication via Dashboard on the blind's position. FWIW this limitation's intrinsic to the motor/dongle setup itself, and not something HE introduces; the same problem's there with a Tuya hub,

@ian3 if your changes are not very big (less than 20-30 lines of code... ), you can send me your modification of the AmosYoen driver and I can try to merge the mods into the standard driver version.

The changes are very modest (and distinctly hacky) - one extra input in the "Advanced" block:

    		input ("zigbeedongle", "bool", title: "Zigbee Dongle",  description: "Blind connects to hub via dongle, rather than directly", required: true, defaultValue: false)

...an associated line in Configure:

    if (settings.zigbeedongle == null || fullInit == true) device.updateSetting("zigbeedongle", [value: false, type: "bool"]) 

...and a new test at the start of isWithinOne:

private isWithinOne(position) {
  if (zigbeedongle) {
    return false
  }
// ...other code unchanged...

The overall effect is to skip the "is the blind already where we want it to be?" checks, which are inapplicable for the dongled blinds as there's no reliable position value to be had.

You're very welcome to incorporate these in any way that suits.

Edit: While it's not pretty this does seem to do what's needed for my dongled Tuya blind, while preserving correct behavior for the other types - if there's anything I've overlooked, or I've managed to sneak a bug in, please do let me know!

1 Like

Hi guys, I have TQL25 Tubular motor, I can add it as Zigbee device, but when using @kkossev ZemiSmart Zigbee Blind driver, the device doesnt not respond to any of the commands.

manufacturer: _TZE200_7eue9vhc
model: TS0601

I don't see the reference to this motor in the driver. Please help adding my motor to the driver.

Hi, please post a screenshot of the device Data section. What is the 'endpointId' value?
I will add the device manufacturer in the next version of this driver, but it helps only in the automatic selection of the right configuration options (reverse directions, etc.. ). Not responding to any commands is another issue...

  • endpointId: 01
  • application: 44
  • inClusters: 0000,0004,0005,EF00
  • manufacturer: _TZE200_7eue9vhc
  • model: TS0601
  • outClusters: 0019,000A
  • softwareBuild:

@kkossev THANK YOU for helping!!

1 Like

You can try version 3.2.4, download it and update manually from the dev. branch driver in this post:

I have also added fingerprints for 3 new devices that I found in iquix (the author of the original driver code for ST) Github repository.

I recommend first removing the device from HE web page and then pairing it again to HE. This driver should be automatically selected now. Please check whether the 'Reverse' option for this device is set correctly after the initial pairing.

Definitely progress. Also noticed that the range is poor and that's probably the reason why "no buttons were responsive" for me before. If I'm within 10 feet from the HU, the motor responds to
only Open and Close buttons, but for a quarter turn.

The log says need to setup limit, and the few java issues...

dev:5552022-12-02 10:21:03.807 AMinfoOffice shade 4 windowShade is unknown
dev:5552022-12-02 10:21:03.804 AMwarnupdateWindowShadeArrived: Need to setup limits on device
dev:5552022-12-02 10:20:58.687 AMinfoOffice shade 4 is closing
dev:5552022-12-02 10:20:55.626 AMinfoOffice shade 4 is opening
dev:5552022-12-02 10:20:51.570 AMinfoOffice shade 4 is closing
dev:5552022-12-02 10:20:46.726 AMinfoOffice shade 4 windowShade is unknown
dev:5552022-12-02 10:20:46.723 AMwarnupdateWindowShadeArrived: Need to setup limits on device
dev:5552022-12-02 10:20:41.658 AMinfoOffice shade 4 is opening
dev:5552022-12-02 10:20:37.632 AMinfoOffice shade 4 is closing
dev:5552022-12-02 10:20:36.324 AMinfoOffice shade 4 is opening
dev:5552022-12-02 10:20:31.406 AMinfoOffice shade 4 windowShade is unknown
dev:5552022-12-02 10:20:31.403 AMwarnupdateWindowShadeArrived: Need to setup limits on device
dev:5552022-12-02 10:20:25.915 AMinfoOffice shade 4 is opening
dev:5552022-12-02 10:20:24.143 AMinfoOffice shade 4 is closing
dev:5552022-12-02 10:20:21.841 AMinfoOffice shade 4 configured : model=TS0601 manufacturer=_TZE200_7eue9vhc
dev:5552022-12-02 10:20:07.172 AMinfoOffice shade 4 windowShade is unknown
dev:5552022-12-02 10:20:07.169 AMwarnupdateWindowShadeArrived: Need to setup limits on device
dev:5552022-12-02 10:20:02.037 AMinfoOffice shade 4 is opening
dev:5552022-12-02 10:19:58.077 AMinfoOffice shade 4 is closing
dev:5552022-12-02 10:19:48.263 AMerrorjava.lang.NullPointerException: Cannot execute null+-20 on line 785 (method stepClose)
dev:5552022-12-02 10:19:23.029 AMerrorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.math.BigDecimal#minus.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 551 (method setPosition)
dev:5552022-12-02 10:19:15.073 AMerrorgroovy.lang.GroovyRuntimeException: Ambiguous method overloading for method java.math.BigDecimal#minus.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
[class java.lang.Character]
[class java.lang.Number] on line 551 (method setLevel)
dev:5552022-12-02 10:19:07.440 AMinfoOffice shade 4 windowShade is unknown
dev:5552022-12-02 10:19:07.437 AMwarnupdateWindowShadeArrived: Need to setup limits on device
dev:5552022-12-02 10:19:04.957 AMinfoOffice shade 4 is opening
dev:5552022-12-02 10:19:03.083 AMinfoOffice shade 4 windowShade is unknown
dev:5552022-12-02 10:19:03.080 AMwarnupdateWindowShadeArrived: Need to setup limits on device

image|689x423

I will look at the java exceptions logged, but to make it work you have to obligatory setup the motor limits first, using the RF remote control that comes with the motor.

THANK YOU! Definitely making progress now! All seems to be working, range is poor, so I'll add Zigbee outlets to extend.

Do you know how to flip the Open and Close button commands? When I press Open, motor spins and the Status reports to closed

Did you try the 'Direction' options?

image

It was the Advanced setting, Invert position reporting set to OFF

2022-12-03_14-08-42

OK, make a screenshot of the preferences screen as it is set up now and works for this device.
Then, click on the Configure button, enable the Advanced options and compare the screenshot with the new default settings.
Are all the default options set correctly?

I only had to turn off the Invert position reporting from the default.
2022-12-11_19-17-23

Thank you for the report. I have made the change in version 3.2.5 and it is now pushed for update from HPM.

1 Like