プロトアウトスタジオという、プログラミングスクールではなく、プロトタイピングをアウトプットするというスクールに参加し始めた人の記事です。
第3回授業の宿題、「LINEbotとIoTを繋げる」については、obnizのボタン操作内容をLINEbotに出力させるまでで時間切れとなりました。。
'use strict';
// obniz呼び出し
const Obniz = require('obniz');
var obniz = new Obniz("自分のID"); // Obniz_ID に自分のIDを入れます
const express = require('express');
const line = require('@line/bot-sdk');
const axios = require('axios');
const PORT = process.env.PORT || 3000;
const config = {
channelAccessToken: 'xxxxx',
channelSecret: 'xxxxx'
};
const app = express();
app.post('/webhook', line.middleware(config), (req, res) => {
console.log(req.body.events);
Promise
.all(req.body.events.map(handleEvent))
.then((result) => res.json(result));
});
const client = new line.Client(config);
// obniz接続
obniz.onconnect = async function () {
obniz.display.clear();
obniz.display.print("obniz meets LINE Bot!");
//↓obnizの操作をトリガーにLINEに出力する
obniz.switch.onchange = async function(state) {
if (state === "push") {
// 押されたとき
console.log("pushed");
// ディスプレイ処理
obniz.display.clear(); // 一旦クリアする
obniz.display.print("pushed"); // pushed という文字を出す
var replyText ='ボタンが押されたよ';
console.log(replyText);
await client.pushMessage('Ud0e928eaf56d8ac9f4091fd3da585c00', {
type: 'text',
text: replyText,
});
};
//↑obnizの操作をトリガーにLINEに出力する
};
}
function handleEvent(event) {
if (event.type !== 'message' || event.message.type !== 'text') {
return Promise.resolve(null);
}
let mes = '';
//↑LINEに入力した文字をobnizに出力するまで
mes = 'obnizに表示するよ';
client.replyMessage(event.replyToken, {
type: 'text',
text: mes
});
console.log(event.message.text);
obniz.display.clear(); // 一旦クリアする
obniz.display.print(event.message.text); // LINEで入力されたテキストをobnizに出力する
//↑LINEに入力した文字をobnizに出力するまで
};
app.listen(PORT);
console.log(`Server running at ${PORT}`);
obnizの情報をLINEbotに渡して出力させるまでの導線はできているので、今後はボタン操作ではなくobniz側のセンサー検知結果等を渡せるようにします。