Skip to content

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 ドキュメント – セルフホスティングを参照してください。

  1. Supabase コンソールにアクセスし、登録とログインを完了します。

  2. 画面の指示に従い、組織とプロジェクトを作成します。

    Supabase Project

  3. ビジネス要件に応じてデータベーステーブルを作成します。

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

    Table Columns

接続パラメータの取得

Supabase は3つのデータベース接続方法を提供しています。

  • 直接接続
  • トランザクションプーラー
  • セッションプーラー

直接接続は無料プランで IPv6 ドメインのみサポートしていますが、EMQX Cloud は現在 IPv4 DNS 解決のみ対応しています。そのため、IPv4 アドオンを有効にするか、トランザクションプーラーまたはセッションプーラーを代替として利用してください。

本チュートリアルでは セッションプーラー を例に説明します。プロジェクトページ上部の Connect ボタンをクリックし、接続情報を表示してコネクター作成に必要なパラメータを取得します。

Connection

コネクターの作成

EMQX Cloud では、PostgreSQL コネクターを使って Supabase データベースにアクセスできます。

  1. デプロイの データ統合 ページに移動し、PostgreSQL を選択します。既に他のコネクターが存在する場合は、新規コネクター をクリックしてから PostgreSQL を選択してください。

  2. 先ほど取得した接続パラメータを使ってコネクターを設定します。パスワード は Supabase プロジェクト作成時に設定したデータベースのパスワードです。

    Supabase Connector

  3. 暗号化接続を確立したい場合は、TLS を有効にする スイッチをオンにします。

  4. 接続テスト をクリックし、PostgreSQL サービスにアクセス可能であれば成功メッセージが表示されます。

  5. 作成 をクリックしてコネクター作成を完了します。

ルールの作成

このセクションでは、EMQX Cloud で MQTT トピック test/vehicle からリアルタイムの車両データメッセージを処理し、PostgreSQL Sink を使って処理済みデータを Supabase データベースに書き込むルールの作成方法を説明します。

  1. コネクター一覧の アクション 列にある ルール作成 アイコンをクリックするか、ルール ページの ルール作成 をクリックしてルール作成ワークフローに入ります。

  2. SQL エディターに以下のルール SQL を入力します。

    sql
    SELECT
      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 の結果を学習・テストできます。

    :::

  3. 次へ をクリックして、PostgreSQL Sink を含むアクションを作成します。

  4. コネクター のドロップダウンリストから、先ほど作成した PostgreSQL(Supabase)コネクターを選択します。

  5. SQL テンプレート に、処理済みデータを Supabase テーブルに挿入するための以下の SQL を入力します。

    これは前処理用の SQL 文です。フィールド名はクォートせず、SQL 文の末尾にセミコロン(;)を付けないでください。

    sql
    INSERT INTO vehicle_realtime_data (
      vehicle_id,
      longitude,
      latitude,
      speed,
      battery_level,
      motor_temperature
    )
    VALUES (
      ${vehicle_id},
      ${longitude},
      ${latitude},
      ${speed},
      ${battery_level},
      ${motor_temperature}
    )
  6. 必要に応じて詳細オプションを設定します(任意)。

  7. 確認 をクリックしてアクション設定を完了します。

  8. 新規ルール作成成功 ダイアログで ルールに戻る をクリックし、データ統合の設定を完了します。

  9. Flowデザイナー で完成したデータパイプラインを確認できます。

    Flow

ルールのテスト

MQTTX を使って車両データのパブリッシュをシミュレートすることを推奨します。他の MQTT クライアントを使用しても構いません。

  1. MQTTX でデプロイに接続し、事前に定義したトピック(例:test/vehicle)に車両リアルタイムデータメッセージをパブリッシュします。

    MQTTX

  2. Supabase のテーブルエディターで、新たにパブリッシュされたデータが正常にテーブルに挿入されていることを確認できます。

    Table Result

さらに詳しく

これで Supabase と EMQX Cloud の連携が完了し、MQTT メッセージを処理・変換して Supabase に書き込むことが可能になりました。

Supabase の機能について詳しくは、Supabase ドキュメントをご覧ください。

また、GitHubでは、さまざまなプログラミング言語の MQTT クライアント例も公開されています。