見出し画像

AWS IoTボタンで赤ちゃんのトイレを記録する

(この記事は2019年12月4日にACALLブログにて公開された記事です。)

注意

このブログでは、「ウンチ」「おしっこ」といったワードが複数回出てきます。
このような表現が苦手な方、またはお食事中の方は、本ブログをご覧にならないようにお気をつけください。

友達の家にお邪魔したときの話

先日、もうすぐ1歳になる子どもをもつ友達の家に遊びに行きました。
その時に、赤ちゃんという生き物は毎日毎日ウンチやおしっこの回数を数えておいて
検診のたびに報告しないといけないんだよ〜、という話を聞きました。
さらに、世間には「うんこボタン」なる製品があることも教えてもらいました。
https://unkobtn.com/ (※すでに販売終了の模様)
このブログは、これなんだか作れそうだなーと思ったACALL社員のお話になります。
興味のある方は、最後までお付き合いください。

お詫び

世の中には、同じ発想をもった方が大勢いて、、、
今回のAWS IoTボタンで赤ちゃんのボタンを!!という内容も例外ではなく
既に発信している方がいらっしゃいました。

アイデアはもろかぶりですが、実装方法、使用言語、アウトプット方法が違うということで、
今回はご容赦いただきたく。

ではさっそく

①AWS IoTボタンをおす
②Lambda上でGoogle Apps Scriptで書いたAPIをコール
③Googleカレンダーにイベント作成
こんな感じで。

AWS IoTボタン を購入

AWS IoTボタンの設定は、AWS マネジメントコンソール画面と専用アプリから行いましたが
詳細はここでは割愛します。(いろんな人がいろんなところで丁寧に説明してくれてます)

AWS IoTボタンのイベントは、「1回押した」「2回押した」「長押しした」の3種類とれるので、
それぞれ
・1回ボタン押す→おしっこの記録
・2回ボタン押す→ウンチの記録
・長押し→おっぱいの記録(おまけ)
にしようと思います。

Lambda の準備
今回ランタイムはNode.jsを選択しています。

// index.js

const axios = require('axios');

// IoTボタンを押すと event が渡されるー①
exports.handler = async (event) => {
 let status;
 // clickType を取得して status を変更
 switch(event.deviceEvent.buttonClicked.clickType) {
   case "SINGLE":
     status = '1';
     break;
   case "DOUBLE":
     status = '2';
     break;
   case "LONG":
     status = '3';
     break;
 }
 // GAS API に status を POST
 await axios.post(process.env.URL, { clickType: status })
   .then(res => console.log(res))
   .catch(err => console.error(err))
};


AWS IoTボタンを押すと、event が渡されます。
event には以下のような情報が含まれます。

{
 "deviceInfo": {
   "deviceId": "**************",
   "type": "button",
   "remainingLife": 98.75,
   "attributes": {
     "projectRegion": "ap-northeast-1",
     "projectName": "baby_health",
     "placementName": "home",
     "deviceTemplateName": "BabyCalendarRequest"
   }
 },
 "deviceEvent": {
   "buttonClicked": {
     "clickType": "SINGLE",
     "reportedTime": "2019-11-30T06:12:46.805Z"
   }
 },
 "placementInfo": {
   "projectName": "baby_health",
   "placementName": "home",
   "attributes": {},
   "devices": {
     "BabyCalendarRequest": "**************"
   }
 }
}


ちなみに、placementInfo の attributes はカスタマイズ可能です。(今回は使ってません)

画像1

AWS IOT 1-CLICK プロジェクト作成の際、プレイスメントの属性で設定した key と value が placementInfo の attributes に反映されます。

Google Apps Script の準備

// index.gs

function doPost(e){
 // Lambda から POST されたパラメータを整形
 const params = JSON.parse(e.postData.getDataAsString())
 const clickType = params.clickType
 createEvents(clickType)
}

function createEvents(clickType) {
 // Googleカレンダーの取得
 const calendar = CalendarApp.getDefaultCalendar()
 const startTime = new Date()
 const endTime = new Date()
 var title = null
 var color = null
 // clickType によってタイトルとイベントの色を振分け
 switch(clickType) {
   case '1':
     title = 'おしっこ'
     color = CalendarApp.EventColor.PALE_BLUE
     break;
   case '2':
     title = 'ウンチ'
     color = CalendarApp.EventColor.RED
     break;
   case '3':
     title = 'おっぱい'
     color = CalendarApp.EventColor.YELLOW
     break;
  }
 // イベントを作成する
 calendar.createEvent(title, startTime, endTime).setColor(color)
}

予定通り
・1回ボタン押す→おしっこの記録
・2回ボタン押す→ウンチの記録
・長押し→おっぱいの記録
にしました。

実践

画像2

本来カレンダーは未来の予定を管理するものですが、今回は過去を記録する目的で使う結果となりました。
スマホで Googleカレンダー を同期しておけば簡単に記録が見られるので
わざわざ専用アプリを入れる必要がないのでいいんじゃないかと、個人的に思ってます。

まとめ

制作時間は2時間程度。(ボタンの注文から到着は除きます)
そして気になるお値段は・・・
・AWS IoTボタン:2500円
・AWS IoT 1-Click:月額約110円(14,999デバイスまではこのお値段)
・Lambda:無料(100万リクエスト/月まで)
ということで、初期費用は2610円でした。
今回は赤ちゃんの健康管理という点から発想を得ましたが、自分自身やペットの管理にも使えそうです。

個人的に初めて IoT なるものと触れ合ったので、楽しい時間が過ごせました。
(ブログがないとやってなかった。ブログに感謝しています。)

ACALL は、さまざまな IoTモジュールと iPad を組み合わせることにより、
自動ドア・フラッパーゲート・電子錠・エレベーターとの連携を可能にします。

うちのビル、もっとスマートにしたいわ〜と思っているそこのあなた、
是非、ACALLの導入をご検討くださいませ。
そして、そんな ACALL を一緒に開発してみたい!と思っているそこのあなた、
今すぐ、下記リンク先からエントリーしましょう!!

https://corp.acall.jp/recruit/

それでは、最後まで読んでいただきありがとうございました。
また会う日まで。さようなら。