Microsoft Fabricで部屋の温湿度の推移をグラフにしてみた

技術者が語るMicrosoft Azure

2023年にMicrosoftから新しいデータ分析プラットフォーム「Microsoft Fabric」が発表されました。

今回は「Microsoft Fabric」を実際に使用し、IoTデバイスから自宅の部屋の温湿度のデータを常に取得・蓄積して、Microsoft Power BI(以下、Power BI)のレポートを作成するまでを試してみたので、その方法を紹介します。

1.Microsoft Fabricとは?

2023年5月に開催された「Microsoft Build 2023」というイベントで、新しいエンドツーエンドのデータ分析プラットフォーム「Microsoft Fabric(以下、Fabric)」が発表されました。

今までは、データを取得・蓄積・分析し、レポートとして出力するまでを、別々のサービスで行い、それらをつなぎ合わせる必要がありました。
しかし、Fabricにはそれらの機能が全て備えられているため、Fabricを構築するだけでデータ分析が完結できるようになりました。

2023年9月27日現在、Fabricはパブリックプレビューであるため、無料で試用することができます。
ぜひお試しください。
Microsoft Ignite “Microsoft Fabric (プレビュー) 試用版”

2.準備するもの

今回はFabricを使用して、IoTデバイスである自宅の部屋の温湿度計からデータを取得し、部屋の温湿度がどのように変化しているかをグラフで表示してみます。

個人利用を前提に作成しているため、セキュリティについては考慮していないことをご了承ください。

<今回準備したもの>
・ Microsoft Fabric(プレビュー)試用版
・ SwitchBot防水温湿度計 ※製品情報はこちら

上記の2つを用いて実装していきます。

3.温湿度データを取得し蓄積する

データを蓄積する準備

まずはホーム画面から「Synapse Data Engineering」を選択します。

左部から「ワークスペース」→「新しいワークスペース」を作成します。

作成したワークスペースから「新規」→「Notebook(プレビュー)」をクリックします。

次に、表示されたノートブックの左側にある「レイクハウス エクスプローラー」の「Add」をクリックし、「New lakehouse」から任意の名前を指定して「作成」をクリックします。
このレイクハウスで、あらゆるデータの保存や管理、分析を行うことができます。

温湿度計からデータを取得し、レイクハウスに保存する

SwitchBotが提供しているAPIをノートブックから実行し、取得した温湿度データを先ほど作成したレイクハウスに保存します。
SwitchBot API

SwitchBot APIを利用するには複雑なキーを生成しなければいけないため、今回はPySpark(Python)で実装します。
※ ほとんどの場合は「ノートブック」ではなく「パイプライン」の「コピー アクティビティ」をおすすめします。
オンプレミス・クラウドのデータベースやWeb API、ファイルサーバのExcelなど、あらゆる接続先・ファイル形式に対応しており、ノーコードでデータ蓄積を実現できます。

import requests
import json
import time
import hashlib
import hmac
import base64
import uuid
import datetime
from zoneinfo import ZoneInfo
from pyspark.sql.functions import lit, col

apiHeader = {}
token = "<トークン>" secret = "<クライアントシークレット>" nonce = uuid.uuid4() t = int(round(time.time() * 1000)) string_to_sign = "{}{}{}".format(token, t, nonce) string_to_sign = bytes(string_to_sign, "utf-8") secret = bytes(secret, "utf-8") sign = base64.b64encode(hmac.new(secret, msg=string_to_sign, digestmod=hashlib.sha256).digest()) apiHeader["Authorization"]=token apiHeader["Content-Type"]="application/json" apiHeader["charset"]="utf8" apiHeader["t"]=str(t) apiHeader["sign"]=str(sign, "utf-8") apiHeader["nonce"]=str(nonce) res = requests.get("https://api.switch-bot.com/v1.1/devices/<デバイスid>/status", headers=apiHeader) nowDatetime = datetime.datetime.now(ZoneInfo("Asia/Tokyo")) data = res.json() temperatureHumidityRDD = sc.parallelize([data["body"]]) temperatureHumidityDF = spark.read.json(temperatureHumidityRDD) temperatureHumidityDF.withColumns({ "deviceId": temperatureHumidityDF.deviceId.cast("string"), "deviceType": temperatureHumidityDF.deviceType.cast("string"), "battery": temperatureHumidityDF.battery.cast("int"), "version": temperatureHumidityDF.version.cast("string"), "temperature": temperatureHumidityDF.temperature.cast("float"), "humidity": temperatureHumidityDF.humidity.cast("int"), "timestamp_utc": lit(nowDatetime).cast("timestamp"), "year": lit(nowDatetime.strftime("%Y")).cast("string"), "month": lit(nowDatetime.strftime("%m")).cast("string"), "day": lit(nowDatetime.strftime("%d")).cast("string")}).write.mode("append").format("delta").partitionBy("year","month","day").save("Tables/temperature_humidity") 

これを実行すると、左側のレイクハウスにテーブル「temperature_humidity」が自動作成されます。

あらかじめテーブルを作成してしまうと、後述する「SQLエンドポイント」および「既定のデータセット」にテーブルが自動反映されず、レポートの作成に手間がかかってしまうため、注意してください。

スケジュール実行の設定

温湿度の遷移を見るためには、可能な限り常にデータを取得する必要があります。
ノートブックにスケジュールを設定しておけば、決まった時間に繰り返しノートブック内のコードを実行することができます。
スケジュールの設定は上部の「実行」→「スケジュール」から設定できます。
今回は1分ごとに実行されるように設定しました。

4. 蓄積したデータを確認する

前項で取得したデータを、実際に確認してみます。

レイクハウス

先ほど作成したテーブルはここに作成されます。
「Tables」フォルダは作成したテーブルの情報を確認することができます。
「Files」フォルダは今回使用していませんが、csv・parquetといったファイルを格納し、右クリック→「テーブルに読み込む」でそのファイルのデータを新規または既存のテーブルに追加することができます。

また、「Files」にはショートカットも使用でき、Azureのストレージサービスである「Azure Data Lake Storage Gen2」のみならず、AWSの「Amazon S3」をレイクハウスと紐づけて、ファイルを管理したり、テーブルにデータを読み込んだりすることができます。

SQLエンドポイント

レイクハウスを作成すると自動で作成されます。
ここでは、レイクハウスのテーブルに対してSQLを実行することができます。
SQLクエリを保存したり、ビューを作成したりすることもできます。

既定のデータセット

レイクハウスを作成するとデータセットが自動で作成されます。
これは、レイクハウスやSQLエンドポイントに作成されているテーブルやビューの情報を自動で反映した、Power BIのデータセットです。
データセットがあることで、Power BIのレポートを作成するときに、データの取得先を設定する作業を省くことができます。

5. Power BIレポートを作成する

「SQLエンドポイント」を開き、上部の「新しいレポート」をクリックします。

レポートの編集画面が表示され、右部には作成したテーブルが表示されています。

後は好きなようにレポートを作成します。
これでひとまず完成です。

時間は世界標準時(UTC)となっており、今のところタイムゾーンを変更することはできないようです。
+9時間して日本時間(JST)に直した項目を作成しても、「相対時間」フィルターが世界標準時(UTC)基準のため正常に動きません。

これまで作成したものは、組織内の他のユーザーに共有できます。
また、TeamsではPower BIタブを利用してレポートを表示することができます。
便利ですね。

6. おわりに

今回は、IoTデバイスから温湿度データを取得・蓄積してPower BIのレポートを作成するまでを、Fabricを用いて行ってみました。
これらがたった1つのサービスで実現できることに、驚きを隠せません。

蓄積したデータはPower BIのレポートに使用するだけでなく、大規模なデータ変換を行ったり、機械学習モデルを作成したりなど、Fabric1つでさまざまな用途に使用することができます。
Azureに留まらず、オンプレミスのデータベースやAWS、GCPなど多くのサービスからデータを集約できることも魅力で、夢が広がりますね。

システムエグゼでは、Azureデータ分析関連サービスを活用し、お客さまのデータを収集・分析し、BIツールにより可視化まで行える環境を構築する「データ分析プラットフォーム構築サービス for Microsoft Azure」を展開しています。
また、マイクロソフト社と協力し、「Microsoft Fabric」の検証を進め、一般提供後のサービス化の準備を行っています。
Azureおよびデータ分析についてご検討の際は、ぜひお気軽にご相談ください。