[SOLVED] New Alexa Skill v3 API: Rollershutter

Hi,

I’m currently trying to use the new v3 API Skill (see Alexa Smart Home Skill V3 is now live!) and wonder how to implement a shutter with blades the best way.

My shutters are configured that way now (but the result in AlexaApp is not “ideal”):

Group            GroupEgBueroRaffstoreS    "Raffstore Büro Süd"                                                                                         { alexa="Endpoint.Other" }
Rollershutter    EgBueroRaffstoreS	       "Raffstore Büro Süd Position"	   <blinds>	(GroupEgBuero, GroupAutoShadingSouth, GroupEgBueroRaffstoreS)	{ channel="knx:device:router:knx09:d0", alexa="PercentageController.percentage" [category="SWITCH"] }
Dimmer           EgBueroRaffstoreSLam      "Raffstore Büro Süd Lamellen"	   <blinds>	(GroupEgBuero, GroupEgBueroRaffstoreS)						    { channel="knx:device:router:knx09:d1", alexa="PercentageController.percentage" [category="SWITCH"] }

As you can see I tried to group the position (Rollershutter) and blade (Dimmer) together and used PercentageController.percentage. As said before the result is not “ideal” in my mind.

How did/do you implement shutters with the new Alexa-Skill?

KR, Roland

In terms of having the position and blade in one group endpoint, you can’t have two items part of that group as PercentageController interface. Only one of them will be linked. For your use-case, you should use the RangeController interface but keep in mind that this capability is only available in the US.

Group            GroupEgBueroRaffstoreS    "Raffstore Büro Süd"                                                                                         { alexa="Endpoint.Other" }
Rollershutter    EgBueroRaffstoreS	       "Raffstore Büro Süd Position"	   <blinds>	(GroupEgBuero, GroupAutoShadingSouth, GroupEgBueroRaffstoreS)	{ channel="knx:device:router:knx09:d0", alexa="RangeController.rangeValue" [friendlyNames="Position",supportedRange="0:100:1"] }
Dimmer           EgBueroRaffstoreSLam      "Raffstore Büro Süd Lamellen"	   <blinds>	(GroupEgBuero, GroupEgBueroRaffstoreS)						    { channel="knx:device:router:knx09:d1", alexa="RangeController.rangeValue" [friendlyNames="Lamellen",supportedRange="0:100:1"] }

which can be simplified as:

Group            GroupEgBueroRaffstoreS    "Raffstore Büro Süd"                                                                             { alexa="Endpoint.Other" }
Rollershutter    EgBueroRaffstoreS	       "Position"	         <blinds>	(GroupEgBuero, GroupAutoShadingSouth, GroupEgBueroRaffstoreS)	{ channel="knx:device:router:knx09:d0", alexa="RangeController.rangeValue" }
Dimmer           EgBueroRaffstoreSLam      "Lamellen"	         <blinds>	(GroupEgBuero, GroupEgBueroRaffstoreS)						    { channel="knx:device:router:knx09:d1", alexa="RangeController.rangeValue" }

Another way would be not to use a group endpoint and have each function as separate device. Then, you can use Alexa routines to open/close blinds, for example, by setting the percent level. You can set these via the mobile app.

Alexa, open blinds => Set blinds to 0%
Alexa, close blinds => Set blinds to 100%

Unfortunately, Amazon didn’t provide an Alexa-specific controllers for shades/binds as of yet. So make sure to vote for the blinds integration feature request on the Alexa user voice website.

Thank you for your support. As I’m from europe I will stick to two separate devices.

I also voted for the feature request…

KR, Roland

Hi Jeremy

So shutter control via Alexa using a group is only available in the US? I’m in Australia.

I would like to put my room blinds into a group and use only the rollershutter type item to send a 0 or 100 to the group to control all the roller shutters but that’s not supported if I read your message right?

If i use the endpoint other for the group and alexa=“PercentageController.percentage” for the item, Alexa app discovers it.

I would assume then I can say for my item named

'Study Blinds'

Alexa, open the study blinds? but it says Study blinds doesnt support that

A generic percentage might be a dimmer or fan speed, “open” makes no sense in this context to Alexa.

I think you are mixing up interfaces. The range controller interface has nothing to do with controlling a shutter. At least for the moment, Amazon just announced new commands semantic extension support which will be added to these interfaces. But this is a few months if not more away since this feature will start in preview mode (not available to everyone).

I used the range controller interface above because the blind example had two range components (“Position” and “Lamellen”) part of a group endpoint, opposed to just having a single rollershutter item which controls a blind.

Bottom line, to control a blind currently in Alexa, you should stick to separate devices modeled as percentage controllers and associated with routines.

Why not create a group rollershutter item type that includes all your rollershutters you want to control at the same time on the OH side and set it the same way on the Alexa side as you would do with a single device?

items

Group:Rollershutter gStudyBlinds "Study Blinds" {alexa="PercentageController.percentage"}
Rollershutter StudyBlindsRight "Study Blinds Right" (gStudyBlinds)
Rollershutter StudyBlindsLeft "Study Blinds Left" (gStudyBlinds)

routines

Alexa, open Study Blinds => Set Study Blinds to 0%
Alexa, close Study Blinds => Set Study Blinds to 100%

1 Like

THanks, was trying to avoid routines that’s all

Hi,
i have the same issue. I moved to the new Alexa V3 skill and now my group of Blinds doesn’t work any longer.
Same error “Blabla does not support this function”. I tried to create a group as mentioned above, but Alexa does not find this item (e.g. like above the “Study Blinds”).

Additionally, id like to be able to move the blinds individually AND the group. So this is my config:

Group:Rollershutter gWZ_RL {alexa="RangeController.rangeValue" [category="EXTERIOR_BLIND", friendlyNames="Rollladen Wohnzimmer", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=100,Open=0,Lower=(+10),Raise=(-10)", stateMappings="Closed=100,Open=0:99"] }

Rollershutter EG_WZ_RL4     "Wohnzimmer Rollladen4 [%d %%]"   (gWZ_RL, gEG_RL, gEG_RL_athome)    { channel="knx:device:bridge:EG_WZ:EG_WZ_RL4", alexa="RangeController.rangeValue" [category="EXTERIOR_BLIND", friendlyNames="Wohnzimmer Rollladen4", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=100,Open=0,Lower=(+10),Raise=(-10)", stateMappings="Closed=100,Open=0:99"] }
Rollershutter EG_WZ_RL5     "Wohnzimmer Rollladen5 [%d %%]"   (gWZ_RL, gEG_RL, gEG_RL_athome)    { channel="knx:device:bridge:EG_WZ:EG_WZ_RL5", alexa="RangeController.rangeValue" [category="EXTERIOR_BLIND", friendlyNames="Wohnzimmer Rollladen5", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=100,Open=0,Lower=(+10),Raise=(-10)", stateMappings="Closed=100,Open=0:99"] }
Rollershutter EG_WZ_RL6     "Wohnzimmer Rollladen6 [%d %%]"   (gWZ_RL, gEG_RL, gEG_RL_athome)    { channel="knx:device:bridge:EG_WZ:EG_WZ_RL6", alexa="RangeController.rangeValue" [category="EXTERIOR_BLIND", friendlyNames="Wohnzimmer Rollladen6", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=100,Open=0,Lower=(+10),Raise=(-10)", stateMappings="Closed=100,Open=0:99"] }
Rollershutter EG_WZ_RL7     "Wohnzimmer Rollladen7 [%d %%]"   (gWZ_RL, gEG_RL, gEG_RL_athome)    { channel="knx:device:bridge:EG_WZ:EG_WZ_RL7", alexa="RangeController.rangeValue" [category="EXTERIOR_BLIND", friendlyNames="Wohnzimmer Rollladen7", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=100,Open=0,Lower=(+10),Raise=(-10)", stateMappings="Closed=100,Open=0:99"] }
Rollershutter EG_WZ_RL8     "Wohnzimmer Rollladen8 [%d %%]"   (gWZ_RL, gEG_RL)                   { channel="knx:device:bridge:EG_WZ:EG_WZ_RL8", alexa="RangeController.rangeValue" [category="EXTERIOR_BLIND", friendlyNames="Wohnzimmer Rollladen8", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=100,Open=0,Lower=(+10),Raise=(-10)", stateMappings="Closed=100,Open=0:99"] }
Rollershutter EG_WZ_RL9     "Wohnzimmer Rollladen9 [%d %%]"   (gWZ_RL, gEG_RL)                   { channel="knx:device:bridge:EG_WZ:EG_WZ_RL9", alexa="RangeController.rangeValue" [category="EXTERIOR_BLIND", friendlyNames="Wohnzimmer Rollladen9", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=100,Open=0,Lower=(+10),Raise=(-10)", stateMappings="Closed=100,Open=0:99"] }

Anyone found a solution?

Your group item is missing its label preventing that item from being discovered. You should be able to open/close/raise/lower the individual blinds and the group using these utterances:

“Alexa, rollladen wohnzimmer öffnen”
“Alexa, rollladen wohnzimmer 4 öffnen”

“Alexa, rollladen wohnzimmer schließen”
“Alexa, rollladen wohnzimmer 4 schließen”

“Alexa, rollladen wohnzimmer erhöhen”
“Alexa, rollladen wohnzimmer 4 erhöhen”

“Alexa, rollladen wohnzimmer niedriger”
“Alexa, rollladen wohnzimmer 4 niedriger”

Thanks @jeshab !!!

But now I am I bit confused. So what exactly is the parameter “friendlyNames=Rolladen Wohnzimmer” in the Alexa syntax good for ?

{alexa="RangeController.rangeValue" [category="EXTERIOR_BLIND", friendlyNames="Rollladen Wohnzimmer"}

I thought that this is the friendly name for Alexa in V3 :roll_eyes:

Have you tried creating Routines in the Alexa app? I have two Ikea shades in my office. Routines allowed me to ‘group’ them so now they operate at the same time.

You’d have to create the states that apply. I created Close, Open, Halfway, Peek and Sunny (which opens to 75%). “Alexa, open office shades.” or “Alexa, set office shades halfway.”

hi @tontonton, thanks. The group is now working.
I missed indeed the “LABEL”, as mentioned by jeshab, which apparently is the friendly name for Alexa.

The friendlyNames metadata parameter is only used with the interfaces supporting multi-instances (mode, range & toggle) to name each device component. This is more important when used in a group endpoint than a single endpoint.

So my recommendation would be to use functional names which are not part of the device name (defined by the item label), using asset ids if possible (e.g. friendlyNames=@Setting.Opening).

Group:Rollershutter gWZ_RL "Rollladen Wohnzimmer" {alexa="RangeController.rangeValue" [category="EXTERIOR_BLIND", friendlyNames="@Setting.Opening", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=100,Open=0,Lower=(+10),Raise=(-10)", stateMappings="Closed=100,Open=0:99"] }
1 Like

Thanks @jeshab, got it !

Well, I am still struggling with the roller shutter :neutral_face:

Opening (Alexa RL öffnen) and closing (Alexa RL schließen) works now, but the raise (höher) and lower (tiefer) are still inverted and even changing the syntax between +10 or -10 doesn’t change the behavior.

so:

Rollershutter EG_WZ_RL8  "Wohnzimmer Rollladen8 [%d %%]" {channel="knx:device:bridge:EG_WZ:EG_WZ_RL8", alexa="RangeController.rangeValue" [category="EXTERIOR_BLIND", friendlyNames="@Setting.Opening", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=100,Open=0,Lower=(+10),Raise=(-10)", stateMappings="Closed=100,Open=0:99"] }
Rollershutter EG_WZ_RL9  "Wohnzimmer Rollladen9 [%d %%]" {channel="knx:device:bridge:EG_WZ:EG_WZ_RL9", alexa="RangeController.rangeValue" [category="EXTERIOR_BLIND", friendlyNames="@Setting.Opening", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=100,Open=0,Lower=(-10),Raise=(+10)", stateMappings="Closed=100,Open=0:99"] }

has the same behavior although the configuration is different :face_with_raised_eyebrow:
Alexa, RL8 höher (raise) sends +10 (which closes the blind +10 more as 100 is fully closed)
Alexa, RL9 höher (raise) sends +10 (which closes the blind +10 more as 100 is fully closed)

and

Alexa, RL8 tiefer (lower) sends -10 (which opens the blind -10 more as 0 is fully opened)
Alexa, RL9 tiefer (lower) sends -10 (which opens the blind -10 more as 0 is fully opened)

so the action mapping for lower and raise does not work correctly:

actionMappings="Close=100,Open=0,Lower=(+10),Raise=(-10)"
actionMappings="Close=100,Open=0,Lower=(-10),Raise=(+10)"

Am I missing something :thinking:

PS: as you can see, I am in Germany. Might this be the issue? I saw some threads about issues with Alexa in different countries.
(my OH2 regional settings are set to de).

This setup is working on my side, maybe you find a hint:

Edit: I am using OH 2.5.0

@HALLO01, so you have one group and two items for each Blind ?
Or do you only need these combination if you want to use the “Alexa stopp” ?

Do you also have/had the problem that up and down is inverted ?

Yes, this is only required for stop.
Open/close works with rollershutter item only

I had the problem but with my current setup it is working correct

I’m currently trying again on this topic. As the Openhab Alexa Skill seems to have evolved I currently try the Building Block API but fail.

This setup only shows up “Raffstore Büro Nord Lamellen” within Alexa-App. Neither the Rollershutter-item nor the Group can be seen within Alexa…

Group           GroupEgBueroRaffstoreN          "Raffstore Büro Nord Gruppe"                                                                                                                                    { alexa="Endpoint.Other" }
Rollershutter   EgBueroRaffstoreN               "Raffstore Büro Nord"                       <blinds>        (GroupEgBueroRaffstoreN, GroupEgBuero, GroupAutoShadingNorth)           ["Rollershutter"]           { channel="knx:device:router:knx09:f0", alexa="RangeController.rangeValue" [category="INTERIOR_BLIND", friendlyNames="@Setting.Opening", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=0,Open=100,Lower=(-10),Raise=(+10)", stateMappings="Closed=0,Open=1:100"] }
Dimmer          EgBueroRaffstoreNLam            "Raffstore Büro Nord Lamellen"              <blinds>        (GroupEgBueroRaffstoreN, GroupEgBuero)                                  ["Blinds", "Switchable"]    { channel="knx:device:router:knx09:f1", alexa="RangeController.rangeValue" [category="INTERIOR_BLIND", friendlyNames="@Setting.Opening", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=0,Open=100,Lower=(-10),Raise=(+10)", stateMappings="Closed=0,Open=1:100"] }

What am I missing or doing wrong? Does anyone have a complete example for me with Raffstores that have both position 0-100 and blade-position with 0-100?

When calling a specific Building Block APIs capability part of a group endpoint, you need to use the group name associated one of its friendly names. In your example, you would have to address the blind height with Raffstore Büro Nord Gruppe Öffnung. However, the friendlyNames need to be distinct across functionalities part of the same group endpoint. Also, you can only have one Semantic Extensions action per group endpoint. Last, the category metadata parameter should be defined through the group endpoint.

With the item definition below, you would address both functionalities as Raffstore Büro Nord Öffnung and Raffstore Büro Nord Lamellen. Keep in mind since using a text-based friendlyNames, your OH regional settings need to be setup properly.

Group           GroupEgBueroRaffstoreN          "Raffstore Büro Nord"                                                                                                                                           { alexa="Endpoint.InteriorBlind" }
Rollershutter   EgBueroRaffstoreN               "Raffstore Büro Nord Öffnung"               <blinds>        (GroupEgBueroRaffstoreN, GroupEgBuero, GroupAutoShadingNorth)           ["Rollershutter"]           { channel="knx:device:router:knx09:f0", alexa="RangeController.rangeValue" [friendlyNames="@Setting.Opening", supportedRange="0:100:10", unitOfMeasure="Percent", actionMappings="Close=0,Open=100,Lower=(-10),Raise=(+10)", stateMappings="Closed=0,Open=1:100"] }
Dimmer          EgBueroRaffstoreNLam            "Raffstore Büro Nord Lamellen"              <blinds>        (GroupEgBueroRaffstoreN, GroupEgBuero)                                  ["Blinds", "Switchable"]    { channel="knx:device:router:knx09:f1", alexa="RangeController.rangeValue" [friendlyNames="Lamellen", supportedRange="0:100:10", unitOfMeasure="Percent"] }