見出し画像

ノーコードツール(AppSheet)で温湿度環境見える化(温湿度+絶対湿度)IoTアプリを構築しました

Googleが提供する、ノーコードツールのAppSheetでIoTアプリを作成しました。今回の開発を通じて、AppSheetでIoTアプリ開発をする場合のメリットデメリットや開発の際の注意点等もわかってきましたので今回の記事でまとめておきたいと思います。

想定読者

・AppSheet等ノーコードツールでアプリ開発されている方、あるいはこれから開発しようと検討されている方。
・IoTのアプリ(プロトタイプ)の開発を企画中で、ノーコードツール等で開発の効率を上げていきたいとお考えの方。

技術構成

センサー (温度、湿度)から取得したデータをSoracomのモバイル回線およびサービスを経由して、GoobleCloudPlatform (GCP)に接続。
GCPの中では、PubSubでソラコムからのデータをうけとり、CloudFunctions経由でFirestoreにいったん格納後、Google Sheetsに連携しています。
データの連携と加工等の為、CloudFunctions, GoogleAppsScript, Google Sheets関数を組み合わせて使用しています。

画像1

※現時点では、FirebaseとAppSheetの直接連携はサポートされていませんので、Google Sheetsにデータを格納する必要があります。Google Sheetsに格納されたデータはAppSheetから直接利用することができます。
 
FirebaseとAppSheetは両方ともGoogleのサービスなので、直接連携に向けて鋭意開発中とのことです。
https://community.appsheet.com/t/firebase-data-connection/18485/4

アプリ機能概要

画像2

1)基本機能
・センサーデータ取得(温度と湿度のデータを1時間に1回取得)、テーブル表示、グラフ表示、csv出力

2)追加機能
・付加価値データ演算処理:温度と湿度から絶対湿度の計算を行う。
・一日ごとに前日のデータの最高値、最低値、平均値を計算して、日時サマリテーブルに格納
・日時サマリテーブルにメモ欄を付与して、当日の状況のメモと写真登録できるようにする。

3)アラート機能
・あらかじめ定めた閾値に応じて、そこから逸脱した場合に、email等のアラートを送信する。
・あらかじめ定めた閾値に応じて、センサーデータ表示テーブルのフォントやアイコンを変更する

それぞれの機能について、実装手法と実現機能を解説

1ー1)センサーデータ取得(ソラコムプラットフォーム)からSORACOMとGCP連携設定

SORACOMが販売している温湿度センサー(https://soracom.jp/store/5235/)を使用 していますので、デバイス側のコーディングは不要です、さらにクラウド接続サービスのSORACOM Funnelを使用することでGCPへの連携は、設定のみで簡単に行えます。

参考)
https://users.soracom.io/ja-jp/docs/funnel/google-cloud-pubsub/

センサーからは、温度、湿度に加え、位置情報等をクラウドに送信します。

1-2)GCPの設定(PubSub->CloudFunctions->Firestore->CloudFunctions->Google Sheets)

CloudFunctionsのコンソール画面
myPubSubFunction(Pub/SubからFirestoreへデータを格納する関数)と、appendSpreadSheet(Firestoreのデータが追加されたら、Google Sheetsにデータを追加する関数)の2つが登録されています。

画像3

myPubSubFunctionのコードの一部(全部で60行程度)

画像4

functions.pubsub.topic … の部分でPub/Subにデータが登録されたら、自動的にそのデータをとってきてくれます。あとはfunctionsの中でデータ加工とFirestoreへのデータ登録の処理を記述する流れになります。

CloudFunctionsはいわゆるサーバーレスの仕組みとなり、サーバー等の環境構築が不要で大変便利ですが、さらにクラウド内にある、サービス同士を連携させるメソッドが事前に用意されているので大変便利ですね。

appendSpreadSheetのコードの一部(全部で70行程度)

画像5

appendSpreadSheetのコードも同様で、functions.firestore.document … の部分で、firestoreにデータが追加されたら、そのデータをCloudFunctiosns内で処理できるように自動的に持ってきてくれますので、あとはデータの加工と、Google Sheetsへの登録処理を記述すればよい形になります。

このようなプロセスを経て、Google Sheetsに自動的にセンサーで測定されたデータが蓄積されていきます。

画像6

1-3)AppSheetの画面表示

AppSheetにはダッシュボード画面作成機能があり、最初に、個別のチャート画面のブロックを作成し、あとでそれを一つの画面にまとめて表示することができます。

画像7

 データのcsv出力ももちろん可能です。

画像8

画面設定方法等の詳細はここでは割愛します。記事の最後におすすめ書籍とUdemy講座のリンクをのせておきましたので、興味のある方はそちらの教材等で学習してみてください。

2ー1)絶対湿度の計算

 今回のアプリでは、センサーで取得した、温度、湿度のデータから絶対湿度を算出しています。そもそも絶対湿度とはなにか、なぜ重要なのかについては、以下のちきりんさんの記事をご参照ください。健康管理、住環境維持にとても重要な指標であることがわかります。

“絶対湿度”計の勧め(冬編)

そこで、絶対湿度の計算をする必要がありますが、エクセルで計算する場合は以下の計算式となります(tは温度、RHは相対湿度)

=217*(6.1078*10^(7.5*t/(t+237.3)))/(t+273.15)*RH/100

今回のアプリではAppSheetの仮想列を作成し、以下の計算式で絶対湿度を計算しました、ほぼエクセルの計算式と同じ形で対応できます。(AppSheetの関数では、べき乗記号 ^ が使えないので少しだけ式を修正します)

画像9

2-2)センサーデータ集約日次バッチ処理

日次バッチ処理は、GoogleAppScrpitにて実装しました。
この処理は、前日の1時間に1回毎に送信されたデータを、1日分集計し最高値、最低値、平均値を計算し、別のテーブル「sensor集約」に登録する処理となります。

GoogleAppScrpitのソースコードの一部(全体で約110行のコード)

画像10

集計結果のシート

画像11

(最高気温が異常に高い日があるのは、リュックの中に温度センサーをいれて、持ち歩いているためです)

この集計された、一日毎のデータに対して、アプリからメモ情報や、写真情報を追加して登録することもできます。
データだけでなく、定性情報も登録することで、より有効なデータ資産を蓄積することができます。

画像12

3-1)アラート機能

メール自動送信機能

AppSheetにはAutomation機能があり、値が閾値を超えたら、メール送信を行う等の処理をGUIで簡単に設定できます。しかし、今回の仕様では、FirebaseからGoogle Sheetsのデータを直接変更する為、Automation機能が、値の変化をとらえることができず、Automation機能がうまく働きません。

この問題を解決するためには、Firebaseから、Google Sheetsのデータを直接変更するのではなく、AppSheetのAPIを通してデータを変更する必要があるようですが、この場合はAppSheetのライセンスをEnterprise版にする必要があります。

そこで今回は、AppSheetとGoogleAppScrpitを組み合わせて実装することにしました。

まず、送信先のメールアドレスと閾値の入力画面はAppSheetで用意し、ユーザーが登録、編集できるようにします。

画像13

閾値を超えた場合の処理については、GoogleAppsScriptに記述します。
センサーの値、ユーザーが登録した閾値、ユーザーが登録したアラートメール送信先の情報を取得後、判定式のロジックを経て、登録先のメールに送信するプログラムとなります。

メール送信処理のコードの一部(全部で約70行程度)

画像14

今回は、GoogleAppsScriptのコードを記述することになりましたが、本記事冒頭に記載したように、AppSheetとFirebaseが直接連携できれば、AppSheetのAutomationの機能が使えて、コードを書かずにすべてGUIで設定できるようになるのではと個人的には予想しています。

センサーデータ表示テーブルアイコン変更

この例では、温度が閾値以上の場合、赤いアイコンの表示とフォントを太字にする。湿度も同様に青いアイコンの付与と文字を太字にする、絶対湿度の場合は、閾値で指定した範囲内であれば、スマイルマークとフォントの色変更を行っています。

画像15

設定は、AppSheetのメニュー UX >FormatRulesの画面で設定ができます。先ほどご紹介した、閾値の情報を使用するので、lookupを使用します。設定した、温度についての、設定画面と関数の設定は以下の通りです。

AppSheet FormatRules設定画面

画像16

関数の設定

画像17

相対湿度、絶対湿度の設定もほぼ同様の感覚で非常に簡単に設定ができます。

AppSheetでアプリを作成する、メリットデメリット

*メリット

グラフ表示、画像登録、計算式の登録など、あらかじめAppSheetで基本機能が用意されているので、これら基本機能を活用することで、コーディングの作業は大幅に削減できます。

UX:ViewType選択画面

画像18

AppSheetだけでは実現できないことも、Google SheetsとGoogleAppsScriptの機能を活用し連携することで、かなり複雑な要件でも対応することができます。

*デメリット

細かいUIの設定はできない(プロトタイプ用、一部業務用として割り切って使う必要あり)。

今回のアプリにおいては、例えば、最新データを表示するダッシュボードのタイルのような表示が標準ではできませんでした、

そこで、最新データからタイルで表示するための情報を事前に用意するシートを作成しました。

画像19

このシートの情報をもとに、最新データを表示する、タイル的なものを作りましたが、若干苦肉の策感がありますので、これは今後の課題にしたいと思います。

画像20

サービス利用料

AppSheetをプロトタイプ用として利用する場合は、無料で使うことができますが、Deployして本格利用する場合には、1ユーザーあたり5ドル/月から10ドル/月の費用が掛かります。

また、今回の構成では、SORACOMの通信費・サービス利用料、GoogleCloudPlatformの利用料が別途必要になります。データの送信頻度等によって若干の変動はあるものの、全部入れても月額数百円レベルに収まる費用感で非常に安く運用をスタートすることができると思います。

改良プラン

・複数センサー、複数ユーザー用に画面等を改良する。
・CO2センサー等様々なセンサーと連携する。
・より複雑なアラート対応:閾値越えが、2回連続で続いたら、警告をだす等。
・GPSデータが取得できるので、ジオロケーションアラート機能等の対応をする。

AppSheet学習おすすめリソース

AppSheetでのアプリ開発に興味を持たれた方は、以下の教材からはじめてみることをおすすめします。解説が丁寧でわかりやすいです。

[書籍]
Google AppSheet ではじめる ノーコード開発入門[Amazonリンク]

[Udemy講座]
【Google AppSheet】 プログラミング不要でスマホアプリ & WEBアプリを作れるようになる講座

この記事が気に入ったらサポートをしてみませんか?