var config = {};
config.IOT_BROKER_ENDPOINT = "abcdefghijk.iot.us-east-1.amazonaws.com".toLowerCase();
config.IOT_BROKER_REGION = "us-east-1";
config.IOT_THING_2 = "Thing1";
var AWS = require('aws-sdk');
AWS.config.region = config.IOT_BROKER_REGION;
AWS.config.update({accessKeyId:'xxxxxxxxxxxxxxxxxxxx', secretAccessKey:'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'});
var iotdata = new AWS.IotData({endpoint: config.IOT_BROKER_ENDPOINT});
// namespaces
const NAMESPACE_CONTROL = "Alexa.ConnectedHome.Control";
const NAMESPACE_DISCOVERY = "Alexa.ConnectedHome.Discovery";
// discovery
const REQUEST_DISCOVER = "DiscoverAppliancesRequest";
const RESPONSE_DISCOVER = "DiscoverAppliancesResponse";
// control
const REQUEST_TURN_ON = "TurnOnRequest";
const RESPONSE_TURN_ON = "TurnOnConfirmation";
const REQUEST_TURN_OFF = "TurnOffRequest";
const RESPONSE_TURN_OFF = "TurnOffConfirmation";
// errors
const ERROR_UNSUPPORTED_OPERATION = "UnsupportedOperationError";
const ERROR_UNEXPECTED_INFO = "UnexpectedInformationReceivedError";
// entry
exports.handler = function (event, context, callback) {
log("Received Directive", event);
var requestedNamespace = event.header.namespace;
var response = null;
try {
switch (requestedNamespace) {
case NAMESPACE_DISCOVERY:
response = handleDiscovery(event);
break;
case NAMESPACE_CONTROL:
response = handleControl(event);
break;
default:
log("Error", "Unsupported namespace: " + requestedNamespace);
response = handleUnexpectedInfo(requestedNamespace);
break;
}// switch
} catch (error) {
log("Error", error);
}// try-catch
callback(null, response);
}// exports.handler
var handleDiscovery = function(event) {
var header = createHeader(NAMESPACE_DISCOVERY, RESPONSE_DISCOVER);
var payload = {
"discoveredAppliances": []
};
return createDirective(header,payload);
}// handleDiscovery
var handleControl = function(event) {
var response = null;
var requestedName = event.header.name;
switch (requestedName) {
case REQUEST_TURN_ON :
response = handleControlTurnOn(event);
break;
case REQUEST_TURN_OFF :
response = handleControlTurnOff(event);
break;
default:
log("Error", "Unsupported operation" + requestedName);
response = handleUnsupportedOperation();
break;
}// switch
return response;
}// handleControl
var handleControlTurnOn = function(event) {
var thingPicker= config.IOT_THING_2;
console.log("Turning On the LED now");
console.log("check 1");
var update = {
"desired" : {
"led" : 1
}
};
console.log("check 2");
console.log(thingPicker);
iotdata.updateThingShadow( {payload:JSON.stringify(update),
thingName: thingPicker
}, function(err, data) {
console.log("check 4");
if (err) {
console.log("check 5");
console.log(err);
} else {
console.log("check 6");
console.log(data);
}
});
var header = createHeader(NAMESPACE_CONTROL,RESPONSE_TURN_ON);
var payload = {};
return createDirective(header,payload);
}// handleControlTurnOn
var handleControlTurnOff = function(event) {
var thingPicker= config.IOT_THING_2;
console.log("Turning Off the LED now");
var update = {
"desired" : {
"led" : 0
}
};
console.log(thingPicker);
iotdata.updateThingShadow({
payload: JSON.stringify(update),
thingName: thingPicker
}, function(err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
var header = createHeader(NAMESPACE_CONTROL,RESPONSE_TURN_OFF);
var payload = {};
return createDirective(header,payload);
}// handleControlTurnOff
var handleUnsupportedOperation = function() {
var header = createHeader(NAMESPACE_CONTROL,ERROR_UNSUPPORTED_OPERATION);
var payload = {};
return createDirective(header,payload);
}// handleUnsupportedOperation
var handleUnexpectedInfo = function(fault) {
var header = createHeader(NAMESPACE_CONTROL,ERROR_UNEXPECTED_INFO);
var payload = {
"faultingParameter" : fault
};
return createDirective(header,payload);
}// handleUnexpectedInfo
// support functions
var createMessageId = function() {
var d = new Date().getTime();
var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = (d + Math.random()*16)%16 | 0;
d = Math.floor(d/16);
return (c=='x' ? r : (r&0x3|0x8)).toString(16);
});
return uuid;
}// createMessageId
var createHeader = function(namespace, name) {
return {
"messageId": createMessageId(),
"namespace": namespace,
"name": name,
"payloadVersion": "2"
};
}// createHeader
var createDirective = function(header, payload) {
return {
"header" : header,
"payload" : payload
};
}// createDirective
var log = function(title, msg) {
console.log('**** ' + title + ': ' + JSON.stringify(msg));
}// log
与AWS Lambda Function相关的一段代码,它是智能家庭API,当它针对测试事件运行以打开灯时,它给出状态代码的“InvalidRequestException”:400
针对代码运行的测试事件是:`{
“标题”:{
“messageId”:“5d599a53-fe40-405f-b0ab-233611e2dc5c”,
“name”:“TurnOnRequest”,
“namespace”:“Alexa.ConnectedHome.Control”,
“payloadVersion”:“2”
},
“payload”:{
“accessToken”:“acc355t0ken”
}
}`
任何人都可以帮我解决这个异常。 提前致谢