MQTT nədir və o, IIoT -də nə üçün lazımdır? MQTT protokolunun təsviri
Mündəricat:
- MQTT nədir?
- MQTT protokolunun xüsusiyyətləri, MQTT-nin təsviri
- Mövzuların semantikası
- Mesajların quruluşu
- MQTT protokolunda xidmətin keyfiyyəti (QoS)
- Məlumat ötürülmə prosesinin mühafizəsi
- MQTT dəstəyi ilə IIoT üçün avadanlıqlar
Sənayenin inkişafı sayəsində nəzarət edilməsi zəruri olan və müxtəlif məlumatların əldə edilməsini tələb edən cihazların sayı artır. Çoxlu sayda cihazlar arasında qarşılıqlı əlaqə problemlərini və cihazların bir şəbəkədə birləşdirilməsi problemlərini həll etmək üçün Əşyaların İnterneti (İngiliscə Internet of Things, IoT) konsepsiyası yaradılmışdır, belə ki, cihazlar hər hansı bir səbəbdən bir şəbəkədə birləşir, sonra bir neçə oxşar şəbəkə başqa bir böyük şəbəkəyə birləşir və s.
Belə şəbəkələrdəki cihazlar müxtəlif məlumat ötürmə interfeysləri və protokolları vasitəsilə bir-biri ilə qarşılıqlı əlaqədə olurlar. Məsələ öz protokolları və aparatları olan sənaye avadanlığının istifadə edilməli olduğu IoT konsepsiyasının sənayedə tətbiqindən getdiyinə görə biz IIoT (Sənaye Əşyaları İnterneti) konsepsiyasına keçirik.
Sənaye Əşyaları İnterneti (IIoT) sənayenin avtomatlaşdırılmasının inkişafında yeni bir addımdır.
Bir-biri ilə əlaqə saxlamaq üçün cihazlar müxtəlif sənaye protokollarından istifadə edir və bu məqsədə xidmət edən populyar protokollardan biri də MQTT-dir.
MQTT nədir?
MQTT və ya Message Queue Telemetry Transport – bu, kiçik kod ölçüsünün tələb olunduğu və keçid zolağı məhdudiyyətlərinin mövcud olduğu uzaq məkanlara məlumat ötürmək üçün nəzərdə tutulmuş yüngül, yığcam və açıq məlumat mübadiləsi protokoludur. Yuxarıda sadalanan üstünlüklər onu M2M (Maşınla Maşın arasında Qarşılıqlı Əlaqə) və IIoT (Sənaye Əşyaları İnterneti) sistemlərində istifadə etməyə imkan verir.
Protokolun bir versiyası da var: MQTT-SN (MQTT for Sensor Networks), əvvəllər MQTT-S kimi tanınır və Zigbee kimi TCP/IP şəbəkə dəstəyinə malik olmayan quraşdırılmış simsiz cihazlar üçün nəzərdə tutulmuşdur.
MQTT Protokolunun xüsusiyyətləri
MQTT protokolunun əsas xüsusiyyətləri:
- Asinxron protokol
- Kompakt mesajlar
- Məlumat xəttində qeyri-sabit rabitə şəraitində işləmək
- Çox səviyyəli xidmətin keyfiyyətinə dəstək (QoS)
- Yeni cihazların asan inteqrasiyası
MQTT protokolu TCP/IP üzərindən tətbiq səviyyəsində işləyir və standart olaraq 1883 (SSL vasitəsilə qoşulduqda 8883) portundan istifadə edir.
Mesajların nəşrlər serverini və ya abunəçisi (publisher/subscriber) ola biləcəyi müştəri (client) ilə broker (broker) mesajları (məsələn, Mosquitto MQTT) arasında MQTT protokolundakı mesajlar mübadilə edilir.
Nəşrlər serveri məlumatı MQTT brokerinə göndərir, mesajda konkret mövzu (topic) göstərilir. Abunəçilər müvafiq mövzulara abunəliklərindən asılı olaraq bir çox nəşrlər serverindən fərqli məlumatlar ala bilərlər.
MQTT cihazları brokerlə qarşılıqlı əlaqə yaratmaq üçün müəyyən növ mesajlardan istifadə edir, bunlardan əsasları aşağıda verilmişdir:
- Connect - broker ilə əlaqə yaradır
- Disconnect - broker ilə əlaqəni kəsir
- Publish – broker üzərində bir mövzuya məlumatları nəşr edir
- Subscribe - broker üzərində bir mövzuya abunə olur
- Unsubscribe - mövzudan abunəliyi ləğv edir
Abunəçi, nəşrlər serveri və broker arasında sadə formalı qarşılıqlı əlaqə diaqramı
Mövzunun semantikası
UTF-8 simvoldan ibarətdir. Mövzuların iyerarxik strukturu «ağac» formatına malikdir ki, bu da onların təşkilini və məlumatlara çıxışını asanlaşdırır. Mövzular «/» simvolu ilə ayrılan bir və ya bir neçə səviyyədən ibarətdir. Yataq otağında yerləşən temperatur sensorunun məlumatı brokerə nəşr etdiyi mövzuya dair bir nümunə:
/home/living-space/living-room1/temperature
Abunəçi eyni anda bir neçə mövzudan məlumat ala bilər, bunun üçün wildcard mövcuddur. Onlar iki növdə olur: bir səviyyəli və çox səviyyəli. Daha asan başa düşmək üçün onların hər birinə aid nümunələrə baxaq:
- Tək səviyyəli wildcard. Onu istifadə etmək üçün «+» simvolundan istifadə edin.
Məsələn, bütün yataq otaqları üçün temperatur məlumatlarını almalıyıq:
/home/living-space/+/temperature
Nəticədə mövzulardan məlumat alırıq:
/home/living-space/living-room1/temperature
/home/living-space/living-room2/temperature
/home/living-space/living-room3/temperature
- Çoxsəviyyəli wildcard. Onu istifadə etmək üçün «#» simvolundan istifadə edin
Məsələn, evdəki bütün yataq otaqlarının müxtəlif sensorlarından məlumat almaq üçün:
/home/living-space/living-room1/temperature
/home/living-space/living-room1/light1
/home/living-space/living-room1/light2
/home/living-space/living-room1/humidity
/home/living-space/living-room2/temperature
/home/living-space/living-room2/light1
…
Mesajın quruluşu
MQTT mesajı bir neçə hissədən ibarətdir:
- Sabit başlıq (bütün mesajlar üçün mövcuddur)
- Dəyişən başlıq (yalnız müəyyən mesajlarda mövcuddur)
- Məlumatlar, «yükləmə» (yalnız müəyyən mesajlarda mövcuddur)
Sabit başlıq
Message Type – bu, mesaj növüdür, məsələn: CONNECT, SUBSCRIBE, PUBLISH və s.
Flags specific to each MQTT packet – bu, 4 bit köməkçi bayraqlar üçün ehtiyat üçün saxlanır, mövcudluğu və vəziyyəti mesajın növündən asılı olur.
Remaining Length – cari mesajın uzunluğunu əks etdirir (dəyişən başlıq + məlumatlar), 1 ilə 4 bayt arasında yer tuta bilər.
Ümumilikdə MQTT protokolunda 15 növ mesaj var:
Тип сMesaj
|
Qiymət
|
Ötürülmə istiqaməti
|
Təsviri
|
Reserved
|
0000 (0)
|
yox
|
Ehtiyat üçün saxlandı
|
CONNECT
|
0001 (1)
|
К* -> С**
|
Serverə qoşulmaq üçün müştərinin sorğusu
|
CONNACK
|
0010 (2)
|
К <- С
|
Uğurlu əlaqə təsdiq edildi
|
PUBLISH
|
0011 (3)
|
К <- С, К -> С
|
Mesajın nəşri
|
PUBACK
|
0100 (4)
|
К <- С, К -> С
|
Nəşrin təsdiqi
|
PUBREC
|
0101 (5)
|
К <- С, К -> С
|
Nəşr qəbul edildi
|
PUBREL
|
0110 (6)
|
К <- С, К -> С
|
Mesajı silmək üçün icazə
|
PUBCOMP
|
0111 (7)
|
К <- С, К -> С
|
Nəşr tamamlandı
|
SUBSCRIBE
|
1000 (8)
|
К -> С
|
Abunəlik üçün sorğu
|
SUBACK
|
1001 (9)
|
К <- С
|
Abunəlik üçün sorğu qəbul edildi
|
UNSUBSCRIBE
|
1010 (10)
|
К -> С
|
Abunəlik üçün sorğu
|
UNSUBACK
|
1011 (11)
|
К <- С
|
Abunəlikdən çıxmaq üçün sorğu qəbul edildi
|
PINGREQ
|
1100 (12)
|
К -> С
|
PING sorğusu
|
PINGRESP
|
1101 (13)
|
К <- С
|
PING cavabı
|
DISCONNECT
|
1110 (14)
|
К -> С
|
Server əlaqəsinin kəsilməsi mesajı
|
Reserved
|
1111 (15)
|
|
Ehtiyat üçün saxlandı
|
*К – müştəri, **С – server
Bayraqlar
Sabit başlığın ilk baytının dörd ən əhəmiyyətli biti xüsusi bayraqlar üçün ehtiyat üçün saxlanır:
DUP – müştəri və ya MQTT brokeri paketi yenidən göndərdikdə dublikat bayraq təyin edilir (PUBLISH, SUBSCRIBE, UNSUBSCRIBE, PUBREL tiplərində istifadə olunur). Bayraq təyin edildikdə, dəyişən başlıqda Message ID mesaj identifikatoru olmalıdır.
QoS - xidmətin keyfiyyəti (0,1,2)
RETAIN – retain bayraq dəsti ilə məlumatları nəşr edərkən, broker onu yaddaşda saxlayacaqdır. Növbəti dəfə bu mövzuya abunə olduqda, broker dərhal bu bayraqla mesaj göndərəcəkdir. Yalnız PUBLISH tipli mesajlarda istifadə olunur.
Dəyişən başlıq
Bəzi başlıqlarda dəyişən başlıq olur.
O, aşağıdakı məlumatları özündə daşıyır:
-
Packet identifier – paket identifikatoru, aşağıdakılar istisna olmaqla, bütün mesaj tiplərində mövcuddur: CONNECT, CONNACK, PUBLISH(с QoS <1), PINGREQ, PINGRESP, DISCONNECT
-
Protocol name – protokolun adı (yalnız CONNECT tipli mesajlarda)
-
Protocol version – protokol versiyası (yalnız CONNECT tipli mesajlarda)
-
Connect flags - qoşulma zamanı müştərinin davranışını göstərən bayraqlar
User name – bu bayraq varsa, istifadəçi adı «yük»də göstərilməlidir (müştərinin autentifikasiyası üçün istifadə olunur)
Password – bu bayraq «yük»də varsa, parol göstərilməlidir (müştərinin autentifikasiyası üçün istifadə olunur)
Will Retain – 1-ə təyin edildikdə, broker Will Message-ni özündə saxlayır.
Will QoS - Will Message üçün xidmət keyfiyyətidir, Will Flag bayrağı təyin edildikdə, Will QoS və Will retain tələb olunur.
Will Flag - bayraq təyin edilərsə, müştəri DISCONNECT komandasını göndərmədən brokerdən ayrıldıqdan sonra (gözlənilməz qəza hallarında və s.) broker bu barədə bütün qoşulmuş müştərilərə Will Message adlanan mesaj vasitəsilə məlumat verəcəkdir.
Clean Session - sessiyanı təmizləyin. Əgər «0» təyin edilərsə, broker sessiyanı, bütün müştəri abunəliklərini yaddaşda saxlayacaq, həmçinin növbəti dəfə qoşulduqda müştərinin əlaqəni kəsməsi zamanı broker tərəfindən qəbul edilmiş QoS1 və QoS2 ilə bütün mesajları ona ötürəcəkdir. Müvafiq olaraq, «1» olaraq təyin edildikdə, yenidən qoşulduqda, müştəri mövzulara yenidən abunə olmalıdır.
-
Session Present – CONNACK tipli mesajda istifadə olunur. Əgər broker Clean Session = 1 əlaqəsini qəbul edərsə, o halda o, Session Present(SP) bitinə «0» təyin etməlidir. Əgər Clean Session = 0 əlaqəsini qəbul edərsə, o halda o, SP bitinin qiyməti brokerin əvvəllər bu müştəri ilə sessiyanı yaddaşda saxlayıb-saxlamamasından asılı olur (əgər belədirsə, SP- də 1 təyin olunur və əksinə). Belə ki, bu parametr müştəriyə əvvəlki sessiyanın broker tərəfindən saxlanıb-saxlanmadığını müəyyən etməyə imkan verir.
-
Connect Return code – əgər broker hər hansı bir səbəbdən müştəridən düzgün formalaşmış CONNECT paketini qəbul edə bilmirsə, o zaman CONNACK paketinin ikinci baytında aşağıdakı siyahıdan müvafiq qiyməti təyin etməlidir:
Qiymət
|
Qayıdan qiymət
|
Təsviri
|
0
|
0x00 Connection Accepted
|
Rabitə əlaqəsi qəbul edildi
|
1
|
0x01 Connection Refused, unacceptable protocol version
|
Broker müştəri tərəfindən istifadə edilən protokol versiyasını dəstəkləmir
|
2
|
0x02 Connection Refused, identifier rejected
|
Qoşulmuş müştərinin Client ID -si icazə verilən siyahıda deyil
|
3
|
0x03 Connection Refused, Server unavailable
|
Rabitə əlaqəsi quruldu, lakin MQTT xidməti mövcud deyil
|
4
|
0x04 Connection Refused, bad user name or password
|
Səhv loqin və ya parol
|
5
|
0x05 Connection Refused, not authorized
|
Rabitə əlaqəsindən imtina edildi
|
6-255
|
|
Ehtiyat üçün saxlandı
|
-
Topic Name – mövzunun adı
Məlumatlar, yük
MQTT mesajlarında ötürülən məlumatların məzmunu və formatı tətbiqdə müəyyən edilir. Məlumatların ölçüsünü dəyişən başlığın uzunluğunu Remaining Length-dən çıxarmaqla hesablamaq olar.
MQTT protokolunda xidmətin keyfiyyəti (QoS)
MQTT mesajların ötürülməsi üçün üç səviyyəli xidmətin keyfiyyətini (QoS) dəstəkləyir.
QoS 0 At most once. Bu səviyyədə nəşrlər serveri brokerə bir dəfə mesaj göndərir və ondan təsdiq gözləmir, yəni göndərir və unudur.
QoS 1 At least once. Bu səviyyə mesajın mütləq şəkildə brokerə çatdırılacağına zəmanət verir, lakin nəşrlər serverindən dublikat mesajların mövcud olma ehtimalı var. Dublikat mesajı aldıqdan sonra broker bu mesajı yenidən abunəçilərə göndərir və nəşrlər serveri yenidən mesajın alınması barədə bildiriş göndərir. Əgər nəşrlər serveri brokerdən PUBACK mesajı almamışdırsa, o, DUP «1» olaraq təyin edilməklə paketi yenidən göndərir.
QoS 2 Exactly once. Bu səviyyədə mesajların abunəçiyə çatdırılmasına zəmanət verilir və göndərilən mesajların təkrarlanması ehtimalı istisna edilir.
Nəşrlər serveri brokerə mesaj göndərir. Bu mesajda unikal Packet ID, QoS=2 və DUP=0 müəyyən edilir. Nəşrlər serveri brokerdən PUBREC cavabı alana qədər mesajı qəbul edilməmiş şəkildə yaddaşda saxlayır. Broker eyni Packet ID-ni özündə daşıyan PUBREC mesajı ilə cavab verir. Onu qəbul etdikdən sonra nəşrlər serveri PUBREL-i eyni Packet ID ilə göndərir. Broker PUBREL-i qəbul etməzdən əvvəl mesajın nüsxəsini özündə saxlamalıdır. PUBREL-i qəbul etdikdən sonra o, mesajın nüsxəsini silir və nəşrlər serverinə əməliyyatın tamamlandığını bildirən PUBCOMP mesajı göndərir.
Məlumat ötürülməsinin qorunması
MQTT protokolunda təhlükəsizliyi təmin etmək üçün aşağıdakı mühafizə üsulları həyata keçirilir:
- Müştərilərin audentifikasiyası. CONNECT paketində USERNAME və PASSWORD sahələri ola bilər. Brokeri həyata keçirərkən, müştərinin autentifikasiyası üçün bu sahələrdən istifadə edə bilərsiniz
- Client ID vasitəsilə müştəri girişinə nəzarət
- TLS/SSL va+sitəsilə brokerə qoşulma
MQTT dəstəyi ilə IIoT avadanlığı
Sənaye Əşyalarının İnterneti sistemlərinin qurulması, həmçinin mövcud avadanlıqların bulud sistemlərinə inteqrasiyası üçün xüsusi cihazlardan istifadə olunur.
- Web-proqramlaşdırıla bilən IIoT nəzarətçilər
- distant giriş/çıxışlı IIoT modullar
- IIoT şlüzləri
- IIoT platformalar, MQTT serverləri
- CO, CO 2, temperatur və rütubət ölçənlər
Sənaye Əşyaları İnterneti (IIoT) sənaye avtomatlaşdırmasının inkişafında yeni bir addımdır. AaBaCuS şirkəti tərəfindən IIoT sahəsində təklif olunan həllər haqqında daha çox məlumat əldə edin.