LoginSignup
7
1

「夜の冷蔵冷凍庫本当に大丈夫なのか?」24時間冷蔵冷凍庫監視警報LINE Botを作ってみた!

Last updated at Posted at 2023-07-02

こんにちは!
東京圏のとある微生物検査室で、毎日食品安全を担保するため仕事を頑張っています。
実験室は色々な新しい技術を使っているイメージですが、実は意外とアナログの世界です。
今の時代についていかないとダメ!と思いつつ、
今回24時間冷蔵冷凍庫監視警報LINE Botを作ってみた!

経由

微生物実験室には、微生物を生育させるために、色んな温度管理が必要です。
うちは機器についている温度計だけではなく、しっかり校正した外部温度計も使っています。
去年実験室は温度管理のため、外部温度計を全部新しいにしました!
今回は同じものを買い替えではなく、インタネットと繋がり、webでどこでも監視できる便利なモンを導入しました。
が…実の作業は温度計を見て、紙に記録するから、ネットを見て、エクセルに記録するになっただけです。

もっとなにかできるでしょう?! と思って、
webサイトを色々見る時、開発者向けAPI管理というもの見つかりました。
QQ截图20230702124209.png
開発者か?!と難しいと思いますが、できたら格好良い(笑)の気持ちでリンクを押しました。
一見使いにくいですが、サイトが親切には 公開APIサイト というガイドブックを添付しています。

API…リクエスト ヘッダ…パラメータ…慣れない単語いっぱい!
少しづつネット記事を見ながら理解している最中、あることに気づきました。

※警報に関する情報は含まれておりません。警報情報の取得については今後のバージョンアップにて対応予定です。

え?そんな大事な機能まだ対応してないですか?じゃ自分で作りましょう!と言いたいですが…
いきなりコード書くのは無理ですよね…

この時、コードを書かなくでもプログラミングできる Make という便利のツールと LINE Bot は公式ではなく、実は個人でも作れることを知って、もしかして行けるかもしれません??と思って、今回24時間冷蔵冷凍庫監視警報LINE Botを挑戦してみました!

使用ツール

完成物

Makeのシナリオ

QQ截图20230702231245.png
自称タンポポ式です。(笑)

手順

1「ルートの検証」APIから温度データを取って、LINE Botまで返事すること 

とりあえず最初の目標を設定して、APIから貰った温度でLINE Botに返信することができたら成功です。
色々な機能を考えてますが、これは基本なのでとりあえずやってみます。

おんどとりAPIの公式サイドは以下の内容書いてます。

リクエスト例

リクエスト例
リクエストヘッダ

POST /v1/devices/current HTTP/1.1
Host: api.webstorage.jp:443
Content-Type: application/json
X-HTTP-Method-Override: GET

リクエストボディ

[1.全ての機器情報を取得する場合]
{
"api-key":"73pfobnche8d1p6laqnemsbnpkght3bjv047oid6p2sg3",
"login-id":"tbzz9999",
"login-pass":"ppaasswwoorrdd"
}

[2.特定のシリアル番号の子機の機器情報を複数取得する場合]
{
"api-key":"73pfobnche8d1p6laqnemsbnpkght3bjv047oid6p2sg3",
"login-id":"tbzz9999",
"login-pass":"ppaasswwoorrdd",
"remote-serial":["52120001","52120002"]
}
※この例では、TR-71wf[52120001]とTR-71wf[52120002]の2台分のデータを取得。

[3.特定のシリアル番号の親機と子機の機器情報を取得する場合]
{
"api-key":"73pfobnche8d1p6laqnemsbnpkght3bjv047oid6p2sg3",
"login-id":"tbzz9999",
"login-pass":"ppaasswwoorrdd",
"base-serial":["52A010D0"]
}
※この例では、弊社デモ機であるRTR-500AW[52A010D0]に登録されている子機のデータ全てを取得。

うんん…まずこのリクエスト例は若干複雑ですね。
ネットで公開している一般的なAPIはだれからお願いしでも、返事します。例え天気予報とか、制限がありません。
今回使うAPIは違って、セキュリティの関係で何が身分証明書みたい「私ですよ」と表明するものをAPIに送る必要のことですかね…この証明するものは、例の中のheaderとbodyです。
幸いMakeのhttp moduleにheaderとbodyの記入場所がありますので、真似して書きました。
QQ截图20230702153511.png
簡単のMakeシナリオができました!早速実行してみて…!
QQ截图20230702153339.png
エラー発生しました!!よくよく見たら…LINEの最大文字数が超えたのことですね。
疑似的に成功ということか!でもやっぱり返事が見たいので、データを絞って、温度だけを返信することに修正しました。
8D5F8FCF2340BFD4DCED523517049E65.png
返事が来た!!!感動!!!
実はここ、落とし穴がありますが、その時まだ全然気づいてないので、わいわいしました(笑)

2「発信問題」24時間自動でやってくれないかな? 

早速次のステップに進行しました。
今回の目標は24時間監視ですので、自分からなにを送り、結果をもらうではなく、自動で定期的に確認してくれみたいロボットらしい動作が必要ですね。
こんなmoduleあるかな?で調べたら、Makeの公式ガイドの中Schedule settingsについて説明があります。
定期的にmoduleを動かせる便利な機能です!
記事:Schedule settings
うんうん簡単簡単!と思って、実行しました。
QQ截图20230702160541.png
え?またエラー
[400] Invalid reply tokenについて詳しく調べたら以下の記事見つかりました。
記事:LINE Bot APIのreplyMessageでたまにInvalid reply tokenが発生する
なるほど、多分個人アカウントの安全のために、公式アカウントから直接返信はダメらしいです。
でも解決方法も書いてますから、pushMessageを使ってみます。
C02150D9D6CD31D15439CBDDA4F7FFDD.png
来ました!!
ただpush messageは月に配信できるメッセージ数の上限があります…それ以上は料金発生します。
大丈夫かなと試算したら、無料プランは月200通が送れます、実は冷蔵冷凍庫はそんなにエラー発生しないから、無料で済むことですね。
でも開発の時いっぱい試すことが必要ですから、replay messageで検証して、最後にpush messageに切り替えを決めました。
Line plan記事:LINE公式アカウントの運用費用は?料金プランを解説!

3「自動判断」管理温度から逸脱する時だけ返信が来る

エラー発生する時警報すること…
つまり温度を判断して、管理温度から逸脱する時だけ返信が来る仕組みが必要です。

が… 

やっと落とし穴を気づきました…私はすべでの温度計のデータを請求して(50台以上あります)、確かに戻ったJSONも結構大きいで、データが中にいっぱいあるはずが…

いまLINEに返信してくれた温度、なぜ一つしかないです?!
実際のデータを見たら、LINE Botに返信が来ているのは最初の温度データだけでした。
どうやって他のデータも反映します?いきなりサブミッションがスタート!

3.5「サブミッション」JSONデータを自由に使いたい

この問題を考える最中、parse jsonのデータを見て、一つ気づいたことがありました。
parse jsonは文字列をobjectに変換する話もありますが、よくよくparse jsonのoutput部分を見たら、
collectionとarrayという変な数字がついてます。それはもともとjsonのデータに入ってないものですよねと思いましたから、それについて調べました。

makeのjsonの説明の中に、こう書いてます:

Collection vs. Array

Collection vs. Array
JSON string field can contain a collection
{ ... }
{ "name" : "Peter", "ID" : 1}
In which case, the output will be a single bundle containing the items of the collection:
Or it can contain an array.
[ ... ]
:
[ { "name" : "Peter", "ID" : 1 }, { "name" : "Mike", "ID" : 2 }]
In which case the output will be a series of bundles, each bundle containing one array's item:

この数字でどのcollectionを認識するようなことですかね…? と思いつつ、colletionを使える場所探したら…下の図の中、 変なブロックの中に…数字を入力できますよね…そうしたら、当たりです。

スクリーンショット (126).png

まさかそのcollectionとarrayの数字でどのデータを利用するのを認識することです。
数字を入力するによって、最初のデータではなく、どの部分のデータを利用したいのを指名できます!
ようやく落とし穴から抜けました!

3「自動判断」管理温度から逸脱する時だけ返信が来る

本題に戻ります。
Makeはrouteという条件分岐機能があります。これを使って、温度を判断して、警報を発信する仕組みを作ります。

QQ截图20230702165540.png
実行してみ…!
FE930C9D982EC4BC69C63CC73BC794D3.png

成功でした!これで技術問題はなくなって、あと黙々と作れば、完了はあど一息!

QQ截图20230702204029.png
まさかそこまで増やしっていますね(笑)
で、運行したら…動かないです!!!

調べたら、最初のwatch eventsが15分一回自動運行になってますが、watch eventは単なるLINE Botのメーセージを待つだけですので、確かに動かないですね。
そこで、解決方法はwatch eventsを外して、15分一回の設定をHTTPに移動します。
QQ截图20230702231245.png
watch eventがなくなって、LINEのuser id取れないので、Toolsで直接入れました。

それで、完成!

4 一旦終わり

これで一旦作成終わりました。暫く動きを観察です。
これからPDCAを考えます。
お読みいただきありがとうございました。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1