Created
March 14, 2018 14:27
-
-
Save thgbarros/f9f76043a6982bc8409040e55a830028 to your computer and use it in GitHub Desktop.
Alexa Smart Home Function Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
exports.handler = function (request, context) { | |
if (request.directive.header.namespace === 'Alexa.Discovery' && request.directive.header.name === 'Discover') { | |
//log("DEBUG:", "Discover request", JSON.stringify(request)); | |
//handleDiscovery(request, context, ""); | |
console.log("Olá discovery") | |
} | |
else if (request.directive.header.namespace === 'Alexa.PowerController') { | |
if (request.directive.header.name === 'TurnOn' || request.directive.header.name === 'TurnOff') { | |
log("DEBUG:", "TurnOn or TurnOff Request", JSON.stringify(request)); | |
handlePowerControl(request, context); | |
} | |
} | |
function handleDiscovery(request, context) { | |
var payload = { | |
"endpoints": | |
[ | |
{ | |
"endpointId": "demo_id", | |
"manufacturerName": "Smart Device Company", | |
"friendlyName": "Bedroom Outlet", | |
"description": "Smart Device Switch", | |
"displayCategories": ["SWITCH"], | |
"cookie": { | |
"key1": "arbitrary key/value pairs for skill to reference this endpoint.", | |
"key2": "There can be multiple entries", | |
"key3": "but they should only be used for reference purposes.", | |
"key4": "This is not a suitable place to maintain current endpoint state." | |
}, | |
"capabilities": | |
[ | |
{ | |
"type": "AlexaInterface", | |
"interface": "Alexa", | |
"version": "3" | |
}, | |
{ | |
"interface": "Alexa.PowerController", | |
"version": "3", | |
"type": "AlexaInterface", | |
"properties": { | |
"supported": [{ | |
"name": "powerState" | |
}], | |
"retrievable": true | |
} | |
} | |
] | |
} | |
] | |
}; | |
var header = request.directive.header; | |
header.name = "Discover.Response"; | |
log("DEBUG", "Discovery Response: ", JSON.stringify({ header: header, payload: payload })); | |
context.succeed({ event: { header: header, payload: payload } }); | |
} | |
function log(message, message1, message2) { | |
console.log(message + message1 + message2); | |
} | |
function handlePowerControl(request, context) { | |
// get device ID passed in during discovery | |
var requestMethod = request.directive.header.name; | |
// get user token pass in request | |
var requestToken = request.directive.payload.scope.token; | |
var powerResult; | |
if (requestMethod === "TurnOn") { | |
// Make the call to your device cloud for control | |
// powerResult = stubControlFunctionToYourCloud(endpointId, token, request); | |
powerResult = "ON"; | |
} | |
else if (requestMethod === "TurnOff") { | |
// Make the call to your device cloud for control and check for success | |
// powerResult = stubControlFunctionToYourCloud(endpointId, token, request); | |
powerResult = "OFF"; | |
} | |
var contextResult = { | |
"properties": [{ | |
"namespace": "Alexa.PowerController", | |
"name": "powerState", | |
"value": powerResult, | |
"timeOfSample": "2017-09-03T16:20:50.52Z", //retrieve from result. | |
"uncertaintyInMilliseconds": 50 | |
}] | |
}; | |
var responseHeader = request.directive.header; | |
responseHeader.name = "Alexa.Response"; | |
responseHeader.messageId = responseHeader.messageId + "-R"; | |
var response = { | |
context: contextResult, | |
event: { | |
header: responseHeader | |
}, | |
payload: {} | |
}; | |
log("DEBUG", "Alexa.PowerController ", JSON.stringify(response)); | |
context.succeed(response); | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment