Adding Tilt to the Hunter Douglas PowerView Cover integration (Luxaflex)

My device (code 51) has fallen back to generic device while it worked before (in your test code) … what changed? :frowning:

More detail is above in a reply to another user - short of it is the code we use here for ‘testing’ isn’t up to the quality standard of the code plugin.

Code I wrote here has been included in the upstream api as is required by core. Once that is packaged by them then we will be able to add them directly into core. So that’s going to take a little while.

Shade types and code compability is posted on the integration page for this plugin

@kingy444 - is it possible to bundle the component as a custom component to test with before release?

Does anyone have type 69, 70 or 71 shades ?

We need to check the JSON out on these

Which card(s) are you guys using to control shades?

TESTING REQUEST (others welcome too)
@psg8064 @TonyInHiro @pessorrusso @ApriliaEdd @Massamino @csamulski
@trullock @Bobtm @gjdoornink

A fair bit has changed in the core Hunter Douglas Integration in the time the original code shared here was tested and getting the upstream API updated so I would like to do some retesting.

Could i please get anyone who has a shade listed under ‘Device with Limited Capability’ test the integration again - i would really like to get this into core, so i’m going to start the PR’s for that now but would really like to be in a position that testing is completed before submitting and nut bugs out before we even get this in beta.

You will probably want to be on a newish version (not sure which) but the integration failed on 2022.6.7 (I hadnt updated my test environment for a while, works on 2022.9)

Thanks for the retry. I’ll be testing it at the beginning of next week.

Just pulled it down and got it installed. Looking good for me so far. I’ll run it for a few more days and see if any bugs come up.

I tested my 51 Silhouettes.
I can use the slider for tilt position, but not the buttons.
Up/Down works (and shows correct in history)
Identify works as well.
There is a lot of delay getting the status of the new position, but that was not possible to fix I think.
Will check some more

could you confirm the tilt buttons again - if those arent working for you then they wouldnt work for anyone with tilt.

Type 51 have the abiity to close all the way up or down (180 degree tilt) - shades of this type have an ‘open tilt’ position defined as 50% - ie if you click the open tilt button i would expect the vane to open to the 90 degree position

The code type 51 are leveraging for their open/close is the same as every other tilt shade, so doesnt make sense for them to just not work for you

Just checked the tilt buttons and they work for me (type 23 blinds), but the history graph shows no difference between blinds fully open (raised), and blinds tilted open, but that doesn’t seem like a big issue to me.

Type 23 Blinds still using the beta you posted.

Just randomly checked HA logs and noticed this

Logger: homeassistant.helpers.integration_platform
Source: loader.py:698
First occurred: 08:16:09 (8 occurrences)
Last logged: 22:46:08

Unexpected error importing hunterdouglas_powerview_custom/system_health.py
Unexpected error importing hunterdouglas_powerview_custom/media_source.py
Unexpected error importing hunterdouglas_powerview_custom/logbook.py
Unexpected error importing hunterdouglas_powerview_custom/energy.py
Unexpected error importing hunterdouglas_powerview_custom/hardware.py
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/integration_platform.py", line 40, in _async_process_single_integration_platform_component
    platform = integration.get_platform(platform_name)
  File "/usr/src/homeassistant/homeassistant/loader.py", line 681, in get_platform
    cache[full_name] = self._import_platform(platform_name)
  File "/usr/src/homeassistant/homeassistant/loader.py", line 698, in _import_platform
    return importlib.import_module(f"{self.pkg_path}.{platform_name}")
  File "/usr/local/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'custom_components.hunter_douglas_beta.recorder'

Not sure if this has any actual impact on the integration, because everything seems to be working fine.

@Kingy444

So excited to try this. I have duolite lift roller shade, type 79. It created 3 entities for each shade. Front, Rear, and Combined. The sliders more or less work as expected (combined is a bit weird to wrap my head around, but I don’t foresee using it much). BUT the arrows don’t work as expected. Doesn’t matter what shade you’re on, they continuing open or closing past the expected point. For example, opening the Rear shade will continue to then open the front shade.

In theory it seems like hitting the open button could send a command to set that entity (specific shade) to 100. Stop still seems to interrupt it. That way it would then stop with only that shade.

Let me know if you need me to do more testing.

Thanks @jhstroebel exactly what I needed - that’s an oversight on my part (the buttons) and an easy fix. Just something I forgot to add.

Expected behaviour is for each to move to their fully open behaviour so I will fix that up.

As for the combined entity, there is info in the documentation (or I should say the documentation to go with this release) to explain it. It’s actually rather simple in the end.

I could have them reversed as I am doing from memory here but:
0-50 represents the front shades full range
51-100 represents the rear shade full range
So setting 75% would put the rear shade half way up and the front all the way up
25% would do the reverse, back fully closed and front halfway

Combines is also the only type that has tilt (but your shades won’t enable that)

hello! i have configured some Lutron Pico Remotes (the ones with blind buttons) to adjust various HD blinds. I find the integration between HA, NodeRed and PowerView to be kinda unstable — 70% of the time the blinds do not respond to the pico buttons, but I am not 100% sure why — the PowerView native app works fine. I was curious if anyone savvy with Node Red could briefly check my config to make sure I was doing it right?

[{"id":"9a81a60835302786","type":"switch","z":"89c581353daec9ff","name":"what btn","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"2","vt":"str"},{"t":"eq","v":"4","vt":"str"},{"t":"eq","v":"8","vt":"str"}],"checkall":"true","repair":false,"outputs":4,"x":540,"y":1000,"wires":[["1be2189be5d75f1a","fea64cd31a844435"],["dcdcd7546e015861"],["397eca86fd1164c9"],["83a2d2b5d1402f26"]]},{"id":"98574ab871c6a3aa","type":"server-state-changed","z":"89c581353daec9ff","name":"","server":"31bffd08.11bf7a","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.master_bedroom_blinds","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"1, 2, 4, 8","halt_if_type":"str","halt_if_compare":"includes","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"x":240,"y":960,"wires":[["9a81a60835302786"],[]]},{"id":"1be2189be5d75f1a","type":"debug","z":"89c581353daec9ff","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":550,"y":900,"wires":[]},{"id":"fea64cd31a844435","type":"api-call-service","z":"89c581353daec9ff","name":"","server":"31bffd08.11bf7a","version":1,"debugenabled":false,"service_domain":"cover","service":"set_cover_position","entityId":"cover.master_centre_bottom, cover.master_left_bottom, cover.master_right_bottom","data":"{   \"position\": 100 }","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"none","mustacheAltTags":false,"x":830,"y":960,"wires":[["287f109a26fc17fb"]]},{"id":"dcdcd7546e015861","type":"api-call-service","z":"89c581353daec9ff","name":"","server":"31bffd08.11bf7a","version":1,"debugenabled":true,"service_domain":"cover","service":"set_cover_position","entityId":"cover.master_centre_bottom, cover.master_left_bottom, cover.master_right_bottom","data":"{   \"position\": 50 }","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"none","mustacheAltTags":false,"x":830,"y":1000,"wires":[["e1118b3076bb1fae"]]},{"id":"397eca86fd1164c9","type":"api-call-service","z":"89c581353daec9ff","name":"","server":"31bffd08.11bf7a","version":1,"debugenabled":true,"service_domain":"cover","service":"set_cover_position","entityId":"cover.master_left_bottom, cover.master_right_bottom, cover.master_centre_bottom","data":"{   \"position\": 0 }","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"none","mustacheAltTags":false,"x":810,"y":1040,"wires":[["c44ff0c7b2bf3422"]]},{"id":"83a2d2b5d1402f26","type":"api-call-service","z":"89c581353daec9ff","name":"","server":"31bffd08.11bf7a","version":1,"debugenabled":true,"service_domain":"cover","service":"set_cover_position","entityId":"cover.master_centre_top, cover.master_left_top, cover.master_right_top","data":"{   \"position\": 0 }","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"none","mustacheAltTags":false,"x":810,"y":1080,"wires":[["15d440a1c9d7dbb0"]]},{"id":"287f109a26fc17fb","type":"delay","z":"89c581353daec9ff","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1100,"y":960,"wires":[["f96d60a26debd32b"]]},{"id":"e1118b3076bb1fae","type":"delay","z":"89c581353daec9ff","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1060,"y":1000,"wires":[["9ca22f5d94d1d59e"]]},{"id":"c44ff0c7b2bf3422","type":"delay","z":"89c581353daec9ff","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1060,"y":1040,"wires":[["00f4eb4df5acc420"]]},{"id":"15d440a1c9d7dbb0","type":"delay","z":"89c581353daec9ff","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1060,"y":1100,"wires":[["8afa7a22c5bcd5fc"]]},{"id":"f96d60a26debd32b","type":"api-call-service","z":"89c581353daec9ff","name":"","server":"31bffd08.11bf7a","version":1,"debugenabled":false,"service_domain":"cover","service":"set_cover_position","entityId":"cover.upper_stairs_blind_top","data":"{   \"position\": 0 }","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"none","mustacheAltTags":false,"x":1330,"y":960,"wires":[[]]},{"id":"9ca22f5d94d1d59e","type":"api-call-service","z":"89c581353daec9ff","name":"","server":"31bffd08.11bf7a","version":1,"debugenabled":true,"service_domain":"cover","service":"set_cover_position","entityId":"cover.master_centre_top, cover.master_right_top, cover.master_left_top","data":"{   \"position\": 0 }","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"none","mustacheAltTags":false,"x":1310,"y":1000,"wires":[[]]},{"id":"00f4eb4df5acc420","type":"api-call-service","z":"89c581353daec9ff","name":"","server":"31bffd08.11bf7a","version":1,"debugenabled":true,"service_domain":"cover","service":"set_cover_position","entityId":"cover.master_centre_top, cover.master_left_top, cover.master_right_top","data":"{   \"position\": 50 }","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"none","mustacheAltTags":false,"x":1330,"y":1040,"wires":[[]]},{"id":"8afa7a22c5bcd5fc","type":"api-call-service","z":"89c581353daec9ff","name":"","server":"31bffd08.11bf7a","version":1,"debugenabled":true,"service_domain":"cover","service":"set_cover_position","entityId":"cover.master_centre_bottom, cover.master_left_bottom, cover.master_right_bottom","data":"{   \"position\": 0 }","dataType":"json","mergecontext":"","output_location":"payload","output_location_type":"none","mustacheAltTags":false,"x":1290,"y":1100,"wires":[[]]},{"id":"31bffd08.11bf7a","type":"server","name":"Home Assistant","legacy":false,"addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

Do you have code I can test here, or is it something I could tweak myself?

I’m fairly new to Home Assistant, so its taking me a bit to wrap my head around a new programming environment. If this was groovy in Hubitat I’d make the tweak myself in a heatbeat, but it took me awhile just to figure out the shade entity code was “cover” so… I’ll get there!

nothing left to test here - code all submitted and will be in home assistant core soon enough. you will just need to add the integration to your installation
im not familiar with the schedule for release but hopefully i got it into the 2022.11 release for you all

2 Likes

Thanks! I can confirm your fix works. Grabbed it from your Github repo, and threw it in the custom integration folder.

This is awesome and much appreciated!

Great news all - the long awaited time is here and these changes are finally in core (2022.11)
Home Assistant should now work with all known shade types (not just tilt as this feature request started as)

Had to do a lot of work to get the integration up to current core HA code standards which was the main hold up (was quite an old integration and not using new python methods)

Thanks for all the patience and feedback provided here along the way.
Spent many a long night working on this so if anyone feels appreciative enough I wouldn’t turn a coffee or two down

Buy Me A Coffee

2 Likes

@Kingy444 Hi! I just found this post when i tried to find a solution to my palm beach shutter (type 66) not working in my HA. When i tried to slide the shutter in HA it gives me the following error. And i cannot have the shutter tilt work in any automation. Can you please help with this issue? Thank you!