みなさまこんにちは、ソラコム Global Corporate IT Engineerの西村(ニックネーム:Callie)です。
私は先日2024/7/17に開催されたSORACOM Discovery 2024のIoTプロトタイピングコーナーで、ソラカメとM5Stackを組み合わせた「窓のない会議室の在室状況を確認するシステム」を展示しました。
この記事では、アイデアのきっかけとシステム構成に至るまで、制作時に苦労したポイントなどを紹介します。
アイデア出しからシステム構成設計まで
それは入社当日の出来事でした
私は2024年の4月にソラコムへ入社しました。入社当日には数々のオリエンテーションが行われたのですが、そのときメインで使われていた部屋がこちら。
この「Forest会議室」には、中の様子を伺う窓がありません。この会議室では通常の打ち合わせだけではなく、セミナー配信などの会場としても使われることがあるため、窓がないことは時にメリットでもあるのですが、時にデメリットになることも。
その理由は、会議室の利用中・空室を表示するプレートが手動切り替えなため、仮に会議室が「利用中」であっても本当に前の利用者がいるかどうか分からなくなってしまうからです。
実際、「あるオリエンの開催時間が迫っている、でも待てど暮らせど【利用中】表示のままのこの会議室からは人が出てこない、どうしよう…」と入社当日の慣れない不安に苛まれながら、おそるおそる会議室のドアを開けて中の様子を確認したら誰もいなかった、なんて一幕が。
「せめて利用中・空室表示のプレートが正確に表示されていれれば…」今回のアイデアはこの体験から生まれました。
アイデアソンで需要調査&構成壁打ち
ちょうど入社直後に、アイデアを出して実際にIoTで実現してみる「プロトタイピングコーナー」のアイデアソンが行われると聞いて参加しました。
IoT プロトタイピングコーナーの制作過程では、「身の回りのどんな課題が解決されると嬉しい?」「IoT を使ったらどうやって解決できるだろうか?」といったテーマで話し合い、そこから展示するネタを探し出すアイデアソンをやりました。詳しくは昨年の IoT プロトタイピングコーナーの総括記事を御覧ください。
窓のないこの会議室の利用状況が分かりにくく困っていること、手動による利用中・空室表示プレートの表示を、切り替え忘れミスを防ぐためにIoTの力で自動化したいことを相談してみました。
印象的だったのは、既存メンバーから「そうそう!あの会議室それが困るんだよね〜!」と強い賛同の声をもらったことです。
新米な自分の抱えている悩みが決して個人的なものではなく、他の人にも共通の課題であることがアイデアソンの場で確認できたことは、制作のモチベーションを高める上で非常にありがたいことでした。
当初は「会議室内の様子をカメラで撮る -> 人がいるかどうかを画像解析して、いればモニタに利用中表示を出すシステム」を考えていました。
ですが、アイデアソンの場で解決策の相談をして「単純にカメラの画像をモニタに出すだけでいいのではないか。会議室に窓があってそれを覗き込んで中の様子を確認するのは一般的な行為では」というフィードバックをもらいました。
当初考えていたシステムよりもっと単純な構成でも課題を解決できると気付き、MVP(Minimum Viable Product)までを開発する期間の短縮化に貢献しました。
システム構成
実際にシステムを設置したときの様子がこちらです。
会議室の片隅にソラカメを設置し、会議室外側にある既存の利用中表示プレート近くにM5Stackを設置して、ソラカメからの画像を表示する形にしました。画像は30秒に一回の頻度で更新します。
対応カメラとクラウドサービスが一体となった、クラウド型カメラサービスです。詳細はソラカメのページをご覧ください。
M5Stackの画像はあえて解像度や大きさを落とすことで、会議室のプライバシーやセキュリティに配慮しました。
具体的な構成図がこちら。
- M5Stackは30秒ごとに最新画像をSORACOM Arc経由でSORACOM Funkにリクエスト
- SORACOM Funk経由で起動したAWS LambdaがソラカメAPIに問い合わせて最新の画像データを取得
- AWS Lambdaは取得画像をリサイズした上でM5Stackに画像データを返却
- M5Stackで取得室内画像を表示
SORACOM Arc ― WireGuardを利用したセキュアリンクサービス。Wi-Fi や有線LANによるIPネットワークからでもVPNにてSORACOMプラットフォームに接続し、IoT向けのSORACOMサービスが利用可能
SORACOM Funk ― FaaS が呼び出せるクラウドファンクションサービス。AWS Lambda や Microsoft Azure Functions を、API Gateway 等を用意せずにデバイスから直接呼び出しできる
画像処理に関する部分を個人的に書き慣れたAWSプラットフォーム・プログラミング言語で書きたいというモチベーションがあったことと、AWSやソラカメへアクセス可能な認証情報を多数の人間が触れられるM5Stackに直接持たすことを避けるために、SORACOM Arc経由でSORACOM Funk、AWS Lambdaにアクセスする方式にしました。
一番最小の構成にしたいのであれば、M5StackからソラカメAPIに直接アクセスし、画像取得からリサイズ・表示までの処理を行うことも可能です。
なお、最新の画像データを取得するために使ったソラカメAPIは、2024年7月現在Limited Preview中の「ライブ視聴見放題」機能によるものです。利用するには申請が別途必要になります。
苦労したポイント
IoTデバイスでデータを【受信】するナレッジが少ない
制作するにあたって苦労した点は、ソラコムのプラットフォームやM5StackのようなIoTデバイスからデータを【送信】するナレッジはネット上のナレッジや公開ドキュメントに豊富な一方、逆に今回のようにIoTデバイスでデータを【受信】するナレッジが少なかったことです。
たとえばLambdaから返却した画像をM5Stackで表示するには
- Lambdaでは返却したい画像のバイナリデータをbase64でエンコードして返す
- M5Stackで受け取ったデータを再度base64デコードしてからdrawJpg関数で表示
というプロセスが必要でしたが、このようなパターンにずばり当てはまる類似事例がなかなか見つからず、ここにたどり着くまでに自分で必要なプロセスを調べたり考えたり試したりとかなり試行錯誤しました。
IoTが注目されてきた当時は、「どこかにセンサーなどの値を送信する」といったユースケースが多かったかもしれません。ですが、M5Stackのような安価で高性能なIoTデバイスが広がるにつれて「IoTデバイス側でデータを受信して何らかの処理をしたい」ニーズも高まっていくと予想されるので、従来とは逆方向のナレッジ拡充が進められれば良いねという話を社内のメンバーとも会話していました。
SORACOM Funkのメソッド仕様
SORACOM Funk は HTTP POST メソッドのみに対応しています。これはIoTデバイスからなんらかのデータを送信して FaaS の関数を実行、値を返却するというのが Funk の一般的な使い方なためです。一方で、今回は画像を取得するという、いわゆる HTTP GET メソッドのような使い方となります。
そこで今回の実装は、M5Stack からの HTTP POST のペイロード(送信データ)は “空” = `{}` を送信し、その返却として画像を得るという、疑似的な HTTP GET 実装を行いました。これで無事画像を得ることに成功しています。
ここでの共有としては、SORACOM Funk に HTTP GET リクエストを送ると `405 Method Not Allowed` というエラーが返却されます。この時は、デバイスからの HTTP メソッドを確認するようにしましょう。(本件がきっかけとなって、ユーザードキュメントにもHTTP POST のみが対応であることを明記しました)
おわりに
以上、IoTプロトタイピングーコーナーで展示した「窓のない会議室の在室状況を確認するシステム」でした。
コーポレートITというポジションは、普段はなかなか自社のプロダクト開発に関わることは難しいのですが、プロトタイピングコーナーの開発を通じて微力ならが自社プロダクト改善に関われたのが嬉しい体験でした。
またソラカメの見放題APIも自分で触ってみて「このAPIがあればあんなことやこんなこともできるぞ…!」と、シンプルながら応用範囲の広い仕様にワクワクしました。
ぜひ皆さんも、プロトタイピングで実際にIoTに触り、システムを作ってみることにトライしてみてください。きっと「こういうことができるのか!」と、想像以上に楽しい発見があると思います!
― ソラコム 西村 (callie)