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

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

## obnizの配線
配線はこんな感じ。
![IMG_0140.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121887/8074d21c-c583-121b-5a1a-fba8e030351a.jpeg)


コード内にも書いてありますが、人感センサーは``` {vcc:11, signal:10, gnd:9}``` につなぎます。

## ソースコード

はじめobniz.onconnectをするタイミングでハマって動かなかった。
handleEventよりも先にobniz.onconnectをしておく必要がある。

```line_sensor.js
'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を入れることをお忘れなく。

## ほぼ完成
ここまで機能としては完成です。こんな感じで動きます。
<img width="414" alt="IMG_0141.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121887/e2312132-bcf2-2717-3df5-04fc746e30c3.jpeg">
人を感知すると知らせてくれます。


## このままでは終われない
こういった手で触れるものは見た目も大事。そして遊び心も必要です（たぶん）

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


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

「よし、映画館のあいつを作ろう」
![IMG_0134.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121887/e91cf7bf-ebd1-ab53-e75d-e930f0f071a6.jpeg)

## こんな感じで動きます
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">人を検知すると光ります。<a href="https://twitter.com/hashtag/obniz?src=hash&amp;ref_src=twsrc%5Etfw">#obniz</a> <a href="https://twitter.com/hashtag/%E6%98%A0%E7%94%BB%E6%B3%A5%E6%A3%92?src=hash&amp;ref_src=twsrc%5Etfw">#映画泥棒</a> <a href="https://t.co/xFeI6oJ136">pic.twitter.com/xFeI6oJ136</a></p>&mdash; shima-07 (@y_kawashima_) <a href="https://twitter.com/y_kawashima_/status/1247227303551066113?ref_src=twsrc%5Etfw">April 6, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">obnizで作った映画泥棒くんは、誰かが来たことをLINEでお知らせしてくれる<a href="https://twitter.com/hashtag/obniz?src=hash&amp;ref_src=twsrc%5Etfw">#obniz</a> <a href="https://twitter.com/hashtag/IoT?src=hash&amp;ref_src=twsrc%5Etfw">#IoT</a> <a href="https://twitter.com/hashtag/%E4%BA%BA%E6%84%9F%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC?src=hash&amp;ref_src=twsrc%5Etfw">#人感センサー</a> <a href="https://t.co/sqEylRzefS">pic.twitter.com/sqEylRzefS</a></p>&mdash; shima-07 (@y_kawashima_) <a href="https://twitter.com/y_kawashima_/status/1247228239543558144?ref_src=twsrc%5Etfw">April 6, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

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