Mosquitto: はじめに
Mosquittoの始め方
👋 Stackheroのドキュメントへようこそ!
Stackheroは、数多くの利点を提供する、すぐに使えるMosquitto MQTTクラウドソリューションを提供しています。
- 無制限のメッセージ交換と転送。
- 外部APIを介したデバイスの無制限認証。
- トピック、ユーザー、アクションに対する高度なACL。
- HTTPSで保護されたカスタマイズ可能なドメイン名(例:https://mqtt.your-company.com)。
- ワンクリックで簡単に更新。
- プライベートで専用のVMによる最適なパフォーマンスと強力なセキュリティ。
時間を節約し、生活を簡素化:StackheroのMosquitto MQTTクラウドホスティングソリューションを試すのに5分しかかかりません!
MosquittoはMQTTプロトコル(Message Queuing Telemetry Transport)を実装したMQTTブローカーで、IoTデバイスとサーバー間の軽量な通信に特化しています。
Stackheroでは、MosquittoはTLS暗号化とユーザー認証で設定されており、安全な通信環境を提供します。
Mosquittoの利用方法を示す実用的なコード例は、https://github.com/stackhero-io/mosquittoGettingStartedで見つけることができます。
MQTTトピックの理解
MQTTは通信を「トピック」に整理し、データの発行と購読のためのチャネルとして機能します。デバイスは特定のトピックにメッセージを発行したり、購読して関連する更新を受け取ります。
MQTTトピックの構造
MQTTのトピックは大文字と小文字を区別し、UTF-8文字を含む必要があり、少なくとも1文字が必要です。トピック内の階層はスラッシュ(/)文字で定義されます。
以下は、MACアドレスで識別される温度と湿度データを収集するIoTデバイスの設定例です:
-
MACアドレスが
00:00:00:00:00:00のデバイスの場合:- 温度:
devices/00:00:00:00:00:00/temperature - 湿度:
devices/00:00:00:00:00:00/humidity
- 温度:
-
MACアドレスが
11:11:11:11:11:11のデバイスの場合:- 温度:
devices/11:11:11:11:11:11/temperature - 湿度:
devices/11:11:11:11:11:11/humidity
- 温度:
アプリケーションは、devices/00:00:00:00:00:00/temperatureのような特定のトピックを購読して、対応するIoTデバイスからデータを受け取ることができます。
MQTTトピックでのワイルドカードの使用
MQTTは効率的なトピック管理のためにワイルドカードをサポートしています:
-
+ワイルドカードはトピック階層の単一レベルに一致します。例えば、devices/+/temperatureを購読すると、devices/1/temperatureのようなトピックをキャプチャしますが、devices/1/2/temperatureはキャプチャしません。 -
#ワイルドカードは複数のレベルに一致します。例えば、devices/#はdevices/1/temperature、devices/2/humidity、devices/1/2/somethingElseのようなトピックに一致します。
mosquitto_pubとmosquitto_subでのテスト
mosquitto_pubとmosquitto_subのCLIツールは、MQTT設定のテストに最適です。使用する前に、StackheroダッシュボードのMosquitto設定で「クリア接続を許可」オプションが無効になっていることを確認してください。
テスト方法は以下の通りです:
-
#ワイルドカードを使用してすべてのトピックを購読します:mosquitto_sub -L -d "mqtts://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT_TLS>/#" -
別のターミナルを開いてトピックにメッセージを発行します:
mosquitto_pub -L -d "mqtts://admin:<PASSWORD>@<XXXXXX>.stackhero-network.com:<PORT_TLS>/sensor/a" -m "It works"
最初のコンソールでは、-dフラグで有効になったデバッグログと共に発行されたメッセージが表示されるはずです。
WebSocketsを介したMQTTへの接続
Webブラウザを使用してWebSocketsを介してMosquittoサーバーに直接接続できます。「WebSockets」ドキュメントを参照して詳細を確認してください。
Node.jsとMQTT
Node.jsでMosquittoを使用する方法を示す例は、https://github.com/stackhero-io/mosquittoGettingStartedで入手できます。
PythonとMQTT
PythonでMosquittoを使用するには、Paho MQTT Pythonクライアントライブラリが推奨されます。以下のコマンドでインストールします:
pip install paho-mqtt
以下は、TLS暗号化と認証を使用してMosquittoサーバーに接続するためのPythonスクリプトの例です:
import paho.mqtt.client as mqtt
import random
import string
from paho.mqtt.client import CallbackAPIVersion
def on_connect(client, userdata, flags, reason_code, properties=None):
if reason_code == 0:
print("Connected successfully")
else:
print(f"Connection failed with reason {reason_code}")
def on_message(client, userdata, msg, properties=None):
print(f"Received message: {msg.payload.decode()} on topic {msg.topic}")
def generate_client_id(length=8):
characters = string.ascii_letters + string.digits
return "client_" + ''.join(random.choice(characters) for _ in range(length))
client_id = generate_client_id()
client = mqtt.Client(
client_id=client_id,
callback_api_version=CallbackAPIVersion.VERSION2
)
client.on_connect = on_connect
client.on_message = on_message
host = "<XXXXXX>.stackhero-network.com"
port = <PORT_TLS>
client.username_pw_set("<USER>", "<PASSWORD>")
client.tls_set()
try:
print(f"Connecting to {host} with client ID: {client_id}")
client.connect(host, port)
client.loop_start()
client.subscribe("$SYS/#")
try:
while True:
pass
except KeyboardInterrupt:
print("\nDisconnecting...")
client.loop_stop()
client.disconnect()
except Exception as e:
print(f"Error: {e}")
これらの指示により、StackheroでMosquittoを使い始めるための準備が整うはずです。MQTTの探索をお楽しみください!