MQTTとRDBMSのブリッジ
このチュートリアルは、外部のMQTTブローカーからJSONデータを受信し、ブリッジ先のデータベースに保存する手順を説明します。
前提条件
外部のMQTTブローカーには、mosquittoを使用します。
インストールが必要な場合は、公式サイトを参照してください。
この例では、mosquittoサーバーが127.0.0.1:1883で実行中であることを前提とします。
TQLファイルの作成
外部のMQTTブローカーから届くメッセージを処理するTQLファイルを作成します。 この段階のスクリプトは、メッセージペイロードを受け取り、破棄する処理だけを行います。
machbase-neoのWeb UIのファイルエクスプローラーで/mqtt-bridge.tqlを作成し、以下の内容を入力します。
STRING(payload())
DISCARD()
MQTTブリッジの定義
machbase-neoに、MQTTブリッジ「mosquitto」を登録します。
- Name:
mosquitto - Type:
MQTT - Connection String:
broker=127.0.0.1:1883 cleansession=true
接続文字列のオプションの詳細は、ドキュメントを参照してください。

「Test」ボタンで接続を確認します。エラーが発生した場合は、接続文字列を修正して再試行します。

MQTTブリッジへのTQLの関連付け
ブリッジの定義とテスト後、mosquittoブローカーの特定のトピックにmqtt-bridge.tqlを関連付けられます。
「Test」ボタンの下の「New subscriber」をクリックし、以下のように設定します。
- Name:
mosquitto-sub - Topic:
demo/# - Destination: 「TQL Script」を選択し、作成したTQLファイルを指定します。

サブスクライバーを作成し、状態を「RUNNING」に設定します。

接続先DBブリッジの定義
外部データベースに接続するブリッジを追加します。この例ではSQLiteを使用しますが、他のデータベースでも、接続文字列以外の手順は同様です。
- Name:
destdb - Type:
SQLite - Connection String
file:///tmp/mqtt.db

受信データをmachbase-neo内部だけに保存する場合は、外部データベースのブリッジは不要です。
TQL
mosquittoブリッジがdemo/#トピックでメッセージを受信するたびに実行するTQLコードを作成します。
- 2〜11行目:このJSON文字列はテスト実行に使用します。実際のメッセージがなく、
payload()がNULLを返す場合、??演算子が指定したJSON文字列を代わりに使用します。 - 13行目:
SCRIPT({}, {})は、JavaScriptを実行するTQL MAP関数です。詳細は、ドキュメントを参照してください。 - 44行目:この例では、SCRIPT MAP関数がすべての処理を行うため、SINKでの追加処理は不要です。TQLはSINK関数で終わる必要があるため、
DISCARD()を使用します。
| |
データの発行
まず、テスト用のJSONファイルを用意します。
mqtt-test.json
{
"timestamp": 1732653071807,
"message": {
"totalCar": "3683",
"reason": "car",
"total": "3956",
"resetTime": "2024-11-25T23:00:00Z",
"scenario": "Scenario 1"
}
}demo/sensor_1トピックにメッセージを発行します。ペイロードには、作成したファイルの内容を使用します。
mosquitto_pub -h 127.0.0.1 -p 1883 \
-t demo/sensor_1 \
-f ./mqtt-test.jsonブリッジ先DBの検索
接続先データベースにデータが保存されたことを確認します。machbase-neoのSQLエディターで-- env: bridge=destdbコメントを使用すると、ブリッジ先DBに直接クエリを実行できます。
-- env: bridge=destdb
SELECT * FROM DATA;
-- env: reset