Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8829

obnizとLineBotで防犯ツールを作ってみた(NO MORE XX 泥棒)

$
0
0

この記事を見てできること

LINEBOTに「スタート」とメッセージを送ると遠隔操作で監視をしてくれるものが作れます。
異常があったら必要以上にしつこく知らせてくれます。
(処理をストップさせる処理は書いてないです)

obnizの配線

配線はこんな感じ。
IMG_0140.JPG

コード内にも書いてありますが、人感センサーは{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を入れることをお忘れなく。

ほぼ完成

ここまで機能としては完成です。こんな感じで動きます。
IMG_0141.jpg
人を感知すると知らせてくれます。

このままでは終われない

こういった手で触れるものは見た目も大事。そして遊び心も必要です(たぶん)

この時点で平日の夜中2時を回っている。当然明日も朝から仕事である。

考えても何もアイデア浮かばない。。
ティッシュがあるからてるてる坊主?
いや、最近ティッシュやトイレットペーパーがなかなか売ってないから無駄使いはダメだ...

「よし、映画館のあいつを作ろう」
IMG_0134.JPG

こんな感じで動きます

最後に

物理的に触れるものは愛着湧きますね。もっと時間がある時にもっとそれっぽく作りたい。
あと、LINEでストップとメッセージしたらモニタリングがストップするような処理も書きたい。


Viewing all articles
Browse latest Browse all 8829

Trending Articles