<Gravioユースケース>(みんな大好き)新・5分でできるセンサーデータの出力(CSV)
この記事は1年以上前に書かれた内容です。
Gravioの機能・画面キャプチャーなどの情報が古い可能性があります。
最新情報は、Gravioオンラインマニュアルをご参考ください。
下記ブログ記事もご参考ください。
【初心者が10分で実践するIoT・第四回】 Gravio 4で取得したCO2センサーのデータを、無料のクラウドBIツールを使ってグラフにしてみた!
Gravio 4で取得したセンサーデータをGoogle データポータルに接続。無料のBIツールを使って簡単に可視化する手順を解説
こんにちは、Gravio事業部のタルミです。まずはお知らせとなりますが、先日Gravioをバージョンアップさせていただきました(最新バージョンは3.8となります)!
今回のアップデートでは、画像推論エンジンのリニューアルなど、今をトキメク「派手」なものも含まれますが、その中でも「シブい」機能ともいえる、「センサーデータのCSV作成」機能の改良について今回はご紹介したいと思います。この機能、地味ではありますが、使いやすいデータを作るという意味では一丁目一番地ともいえる、重要な機能です。
実は、センサーデータのCSV作成ですが、以前ご紹介させていただいたとおり、今までも実装されていましたが、使いこなしにちょっとした設定のコツが必要で、少しばかり手間がかかるものでした。今回はかなり「楽」にデータが抽出できるように改良されていますので、ぜひお試しください。
実際、5分もあれば「欲しい」データが簡単に抽出できます。
メモ
この、「欲しい」データ、というのがミソです。全データを一括抽出できる仕組みを実装しているIoT製品はそこそこ見受けられますが、Gravioは、期間や時間を区切ったり、必要なセンサーのデータだけを抽出したりと、インテリジェントにデータをエッジ側で選択して抽出できます。また、抽出タイミングも自由に決定できます。これらの作業をエッジ側で行なうことによって、データの取捨選択ができ、結果、後の加工における苦労を削減することが可能になります。
さて、世の中ではテレワークが浸透するのとあわせて、ご自宅のワークスペースを改善したい、というお話がまだまだ増えつつある感じですね。SNSでも「椅子や机を新調した」とか「外付けモニターとモニターアームを買った」という投稿をよく見かけます。また、出社しないことで、確認や点検が出来なくなってしまったオフィスや工場の状況をリモートで監視したい、といったご要望も引き続きある感じです。
弊社のGravioは、温度、湿度、気圧、人感、開閉、もしくはAIを使った顔認証情報などをエッジで検知し、情報が必要な方に即座に通知をする、という一連の動作が簡単に作成できるIoTミドルウェアですが、殆どの場合、検知した情報を「蓄積」しておき、あとで「分析」をしたいというご要望がセットメニューとしてあがってまいります。
たとえば「全社テレワーク」に移行したが、セキュリティーや人材管理の面から、実際にオフィスに誰か出社したらLINEやSlackに即座に通知してほしい、というニーズとセットで、「昨日の出社人数は0名、先週の平均出社人数は2人/日、先々週に比べて出社人数が半減した」といったデータを作成したい、というケースなどですね。
また、テレワーク推奨とあわせて補助金を出すことを検討されている企業さんから、「自宅ワークスペースでキチンと業務を遂行しているか椅子の振動や人感センサーの情報をもとに検知をしたい」というニーズと合わせて(賛否両論ですが、実際にそういったニーズはあります)、自室の空調を作動させた状態の温度と、外気の温度の差分を電気代として換算することで、テレワーク補助金の算出に役立つデータとして使いたい、というお話ですね。
まぁ建物の断熱性、エアコンの効率、空調の温度設定、更には換気の有無など、パラメーターは少なくないのですが、換算する際の計算式でまるっと反映してあげれば不可能ではないですし、そもそも、ざっくりでも「試算の根拠」があるのと、全く無いのでは説得力が違います。もちろんデータのログだけでも重要な場合もありますよね。
ここで重要なのは、それらのデータが「使いにくい」ものだと、現場では加工、活用が難しいということです。だからこそ、50年以上も前から使われているCSVは「簡単で理解できる人が多く、汎用性が極めて高い」ため、相変わらずよく使われている、というわけです。
普通のオシゴトをされている方からしてみれば、json? ナニソレチェーンソーモッテルノ? ってなりますよね。
前置きが長くなりました。ちゃちゃっとセンサーデータのCSV化をおこなってみましょう。今回は、Gravio 最新のバージョン 3.8 を使って、IoT関連ではニーズの高い「温度データ」をCSVに吐き出す作業手順を簡単にご紹介します。
今回つくるもの
センサーにより収集した温度データを抽出し、CSV形式で出力します。
普段から私宅ではGravioを用いて温度データを収集しておりますが、そのなかから直近1日分の温度データをCSVファイル形式で作成します。蛇足ですが、複数の私宅のデータを比較することで、空調メーカーごとの制御方法の差とか、センサーの能力とかも比較できそうですね。今回は私の家のデータのみCSVに落とし込んでいきます。
ちなみに、今回の環境はMac版で行っています。Windows版だと画面が少し違いますが、用語と動作はほぼ同一です。
もし不明な点がありましたら、Gravio Community(Slack)でご質問頂ければ幸いです。
準備するもの
- GravioBasic以上 のご契約(センサーとUSB型のデータ受信機が必要なため)
- Aqara環境マルチセンサー(温度、湿度、気圧)
- Gravioデータレシーバー(USBを含む)
- Gravioを動作させるためのPC(Windows 10 / Mac / Raspberry Pi 4 など)
- Microsoft Excel もしくは Google スプレッドシート(CSVを取り込める表計算ツール)
だけです。
補足になりますが、
Gravioは有償契約を頂きますと、弊社認証済みのセンサーが無償で貸出可能となります。
利用者さん側で、センサーの選定とか、センサー用のConfigファイルを書く必要はありません。ここ、かなり面倒かつ時間がかかるところですから、Gravioのサービスを活用して、うまく手を抜いてください(^^)
作成するアクション
GravioStudioのアクション設計画面を用いて、新しいアクションを作成します。
(わかり易い名前を付けておくとよいです。今回は「最新CSV作成」としました)
まず、最初のステップを追加します。
ここで選択するのは「SensorDataDB」というアクションです。
追加すると、このような画面になります。
この画面を見ていただくと、各種プロパティが設定できることに気づかれるはずです。
どのセンサーからの情報を抽出するか、何日前、何時間前、何分前からの情報を抽出するか、といったことが選択できます。
また、一番下の「Enable Time Rounding」は少し便利な機能でして、たとえば1時間前からのデータを抽出するさいに、このチェックボックスをON(Enable)すると、アクションを15時30分30秒に実行した場合、直近14時00分00秒〜15時00分00秒までのデータを抽出してくれます。もちろんOFFにした場合は、14時30分30秒〜15時30分30秒までのデータを抽出します。
この機能を活用することで、毎日朝の9時に、昨日1日分のデータを取ってくる、といった場合などにお勧めです。
今回はOFFにして、まさに今から24時間前の温度データまでを取得する設定をしてみます。
エリア、レイヤー、デバイスでターゲットとなるセンサーを選び、どれくらい前の日(時間)から抽出するかを設定し、最後に、「ステップ出力」を行います。
ここまでのStep 1で、Gravio内部のデータから、どのデータをどのくらい抜き出すか、が設定できました。
次に、Stepを追加します。
追加するStepはCSVを作成するための「Write CSV」アクションです。
そして、追加されたアクション「Write CSV」のプロパティで、CSVとして書き出す際のお作法を決定します。
ファイル名、ファイルの上書きを行っていくか、ヘッダーをつけるか否か、つけるのであればどういったラベルをつけるか、などなど細かな指定が出来ますが、今回はシンプルにファイル名だけ設定します(teleworkspacetemp.csv としてみました)。
さて、最後の仕上げです。
Step 1 でSensorDataDBで、どのデータを書き出すか、というステップ出力の設定を行いました。
ただし、次のStep 2 にある、CSV書き出しの際にどのデータを入力するか、を決めていませんね。
ステップ入力の設定が終わっていないので、行います。
設定は下記の Step1 と 2 の間にあるアイコンをクリック(ステップ入力変数設定アイコンといいます)します。
すると、ステップ入力変数の画面が出てきますので、ステップ入力変数からステップ出力を生成するアイコンをクリックします。
すべての設定がおわると、このようになります。
CSV上に書かれるデータが「ステップ出力」として自動的に設定されます。
この行それぞれがデータとして存在すればCSVに書き出されます。
もちろん、不要なデータはここで行ごと削除してもかまいません(今回は全部書き出しますので、削除していません)。
で、最後にアクションを実行しましょう。
下記のボタンをクリックしてください。
処理が順当に進めば、ファイルが書き出されます。
エラーが出ているときは、ほぼステップ入力、出力関係の設定が終わっていない場合ですので、見直しをしてみてください。
ここで一点、書き出されるCSVデータ上のタイムスタンプはUTC表記となります。
日本だと9時間足す(JST)必要がございますので、エクセル上でタイムスタンプがあるところをB2とした場合に、下記のように作業してみました。
実は「ToLocalTime」というおまじないを Gravio 上で利用することも可能なのですが、今回はエクセル側でわかりやすく調整しています。
=DATEVALUE(MID(B2,7,4)&"/"&MID(B2,1,2)&"/"&MID(B2,4,2))+TIMEVALUE(MID(B2,12,8))+(1/24)*9
最後に、グラフを作成してみると、こんな感じになります。
我が家ではエアコンは常時動作しており、その温度設定は25℃なのですが、意外とばらつくんですね。まぁ、このぐらいならOK、って感じでしょうか。
エアコン側に人感センサーがついているので、活動が少ない夜間は同じ温度設定でも控えめになっているのでしょうかね。このあたりの制御ロジックを推論するのも面白いのですが、本業と離れてしまいますので、今回は割愛いたします。
さいごに
今回は温湿度のログを取ってCSVにするだけなので、IoT原理主義の方々からすると「違うだろ」と突っ込まれそうですが、ローカル(エッジ)内だけで全ての作業を完結させてしまいます。
前にも申し上げましたが、適材適所の考え方は重要です。今回のやり方であれば、データはエッジ側に蓄積されており、それをCSVへ加工するだけなので、外部のクラウドサービスを契約する必要はありません。もちろん、データをクラウド側に投げる形式は、収集したデータをクラウド側で連携させる場合、非常に便利ですし、エッジ側に複雑な仕組みを持たせなくて良いのがメリットなのですが、設定を間違えると他人がデータにアクセスできちゃったり(公開範囲とかセキュリティリスク)、なによりクラウド型でサービスを提供している会社さんがビジネス的判断からそのサービスを終了してしまうと、データもシステムもごっそり消えちゃいますからw(実際サービス停止・終了しちゃうケースは結構あります)。今回は自宅内の情報となるので、このあたりは気を使いたいところです。人の動きとか温度の動きから、在宅状況や生活リズムがわかっちゃいます。
もちろん、データを基にメッセージアプリとの連携などをしたい場合はクラウド側へデータを出す必要がありますから、繰り返しとなりますが、「どちらが良い・悪い」ではなく、必要とする作業に最適な仕組みを選んでください、ということです(実際、弊社でもクラウド型のサービスを多数提供しておりますし、GravioでもMQTTやhttpを利用して、収集したデータをクラウドサービスと接続する機能は当然実装しております)。
初めて触られる方でも、やりたいことが「すぐに」実現できる AI搭載IoT統合エッジウェア Gravio で、様々な情報を収集し、分析を行なうことで、省力化や自動化のみならずプランニングなどにもお役立て頂ければ嬉しく思います。