MQTT امنیت اینترنت اشیا IOT

نقش پروتکل MQTT در پروژه‌های اینترنت اشیا

mqtt-broker-in-iot-project-digispark
نوشته شده توسط پریسا پوربلورچیان

MQTT یک پروتکل سبک، با امنیت بالا و کم حجم است. استفاده از پروتکل MQTT در پروژه‌های IOT کاربردی است. در خصوص راه اندازی پروژه‌های هوشمند سازی و ارسال و دریافت دیتا نیاز به معرفی پیش نیازها خواهیم داشت. در این آموزش به معرفی و تحلیل پروتکل MQTT می‌پردازیم. در ادامه با مرجع تخصصی اینترنت اشیا به زبان فارسی ، دیجی اسپارک همراه باشید.

 


دلایل استفاده از MQTT در IoT


پروتکل MQTT یک پروتکل اتصالاتی ماشین به ماشین M2M بر پایه اینترنت اشیا است. از پروتکل TCP ,IP بهره می‌برد. سیستم MQTT متشکل از کلاینت ( مشتریانی ) است که با یک سرور ارتباط برقرار می‌کنند؛ به اصطلاح به آن Broker گفته می‌شود. MQTT بر پایه سیستم publish و subscribe بنا شده است. یک کلاینت می‌تواند نقش یک انتشار دهنده اطلاعات ( Publisher ) و یا دریافت کننده اطلاعات باشد. دیتا در تاپبک‌ها مرتب شده است. زمانیکه انتشار دهنده یک مورد جدید از داده‌ها را جهت توزیع فراهم می‌کند، یک پیام کنترل با دیتا به واسط اتصال دهنده یا همان Broker ارسال می‌کند. واسط‌ها ( Broker) دیتا را به هر کلاینتی که در آن تاپیک مشترک است، توزیع می‌کند. انتشار دهنده نیازی به دانستن تعداد و محل مشترکین (Subscriber) ها ندارد و مشترکین به نوبه خود نباید با دیتاهای انتشار دهندگان پیکربندی شوند.

 


تنظیمات MQTT Broker


مولفه MQTT جهت ارتباط با دیگر پروتکل‌ها نیاز به یک سری تنظیمات دارد؛ در ادامه به آن ها می‌پردازیم. در این مرحله بایستی یک آی پی برای سرویس mqtt خود تعریف کنید. در این خصوص می‌توانید از واسط‌ها یا broker رایگان و یا اوپن سورس مانند Mosquitto، EMQ ، Mosca استفاده کنید. بهترین روش استفاده از mosquitto mqtt broker است.

مثال : 
mqtt:
  broker: 192.168.1.200

شماتیک یک Broker در پروتکل MQTT - دیجی اسپارک

 

  • broker: آی پی IP Address و یا Hostname : مثال: ۱۹۲٫۱۶۸٫۱٫۶۵
  • port: پورت شبکه جهت اتصال. پورت پیشفرض ۱۸۸۳ می‌باشد.
    • client_id: یک آی پی یونیک برای سرور یا همان شناسه مشتری است که مخفف عبارت client identifier می‌باشد. هر mqtt client متصل به Broker را تشخیص می‌دهد. واسط (broker) از کلاینت آی دی برای شناسایی مشتری و وضعیت کنونی مشتری استفاده می‌کند. بنابراین این آی دی بایستی برای هر مشتری منحصر به فرد یا Unique باشد. در mqtt 3.1.1 استاندارد اگر نیاز به تعریف حالت ندارید میتوانید یک کلاینت آی دی خالی ارسال کنید.
  • keepalive: یک وقفه زمانی بر حسب ثانیه است که به صورت پیشفرض ۶۰ ثانیه است. ( زمان ارسال پیام در حال برای مشتری )
  • username: یوزر نیم منحصر به فرد شما جهت اتصال به MQTT Broker
  • password: پسورد برای یوزر نیم شما
  • protocol: پروتکل های مورد استفاده به ترتیب ۳٫۱ و ۳٫۱٫۱ میباشد که به صورت پیشفرض به ۳٫۱٫۱ متصل میگردد.
  • certificate: مسیر ذخیره فایل

mqtt client ها با mqtt broker ها در حال تبادل اطلاعات هستند و فقط از  mqtt client به mqtt broker ها داده ارسال می‌گردد. ارتباط بین این دو از طریق topic و payload برقرار می‌گردد.

 

 


Topic در پروتکل MQTT


در طول اجرای پروژه‌های اینترنت اشیا با Topic سروکار خواهیم داشت. تاپیک Topic مشخص می‌کند که یک پیام متعلق به کجاست و از کجا آمده است و حاوی چه پیامی است. به مثال های زیر توجه کنید:

Bedroom/temperature

bedroom/humidity

livingroom/fan

livingroom/tv

هر تاپیک از یک یا چند سطح Level تشکیل شده است. هر سطح Level تاپیک با / تفکیک شده است. در مقایسه با پیام های خطی، تاپیک های MQTT بسیار سبک هستند. broker هر تاپیکی را بدون نیاز به تعریف پیش نیاز قبول می‌کند.


payload


در یک تعریف کلی یک رشته String از کاراکترها می‌باشد و کارهای که قرار است در طول اجرای پروژه اتمام و انجام گردد را توصیف می‌کند. به عنوان مثال دستور اجرایی ما همانند زیر است:

Action: Bedroom – Turn on light

پیام ارسالی :

 {     "topic" : "bedroom/light", "pyload": "on"     }

 

درک موضوع

تصور کنید توسط یک برد nodemcu و سنسور اندازه گیری دما و رطوبت میخواهید دیتا توسط پروتکل MQTT به نرم افزار Node-RED ارسال گردد. قدم اول شناسایی publish و Subscribe است. در این مثال برد Nodemcu در نقش Subscribe و نرم افزار Node-RED و محیط گرافیکی آن در نقش Publish می‌باشد. در معرفی Subscribe تاپیک مربوط به کنترل پارامترهای اندازه گیری را مینویسیم و سپس نتیجه را در محیط گرافیکی ساخته شده به صورت publish دریافت می‌کنیم. پس از آن نیاز داریم که دیتا ذخیره گردد. در این خصوص دیتاهای دریافتی در دیتابیس ذخیره می‌گردد. در ادامه با اجرای آموزش های پروژه محور با ایجاد تاپیک های مختلف و ارسال دیتا از طریق mqtt بیشتر آشنا خواهیم شد.

 


 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

درباره نویسنده

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۳۴ دیدگاه

  • سلام
    چقدر خوب بود. چند وقته با آموزش های MQTT درگیر شدم وبه درک عمیقی از عملکرد آن نرسیده بودم.
    سپاس و آرزوی موفقیت روز افزون برای شما

      • سلام نیاز به کمک دارم برای ساخت اسکنر gar با التراسونیک و مادون قرمز یا هر مدل. برای دیدن انواع فلزات و حفره های زیر زمین.

        • با سلام
          کاربر گرامی در این خصوص بایستی از طریق پرتال پشتیبانی فروشگاه اقدام نمایید و درخواست خود را به صورت تعریف پروژه ارسال نمایید. پس از بررسی نتیجه به شما اعلام خواهد شد.
          پرتال پشتیبانی

  • سلام
    خسته نباشید
    یه سوال داشتم میشه دو تا رزبری پای رو با mqtt node red بهم متصل کرد و رله رو کنترل و از چند سنسنور دیتا دریافت کرد؟؟
    آموزشی هستش؟

  • سلام
    یه سوال برام پیش اومده
    این بروکر رو ایا میشه روی سیستم عامل ویندوز با هسته اینترنت اشیا نصب کرد؟
    من با ویندوز uwp مجموعه خودم رو طراحی کردم و میخوام قابلیت کنترل از طریق موبایل رو هم بهش اضافه کنم میخوام یه سرور لوکال درست کنم و با نرم افزار اندرویدی بتونم وسایل رو کنترل کنم ، که بتونم از طریق شبکه لوکال و بدون اینترنت کار خودم رو انجام بدم.

    • با سلام
      پیرو درخواست جنابعالی، احتمالا از کارایی MQTT برداشت صحیحی نداشته‌اید. در خصوص کنترل یک سری وسایل برقی از طریق اپ موبایل و رابط گرافیکی ویندوزی، کافیست از طریق تنظیمات DNS و یا IP اقدامات صورت گیرد.

      • سلام.
        سپاس بی کران از باب انتشار مطالب آموزشی.

        جهت کنترل یک عدد LED از طریق اینترنت و تحتmqtt به سه مورد اپلیکیشن ، vps و سخت افزار LED متصل به اینترنت نیاز داریم
        حالا در vps باید mqtt پیاده سازی بشه
        آیا در دو مورد بعدی ، یعنی اپلیکیشن و سخت افزار هم باید mqtt باید پیاده سازی بشه؟
        منظورم اینه که سخت افزاری که یک میکروکنترولر کوچک آنرا هدایت میکند حتما باید درشmqtt کدزنی بشه؟

      • با سلام امکان دارد در این مورد هم آموزش قرار بدهید ؟ ( در خصوص کنترل یک سری وسایل برقی از طریق اپ موبایل و رابط گرافیکی ویندوزی ) من هم دنبال همین موضوع هستم و قصد دارم هم از طریق اپ موبایل و هم از طریق وب ( node-red) این کار رو انجام بدم .

  • مطلب بسیار مفیدی بود
    مرسی که بابتش زحمت کشیدید
    اگه میشه در مورد شبکه های رادیویی که معمولا با ماژول های rf24 میسازن مطلب بذارید

    • با سلام
      کاربر گرامی از توجه شما ممنونم. در صورت امکان درخواست شما بررسی و آموزش داده خواهد شد.

  • با سلام و وقت بخیر
    ببخشید من میخواستم از طریق یک سرور جداگانه که برای نمایش اطلاعات سنسورها ازش استفاده میکنم اطلاعات سنسورها رو از طریق بروکر دریافت کنم و نمایش بدهم. ایا اموزشی که نحوه ارتباط سرور با بروکر رو اموزش بده رو میتونید معرفی کنید یا داخل سایتتون موجوده؟
    با تشکر

  • سلام وقت بخیر .

    سلام من یکسری اطلاعات دارم که نرم افزار node red از طریق سنسور ها داره میخونه .

    من میخوام بدون IP استاتیک از راه دور با اینترنت گسترده با گوشی به این اطلاعات دست رسی داشته باشم

    این کار امکان پذیر هست ؟

    • با سلام
      برای استفاده از نود رد به صورت استفاده از راه دور بایستی حتما نسبت به تنظیمات شبکه و سرور آگاهی کامل داشته باشید. تا بتوانید این کار را انجام دهید.

  • سلام
    ببخشید میشه ازین پروتکل MQTT در ماژول sim800 که دارای GPRS هست با میکروکنترلر ARM برای انتقال اطلاعات استفاده کرد؟

  • سلام. فرض کنید با پرتکل tcp به یک broker mqtt متصل شدیم و میخوایم یک محتوا برای یک topic خاص ارسال کنید. موقع اتصال tcp ما فقط ادرس سرور و پورت را وارد کردیم. حالا فقط میتوانیم برای ان سرور روی آن پورت پیام ارسال کنیم. شاکله پیام ما باید چگونه باشد که برای سرور mqtt قابل پذیرش باشه و بتونه به ما پاسخ بده؟

    • با سلام
      سناریو تعریف شده در عمل پذیرفته نیست. نیازی به اتصال از طریق TCP به MQTT بروکر نیست. بلکه بایستی با پروتکل MQTT از مبدا اقدام به ارسال پیام کنید. مگر اینکه سناریو متفاوتی در نظر دارید و بنده دقیقا متوجه نشده باشم.

  • سلام
    چطور میتونم یک request با پروتکل mqtt انجام بدم که حاصل کار رو قبل از انجام پروزه ببینم؟ مثلا برای http ,https میشه از نرم افزار postman برای تست api ها استفاده کرد و حاصل کار رو دریافت کرد .
    یه سوال دیگه داخل topic یک json ارسال میکنیم و بعد از داخل دستگاه اون فایل رو میخونیم وبا خواندن این اطلاعات ناحیه و فعالیتی رو که باید انجام داد رو متوجه میشیم؟ topic=ناحیه\بخش ، pyload=فعالیت
    { “topic” : “bedroom/light”, “pyload”: “on” }

  • سلام خسته نباشید .
    من برد رزبری پای را از طریق وایرلس مستقیم به ماژول متصل کردم – کانکت شده و یک ای پی گرفته به عنوان روتر ۱۹۲٫۱۶۸٫۴٫۱- حالا من داخل Node-red یک MQTT اوکی کردم مشخصات وارد کردم طبق آموزش ولی متاسفانه موفق نمیشم . لطفا یک آموش کامل و یک راهنمایی جامعتر بفرمایید که مشکل من هم برطرف بشه

    • با سلام
      آی پی دریافت شده فقط برای ماژول وای فای است. همچنین تنظیمات ماژول وای فای ارتباطی با نود Mqtt ندارد. mqtt یک پروتکل است که بین دو دیوایس ارتباط دیتا برقرار می‌شود.

  • سلام ممنون بابت مطالب خوبتون
    خواستم ببینم داخل این پروتکل یک دستگاه اندرویدی هم میتونه یک pub/sub باشه؟
    یعنی در یک طرف ما ماژول esp و در طرف دیگه برنامه اندرویدی رو داشته باشیم و با این پروتکل باهم ارتباط برقرار کنند؟

    • با سلام
      برنامه اندرویدی توسط بنده تست نشده است. از دیگر کاربرانی که در این خصوص تجربه ای دارند، تقاضا میکنم در بحث شرکت کنند.