>100 Views
November 14, 16
スライド概要
Introduction of Alexa Smart Home Skill
クラウドで働くIoTおじさん
Alexa Smart Home Skill JAWS-UG IoT専門支部 IoTサロン 2016-11 合同開催スペシャル
市川 純 (Jun Ichikawa) @sparkgene Recruit Marketing Partners infrastructure engineer favorite services: Route 53、Lambda、AWS IoT
Alexa Skill types • Custom Interaction Model(Custom Skill) • Smart Home Skill • Flash Briefing Skill
Custom Skill • Build a skill with a custom interaction model • Customers say invocation name to use it. “Alexa, ask Uber to request a ride” • Most flexible, but most complex to customers.
Smart Home Skill • Easy to use for customer. • Customers say “Alexa, turn on living room lights” • This skill is for cloud connected smart home devices.
Flash Briefing Skill • It can be integrated into "Alexa Flash Briefing” • Customers can simply ask “Alexa, what’s my Flash Briefing” to hear your content • Currently Flash Briefing is only available for the English (U.S.) language
DIFFERENCE BETWEEN CUSTOM SKILL
Custom Skill • design your own interaction model • interaction name is required • customer need to remember interaction name or invocation phrase • you can use any server to host skill
Smart Home Skill • built-in interaction model • natural utterances to control device • Alexa need a grant permissions (OAuth) to retrieve device information and control device • Skill must use AWS Lambda function
Mange devices on cloud Customer need to register their devices to the device makers cloud.
On personal use, you don’t need to register devices. Just hard code in your lambda function.
HOW TO MAKE IT
Demo Video https://youtu.be/nT20o2uv2h0
demo’s architecture this slide explain only here see here to create custom skill version architecture https://www.hackster.io/sparkgene/alexa-makes-home-smarter-7e1981
Prerequisites to Smart Home Skill Development • Amazon developer account – https://developer.amazon.com/ • AWS account • Knowledge of Java, Node.js, or Python as Lambda functions can be written in any of these language • A basic understanding of OAuth 2.0
Three steps to create Skill • Create “Login With Amazon”(LWA) security profile • register Smart Home Skills • Create Lambda function step-by-step article ・https://developer.amazon.com/public/solutions/alexa/alexa-skillskit/docs/steps-to-create-a-smart-home-skill ・http://qiita.com/sparkgene/items/055d7864c92a80b0c040
Create Login With Amazon https://developer.amazon.com/home.html
• enter “Allowed Return URLs” in the Web Settings after register skill Account Linking.
register Smart Home Skills https://developer.amazon.com/edw/home.html#/skill/create/ • Update “End point” after creating lambda function
Account Linking https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/steps-tocreate-a-smart-home-skill#finish-registering-your-skill-in-the-developer-portal • To finish registering your skill, you must configure OAuth 2.0 for your skill, which is used for account linking. You can use Login with Amazon or another provider for this section. • Use “Redirect URL” to allow redirect at OAuth provider
Authoization URL: https://www.amazon.com/ap/oa?redirect_uri=https://pitangui.amazon.com/api/skill/link/<ID>
Create Lambda function • Alexa skill is only available on us-east1 and eu-west-1 region • Node.js blue print is available – alexa-smart-home-skill-adapter
Smart Home Skill API • Smart Home Skill API communicate with your skill(skill adapter) with same basic structure. • Skill adapter directives contain two top-level objects – header – payload
header and payload
"header": {
"messageId": "6d6d6e14-8aee-473e-8c24-0d31ff9c17a2",
"name": "DiscoverAppliancesRequest",
"namespace": "Alexa.ConnectedHome.Discovery",
"payloadVersion": "2”
},
"payload": {
"accessToken": "OAuth Token here"
}
accessToken always include in request.
use the access token to know who’s request.
DiscoverAppliancesRequest The request come on • When you say “Alexa, discover devices” • hourly after your device register on Alexa (device health check)
{
"header": {
"messageId": "6d6d6e14-8aee-473e-8c24-0d31ff9c17a2",
"name": "DiscoverAppliancesRequest",
"namespace": "Alexa.ConnectedHome.Discovery",
"payloadVersion": "2"
},
"payload": {
"accessToken": "OAuth Token here"
}
}
DiscoverAppliancesResponse
{
"header": {
"messageId": "ff746d98-ab02-4c9e-9d0d-b44711658414",
"name": "DiscoverAppliancesResponse",
"namespace": "Alexa.ConnectedHome.Discovery",
"payloadVersion": "2"
},
"payload": {
"discoveredAppliances": []
}
}
discoveredAppliances "discoveredAppliances": [ { "actions": [ ”turnOn", The action which device support ”turnOff” ], "additionalApplianceDetails": { "extraDetail1": "optionalDetailForSkillAdapterToReferenceThisDevice” }, "applianceId": "unique Device Id", "friendlyDescription": "description that is shown to customer", "friendlyName": " Bedroom Light", "isReachable": true, "manufacturerName": "your Manufacturer Name", "modelName": "fancyThermostat", "version": "your software version number here." } ]
actions • turnOff • turnOn • setTargetTemperature • incrementTargetTemperature • decrementTargetTemperature • setPercentage • incrementPercentage • decrementPercentage – “Alexa, turn off the <device name>” – “Alexa, turn on the <device name>” – “Alexa, set the <room name> to <number> degrees” – “Alexa, increase the <device name> by <number> degrees” – “Alexa, decrease <device name> by <number> degrees” – “Alexa, set <name> to <number> percent” – “Alexa, increase <device name> by <number> percent” – “Alexa, decrease <device name> by <number> percent”
TurnOnRequest
{
"header": {
"messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688",
"name": "TurnOnRequest",
"namespace": "Alexa.ConnectedHome.Control",
"payloadVersion": "2"
},
"payload": {
"accessToken": "[OAuth Token here]",
"appliance": {
"additionalApplianceDetails": {},
"applianceId": "[Device ID for Ceiling Fan]"
}
}
}
TurnOnConfirmation
{
"header": {
"messageId": "26fa11a8-accb-4f66-a272-8b1ff7abd722",
"name": "TurnOnConfirmation",
"namespace": "Alexa.ConnectedHome.Control",
"payloadVersion": "2"
},
"payload": {}
}
Error Response • TargetOfflineError • BridgeOfflineError • NoSuchTargetError – target device is not connected to the customer’s device cloud or is not on. – target device is connected to a home automation hub or bridge, which is powered off. – target device cannot be found, meaning it was never configured by the enduser. • ExpiredAccessTokenError • ValueOutOfRangeError • and more.. – the access token used for authentication has expired and is no longer valid. – customer request would set a target value to a value out of its supported range. skill adapter should respond with the appropriate error type, and supporting information
ValueOutOfRangeError
{
"header":{
"namespace":"Alexa.ConnectedHome.Control",
"name":" ValueOutOfRangeError",
"payloadVersion":"2",
"messageId":"697fe957-c842-4545-a159-8a8c75fbe5bd"
},
"payload":{
"minimumValue":15.0,
"maximumValue":30.0
}
}
DISCOVERY DEMO - enable skill Login with Amazon discover device Turn on request
Questions?
appendix • slide demo skill – https://github.com/sparkgene/smart_ho me_skill/blob/master/aws_iot_device.py • Raspbery Pi setup guide for the demo – https://www.hackster.io/sparkgene/alexa -makes-home-smarter-7e1981