آموزش ها
خانه هوشمند 2 سرور رسپبری پای broker mqtt mosquitto
مقدمه
در دنیای هوشمندسازی منازل، ارتباط پایدار، ساده و کممصرف بین دستگاهها حیاتی است. وقتی تعداد حسگرها، کلیدها، لامپها یا دستگاههای الکترونیکی متعدد میشود، ارسال درخواستهای HTTP سنگین و ناپایا ممکن است باعث افزایش تأخیر و مصرف انرژی شود. اینجاست که MQTT وارد میدان میشود: پروتکلی سبک و کارآمد با الگوی انتشار/اشتراک (Publish/Subscribe) که بسیار مناسب برای اینترنت اشیاء و خانه هوشمند است.
در این مقاله، قدم به قدم با هم میآموزیم چگونه یک broker mqtt mosquitto را بر روی رسپبری پای (Raspberry Pi) راهاندازی کنیم و آن را به قلب سامانه خانه هوشمند خود تبدیل کنیم. از نصب و پیکربندی پایه تا امنیت، تست محلی، راه دور، اتصال سنسورها و بهینهسازی عملکرد — همه را به زبانی ساده و عملی توضیح خواهیم داد. اگر قصد دارید کنترل دستگاهها را به شکلی مطمئن و بهینه مدیریت کنید، این راهنما نقطه شروع به شما خواهد بود.
در ادامه، ابتدا با مفهوم MQTT و مزایای آن آشنا میشویم و سپس وارد جزئیات نصب، پیکربندی، امنیت و آزمایش میشویم.
MQTT چیست؟
MQTT مخفف «Message Queuing Telemetry Transport» است. این پروتکل ارتباطی سبک برای انتقال پیام بین دستگاهها طراحی شده است. در مقابل پروتکلهای HTTP که مدل درخواست/پاسخ دارند، MQTT از مدل انتشار/اشتراک بهره میبرد: دستگاهی پیام را منتشر (publish) میکند و دستگاههای دیگری که به همان موضوع (topic) مشترک هستند آن را دریافت (subscribe) میکنند.
اصول اصلی مدل Publish/Subscribe
در MQTT، اجزای اصلی عبارتند از:
Publisher: دستگاهی که پیام منتشر میکند
Broker: مرکزی که پیامها را دریافت و توزیع میکند
Subscriber: دستگاهی که پیامهایی را که به موضوع مشخص اشتراک کرده، دریافت میکند
وقتی یک Publisher پیامی به یک موضوع میفرستد، Broker آن را به همه Subscriberهایی که به آن موضوع مشترک هستند تحویل میدهد. این مدل، دستگاهها را از دانستن مستقیم آدرس یکدیگر بینیاز میکند.
مقایسه با HTTP
مزایای MQTT نسبت به HTTP در سناریوهای اینترنت اشیاء و خانه هوشمند:
مصرف پهنای باند کمتر: پیامها سبکتر هستند.
تاخیر کمتر: ارتباط دائمی و بیدار بودن اتصال.
کارایی در شبکههای نامطمئن: MQTT میتواند مجدداً تلاش کند یا پیام را نگه دارد.
ارسال دوطرفه آسان: امکان کنترل فرمانها از سرور به دستگاهها به سادگی.
به همین دلایل، MQTT یکی از محبوبترین گزینهها برای ساخت خانه هوشمند است.
ضرورت استفاده از Broker در MQTT
در هر سیستم MQTT، وجود Broker ضروری است. تمامی پیامها از طریق این واسطه عبور میکنند. Broker وظایف عمده زیر را بر عهده دارد:
دریافت پیام از publish
بررسی سیاستهای دسترسی
توزیع پیام به subscriberهای مجاز
ذخیره پیام اگر گزینه retain فعال باشد
مدیریت وضعیت اتصال دستگاهها
یک Broker خوب باید سبک، امن، پایدار و قابل توسعه باشد — که یکی از بهترین گزینهها Mosquitto است.
معرفی Mosquitto بهعنوان Broker MQTT
Mosquitto یک پیادهسازی متنباز (Open Source) از بروکر MQTT است که تحت مجوز Eclipse فعالیت میکند. این پروژه بهصورت گستردهای پذیرفته شده و در پروژههای خانگی و صنعتی کاربرد دارد.
ویژگیهای شاخص Mosquitto:
سبک بودن و مناسب برای سختافزارهای کممصرف
پشتیبانی از MQTT نسخه 3.1، 3.1.1 و نسخه 5
پشتیبانی از TLS/SSL، احراز هویت، ACL
امکان اجرای بهصورت سرویس (daemon)
پشتیبانی از bridging بین brokerهای مختلف
به دلیل ساده بودن و جامعه کاربری فعال، Mosquitto انتخابی عالی برای پروژههای خانه هوشمند است.
چرا Raspberry Pi برای خانه هوشمند؟
استفاده از Raspberry Pi به عنوان سرور مرکزی خانه هوشمند مزایای زیادی دارد:
مصرف انرژی پایین
ابعاد کوچک و امکان قرارگیری در هر فضا
پشتیبانی از سیستمعاملهای لینوکسی و بستهها
پورتهای GPIO برای اتصال مستقیم سنسورها
هزینه مناسب نسبت به سرورهای گرانتر
با این حال، محدودیت در منابع (RAM، CPU) باید در طراحی سیستم لحاظ شود. مدلهایی مانند Raspberry Pi 4 با حداقل ۲ یا ۴ گیگابایت RAM برای کار متوسط مناسباند.
آمادهسازی سیستم عامل بر روی Raspberry Pi
ابتدا سیستمعامل مناسب را نصب کنید؛ معمولاً از Raspberry Pi OS (قبلاً Raspbian) استفاده میشود. سپس:
سیستم را بهروز کنید:
sudo apt update
sudo apt upgrade
مطمئن شوید که SSH فعال است تا بتوان از راه دور مدیریت کنید.
تنظیمات شبکه: آدرس IP ثابت یا رزرو DHCP تعبیه شود تا اتصال به بروکر در شبکه داخلی پایدار بماند.
نصب Mosquitto بر روی Raspberry Pi
برای نصب Mosquitto از مخازن رسمی میتوانید از این دستورات استفاده کنید:
sudo apt install mosquitto mosquitto-clients
این روش سریع و ساده است.
در صورتی که بخواهید نسخه جدیدتر یا تنظیمات سفارشیتر داشته باشید، میتوانید Mosquitto را از سورس کامپایل کنید، اما برای بیشتر پروژههای خانه هوشمند نصب از مخازن کافی خواهد بود.
پیکربندی پایه Mosquitto
فایل اصلی پیکربندی Mosquitto معمولاً در مسیر /etc/mosquitto/mosquitto.conf قرار دارد. در آنجا میتوانید:
تعیین listener برای پورت پیشفرض (مثل ۱۸۸۳):
listener 1883
فعال یا غیرفعال کردن دسترسی ناشناس (anonymous):
allow_anonymous false
تعریف مسیر فایل کاربری (password file) و دسترسیها:
password_file /etc/mosquitto/passwd
include_dir /etc/mosquitto/conf.d
با همین تنظیمات ابتدایی، Mosquitto قادر است پیامها را بپذیرد و توزیع کند، اما تا زمانی که امنیت فعال نشود، دسترسی همه آزاد است.
امنیت در Mosquitto: احراز هویت و TLS
امنیت در سیستم خانه هوشمند حیاتی است. اگر کسی بتواند به broker دسترسی یابد، کنترل دستگاهها را به دست خواهد گرفت. برای ایمنسازی:
احراز هویت (Username / Password)
با ابزار mosquitto_passwd میتوانید فایل حاوی نام کاربری و رمز عبور بسازید:
sudo mosquitto_passwd -c /etc/mosquitto/passwd user1
سپس در mosquitto.conf آن را اضافه کنید:
password_file /etc/mosquitto/passwd
allow_anonymous false
رمزنگاری TLS / SSL
برای رمزگذاری ارتباطات، باید فایلهای کلید خصوصی و گواهینامه (certificate) ایجاد کنید یا از CA معتبر استفاده کنید. در mosquitto.conf تنظیمات مشابه زیر را اضافه کنید:
listener 8883
cafile /etc/mosquitto/ca.crt
certfile /etc/mosquitto/server.crt
keyfile /etc/mosquitto/server.key
با این کار، ارتباط روی پورت ۸۸۸۳ امن خواهد بود.
مدیریت دسترسی (ACL)
با فایل دسترسی (ACL) میتوانید تعیین کنید کاربر خاصی به کدام موضوعات publish یا subscribe دسترسی دارد.
مثال فایل acl:
user user1
topic readwrite sensor/#
topic read sensor/temperature
در فایل پیکربندی:
acl_file /etc/mosquitto/acl
با این لایهها، امنیت بروکر شما تا حد زیادی تأمین میشود.
راهاندازی سرویس و خودکارسازی
برای اینکه Mosquitto هنگام راهاندازی Raspberry Pi بهصورت خودکار اجرا شود، از سرویس systemd استفاده میکنیم. معمولاً با نصب پیشفرض این خدمت فعال است:
sudo systemctl enable mosquitto
sudo systemctl start mosquitto
sudo systemctl status mosquitto
اگر بخواهید تغییرات در پیکربندی را اعمال کنید، میتوانید سرویس را ریاستارت کنید:
sudo systemctl restart mosquitto
تست محلی در شبکه داخلی
ابتدا در دستگاهی (کامپیوتر یا لپتاپ داخل شبکه) از دستور زیر برای اشتراک پیام استفاده کنید:
mosquitto_sub -h -t "test/topic"
در دستگاه دیگری یا همان دستگاه، دستور انتشار را اجرا کنید:
mosquitto_pub -h -t "test/topic" -m "سلام خانه هوشمند!"
اگر در سمت subscriber پیام دریافت شد، یعنی راهاندازی موفق بود.
راهاندازی Mosquitto در ویندوز
در سیستم ویندوز نیز میتوانید Mosquitto را نصب کرده و به عنوان سرویس اجرا کنید. بر اساس توضیح شما:
پس از نصب، میتوانید سرویس را اجرا کنید:
net start mosquito
با دستور زیر در پنجره دیگری، اشتراک را امتحان کنید:
mosquitto_sub -h localhost -t "test/topic"
در پنجره دوم:
mosquitto_pub -h localhost -t "test/topic" -m "hello bahramkit!"
با این روش میتوانید به راحتی بین ویندوز و Raspberry Pi تعامل نیز داشته باشید.
تست از طریق وبسرویس و راه دور
اگر بخواهید از بیرون شبکه محلی به بروکر دسترسی داشته باشید، میتوانید از دستورات زیر استفاده کنید:
mosquitto_sub -h YOURWEBSITE.COM -p PORT -u USERNAME -P PASSWORD -t test-mosquito-rwh-service
mosquitto_pub -h YOURWEBSITE.COM -p PORT -u USERNAME -P PASSWORD -t test-mosquito-rwh-service -m "hello from bahramkit!"
در این حالت، لازم است پورت مورد نظر را روی روتر باز کرده و به IP داخلی Raspberry Pi فوروارد کنید (Port Forwarding). همچنین اگر IP اینترنت شما ثابت نیست، میتوانید از سرویس DNS پویا مانند DuckDNS یا No-IP استفاده کنید.
اتصال دستگاهها به بروکر
برای اینکه سنسورها، آکتاتورها یا سایر دستگاههای آشکارساز به بروکر متصل شوند، معمولاً از ماژولهایی مانند ESP8266 یا ESP32 استفاده میشود که پشتیبانی MQTT دارند.
نمونه کد Arduino/PlatformIO
یک مثال ساده برای ESP8266 به زبان Arduino:
#include
#include
const char* ssid = "SSID";
const char* password = "WIFI_PASSWORD";
const char* mqtt_server = "YOUR_RPI_IP";
const int mqtt_port = 1883;
const char* mqtt_user = "user1";
const char* mqtt_pass = "password1";
WiFiClient espClient;
PubSubClient client(espClient);
void callback(char* topic, byte* payload, unsigned int length) {
String msg;
for (int i=0; i
با این کد، دستگاه به بروکر وصل میشود، پیام دما را ارسال میکند و منتظر دستور دریافتی از موضوع control/led میماند.
مدل تعامل دوطرفه و کنترل فرمان
در خانه هوشمند، علاوه بر ارسال سنسورها به سرور، ممکن است بخواهید فرمانی را به دستگاهها بفرستید (مثلاً روشن/خاموش کردن لامپ). برای این کار:
دستگاه به موضوعی مانند control/device1 مشترک شود (subscribe).
سرور یا داشبورد به همان موضوع پیام ارسال کند (publish) مثلاً "ON" یا "OFF".
دستگاه پیام را خوانده و عمل مناسب را انجام دهد.
با این مدل، ارتباط دوطرفه به سادگی برقرار میشود.
سطوح کیفیت خدمات (QoS)
MQTT سه سطح QoS دارد:
QoS 0: پیام یکباره — بدون تضمین تحویل
QoS 1: تضمین حداقل یکبار تحویل
QoS 2: تضمین دقیقاً یکبار تحویل (پیچیدهتر)
بسته به اهمیت پیام (مثلاً فرمان روشنایی یا گزارش دما) میتوانید سطح مناسبی انتخاب کنید. البته سطوح بالاتر، پهنای باند بیشتر و سربار بیشتر دارند.
گزینه Retain و Last Will
Retain: اگر یک پیام با Retain منتشر شود، Broker آن را ذخیره میکند و وقتی subscriber جدید وصل شود، نسخهی ذخیرهشده را دریافت میکند.
Last Will and Testament: اگر کلاینت به صورت نرمال قطع نشود، میتواند پیامی بعنوان پیام اختتام (last will) ثبت کند تا Broker در صورت قطع ناگهانی آن را برای دیگران ارسال کند.
این امکانات برای تضمین پایداری و اطلاعرسانی وضعیت دستگاهها بسیار مفیدند.
مانیتورینگ و نظارت بر Broker
برای اطمینان از عملکرد صحیح، میتوانید:
لاگهای Mosquitto را بررسی کنید (معمولاً در /var/log/mosquitto/)
از ابزارهای مانیتورینگ MQTT مثل MQTT Explorer یا ابزارهای گرافیکی استفاده کنید
اسکریپتهایی بنویسید تا سلامت بروکر را پایش کنند
هشدار ارسال کنید در صورت از کار افتادن سرویس
مقیاسپذیری و گسترش سیستم
اگر تعداد دستگاهها زیاد شود، ممکن است بخواهید:
Clustering: اجرای چند broker و توزیع بار
Bridging: ارتباط بین چند بروکر Mosquitto برای همسانسازی پیامها
طراحی لایهای که دستگاهها به بروکر محلی متصل شوند و بروکرها پیامها را بین خود رد و بدل کنند
این روشها به شما امکان میدهد سیستم خود را به راحتی گسترش دهید.
پشتیبانگیری و بازیابی
برای جلوگیری از از دست رفتن تنظیمات، باید:
نسخه پشتیبان از فایلهای پیکربندی (mosquitto.conf، فایلهای conf.d)
نسخه پشتیبان از فایل رمز عبور و ACL
اسکریپتهایی برای بازیابی سریع در صورت آسیب دیدن SD card یا خرابی سیستم
بهینهسازی عملکرد
برای بهترین عملکرد:
از پیامهای بسیار بزرگ اجتناب کنید
اگر ممکن است پیامها را فشرده کنید
نگهداری یا پاکسازی دورهای پیامهای قدیمی
تنظیم محدودیت در تعداد اتصالات همزمان
مانیتور مصرف حافظه و CPU
ترفندها و موارد خاص
استفاده از WebSockets برای اتصال از مرورگر
افزونهها و پلها (Plugins) برای Mosquitto
ادغام با پلتفرمهای خانه هوشمند مانند Home Assistant یا OpenHAB
ایجاد داشبورد واکنشگرا با Node-RED یا Grafana
عیبیابی رایج و راهحلها
چند مشکل رایج و راهکار:
اتصال برقرار نمیشود → بررسی پورت، فایروال، listener
پیامها دریافت نمیشوند → بررسی سطح QoS، موضوع (topic)
خطا در TLS → بررسی گواهینامهها
مصرف زیاد CPU یا رم → تعداد اتصالات زیاد، پیامهای سنگین
جمعبندی و گام بعدی
در این راهنما، شما با:
مفاهیم پایه MQTT
نصب و پیکربندی Mosquitto بر روی Raspberry Pi
امنیت و احراز هویت
تست محلی و راه دور
اتصال دستگاهها
بهینهسازی و عیبیابی
آشنا شدید. گام بعدی این است که پروژه کوچک خود را اجرا کنید: یک سنسور دما، یک رله کنترل روشنایی، و داشبورد ساده بسازید. سپس به تدریج، امکانات بیشتری اضافه کنید: Auto-Discovery، سینک با Home Assistant، تحلیل دادهها و هوش مصنوعی.
پرسشهای متداول
آیا میتوان از MQTT بدون بروکر استفاده کرد؟
خیر، مدل انتشار/اشتراک نیازمند یک نهاد میانجی (broker) است که پیامها را مدیریت کند.
آیا Mosquitto مناسب پروژه بزرگ است؟
برای پروژههای متوسط و خانگی بسیار مناسب است. اگر خیلی بزرگ شود، ممکن است بخواهید به گزینههای تجاری یا clustering فکر کنید.
آیا امکان استفاده از گواهی معتبر SSL وجود دارد؟
بله، شما میتوانید از Let’s Encrypt یا CA معتبر استفاده کرده و گواهی رایگان دریافت کنید.
اگر IP اینترنت من پویا است، چه کار کنم؟
میتوانید از سرویس DNS پویا مانند DuckDNS یا No-IP بهره ببرید تا دامنه همواره به IP فعلی شما اشاره کند.
آیا میتوانم چند بروکر Mosquitto را به هم وصل کنم؟
بله، از قابلیت bridging استفاده میشود تا دو یا چند بروکر پیامها را باهم همگام کنند.
آیا میشود داشبورد وب برای کنترل دستگاهها ساخت؟
بله، با ابزارهایی مانند Node-RED، Grafana، Home Assistant و رابطهای MQTT میتوان کنترل و نمایش وضعیت را به راحتی ایجاد کرد.
روع تست بخش سرور mqtt
برای اینکار از بروکر eclipse mosquito استفادهه می کنیم که می تونید از لینک زیر نسبت به اپریشن سیستم دانلود کنید
https://mosquitto.org/download/
بعد از دانلود یا به سیستم path اضافه کنید یا این که به محل نصب بروید و از اونجا دستور ها رو اجرا کنید
از دستور زیر برای راه اندازی mosquito استفاده کنید
آموزش نصب mosquito بر روی رسپبری پای
https://randomnerdtutorials.com/how-to-install-mosquitto-broker-on-raspberry-pi/
راه اندازی بروکر ماسکیتو بر روی رسپری پای
https://randomnerdtutorials.com/testing-mosquitto-broker-and-client-on-raspbbery-pi/