تصویر پروتکل MQTT در سایت شاپ الکترونیک
تصویر پروتکل MQTT در سایت شاپ الکترونیک

پروتکل MQTT چیست ؟

پروتکل MQTT یک پروتکل ارتباطی بر مبنای TCP/IP است که به دلیل کم حجم بودن دیتای ارسالی و دریافتی در مقایسه با HTTP به پهنای باند کمتری برای برقراری ارتباط نیاز دارد.

این خصوصیت MQTT آن را به پروتکل ارتباطی بسیار مناسبی در زمینه اینترنت اشیاء بدل میکند.

جایی که تعداد زیادی از سنسورهای کم قدرت که اغلب با باتری کار میکنند وجود دارند.

MQTT بر اساس مدل پیامرسانی انتشار و اشتراک (Pub/Sub) کار میکند که دارای خصوصیاتی از قبیل نگهداری پیام و آخرین وصیت (LWT) میباشد.

رمزنگاری , احراز هویت و کنترل دسترسی به راحتی در این پروتکل قابل انجام است.

 

MQTT با فراهم کردن ویژگی کیفیت خدمت (QoS) امکان ارسال پیام در بسترهای ارتباطی با کیفیت پایین و غیر قابل اعتماد را فراهم میکند. ساختار سرفصل پیام (Topic) در این پروتکل به صورتی است که به کاربر امکان ساماندهی پیامهای ارسالی و دریافتی را میدهد. برای استفاده از این پروتکل به یک سرور واسطه (Broker) نیاز هست که معروفترین آنها به نام ماسکیتو (Mosquitto) به صورت متن باز در اختیار علاقمندان قرار دارد.

تو سعه دهندگان پروتکل MQTT

پروتکل MQTT پروتکلی کارآمد است که هم اکنون توسط بزرگترین شرکتها از جمله فیس بوک برای پیامرسانی استفاده میشود. دیگر شرکتهایی که خدمات وب ارائه میدهند از جمله آمازون و گوگل از این پروتکل حمایت میکنند و کاربران آنها میتوانند از زیرساختهای آنان برای توسعه محصولات خود مبتنی بر MQTT استفاده کنند.

استفاده از پروتکل ارتباطی مناسب در مرحله ای اهمیت خود را نشان میدهد که تعداد کاربران محصولات یک کسب و کار به ده ها هزار و حتی صد ها هزار نفر میرسد و مقیاس پذیری یکی از ملزومات آن کسب و کار میشود.

مدل پیامرسانی انتشار و اشتراک (Pub/Sub)  پروتکل MQTT چگونه  کار میکند؟

مدل پیامرسانی انتشار و اشتراک یک مدل ارتباطی غیر همزمان است که در این مدل هر پیامی که توسط منتشر کننده به یک سرفصل خاص ارسال شود توسط همه مشترکین آن سرفصل دریافت میشود.

در این مدل منتشر کننده هیچ شناختی از مشترک ندارد و همچنین مشترک نیز منتشر کننده را نمیشناسد. پیامی که منتشر کننده ارسال می کند توسط سرور واسطه در صف قرار میگیرد به محض آنکه مشترک یا مشترکینی به سرور واسطه متصل شوند و به سرفصل آن پیام آبونه شده باشند پیام را دریافت میکنند.

پروتکل با هدف ارتباط M2M یا ماشین با ماشین ساخته شده.

تصویر پروتکل MQTT در سایت بروکر و دیوایسها شاپ الکترونیک

اما publish/subscribe چیه؟

این publish/subscribe که اغلب به اختصار pub-sub خونده میشه در حقیقت قلب اصلی ارتباط کلاینت ها با هم هستش .یعنی یکی از کلاینت ها مثلا یه مطلب یا موضوعی رو publish میکنه و بقیه کلاینت ها می تونند اونو subscribe کنند و پیامشو ببینند.

این پروتکل خیلی شبیه ارتباط کلاینت سرور هستش و به سرورش broker میگند

(اما کلاینت/سرور نیست ).و الباقی کلاینت ها یه توپولوژی ستاره ای شکل رو با سرور صورت میدند . یعنی سرور میشه قلب این پروتکل و کلاینت ها همه به اون وصل میشند.

طبق استاندارد این پروتکل کلاینت می تونه یه topic یا موضوع رو publish یا subscribe کنه .کمی گنگه نه !!

بذارید یه مثال بزنم . فرض کنید ما می خوایم با سنسور دمای داخل آشپزخانه ی خونه رو بگیریم ، topic اون میشه

‘sensors/temperature/home/kitchen’ که ما با استفاده از ” / ” میتونیم یک ساختار درختی به اون topic یا موضوع بدیم .

یک مثال دیگه برای درک  پروتکل MQTT

فرض کنید ما میخوایم دمای هرجای دنیا رو هر یک دقیقه در میان بگیریم.با فرض اینکه کلیه سنسورها در دسترس سرور ما باشد.

  • برای این کار سنسور ها هر یک دقیقه یک بار یک عدد ازدمای خودشون رو به broker میدند (publish) میکنند .و ما میتونیم با استفاده از broker دمای هرجایی که خواستیم رو بخونیم یا subscribe کنیم .
    {sensors/temperature/{country}/{city}/{street name}

حالا فرض کنید من میخوام مانگین دمای یک کشور رو بگیرم .

  • در اون صورت می تونم از wildcards ها بهره بگیرم . بله این پروتکل از wildcards های + و # پشتیبانی میکنهاگه بخوام تمام سنسور ها رو ببینم از + استفاده میکنم sensors/+/ir/lmashhad/sadi_street.

(+ یعنی تمام topic های موجود )

اگه بخوام تمامی دماهای دنیا رو ببینم از # استفاده میکنم #/sensors/temperature/

(# یعنی تمامی زیرشاخه های موجود)

سرفصل پیام (Topic) چیست؟

سرفصل یک رشته حروف است که به سرور واسطه این امکان را میدهد تا پیامها را بر اساس آن برای هر مصرف کننده پالایش کند. هر سر فصل از یک یا چند زیر سرفصل تشکیل میشود که با کاراکتر فوروارد اسلش (/) از هم جدا میشوند.

مطابق نمونه زیر:

Home/Devices/Temperature

در این مثال Temperature زیر سرفصل Devices و Devices زیر سرفصل Home میباشد.

کیفیت خدمت (QoS) چیست؟

پروتکل  MQTT   دارای QOS نیز میباشد . (Quality of Service)

در MQTT میتوان کیفیت خدمت هر پیام ارسالی را تعیین کرد به طور کلی سه نوع کیفیت خدمت وجود دارد:

QoS Level 0:

ساده ترین حالت برقراری ارتباط با broker هست که نیازی به acknowledgment نداره .

QoS Level 1:

در این حالت سرور مطمئن میشه که حداقل یک بار یا بیشتر بسته به کلاینت رسیده و ACK از کلاینت میگیره.

QoS Level 2:

در این حالت broker یک و فقط یک بسته به کلاینت میفرسته و مطمئن میشه که بسته رسیده.این حالتش خیلی توصیه نمیشه .

همچنین این پروتکل حالاتی رو تشخیص میده که ارتباط قطع شده یا به هر دلیلی کلاینت نمیتونه با broker ارتباط برقرار کنه و در این حالت broker اقدام لازم رو انجام میده تا به خطا بر نخوریم. در همه این شرایط broker بقیه کلاینت ها رو هم با خبر میکنه.

  • در نوع ۱ پیام ارسالی حداکثر یک بار ارسال میشود و تضمینی برای دریافت آن توسط مشترک وجود ندارد به این معنی که اگر مشترک به سرور واسطه متصل نباشد و این پیام را دریافت نکند سرور واسطه دیگر مجددا این پیام را ارسال نخواهد کرد.
  • در نوع ۲ پیام ارسالی حداقل یک بار ارسال میشود به این معنی که تا مشترک یا مشترکین پیام را دریافت نکنند سرور واسطه پیام را در نوبت های بعدی ارسال خواهد کرد. و ممکن است مشترک آن پیام را حتی بیش از یکبار دریافت کند.
  • در نوع ۳ تضمین میشود که مشترک پیام را فقط یکبار دریافت کند. این امن ترین در عین حال کندترین روش ارسال پیام است زیرا که به سیستم تصدیق ۴ مرحله ای نیاز دارد.
  • آخرین وصیت (LWT) چیست؟

هر کلاینتی که به سرور واسطه متصل میشود میتواند سرفصل و پیام آخرین وضیت خود را تعیین کند. و سرور واسطه آن را ذخیره میکند و به محض اینکه کلاینت ارتباطش با سرور واسطه قطع شود سرور واسطه هر کلاینتی که به سرفصل آخرین وضیت به روز  شده باشد را با ارسال پیام آخرین وضیت مطلع میکند.

 

امنیت در پروتکل MQTT

کلاینت ها میتونند با فرستادن username و password با broker ارتباط برقرار کنند .اما این یه مشکل امنیتی داره که هر بار توی همون بسته اطلاعات تصدیق هویتی رو بدون رمز گذاری میفرسته . البته خوشبختانه broker هایی هم هستند که قابلیت رمز گذاری TLS رو پشتیبانی میکنند .

چند نمونه از نرم افزار های Broker

تا کنون broker های متفاوتی برای این پروتکل نوشته شده که در زیر چند نمونه رو معرفی میکنیم .

Mosquitto اولین نسخه broker نوشته شده با زبان C و دارای تنظیمات مختلف.
Mosca نوشته شده با Nodejs و بسیار محبوب ، سریع و قابل توسعه و با تنظیمات راحت.
RSMB نسخه نوشته شده توسط کمپانی IBM و کمتر محبوب اما با تنظیمات بسیار عالی ، پیاده سازی شده با زبان C.
HiveMQ این نسخه یک بازیگر جدیده که بسیار خوب ظاهر شده.گفته میشه که توی این نسخه قابلیت رمزگذاری TLS پشتیبانی میشه.

در بین تمامی کارگزارهای در دسترس، ما کارگزار Mosquitto را به دلایل زیر بهترین انتخاب میدانیم :

  • متن‌باز بودن
  • نصب و مدیریت آسان

کارگزار (Server):

این قسمت از سیستم باید همواره از تاپیک‌هایی که دستگاه‌ها منتشر می‌کنند مطلع باشد و آن را بین همه‌ی دستگاه‌هایی که مرتبط با تاپیک فوق هستند، توزیع کند.

سرور هم به صورت لوکال در یک سخت افزار میتوان اجرا شود و هم تحت شبکه به روی یک کامپیوتر محلی متصل به شبکه که با ید همیشه روشن باشد.

Mosquitto  را میتوان در ویندوز و لینوکس به راحتی نصب نمود.

دیوایس ها در اینترنت اشیاء IOT

یکی از موارد مهم این است که دیوایسی  که استفاده می‌کنیم باید به یک شبکه  بی‌سیم یا با سیم  متصل بوده و از لحاظ موقعیت، در دسترس تمامی گره‌ها باشد.

راحت ترین دیوایسهای در دست رس و ارزان مازولهای بر پایه یک تراشه ESP8266 است  ضمن اینکه میتوان از ماژول sim80 و مود اینترنت ان استفاده کرد.

مزایای این ماژول ها

  • اندازه‌ی کوچک
  • هزینه بسیار پایین
  • امکانات وای فای
  • رابط سریال

تمامی دیوایسهای که بر مبنای هسته های وای فای esp , sim  طراحی میشود نیاز به پردازنده ندارد و درون خود هسته برنامه نویسی میشود که باعث ارزان شدن دیوایس طراحی شده میشود

شاپ الکترونیک  تولید کننده انواع دیوایس های تحت شبکه بی سیم و با سیم پشتیبانی کننده از پروتکلهای tcp -udp-mqtt-knx  و  رابطهای شبکه به سریال میباشد کلیه سفارشات خود را از طریق صفحه ثبت سفارش  ثبت کنید

خرید محصولات رله کنترل 1 و 2و 4 کانال را از این لینک انجام دهید.کلیه محصولات از زمان خرید سه ماه سرور رایگان دارند.