この記事を見てできること
LINEBOTに「スタート」とメッセージを送ると遠隔操作で監視をしてくれるものが作れます。
異常があったら必要以上にしつこく知らせてくれます。
(処理をストップさせる処理は書いてないです)
obnizの配線
コード内にも書いてありますが、人感センサーは{vcc:11, signal:10, gnd:9}
につなぎます。
ソースコード
はじめobniz.onconnectをするタイミングでハマって動かなかった。
handleEventよりも先にobniz.onconnectをしておく必要がある。
line_sensor.js
'use strict';// obniz呼び出しconstObniz=require('obniz');varobniz=newObniz("XXXXXX");// Obniz_ID に自分のIDを入れますconstexpress=require('express');constline=require('@line/bot-sdk');constPORT=process.env.PORT||3000;constconfig={channelAccessToken:'XXXXXX',channelSecret:'XXXXXX'};constapp=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));});constclient=newline.Client(config);// obniz接続//////////// スコープ(変数の影響範囲)を最上部に置いておくvarsensor;varled;// 接続した段階でセンサーの準備はしておくobniz.onconnect=asyncfunction(){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});}functionhandleEvent(event){if(event.type!=='message'||event.message.type!=='text'){returnPromise.resolve(null);}letmes=''if(event.message.text==='スタート'){mes='OK!監視始めるね!';//メッセージだけ先に処理// ディスプレイ処理obniz.display.clear();// 一旦クリアするobniz.display.print("Hello obniz!!!!!!");// Hello obniz!という文字を出す// setIntervalで間隔を作るsetInterval(asyncfunction(){// 非同期で取得vardetected=awaitsensor.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();// ライトONgetAskObniz(event.source.userId);// message}else{led.off();}},1000);// 1000ミリ秒 = 1秒}else{mes=event.message.text;}returnclient.replyMessage(event.replyToken,{type:'text',text:mes});}constgetAskObniz=async(userId)=>{awaitclient.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でストップとメッセージしたらモニタリングがストップするような処理も書きたい。