Line Message APIからデバイスを制御しようと思いましたが、webhookをするためにhttpsサーバが必要です。どうしようか困ったのですが、IBM Cloudなら無料枠でNode-REDをhttpsサーバで動かせた上に、とっても簡単だったので、やり方をまとめました。
IBM CloudやLine Message APIの登録は、様々なサイトがありますのでそちらを参照してください。
#システム構成
作ったシステムの概要はこちらです。
Line Message APIから送信されるメッセージをIBM Cloud上のNode-REDで受け取り、Internet of Things platformでゲートウェイに送信します。
ゲートウェイではメッセージを解析して、920MHz無線でマイコンボードに送信して、マイコンボードからNeoPixelを光らせます。このとき、ゲートウェイはメッセージや無線の内容に応じてLineで返信をしました。
#完成した様子
動画はこちら
#クラウド(IBM Cloud/ Node-RED)
クラウド側のNode-REDはこれだけです。
Functionノードの中身
Functionノードでのポイントは3つ。
- Lineからはメッセージが配列で送られてくるようなので分割するようにしました。
- Internet of Things platformではdeviceIDにlineのuserIDを使用したので、userIDをdeviceIDに変更しています。
- メッセージのテキストの他に、返信用にreplyTokenを付け加えました。
for (var e of msg.payload.events){
if(msg)
node.send({
deviceId: e.source.userId,
payload: {
msg: e.message.text,
replyToken: e.replyToken
}
});
}
return;
#クラウド(Lineの設定)
ここにログインして「新規プロバイダー作成」からBOTを作ります。
BOTを作成したら、Webhookを利用するにして、Node-REDが動いているURL/callbackをWebhook URLに設定します。
また、今回はBOTのYour user IDをIBM CloudのInternet Of Things PlatformのデバイスIDに使用するため、メモしておきます。
#クラウド(IBM Cloud/Internet Of Things Platform)
1.この画面の「デバイスの追加」ボタンを押します。
2.デバイスタイプは任意の文字を、デバイスIDにはLineのYour User IDを入力して、「次へ」をクリック
3.デバイス情報は必要に応じて情報を入力し、「次へ」をクリック。
4.次の認証トークンも何もせず「次へ」をクリック
5.次の「デバイスの資格情報」は重要な情報があるので、このままにしておいてください。
ゲートウェイの設定
Raspberry PiにNode-REDをインストールする方法はこちらを参照してください。
インストールが完了したら、ノードを次のように配置します。
それぞれのFunctionノードのソースコードです。Lineのアクセストークンは各ページのアクセストークンを入力してください。
switch(msg.payload.msg) {
case 1:
case 2:
case 3:
case '1':
case '2':
case '3':
return [{
payload: msg.payload.msg,
org: msg.payload
},null];
default:
return [null,msg];
}
const AccessToken = "lineのアクセストークン";
var newMsg = {
headers: {'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + AccessToken,
},
'payload': {
'replyToken': msg.payload.replyToken,
'messages': [{
'type': 'text',
'text': 'ごめんね..解らない m(_ _)m',
}],
}
}
return newMsg;
const AccessToken = "lineのアクセストークン";
var replyMsg;
if(msg.payload.result === 0) {
replyMsg = "了解!!"
} else {
replyMsg = "無線でエラーが出ました"
}
return {
headers: {'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + AccessToken,
},
'payload': {
'replyToken': msg.org.replyToken,
'messages': [{
'type': 'text',
'text': replyMsg,
}],
}
}
#デバイス側のプログラム
Lazurite SubGHzでLineから送られてきたメッセージが1,2,3の時にそれぞれの光り方をするプログラムのソースコードです。
こちらにソースコードを置きました。
急いで書いたので雑になってしまいました。Lazuriteのブログの方に、もう少し丁寧に記載していきますのでよろしくお願いします!!