Last updated on

SORACOM Button を使って施錠通知をやってみた


[point_maker type=“heading_icon” base_color=“apple_green” title_icon=“info-circle-solid” title_color_background=“true” title_color_border=“false” content_type=“text” content_color_background=“true” content_color_border=“false” block_editor=“true”]

こちらは、 “SORACOM Advent Calendar 2021” および
ゆるWeb勉強会@札幌 Advent Calendar 2021” の 14日目の記事です。

[/point_maker]

今年はあまり SORACOM さんの製品で遊べていないので、年末だけでもエセ IoT をやりたい気持ちで始めました。

「あれ、そういえば玄関の鍵閉めたっけ?」と思うこと、みなさんありませんか?

私はよくあります。

習慣で閉めてしまうようになっているので、記憶に残らないのですよね。。

例えば、リモートで施錠・解錠してくれるようなソリューションもありますが、そこまでは必要なくて「鍵を一旦開けてから閉めた」という動作を検知して知る方法があれば十分、なんですよね。

というわけで、そこだけを検知するシステムを作りました。

使うもの

SORACOM LTE-M Button Plus
https://soracom.jp/store/5207/

いわゆる「ひげボタン」。リード線が出ているので、外部センサーとの連携が楽々です。

マグネットスイッチ

いろんなところで購入できます。

今回は、磁石が近づいたらスイッチがオフになるものを使います。

完成図

このような感じで、各自の玄関に実装します。

コード

Lambda

SORACOM さんの書いてくれているやり方をそのままマネします。

https://users.soracom.io/ja-jp/docs/funk/aws-lambda/

ドキュメントがわかりやすく、かつ、充実しているので、ほんとありがたいですね。

payload 部分だけ、好みのものに変えればよいです。私は下記のようにしました。

const https = require("https");
const url = require("url");
const slackUrl = process.env.SLACK_URL;

exports.handler = function (e, ctx, cb) {
  console.log("event: %j", e);
  console.log("context: %j", ctx);

  var slackReqOptions = url.parse(slackUrl);
  slackReqOptions.method = "POST";
  slackReqOptions.headers = { "Content-Type": "application/json" };
  var payload = {
    text: `Door is closed.\nbatteryLevel: ${e.batteryLevel}`,
  };
  var body = JSON.stringify(payload);
  slackReqOptions.headers = {
    "Content-Type": "application/json",
    "Content-Length": Buffer.byteLength(body),
  };
  var req = https.request(slackReqOptions, function (res) {
    if (res.statusCode === 200) {
      console.log("Posted to slack");
      cb(null, { result: "ok" });
    } else {
      cb(false, { result: "ng", reason: "Failed to post slack " + res.statusCode });
    }
    return res;
  });
  req.write(body);
  req.end();
};

動画

https://youtu.be/X0wThEi19JI

まとめ

SORACOM LTE-M Button Plus を使うと、通信や電源の心配もほぼすることなく、外部のセンサーの連携を簡単にできます。

IoT 関係で「実際に物理実装したいけど、通信と電源の確保が難しいよなぁ。」となりがちな部分に手軽に導入できるので、とてもありがたいですね。