اتصال پایتون و Node.js به بروکر MQTT
نمونه کدهای آماده برای انتشار و دریافت پیام با پایتون و Node.js روی اتصال امن TLS، بهعلاوه اتصال از مرورگر با WebSocket.
پایتون با Paho#
کتابخانه را نصب کنید:
pip install paho-mqttنمونه زیر هم مشترک میشود و هم پیام منتشر میکند. tls_set() بدون آرگومان از گواهیهای سیستم استفاده میکند که برای گواهی Let's Encrypt بروکر کافی است.
import json
import paho.mqtt.client as mqtt
USER = "alice"
CLIENT_ID = "py-01" # registered in the dashboard
def on_connect(client, userdata, flags, reason_code, properties):
print("connected:", reason_code)
client.subscribe(f"{USER}/sensors/#", qos=1)
def on_message(client, userdata, msg):
print(msg.topic, msg.payload.decode())
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=CLIENT_ID)
client.username_pw_set(USER, "YOUR_PASSWORD")
client.tls_set()
client.on_connect = on_connect
client.on_message = on_message
client.connect("mqtt.mqttcloud.ir", 8883, keepalive=60)
client.loop_start()
client.publish(f"{USER}/sensors/temp", json.dumps({"c": 24.8}), qos=1)از نسخه ۲ کتابخانه paho-mqtt، آرگومان CallbackAPIVersion هنگام ساخت کلاینت لازم است.
Node.js با mqtt.js#
npm install mqttimport mqtt from "mqtt";
const USER = "alice";
const client = mqtt.connect("mqtts://mqtt.mqttcloud.ir:8883", {
clientId: "node-01", // registered in the dashboard
username: USER,
password: process.env.MQTT_PASSWORD,
});
client.on("connect", () => {
client.subscribe(`${USER}/sensors/#`, { qos: 1 });
client.publish(`${USER}/sensors/temp`, JSON.stringify({ c: 24.8 }), { qos: 1 });
});
client.on("message", (topic, payload) => console.log(topic, payload.toString()));
client.on("error", (err) => console.error(err.message));mqtt.js بهصورت خودکار پس از قطع اتصال دوباره وصل میشود. رمز عبور را در کد ننویسید؛ مثل نمونه از متغیر محیطی بخوانید.
اتصال از مرورگر با WebSocket#
مرورگرها نمیتوانند مستقیماً به پورت 8883 وصل شوند، برای همین بروکر روی wss://mqtt.mqttcloud.ir/mqtt هم در دسترس است و همان mqtt.js در مرورگر کار میکند:
const client = mqtt.connect("wss://mqtt.mqttcloud.ir/mqtt", {
clientId: "web-01",
username: "alice",
password: "...",
});هر چیزی که در کد سمت مرورگر باشد، برای کاربر قابل مشاهده است. برای داشبوردهای وب یک اکانت MQTT جدا بسازید تا اگر رمز آن لو رفت، دستگاههای اصلیتان در امان باشند.
چند یادآوری#
- هر برنامه یا اسکریپت به شناسه دستگاه جداگانه نیاز دارد؛ دو اتصال همزمان با یک Client ID یکدیگر را قطع میکنند.
- تاپیکها باید با
نامکاربری/شروع شوند؛ قواعد کامل را در مقاله تاپیکها، QoS و پیام ماندگار ببینید. - پیامهای منتشرشده را میتوانید در صفحه «پیامها» داشبورد ببینید.
