この記事を見てできること
LINEBOTに「スタート」とメッセージを送ると遠隔操作で監視をしてくれるものが作れます。
異常があったら必要以上にしつこく知らせてくれます。
(処理をストップさせる処理は書いてないです)
obnizの配線
コード内にも書いてありますが、人感センサーは {vcc:11, signal:10, gnd:9}
につなぎます。
ソースコード
はじめobniz.onconnectをするタイミングでハマって動かなかった。
handleEventよりも先にobniz.onconnectをしておく必要がある。
'use strict';
// obniz呼び出し
const Obniz = require('obniz');
var obniz = new Obniz("XXXXXX"); // Obniz_ID に自分のIDを入れます
const express = require('express');
const line = require('@line/bot-sdk');
const PORT = process.env.PORT || 3000;
const config = {
channelAccessToken: 'XXXXXX',
channelSecret: 'XXXXXX'
};
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接続//////////
// スコープ(変数の影響範囲)を最上部に置いておく
var sensor;
var led;
// 接続した段階でセンサーの準備はしておく
obniz.onconnect = async function(){
obniz.display.clear();
obniz.display.print("obniz LINE bots");
sensor = obniz.wired("HC-SR505", {vcc:11, signal:10, gnd:9});
led = obniz.wired("LED",{anode:0,cathode:1});
}
function handleEvent(event) {
if (event.type !== 'message' || event.message.type !== 'text') {
return Promise.resolve(null);
}
let mes = ''
if(event.message.text === 'スタート'){
mes = 'OK!監視始めるね!'; //メッセージだけ先に処理
// ディスプレイ処理
obniz.display.clear(); // 一旦クリアする
obniz.display.print("Hello obniz!!!!!!"); // Hello obniz!という文字を出す
// setIntervalで間隔を作る
setInterval(async function(){
// 非同期で取得
var detected = await sensor.getWait();
// console.log(detected);
// displayに反映
obniz.display.clear(); // 一旦クリアする
// obniz.display.print(detected); // 英語が出力できる
// 近づいてきたら判定する
if(detected == true ){ // 何かを感知したら
obniz.display.clear(); // 一旦クリアする
obniz.display.print("someone moving!");
led.on(); // ライトON
getAskObniz(event.source.userId); // message
}else{
led.off();
}
},1000); // 1000ミリ秒 = 1秒
}else{ mes = event.message.text;}
return client.replyMessage(event.replyToken, {
type: 'text',
text: mes
});
}
const getAskObniz = async (userId) => {
await client.pushMessage(userId, {
type: 'text',
text: "誰かいるかも?",
});
}
app.listen(PORT);
console.log(`Server running at ${PORT}`);
XXXXXXになっている箇所は自分のObniz IDや、channelAccessToken、channelSecretを入れることをお忘れなく。
ほぼ完成
ここまで機能としては完成です。こんな感じで動きます。
人を感知すると知らせてくれます。
このままでは終われない
こういった手で触れるものは見た目も大事。そして遊び心も必要です(たぶん)
この時点で平日の夜中2時を回っている。当然明日も朝から仕事である。
考えても何もアイデア浮かばない。。
ティッシュがあるからてるてる坊主?
いや、最近ティッシュやトイレットペーパーがなかなか売ってないから無駄使いはダメだ...
こんな感じで動きます
人を検知すると光ります。#obniz #映画泥棒 pic.twitter.com/xFeI6oJ136
— shima-07 (@y_kawashima_) April 6, 2020
obnizで作った映画泥棒くんは、誰かが来たことをLINEでお知らせしてくれる#obniz #IoT #人感センサー pic.twitter.com/sqEylRzefS
— shima-07 (@y_kawashima_) April 6, 2020
最後に
物理的に触れるものは愛着湧きますね。もっと時間がある時にもっとそれっぽく作りたい。
あと、LINEでストップとメッセージしたらモニタリングがストップするような処理も書きたい。