Amazon Echoで照明をオン・オフする 4(Alexa編)
※ はてなブログから引っ越しました(2019/10/21)
今回は、AlexaスキルからLambda経由で前回作成したSQSにメッセージを送って、照明をオン・オフする処理を作成する。
Lambda関数作成
Alexaスキルからの命令を受け取って、SQSにメッセージを投げるLambda関数を作成する。
alexa-sdkをインストール
$ npm install --save alexa-sdk
次の2つのファイルを作成
index.js
const AWS = require('aws-sdk');
const Alexa = require('alexa-sdk');
let sqs = new AWS.SQS({region:'ap-northeast-1'});
let url = process.env.SQS_QUEUE_URL;
var state = '-1';
AWS.config.update({accessKeyId: 'KEY', secretAccessKey: 'SECRET'});
function changeState(state) {
var params = {
MessageBody: state,
QueueUrl: url,
DelaySeconds: 0,
MessageAttributes: {
LightStatus: {
DataType: 'Number',
StringValue: state
},
},
};
sqs.sendMessage(params, function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
});
};
const handlers = {
'turnOn' : function() {
changeState('1');
this.emit(':responseReady');
},
'turnOff' : function() {
changeState('0');
this.emit(':responseReady');
}
};
exports.handler = function(event, context, callback) {
const alexa = Alexa.handler(event, context, callback);
alexa.appId = process.env.APP_ID // APP_ID is your skill id which can be found in the Amazon developer console where you create the skill.
alexa.registerHandlers(handlers);
alexa.execute();
};
package.json
{
"name": "light",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"alexa-sdk": "^1.0.25"
}
}
zipファイルにしてアップロードする
$ zip -r light.zip *
環境変数の設定
APP_IDには後ほど作成するAlexaスキルのIDを、SQS_QUEUE_URLには前回作成したSQSキューのURLを設定する。
Alexaスキル作成
Alexaコンソールにログインしてスキルを作成する。
ログインに使用するアカウントは、Amazon Echoを買ったamazon.co.jpのアカウントを使う。1
呼び出し名
「スキルの呼び出し名」にAlexaで呼び出すときの名前を設定する。ここでは、「ほげほげまん」とした。
インテント
インテントには照明をオンにするときのフレーズを設定する。
この例では、「Alexa、ほげほげまんであかるくして」、「Alexa、ほげほげまんでつけて」と言うと照明がオンになる。
同様に照明をオフにするときのフレーズを設定する。
エンドポイント
ここに表示されている「スキルID」をLambda関数の環境変数APP_IDに設定する。
「デフォルトの地域」にLambda関数のARNを設定する
動作確認
照明オン・オフをAmazon Echoからできることを確認
照明オン
- 「Alexa、ほげほげまんであかるくして」
- 「Alexa、ほげほげまんでつけて」
照明オフ
-「Alexa、ほげほげまんでくらくして」 -「Alexa、ほげほげまんできって」 -「Alexa、ほげほげまんでけして」
Lambda関数で使ったnode.jsは詳しくないのでもっと良い方法があると思う。スキルの設定ももっとスマートな方法があるはず。でもこれで動くことは動く。
作成して時間が経っているので、記憶があやふやになり、あまり詳しく書けなかったのが反省。
amazon.comのアカウントでログインしたら、Echoと関連づけられていなかった。 ↩︎