Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

SORACOM Harvest Dataを使ってHACCP向けPoCシステムを作る

概要

2020年6月から、飲食店においてHACCPの導入が義務化されました(猶予期間1年)。

HACCPの詳細については、ここでは割愛しますが、
重要管理点(CCP)を検討した際、冷蔵庫や冷凍庫の温度管理が必要になる場合が多いです。
原材料や調理過程のものが適切な温度で保存されることを担保するために、
冷蔵庫や冷凍庫の庫内温度を毎日記録することになります。

これを自動化するIoTシステムを作成するにあたり、
SORACOM Harvest Dataを活用してPoCシステムを作りました。
⇒SORACOM Harvest Data、これまで使ったことなかったので・・・(汗)。

システム構成

システム構成はこんな感じです。
手元にあったラズパイと4GPiを使って、BLE通信で取得した温度データをSORACOM Harvest Dataに送信します。
アプリ開発にはNode-REDを使用しました。

image.png

温度センサーには、温湿度がBLE通信で取得できるInkbird IBS-TH1を使用します。
image.png

SORACOM Harvest Dataの設定

まずは、SORACOMのユーザーコンソールにログインしてください。

(1)SIMグループの作成と設定
SORACOM Harvest Dataは、SIMグループ単位に設定するので、まずはグループを作成します。

① 左側メニューの「SIM グループ」を選択。
image.png

② 以下のような画面が表示されるので、「+追加」をクリック。
image.png

③ グループ名を適宜入力して、「グループ作成」をクリック。
image.png

④SORACOM Harvest Data設定項目を開き、トグルスイッチをONにして保存します。
image.png

(2)SIMをSIMグループに登録
① 左側メニューの「SIM 管理」を選択。
image.png

②SORACOM Harvest Dataを使いたいSIMを選択
image.png

③先ほど作成したグループを指定
image.png

ラズパイの設定

OSにはRaspbianを使用します。

(1)4GPiのための設定
4GPiを使用するための手順は、メカトラックスさんが作成しているGitHubにまとめられています。
セットアップ手順
SORACOM SIM用の接続設定

具体的には、以下のコマンドをコンソールで実行するだけです。

>curl https://mechatrax.github.io/setup.sh | sudo bash
>sudo apt install 4gpi-utils 4gpi-net-mods 4gpi-networkmanager
>sudo nmcli con add type gsm ifname "*" con-name gsm-4gpi-soracom apn soracom.io user sora password sora

(2)BLEを使うための設定
今回使用する温度センサーは、BLEのアドバタイズメッセージで温湿度データを送信してきます。
Node-REDでのデータを受信するために、node-red-contrib-blebeacon-scannerノードを使用します。
yossihard/node-red-contrib-blebeacon-scanner

このノードが必要なライブラリ等をインストールするために、
ラズパイのコンソールで以下のコマンドを実行してください。

> sudo apt-get install libbluetooth-dev libudev-dev pi-bluetooth
> npm install @abandonware/noble

Node-REDのフロー作成

作成したフローをこのような感じです。
BLE Beacon Scannerと書かれたノードが、node-red-contrib-blebeacon-scannerです。

image.png

上側のフローでは、受信したデータのlocal nameがspsかどうかを確認し、
spsであれば温度センサーのデータなので、グローバル変数に一旦保存します。
保存する処理は、「データ変換・保存」と書かれたノードで行っています。

var globalVal = global.get('SensorData');
if (!globalVal) {
  globalVal = {};
} 

var date = new Date();
var now = date.getFullYear()+"-"+(("0"+(date.getMonth()+1)).slice(-2))+"-"+(("0"+date.getDate()).slice(-2)) 
         + "T"+(("0"+date.getHours()).slice(-2))+":"+(("0"+date.getMinutes()).slice(-2))+":"+(("0"+date.getSeconds()).slice(-2))+"+09:00";

var buf = msg.payload.other
var temp = buf.readInt16LE(0) / 100;
var humidity = buf.readInt16LE(2) / 100;
var power = buf[7];
var rssi = msg.payload.rssi;
var payload =  { MeasDate:now, SensorID:msg.payload.id, Temp:temp, Humidity:humidity,Power:power,RSSI:rssi };
var newmsg = { payload:payload };

globalVal[msg.payload.id] = payload;
global.set('SensorData',globalVal);

return newmsg;

アドバタイズメッセージのデータフォーマットは、こちらのページを参考にさせて頂きました。
https://qiita.com/bon_dentetsu/items/87ed6c65640b5ba11e5c

下側のフローでは、10分に1回グローバル変数からデータを取得し、
SORACOM Harvest DataにデータをJSON形式で送信しています。

「SORACOM Harvest Data送信」と書かれたノードは、http requestノードです。
プロパティは以下のようにSORACOM Harvest DataのエントリポイントをURLに指定しているだけです。
image.png

送信結果

SORACOMのユーザーコンソールにログインして、左側メニューのSORACOM Harvest Dataを選択します。
image.png

この記事を本日中にUPするために(Advent Calendar記事!)、1分間隔でデータを送信した結果を表示させています(汗)。
⇒後日ちゃんと長期間計測したグラフに更新しますね・・・。
センサーから取得した温度、湿度、電池残量、RSSI(電波強度)を送信していますが、
ここでは温度のみ表示させています。

image.png

SORACOM Harvest Dataに届いているデータはこんな感じ。
image.png

余談

SORACOM Harvest DataをPoCではなくて本番運用で使用できるかを考えてみました。

複数のセンサーデータを配列で送信してみたのですが、
SORACOM Harvest Dataにデータは保持されますが、
グラフが描画されませんでした。
⇒この後しっかりドキュメント読んでおきます(汗)。

SORACOM Harvest Dataは、現在Public Beta提供とのこと。
⇒SORACOMでのPublic Betaの定義はこちら
仕様が変わるかもしれないので、注意が必要ですね。

また、データ保存期間が標準で40日間となっていますが、
データ保持期間延長オプションで 731 日間に延長できるとのこと(有料)。
HACCPでは帳票の保存期間は各々適切に決定するようなので、
保存期間が1年であれば大丈夫そうですね。

yossihard
組込システムからクラウドまで、幅広くソフト開発に携わってきた雑食系システムエンジニア兼IoTコンサルタント。 Microsoft MVP(2010~から11期連続受賞)。 今は保育・介護・飲食業界のIT/IoTに取り組んでいます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away