Alexa Smart Home Skill V3 is now live!

The fix that prevents the “editable” field log error during discovery requests was pushed to the live skill yesterday night (EDT). So that would explain why you don’t see these anymore.

Good to hear :+1:

1 Like

Yeah it is storing the raw image in the item state. I will comment those items out and see how it goes.

  • v2 equivalent – 1.8 MB / 24.11 s
  • v3 no fields filtering - 1.8 MB / 26.06 s
  • v3 exclude state field - 21 KB / 1.35 s

Ok, commenting out the image items have allowed all alexa tagged devices to be discovered and used. I have to say the v3 speed at actioning commands seems way faster than v2.

Without the item items:

  • v3 no fields filtering - 31.8KB / 2.28 s

One of the commented out image items:
//Image BackdoorAxis "Axis Backdoor Camera" {channel="ipcamera:AXIS:69925544:image"}

Finally moved from a US Amazon account and linked skill to the AU Skill / Amazon account. v3 works well, an example on/ off item looks like this for me:
Switch carportlight "Carport Light" {alexa="Lighting", mqtt=">[mymqtt:carport/light:command:OFF:0],>[mymqtt:carport/light:command:ON:1]"}
and a Dimmable item:
Dimmer PorchLights "Porch Lights" {alexa="Lighting", mqtt=">[mymqtt:outside/porchlights:command:*:default]"}

Any ideas on getting a Door control to accept “Alexa, Lock the Shed Door” ? I tried this:
Switch shed_door "Shed Door" {alexa="LockController.lockState", mqtt=">[mymqtt:shed/door:command:LOCKED:0],>[mymqtt:shed/door:command:UNLOCKED:1]"}
but Alexa says Shed door does not support that.

Ive previously approached my ceiling fans as a dimmer - then translate that in Node-red that 1-33% = speed 1 etc. Is there a better way to control a fan now with “Alexa, set the Fan to High” ?

Thanks for confirming that this was related to the image items state. We will try to see what we can do to optimize based on that use-case. Keep in mind, you can uncomment your image items after the successful discovery request although you will have to remember to comment them each time you want to update your Alexa configuration.

Please refer to the capability regional availability matrix. Unfortunately, Amazon didn’t make the lock controller available in AUS as of yet.

Correction

It looks Amazon updated their documentation and the locking capability only is available in your region. I did a quick check of the skill logs and I don’t think you requested a discovery after updating your item which is probably the reason why it wasn’t recognized.

Depending on the native item type supported by the binding controlling your fan, you can use either the mode or range controllers but these are only available in the US currently. I have couple Insteon Fanlinc controllers which I have setup as below. This allows to control the fan speed presets along with turn on and off using a proxy switch and a rule that defaults turning on to the low setting preset.

items

Group:Switch:OR(ON, OFF) gFans "All Fans"
Group:Number:AVG gFansSpeed "Fans Speed"

Group gBedroomFan "Bedroom Fan" {alexa="Endpoint.Other"}
Number BedroomFanSpeed "Bedroom Fan Speed" (gBedroomFan, gFansSpeed) {insteonplm="xx.xx.xx:F00.00.1C#fan", alexa="RangeController.rangeValue" [supportedRange="0:3:1",presets="1=@Value.Low,2=@Value.Medium,3=@Value.High",friendlyNames="@Setting.FanSpeed,Speed"]}
Switch BedroomFanPower "Bedroom Fan Power" (gBedroomFan, gFans) {alexa="PowerController.powerState"}

rules

rule "Ceiling Fans Command"
when
  Member of gFans received command
then
  val String FanName = triggeringItem.name.split("Power").get(0)
  val String SpeedState = if (receivedCommand == ON) "1" else "0"

  sendCommand(FanName + "Speed", SpeedState)
end

rule "Ceiling Fans Speed Updates"
when
  Member of gFansSpeed received update
then
  val String FanName = triggeringItem.name.split("Speed").get(0)
  val String PowerState = if (triggeringItem.state == 0) "OFF" else "ON"

  postUpdate(FanName + "Power", PowerState)
end

Thanks heaps to everyone who worked on this update - it works great for me and the documentation is very good.
Question - I have a number of temperature sensors that I would like Alexa to be able to deal with (ie tell me the temperature on request).
I have added to tags as follows:

Number Livingroom_Temp "Living Room Temperature [%.1f°C]" <temperature> (gMapDBpersist,gSQLpersist_every10Min) { mqtt="<[broker:/broadlink/temperature:state:JS(broadlinkt.js)]",alexa="TemperatureSensor.temperature"}

I can see the living room temperature in the Alexa App - so she does know about it.
When I ask “Alexa, what is the living room temperature?” the response I get is “Living room fan does not support that”. What do I need to add to get the correct response? I have tried creating a living room group and adding the sensor to that group - no joy.

I had a similar issue when setting up my thermostat. You usually don’t want to have the function name in the label. So, you should label your temperature sensor “Living Room” instead. No need for groups. They are usually used to send commands to a set of similar devices.

Thanks heaps - that worked perfectly! :slight_smile:

for me I get the same as you but its an alexa voice syntax issue, try saying
what is the living room thermostat? and then it works.

[EDIT] Just read jeshab comment and I think I need to change the label on something, I will figure that out shortly :slight_smile:

Regards
Paul

I have used the disruption caused by the move to v3 followed almost at the same time as adding a Echo Show 5 to my stable of Echo devices as a good time to redo my current setup.

I have removed my thing file and instead created all the things using PaperUI, I halso added all the AmazonEchoControl channels using PaperUI too, this took along time and meant I had to redo my thermostats too as previously that was also configured using files. So I think most of Alexa stuff is now in Paper UI and not using files. Yay!

Ok so with that background to the current major revamp I have done to my OH system and alexa integration I will continue to ask my questions of this v3 skill.

Some time ago I tried to set up OH and Alexa to understand local room devices so if I say

  • Alexa, turn on the light, she turns on the lights in that room.
  • Alexa, Whats the temperature in here? and she advises the rooms name and the current temp,
  • Alexa, turn up the heat. The target temperature is increased by 1 degree in that room.

lastly I did try to add a Heater, Fan and Dehumidifer to each room and under v2 that of course did not work I have to give them a unique name and cannot refer to them as local device types :frowning:

I see in the documentation that there are now more device types defined, unfortunately Amazon have not included Heater, Fan or Dehumidifer, in fact the only extra one I can currently see some improvement with for me is that there is now a TV device type. (I will need to rename other stuff so that will work as I already have the livingroom TV called TV).

My question is have I interpreted the documentation correct and even with V3 API support I cannot have custom types such as Heater, Fan or Dehumidifier? My objective is simple to say Alexa, turn on heater and she will turn on the heater in that room.

Regards
Paul

Your interpretation is correct. The Alexa room awareness feature (aka Alexa-enabled groups) is derived from the majority of the current display categories. So, until Amazon adds new categories, there is no way to address these devices. You should vote on this improvement that covers your use case.

On a side note, you could use the Amazon Echo Control binding lastVoiceCommand channel and a proxy Alexa-linked activity item to mimic that feature from the OH side for unsupported categories.

Expanding from my previous fan example, here is how I set up room awareness for my fans in OH: (The Alexa activity device is just to allow a successful response back when issuing the voice command; it doesn’t control anything)

items

Group gAlexaVoiceCommand "Alexa Voice Command"
String BedroomEchoDotLastVoiceCommand "Last Voice Command" (gAlexaVoiceCommand) {channel="amazonechocontrol:echo:account:echodot_bedroom:lastVoiceCommand"}

Switch RoomAwarenessActivityFan "Fan" {alexa="Activity", autoupdate="false"}

rules

rule "Alexa Voice Command Updates"
when
  Member of gAlexaVoiceCommand received update
then
  val String Location = triggeringItem.name.split("Echo").get(0)
  val String FanPowerState = transform("REGEX", "turn (on|off) (?:the )?fan", triggeringItem.state.toString)

  if (FanPowerState !== null)
    sendCommand(Location + "FanPower", FanPowerState.toUpperCase)
end
1 Like

Vote submitted.
Very nice solution, I have around 80 commands on OH that I currently have setup using the AmazonEchoControl binding but I have each command exactly specified not like you have done which is way cooler using regex.

Off to play

I have the following setup

rule "Alexa local fan Updates"
when
	Member of EchoCmds received update
then
	logInfo("alexa-enabled-groups","Running local Fan state change")	
	val String sourceRoom = triggeringItem.name.split("_").get(0)
	val String FanPowerState = transform("REGEX", "turn (on|off) (?:the )?fan", triggeringItem.state.toString)

	if (FanPowerState !== null)
	try {sendCommand(sourceRoom + "_Fan", FanPowerState.toUpperCase)}
		catch(Throwable t) {sendCommand(sourceRoom+"_Echo_TTS","Something went wrong.")}
	logInfo("alexa-enabled-groups",sourceRoom+"_Fan changed to "+FanPowerState.toUpperCase)	
end

And this works great, one small issue is how do you get over her saying “A few things share the name fan, which one do you want?” I have so far always added a routine on the alexa app for every specific phrase I have used where all she does is say either checking for status requests or roger that for commands. How do you deal with it?
Regards
Paul

Good Morning, I have some problem to fully configure my daikin split.
That’s my item file:
clima.items

//Clima Salone
Group    gClima_Sala                    "Clima Sala"                                                            {alexa="Endpoint.Thermostat"}
Switch   Power_Clima_Sala               "Power"                                 <switch>        (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:power", alexa="PowerController.powerState"}
Number   SetPoint_Clima_Sala            "Setpoint [%.0f °C]"                    <temperature>   (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:settemp", alexa="ThermostatController.targetSetpoint"}
Number   IndoorTemp_Clima_Sala          "Temperatura Interna  [%.1f °C]"        <temperature>   (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:indoortemp", alexa="TemperatureSensor.temperature"}
Number   OutdoorTemp_Clima_Sala         "Temperatura Esterna  [%.1f °C]"        <temperature>   (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:outdoortemp"}
String   Mode_Clima_Sala                "Mode "                                 <climate>       (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:mode", alexa="ThermostatController.thermostatMode"}
String   FanSpeed_Clima_Sala            "Fan"                                    <fan>          (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:fanspeed"}

It work nice but I still cannot handle Fan and Mode.
I tried to add the tag according with the daikin documentation:

String  Mode_Clima_Sala         "Mode [%s]"     <climate>       (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:mode", alexa="ThermostatController.thermostatMode" [HEAT=HEAT,COOL=COLD,AUTO=AUTO]}

but when I add the tags the group got an error and all item is unlinked

Create a routine: if Alexa receives commons “turn in the fan” then reply with “ok”. You’ll have to make one for off as well.

As @omatzyo mentioned, you could certainly use routines to cover the turn on/off requests.

However, in my initial response, I mentioned about the use of an Alexa activity device.

Switch RoomAwarenessActivityFan "Fan" {alexa="Activity", autoupdate="false"}

The main advantage of using activities or even scenes is that they are stateless from Alexa perspective, thus autoupdate="false. Another point is that it covers all the different variation you would request the command (e.g. “power on/off” or “switch on/off”) that you could incorporate in the command regex.

val String FanPowerState = transform("REGEX", "(?:power|switch|turn) (on|off) (?:the )?fan", triggeringItem.state.toString)

If going that route, make sure to name the device exactly how you would call it otherwise you will get the device name conflict message response.

1 Like

You need to make sure to quote the parameter setting string-typed values. You should have gotten a syntax error in your openhab logs.

String  Mode_Clima_Sala         "Mode [%s]"     <climate>       (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:mode", alexa="ThermostatController.thermostatMode" [HEAT="HEAT",COOL="COLD",AUTO="AUTO"]}

Hopefully, you are connected to the US because this is a perfect usage of the ModeController interface. This is how it would look like.

//Clima Salone
Group    gClima_Sala                    "Clima Sala"                                                            {alexa="Endpoint.Thermostat"}
Switch   Power_Clima_Sala               "Power"                                 <switch>        (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:power", alexa="PowerController.powerState"}
Number   SetPoint_Clima_Sala            "Setpoint [%.0f °C]"                    <temperature>   (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:settemp", alexa="ThermostatController.targetSetpoint"}
Number   IndoorTemp_Clima_Sala          "Temperatura Interna  [%.1f °C]"        <temperature>   (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:indoortemp", alexa="TemperatureSensor.temperature"}
Number   OutdoorTemp_Clima_Sala         "Temperatura Esterna  [%.1f °C]"        <temperature>   (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:outdoortemp"}
String   Mode_Clima_Sala                "Mode "                                 <climate>       (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:mode", alexa="ThermostatController.thermostatMode" [HEAT="HEAT",COOL="COLD",AUTO="AUTO"]}
String   FanSpeed_Clima_Sala            "Fan"                                   <fan>           (gClima_Sala)   {channel="daikin:ac_unit:192_168_1_84:fanspeed", alexa="ModeController.mode" [supportedModes="AUTO=@Setting.Auto,SILENCE=@Setting.Quiet,LEVEL_1=Level One:@Value.Low,LEVEL_2=Level Two,LEVEL_3=Level Three:@Value.Medium,LEVEL_4=Level Four,LEVEL_5=Level Five:@Value.High",friendlyNames="@Setting.FanSpeed,@DeviceName.Fan",ordered=true]}

And you can change the fan speed like this:
Alexa, set the fan speed on Clima Sala to level two
Alexa, set the fan on Clima Sala to high

If you don’t have access to that capability, then you will need to use a proxy item such as a dimmer not part of the group endpoint set as PercentageController and update your device fan speed levels based on the percentage level via a rule.

1 Like

Is this still not possible with v3? @digitaldan

The workaround via Alexa app is a pain with many blinds
:slight_smile:

Unfortunately we can’t add a capability that Amazon hasn’t provided yet in their Smart Home Skill API.

Make sure to vote for the blinds integration feature request on the Alexa user voice website