'use strict';
const Alexa = require('alexa-sdk');
const APP_ID = process.env.IRKit_APPID; // IRKit app ID
// IRKitデバイス情報
const clientkey = process.env.My_ClientKey;
const deviceid = process.env.My_DeviceID;
// リモコン信号
const lightIR = {
on: { "format":"raw",
"freq":38,
"data":[18031,8755,1190,1037,1190,3228,1190,1037,1190,1037,1190,1037,
1190,1037,1190,1037,1190,3228,1190,3228,1190,1037,1190,3228,
1190,3228,1190,1037,1190,3228,1190,3228,1190,1037,1190,3228,
1190,3228,1190,3228,1190,3228,1190,3228,1190,1037,1190,1037,
1190,1037,1190,1037,1190,1037,1190,1037,1190,1037,1190,1037,
1190,3228,1190,3228,1190,3228,1190,65535,0,18031,18031,4400,
1190,65535,0,65535,0,60108,17421,4400,1190]
},
off: {"format":"raw",
"freq":38,
"data":[18031,8755,1190,1037,1190,3228,1190,1037,1190,1037,1190,1037,
1190,1037,1190,1037,1190,3228,1190,3228,1190,1037,1190,3228,
1190,3228,1190,1037,1190,3228,1190,3228,1190,1037,1190,1037,
1190,3228,1190,3228,1190,3228,1190,3228,1190,1037,1190,1037,
1190,1037,1190,3228,1190,1037,1190,1037,1190,1037,1190,1037,
1190,3228,1190,3228,1190,3228,1190,65535,0,18031,18031,4400,
1190,65535,0,65535,0,60108,17421,4400,1190]
}
};
// 言語リソース
const languageStrings = {
"ja": { // 日本語
translation: {
WELCOME_MESSAGE: "ようこそ、アイアールキットリモコンで家電を制御します。何をしましょうか?",
HELP_MESSAGE: "アイアールキットリモコンで家電を制御します。",
CANCEL_MESSAGE: "アイアールキットリモコンを中止します。",
STOP_MESSAGE: "アイアールキットリモコンを終了します。",
UNKNOWN_MESSAGE: "すみません、分かりません。",
RETRY_MESSAGE: "すみません、もう一度お願いします。",
LIGHT_ON: "明りを点けます。",
LIGHT_OFF: "明りを消します。",
},
},
};
// リモコン信号の送信
function sendIR(ir, callback) {
var https = require("https");
var qs = require("querystring");
var postData = qs.stringify({
clientkey: clientkey,
deviceid: deviceid,
message: JSON.stringify(ir)
});
var req = https.request({
host: "api.getirkit.com",
path: "/1/messages",
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
"Content-Length": postData.length
}
}, function (res) {
callback(null, "success");
});
req.write(postData);
req.end();
}
function onLightOn(callback) {
sendIR(lightIR.on, callback); // 明かりを点ける
}
function onLightOff(callback) {
sendIR(lightIR.off, callback); // 明かりを消す
}
const handlers = {
'LaunchRequest': function () {
this.emit(":ask", this.t("WELCOME_MESSAGE"));
},
'LightControl': function () {
// 照明インテントのハンドラ
var session = this.event.session; // セッション
var apid = session.application.applicationId; // アプリケーションID
var now = this.event.request.timestamp; // 日付&時刻
var intent = this.event.request.intent; // インテント
var onoff = intent.slots.Switch.value; // スロット{Switch}の値
switch(onoff){
case 'オン':
case '点け':
case '点灯':
this.emit(":tell", this.t("LIGHT_ON"));
onLightOn(this.callback);
break;
case 'オフ':
case '消す':
case '消し':
case '切る':
case '消灯':
this.emit(":tell", this.t("LIGHT_OFF"));
onLightOff(this.callback);
break;
default:
this.emit(":ask", this.t("RETRY_MESSAGE"));
break;
}
},
'AMAZON.HelpIntent': function () {
this.emit(":ask", this.t("HELP_MESSAGE"));
},
'AMAZON.CancelIntent': function () {
this.emit(":tell", this.t("CANCEL_MESSAGE"));
this.callback(null);
},
'AMAZON.StopIntent': function () {
this.emit(":tell", this.t("STOP_MESSAGE"));
this.callback(null);
},
'Unhandled': function() {
this.emit(":ask", this.t("UNKNOWN_MESSAGE"));
}
};
// Lambda関数ハンドラー
// パラメタ
// event: イベントデータ
// context: ランタイム情報
// callback: 呼び出し元へ情報を返すためのコールバック関数
exports.handler = function (event, context, callback) {
var session = event.session; // セッション
var apid = session.application.applicationId; // アプリケーションID
const alexa = Alexa.handler(event, context, callback);
alexa.appId = APP_ID;
// To enable string internationalization (i18n) features, set a resources object.
alexa.resources = languageStrings; // 言語リソースを設定
alexa.registerHandlers(handlers); // ハンドラを登録
alexa.execute();
};
|