こんにちは!
東京圏のとある微生物検査室で、毎日食品安全を担保するため仕事を頑張っています。
実験室は色々な新しい技術を使っているイメージですが、実は意外とアナログの世界です。
今の時代についていかないとダメ!と思いつつ、
今回24時間冷蔵冷凍庫監視警報LINE Botを作ってみた!
経由
微生物実験室には、微生物を生育させるために、色んな温度管理が必要です。
うちは機器についている温度計だけではなく、しっかり校正した外部温度計も使っています。
去年実験室は温度管理のため、外部温度計を全部新しいにしました!
今回は同じものを買い替えではなく、インタネットと繋がり、webでどこでも監視できる便利なモンを導入しました。
が…実の作業は温度計を見て、紙に記録するから、ネットを見て、エクセルに記録するになっただけです。
もっとなにかできるでしょう?! と思って、
webサイトを色々見る時、開発者向けAPI管理というもの見つかりました。
開発者か?!と難しいと思いますが、できたら格好良い(笑)の気持ちでリンクを押しました。
一見使いにくいですが、サイトが親切には 公開APIサイト というガイドブックを添付しています。
API…リクエスト ヘッダ…パラメータ…慣れない単語いっぱい!
少しづつネット記事を見ながら理解している最中、あることに気づきました。
※警報に関する情報は含まれておりません。警報情報の取得については今後のバージョンアップにて対応予定です。
え?そんな大事な機能まだ対応してないですか?じゃ自分で作りましょう!と言いたいですが…
いきなりコード書くのは無理ですよね…
この時、コードを書かなくでもプログラミングできる Make という便利のツールと LINE Bot は公式ではなく、実は個人でも作れることを知って、もしかして行けるかもしれません??と思って、今回24時間冷蔵冷凍庫監視警報LINE Botを挑戦してみました!
使用ツール
完成物
Makeのシナリオ
手順
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の記入場所がありますので、真似して書きました。
簡単のMakeシナリオができました!早速実行してみて…!
エラー発生しました!!よくよく見たら…LINEの最大文字数が超えたのことですね。
疑似的に成功ということか!でもやっぱり返事が見たいので、データを絞って、温度だけを返信することに修正しました。
返事が来た!!!感動!!!
実はここ、落とし穴がありますが、その時まだ全然気づいてないので、わいわいしました(笑)
2「発信問題」24時間自動でやってくれないかな?
早速次のステップに進行しました。
今回の目標は24時間監視ですので、自分からなにを送り、結果をもらうではなく、自動で定期的に確認してくれみたいロボットらしい動作が必要ですね。
こんなmoduleあるかな?で調べたら、Makeの公式ガイドの中Schedule settingsについて説明があります。
定期的にmoduleを動かせる便利な機能です!
記事:Schedule settings
うんうん簡単簡単!と思って、実行しました。
え?またエラー?
[400] Invalid reply tokenについて詳しく調べたら以下の記事見つかりました。
記事:LINE Bot APIのreplyMessageでたまにInvalid reply tokenが発生する
なるほど、多分個人アカウントの安全のために、公式アカウントから直接返信はダメらしいです。
でも解決方法も書いてますから、pushMessageを使ってみます。
来ました!!
ただ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とarrayの数字でどのデータを利用するのを認識することです。
数字を入力するによって、最初のデータではなく、どの部分のデータを利用したいのを指名できます!
ようやく落とし穴から抜けました!
3「自動判断」管理温度から逸脱する時だけ返信が来る
本題に戻ります。
Makeはrouteという条件分岐機能があります。これを使って、温度を判断して、警報を発信する仕組みを作ります。
成功でした!これで技術問題はなくなって、あと黙々と作れば、完了はあど一息!
まさかそこまで増やしっていますね(笑)
で、運行したら…動かないです!!!
調べたら、最初のwatch eventsが15分一回自動運行になってますが、watch eventは単なるLINE Botのメーセージを待つだけですので、確かに動かないですね。
そこで、解決方法はwatch eventsを外して、15分一回の設定をHTTPに移動します。
watch eventがなくなって、LINEのuser id取れないので、Toolsで直接入れました。
それで、完成!
4 一旦終わり
これで一旦作成終わりました。暫く動きを観察です。
これからPDCAを考えます。
お読みいただきありがとうございました。