Supabase に MQTT データを取り込む
Supabase は、開発者が迅速にアプリケーションを構築・デプロイできるよう設計されたオープンソースの Backend as a Service(BaaS)プラットフォームです。リアルタイムデータベース、ユーザー認証、ファイルストレージなどのバックエンド機能を提供します。
Supabase はオープンソースソフトウェアとして公開されています。プロジェクトの詳細や Supabase オープンソースコミュニティへの参加は、GitHubをご覧ください。
本ドキュメントでは、Supabase を MQTT サーバーに接続し、EMQX Cloud のデータ統合を使って MQTT メッセージを処理・変換し、Supabase のデータベースに書き込む方法について説明します。
はじめに
このセクションでは、EMQX Cloud で Supabase のデータ統合を作成するために必要な準備について説明します。
前提条件
以下の内容に慣れていることを前提とします。
ネットワーク設定
EMQX Cloud が Supabase サービスに正常にアクセスできるように、デプロイ管理ページの ネットワーク管理 で NAT ゲートウェイ 機能を有効にしてください。詳細はこちらを参照してください。
Supabase のデプロイ
Supabase は以下の2つのデプロイモードをサポートしています。
- セルフホスト型デプロイ
- マネージドクラウドデプロイ
本チュートリアルでは、マネージドクラウドデプロイを対象とします。セルフホスト型デプロイが必要な場合は、Supabase ドキュメント – セルフホスティングを参照してください。
Supabase コンソールにアクセスし、登録とログインを完了します。
画面の指示に従い、組織とプロジェクトを作成します。

ビジネス要件に応じてデータベーステーブルを作成します。
本チュートリアルでは、コネクテッドビークルのシナリオを例に、車両の経度、緯度、速度、バッテリーレベル、モーター温度、記録タイムスタンプを格納する 車両リアルタイムデータテーブル を作成します。

接続パラメータの取得
Supabase は3つのデータベース接続方法を提供しています。
- 直接接続
- トランザクションプーラー
- セッションプーラー
直接接続は無料プランで IPv6 ドメインのみサポートしていますが、EMQX Cloud は現在 IPv4 DNS 解決のみ対応しています。そのため、IPv4 アドオンを有効にするか、トランザクションプーラーまたはセッションプーラーを代替として利用してください。
本チュートリアルでは セッションプーラー を例に説明します。プロジェクトページ上部の Connect ボタンをクリックし、接続情報を表示してコネクター作成に必要なパラメータを取得します。

コネクターの作成
EMQX Cloud では、PostgreSQL コネクターを使って Supabase データベースにアクセスできます。
デプロイの データ統合 ページに移動し、PostgreSQL を選択します。既に他のコネクターが存在する場合は、新規コネクター をクリックしてから PostgreSQL を選択してください。
先ほど取得した接続パラメータを使ってコネクターを設定します。パスワード は Supabase プロジェクト作成時に設定したデータベースのパスワードです。

暗号化接続を確立したい場合は、TLS を有効にする スイッチをオンにします。
接続テスト をクリックし、PostgreSQL サービスにアクセス可能であれば成功メッセージが表示されます。
作成 をクリックしてコネクター作成を完了します。
ルールの作成
このセクションでは、EMQX Cloud で MQTT トピック test/vehicle からリアルタイムの車両データメッセージを処理し、PostgreSQL Sink を使って処理済みデータを Supabase データベースに書き込むルールの作成方法を説明します。
コネクター一覧の アクション 列にある ルール作成 アイコンをクリックするか、ルール ページの ルール作成 をクリックしてルール作成ワークフローに入ります。
SQL エディターに以下のルール SQL を入力します。
sqlSELECT payload.vehicle_id AS vehicle_id, payload.longitude AS longitude, payload.latitude AS latitude, payload.speed AS speed, payload.battery_level AS battery_level, payload.motor_temperature AS motor_temperature FROM "test/vehicle":::
SQL を初めて使う場合は、SQL Examples をクリックするか、Try It Out を有効にしてルール SQL の結果を学習・テストできます。
:::
次へ をクリックして、PostgreSQL Sink を含むアクションを作成します。
コネクター のドロップダウンリストから、先ほど作成した PostgreSQL(Supabase)コネクターを選択します。
SQL テンプレート に、処理済みデータを Supabase テーブルに挿入するための以下の SQL を入力します。
これは前処理用の SQL 文です。フィールド名はクォートせず、SQL 文の末尾にセミコロン(
;)を付けないでください。sqlINSERT INTO vehicle_realtime_data ( vehicle_id, longitude, latitude, speed, battery_level, motor_temperature ) VALUES ( ${vehicle_id}, ${longitude}, ${latitude}, ${speed}, ${battery_level}, ${motor_temperature} )必要に応じて詳細オプションを設定します(任意)。
確認 をクリックしてアクション設定を完了します。
新規ルール作成成功 ダイアログで ルールに戻る をクリックし、データ統合の設定を完了します。
Flowデザイナー で完成したデータパイプラインを確認できます。

ルールのテスト
MQTTX を使って車両データのパブリッシュをシミュレートすることを推奨します。他の MQTT クライアントを使用しても構いません。
MQTTX でデプロイに接続し、事前に定義したトピック(例:
test/vehicle)に車両リアルタイムデータメッセージをパブリッシュします。
Supabase のテーブルエディターで、新たにパブリッシュされたデータが正常にテーブルに挿入されていることを確認できます。

さらに詳しく
これで Supabase と EMQX Cloud の連携が完了し、MQTT メッセージを処理・変換して Supabase に書き込むことが可能になりました。
Supabase の機能について詳しくは、Supabase ドキュメントをご覧ください。
また、GitHubでは、さまざまなプログラミング言語の MQTT クライアント例も公開されています。