اتصال پایتون و Node.js به بروکر MQTT
آموزش

اتصال پایتون و Node.js به بروکر MQTT

۸ آبان ۱۴۰۵۶ دقیقه مطالعه

نمونه کدهای آماده برای انتشار و دریافت پیام با پایتون و Node.js روی اتصال امن TLS، به‌علاوه اتصال از مرورگر با WebSocket.

پایتون با Paho#

کتابخانه را نصب کنید:

bash
pip install paho-mqtt

نمونه زیر هم مشترک می‌شود و هم پیام منتشر می‌کند. tls_set() بدون آرگومان از گواهی‌های سیستم استفاده می‌کند که برای گواهی Let's Encrypt بروکر کافی است.

python
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#

bash
npm install mqtt
js
import 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 در مرورگر کار می‌کند:

js
const client = mqtt.connect("wss://mqtt.mqttcloud.ir/mqtt", {
  clientId: "web-01",
  username: "alice",
  password: "...",
});

هر چیزی که در کد سمت مرورگر باشد، برای کاربر قابل مشاهده است. برای داشبوردهای وب یک اکانت MQTT جدا بسازید تا اگر رمز آن لو رفت، دستگاه‌های اصلی‌تان در امان باشند.

چند یادآوری#

  • هر برنامه یا اسکریپت به شناسه دستگاه جداگانه نیاز دارد؛ دو اتصال هم‌زمان با یک Client ID یکدیگر را قطع می‌کنند.
  • تاپیک‌ها باید با نام‌کاربری/ شروع شوند؛ قواعد کامل را در مقاله تاپیک‌ها، QoS و پیام ماندگار ببینید.
  • پیام‌های منتشرشده را می‌توانید در صفحه «پیام‌ها» داشبورد ببینید.
#Python#NodeJS#Paho#mqttjs