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.3k stars 30.26k forks source link

TS130F integration issue #58651

Closed samsoul63 closed 2 years ago

samsoul63 commented 2 years ago

The problem

Hello, I've successfully associated a Zigbee Curtain Switch from Moes (MS-108ZR) in deconz plugin. It's well recognized in Phoscon as TS130F: image

And I can make it work from deconz app image Up,Down and stop work from here.

But in HomeAssistant integration is some kind of inverted: When the cover is in UP position, the only action I can take fron entities is "UP" (down is greyed out) : image

So when I click up, nothing is happening. This is exactly the same behaviour from DOWN position (inverted) : image

if i move it to a middle position using deconz app, I can take both actions : image if I click on UP, the cover is opening and then DOWN action is greyed out so the cover is stuck : image

I don't know which log could help.

Thank you

What version of Home Assistant Core has the issue?

core-2021.10.6

What was the last working version of Home Assistant Core?

No response

What type of installation are you running?

Home Assistant Supervised

Integration causing the issue

deconz

Link to integration documentation on our website

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

Example YAML snippet

No response

Anything in the logs that might be useful for us?

No response

Additional information

No response

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

deconz documentation deconz source (message by IssueLinks)

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

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

samsoul63 commented 2 years ago

I've enabled debug log for deconz here is the output during the following scenario : 1) UP from Deconz UI 2) Cover is in TOP position 3) DOWN from Deconz UI 4) Cover is in BOTTOM position 5) move to a middle position from Deconz UI 6) trigger UP from Up arrow of the entity in HA UI 7) Cover in in TOP position 8) Down arrow of the entity in HA UI is greyed out

UP from DEconz UI

2021-10-28 23:37:30 DEBUG (MainThread) [pydeconz.websocket] {"attr":{"id":"3","lastannounced":null,"lastseen":"2021-10-28T21:37Z","manufacturername":"_TZ3000_1dd0d5yi","modelid":"TS130F","name":"Window covering controller 3","swversion":null,"type":"Window covering controller","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"},"e":"changed","id":"3","r":"lights","t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:37:31 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":25,"lift":10,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:37:32 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":50,"lift":20,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:37:33 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":76,"lift":30,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:37:34 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":101,"lift":40,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:37:35 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":127,"lift":50,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:37:36 DEBUG (MainThread) [pydeconz.websocket] {"attr":{"id":"1","lastannounced":"2021-10-28T13:26:01Z","lastseen":"2021-10-28T21:37Z","manufacturername":"IKEA of Sweden","modelid":"TRADFRI control outlet","name":"Prise Ikea","swversion":"2.0.022","type":"On/Off plug-in unit","uniqueid":"08:6b:d7:ff:fe:05:6f:c0-01"},"e":"changed","id":"1","r":"lights","t":"event","uniqueid":"08:6b:d7:ff:fe:05:6f:c0-01"} 2021-10-28 23:37:36 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":152,"lift":60,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:37:37 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":177,"lift":70,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:37:38 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":203,"lift":80,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:37:39 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":228,"lift":90,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:37:40 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":254,"lift":100,"on":true,"open":false,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"}

REACH TOP POSITION

DOWN From deconz UI

2021-10-28 23:38:08 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":228,"lift":90,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:09 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":203,"lift":80,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:10 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":177,"lift":70,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:10 DEBUG (MainThread) [pydeconz.websocket] {"attr":{"id":"9","lastannounced":"2021-10-28T13:37:13Z","lastseen":"2021-10-28T21:38Z","manufacturername":"LUMI","modelid":"lumi.vibration.aq1","name":"Vib_Séjour","swversion":"20180130","type":"ZHAVibration","uniqueid":"00:15:8d:00:02:b1:37:22-01-0101"},"e":"changed","id":"9","r":"sensors","t":"event","uniqueid":"00:15:8d:00:02:b1:37:22-01-0101"} 2021-10-28 23:38:10 DEBUG (MainThread) [pydeconz.websocket] {"config":{"battery":88,"on":true,"pending":[],"reachable":true,"sensitivity":11,"sensitivitymax":21,"temperature":2700},"e":"changed","id":"9","r":"sensors","t":"event","uniqueid":"00:15:8d:00:02:b1:37:22-01-0101"} 2021-10-28 23:38:10 DEBUG (MainThread) [pydeconz.websocket] {"attr":{"id":"14","lastannounced":"2021-10-28T13:23:24Z","lastseen":"2021-10-28T21:38Z","manufacturername":"NodOn","modelid":"SIN-4-2-20","name":"Salon_Nodon","swversion":"0x00010007","type":"Dimmable light","uniqueid":"5c:02:72:ff:fe:7d:1a:55-01"},"e":"changed","id":"14","r":"lights","t":"event","uniqueid":"5c:02:72:ff:fe:7d:1a:55-01"} 2021-10-28 23:38:11 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":152,"lift":60,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:12 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":127,"lift":50,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:13 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":101,"lift":40,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:14 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":76,"lift":30,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:15 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":50,"lift":20,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:16 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":25,"lift":10,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:17 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":0,"lift":0,"on":false,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"}

reach bottom POSITION

position in the middle from deconz UI

2021-10-28 23:38:49 DEBUG (MainThread) [pydeconz.websocket] {"attr":{"id":"3","lastannounced":null,"lastseen":"2021-10-28T21:38Z","manufacturername":"_TZ3000_1dd0d5yi","modelid":"TS130F","name":"Window covering controller 3","swversion":null,"type":"Window covering controller","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"},"e":"changed","id":"3","r":"lights","t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:50 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":25,"lift":10,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:51 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":50,"lift":20,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:52 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":76,"lift":30,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:52 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":96,"lift":38,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:38:53 DEBUG (MainThread) [pydeconz.websocket] {"attr":{"id":"11","lastannounced":null,"lastseen":"2021-10-28T21:38Z","manufacturername":"Philips","modelid":"5120.1100","name":"Variateur-Bureau","swversion":"2.5.3_r49","type":"Dimmable light","uniqueid":"bc:33:ac:ff:fe:e2:f5:27-01"},"e":"changed","id":"11","r":"lights","t":"event","uniqueid":"bc:33:ac:ff:fe:e2:f5:27-01"}

Reach middle Position

UP FROM Entities

2021-10-28 23:39:39 DEBUG (MainThread) [pydeconz.gateway] Sending "put" "{'open': True}" to "http://core-deconz:40850/api/8FE2467DF1/lights/3/state" 2021-10-28 23:39:39 DEBUG (MainThread) [pydeconz.gateway] HTTP request response: [{'success': {'/lights/3/state/open': True}}] 2021-10-28 23:39:40 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":101,"lift":40,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:39:41 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":127,"lift":50,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:39:42 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":152,"lift":60,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:39:43 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":177,"lift":70,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:39:44 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":203,"lift":80,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:39:45 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":228,"lift":90,"on":true,"open":true,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"} 2021-10-28 23:39:46 DEBUG (MainThread) [pydeconz.websocket] {"e":"changed","id":"3","r":"lights","state":{"bri":254,"lift":100,"on":true,"open":false,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"}

REACH TOP

=> DOWN arrow is greyed out in entities

Kane610 commented 2 years ago

Looking at UP FROM Entities

You send open command

Sending "put" "{'open': True}" to "http://core-deconz:40850/api/8FE2467DF1/lights/3/state" HTTP request response: [{'success': {'/lights/3/state/open': True}}]

It reaches top (meaning open should be true)

{"e":"changed","id":"3","r":"lights","state":{"bri":254,"lift":100,"on":true,"open":false,"reachable":true},"t":"event","uniqueid":"60:a4:23:ff:fe:ff:1b:82-01"}

It is reported that open is False, but should be True since we sent open true. Why this is so I do not know but its something on deconz side.

I don't know if deconz ui inverts some data, but I have no knowledge about that. Anyway it looks like the deconz integration code does what's expected.

When looking at the logs consider this from the deconz rest api documentation "lift is best understood as “percentage closed”. So for any lift value below 100 %, open is true." https://dresden-elektronik.github.io/deconz-rest-doc/endpoints/lights/#window-covering-parameters

Smanar commented 2 years ago

Hello, this device is mouting dependant, so not sure it s possible to do something that work for all mouting. The "standard rules" used for opened covering is

on= false bri = 0 open = true lift = 0%

On your situation all is reversed, so it's better. It work on the GUI because deconz don't use the return state, on HA the "open" command is disabled if the covering send as report the open position. So command are working but return is reversed.

You can use the "reverse" command as you have the GUI, you can find 2 of them in the cluster 0x0102 on the attribute list (on the bottom, 0x0017 and 0xf002, not all are available). But take care, you need to have ALL reversed, if the command reverse only lift/bri and not on/open, make a roolback (it will be worse)

I prefer don't touch at the code, because I can't be sure it s not provoked by the mouting side (left or light) But what is your deconz installation ? plugin or full independant ? To know if we can try DDF.

There is not a setting to full reverse a covering in HA ?

Kane610 commented 2 years ago

@Smanar no there is no setting to reverse covering, I want this to be implemented in the proper place so other clients will benefit from the same improvement i.e. deconz.

samsoul63 commented 2 years ago

Hello, Thank for your replies, I was away that's why I only reply now.

First of all, I've tested the module before connecting it to a real cover in my home. So When I say it reach the TOP, it means the relay just stops. Sorry I should have specified this.

@Smanar I'm using the HA plugin I don't find the cluster 0x0102. here are the cluster related to window covering 👍 image image image

As there are some attributes that are not accessible (specially calibration) Maybe I should open a device creation issue with deconz ?

Smanar commented 2 years ago

As you want, but for me me HA and the plugin are fine, the problem is more on the deconz/tuya side.

I don't find the cluster 0x0102.

You are on the good one ^^

And you have realy few attributs available, but the last one seem good 0xF002 "Motor Reversal", have you tried to set it to "on" ? And no all calibrations attribute seem disabled, can be normal, this device work with classic covering with integrated limit switch.

Kane610 commented 2 years ago

I'll close this issue as we're in agreement the issue is not on the HA side.