毎日の点検が楽になるLINE Botを作ってみた



こんにちは、仕事で食品検査を担当しています
入社してまもなく半年、デジタルに関する知識はほぼ０ですが、家の遠い私が定時で帰宅するために業務の効率化ができないか模索しはじめました（笑）
今回デジタルで解決できそうなプチ課題があったので、取り組んだ過程を紹介したいと思います


[1.取り組み背景](#1-取り組み背景)
[2.使用ツール](#2-使用ツール)
[3.実施内容](#3-実施内容)

>[3.1. ベース作成](##-ベース作成)
>[3.2. ちょっと応用](##-ちょっと応用)
>[3.3. 実戦](##-実戦)
>[3.4. 思わぬ落とし穴](##-思わぬ落とし穴)
>[3.5. 完成品](##-完成品)

[4.今後の課題](#4-今後の課題)

#1. 取り組み背景
検査室には多数の冷蔵庫、冷凍庫があります
検査の信頼性を保つためにも、きちんと設定温度通り動いているか、毎日作業前と作業後に点検をする必要があります
しかし、この点検方法が各機械の前に行って、おんどとり（温度計とデータ記録が一体となった小型の機械）を確認し、紙の点検表に記載するというアナログのものでした
おんどとりには、無線で温度データを確認できるという機能がついています
ボタン一つで点検作業ができたら楽で時間削減になると思い、プログラミングの知識がなくてもそれっぽいものができるMakeとLINEを使って、自動点検LINE Botを作成してみました

#2. 使用ツール
Make
LINE
おんどとりAPI  https://ondotori.webstorage.jp/docs/api/
Google spreadsheets（記録用）

#3. 実施内容
>3.1ベース作成
まずおんどとり１台分の現在の温度を返信するBotを作ります
![スクリーンショット 2022-09-07 22.39.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/3e8cd930-452b-13e1-abe1-48ccb685e8be.png)

Botの作成方法やMakeとの接続方法については省略します
HTTPモジュールに、おんどとりAPIホームページに記載されている項目をいれていきます
Request contentに、アカウント情報や動かしたいおんどとりの情報、やってほしいことをJSON形式で入力します
API KEYが必要になりますが、こちらのやり方はホームページに書かれています
まずはこの状態で返信用LINEモジュールとつなぎ、Dataが返ってくるようにします
![スクリーンショット 2022-09-07 22.51.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/dd4b4fd9-643f-dba5-3cb2-db461e7c538e.png)
![スクリーンショット 2022-09-07 22.52.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/3496e83c-63f1-301f-8d81-6fac4fbd4bee.png)

返信メッセージは下のような訳のわからない英数字の羅列に見えますが、Parse JSONというモジュールを使ってこの羅列を読み取ると、本来の意味にわかりやすく変換してくれます
{"devices":[
{"num":"6","serial":"528237D8","model":"RTR502B","name":"50-EB326(2\u2103~8\u2103)","battery":"5","rssi":"3","time_diff":"540","std_bias":"0","dst_bias":"0","unixtime":"1662409159","channel":[{"num":"1","name":"","value":"4.3","unit":"C"}],"baseunit":{"serial":"58580787","model":"RTR500BW","name":"RTR500BW_58580787"},"group":{"num":"1","name":"Group1"}}
]}
あとは返信メッセージに、確認したい温度valueをいれれば完成です

![スクリーンショット 2022-09-07 22.54.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/fcc1896c-d125-dde9-d0c8-fba435636ba0.png)

![RPReplay_Final1662559418_MP4_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/8a463b7a-9735-5286-a3d0-07c1787aee16.gif)

これだけのことですが、希望の返事がきたときは、初心者の私にはかなり嬉しいできことでした

２ちょっと応用
次にこれをちょっと発展させます
LINEのメッセージでデータを確認するのもいいですが、記録は保管する必要があり、従業員全員が閲覧できる形で残さなければなりません
このままでは帰ってきた温度データを点検表に転記するという手作業が発生します
そこでSheetモジュールを使用して、記録も自動でやってしまおうと考えました
Sheetモジュールは複数の種類があり、目的に合わせたものを選択します
ここでは行を追加するというものでやってみました
使用するSpreadsheetを選択し、どこの列に何をいれるか指示します
私には、表をファイル形式や画像形式で送る術はなかったので、返信は点検完了しましたというシンプルなテキストにしました
動画、写真は後ほどでてくるものと同様なので割愛します


３実戦
では本命の検査室の冷蔵冷凍庫（15台）のデータを一度に表にするという作業に挑戦します

複数台のデータを得る方法として、ホームページでも紹介されていた、カンマで並べてリクエストする方法、おんどとりごとにHTTPモジュールを作る方法があります
前者がシンプルで簡単だと思ったので、試してみました
![スクリーンショット 2022-09-07 23.15.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/63d3496d-dd51-a626-d390-73f54f1f1f72.png)

ん？同じ温度？
念のため、Webでデータを確認するも明らかに違う温度を表示しています
原因はわからないけどメッセージをわけてみたらうまくいくかなと思い、試すも今度はエラー発生
LINE Botのリプライトークンは一度しか使えないのだそうです（そんな多分基本的なことも知らないレベルです汗）
仕方ない、見栄えは美しくなくても動けばいい、力技でつなげるべし！とひたすら単純作業を繰り返しました

いけー
![画面収録_2022-09-07_23_22_58_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/f1d7d40b-b1b1-e85f-d229-8a9ac0d4f9e4.gif)

けなげに一つづつ動いていのがかわいいです
無事返信もきました
恐る恐るシートを開くと、、、

おお！できてる！
がんばったかいがあったなと、シートを横にスクロールしたところ
ん？シートが途中までしか埋まっていない
なんで10個しかデータ出てないの？という緊急事態に
Makeに戻ってエラーコードを確認してみると、
「APIの利用上限を超過しています」
・・・
あ！

４思わぬ落とし穴
そういえばホームページにこんなこと書いてあったけど、何言ってるかわからずスルーしていました
![スクリーンショット 2022-09-07 23.29.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/1c6d2eac-1afb-21f3-4d1a-83b763b73b70.png)

つまり青色のモジュールは、このAPIの場合２分間で10回までしか使えないということです
あんなにがんばってつなげたのに
と悲しみ、困っていたところ、ともにデジタルに関する勉強をする方から「引数」というワードを教えてもらいました
これはプログラムに渡す追加の注文のようなものだそうです
つまり、おんどとりの個別のデータをもらえるかもということで
レッツ引数チャレンジ！
JSONの右上の１を押してどのおんどとりにどの引数が割り当てられているか確認、シートモジュールの希望列のところにvalueを選択し、間に引数をいれます
![スクリーンショット 2022-09-07 23.26.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/a5450931-4720-a623-0c46-5e2acdc13190.png)
![スクリーンショット 2022-09-07 23.26.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/f510528c-2075-9789-7ea5-fdf9140d8daa.png)

これで準備完了です

５完成品
最終結果がこちら
![saisyuu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/54199ee6-a3f2-5ea1-ab45-0a8f5aca79ae.png)

![RPReplay_Final1662560748_MP4_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/58986bb5-91fb-c0ca-7522-8330d75c52f9.gif)

![画面収録_2022-09-07_23_28_51_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/480a90a8-59f4-93b2-6cf0-a0002411500f.gif)


別の動画ですが、同時に起こっている現象です

ぎちぎちのに比べてかなりシンプルになりました
プログラミング言語や仕組みがなにもわからない私でも、それっぽいものを作ることができました！

#4. 今後の課題
完成翌日、気分ルンルンで上司に報告したところ、
データで温度を確認するからには一点のみの記録でなく、前回の点検時からの動態をみるべきだよね、あと冷蔵冷凍庫だけじゃなくてインキュベーターにも使いたいよね
というフィードバックをいただきました
うう
でもおっしゃる通り、それにこのAPIには指定した一定期間のデータを得るという機能もついています
![スクリーンショット 2022-09-07 23.37.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2792410/6989e1f9-d8dc-f303-6bd2-d7a63a937182.png)

時間を指定するのに必要な“Unisextime”への自動変換など、まだわからないところもありますが、今後の課題としてチャレンジしてみようと思います

以上日々の点検業務をちょっと楽にするかもしれないアイデアでした
世の中には数えきれないほどたくさんのAPIが存在しているようなので、今回の知見をいかしながらまた他のものにもトライしてみたいです
読んでいただきありがとうございました