Protokol MQTT dan proyek klien terbuka MQTT pada Delphi
Protokol MQTT digunakan untuk pengiriman pesan di Internet. Pertama-tama, ini menarik karena didukung oleh penyedia layanan cloud terbesar, seperti IBM, Microsoft, Amazon.Anda dapat memperoleh akun di layanan ini secara gratis, mengatur layanan untuk menerima pesan MQTT di sana dan menonton kehidupan perangkat Anda melalui layanan ini, misalnya, di rumah pintar. Juga, melalui layanan ini, perangkat dapat berkomunikasi satu sama lain.Demonstrasi koneksi klien ke layanan MQTT dari IBM Bluemix cloud disertakan.Deskripsi singkat.
MQTT sangat primitif: dengan header pendek, tanpa kontrol integritas, itu tidak memaksakan pembatasan pada struktur, pengkodean atau skema data. Satu-satunya persyaratan data dalam setiap paket adalah bahwa mereka harus disertai oleh pengenal untuk saluran informasi. Pengidentifikasi ini dalam spesifikasi disebut Nama Topik atau topik yang lebih sederhana. Data dikirim ke paket melalui TCP. Jumlah data dalam suatu paket dapat dari satu byte ke 268.435.455 byte. Sangat fleksibel! Meskipun layanan cloud publik memberlakukan batasan yang lebih ketat, hingga beberapa kilobyte.Protokol MQTT membutuhkan broker data. Ini adalah ide sentral dari teknologi. Semua perangkat mengirim data hanya ke broker dan hanya menerima data darinya. Broker adalah program yang bertindak sebagai server TCP dengan basis data dinamis.Basis data pialang khususnya berisi tabel dengan semua paket yang diterima dengan pengindeksan berdasarkan topik paket ini. Setelah menerima paket, broker mengirimnya ke semua perangkat di jaringan sesuai dengan langganan mereka. Agar perangkat dapat menerima sesuatu dari broker, itu harus berlangganan ke topik. Topik muncul secara dinamis pada saat berlangganan atau pada saat kedatangan paket dengan topik ini. Anda juga dapat berhenti berlangganan dari topik. Dengan demikian, topik adalah mekanisme yang nyaman untuk mengatur hubungan dari berbagai jenis: satu ke banyak, banyak ke satu, dan banyak ke banyak. Jika paket tidak memiliki pelanggan, maka itu dibuang. Jika pelanggan tidak terhubung, paket itu segera dihapus dalam database broker, atau menunggu pelanggan untuk terhubung untuk beberapa waktu yang ditentukan dalam konfigurasi. Perilaku ditentukan oleh atribut QoS paket.Apa lagi yang penting di sini.
• Perangkat adalah yang pertama kali melakukan kontak dengan broker. Yaitu perangkat mungkin terletak di belakang penerjemah alamat jaringan (NAT) dan mungkin tidak memiliki alamat IP statis dan ini tidak akan mengganggu komunikasi.• SSL dapat digunakan untuk mengenkripsi lalu lintas. Tetapi Anda dapat bekerja tanpa SSL bahkan dengan layanan IBM, yang membuat proses debug lebih mudah.• Dalam kasus yang sangat sulit, broker MQTT memungkinkan Anda untuk terhubung melalui mereka melalui protokol WebSocket pada port 80.• Port protokol MQTT standar juga dapat diubah secara sewenang-wenang.• Baik klien / klien dengan antarmuka pengguna grafis dan broker dapat ditemukan di komputer yang sama. Yaitu solusinya dapat benar-benar lokal dan skala ke global dengan satu klik.• Pialang yang berbeda dapat terhubung satu sama lain dengan berlangganan pesan satu sama lain.• Konsep topik sangat cocok dengan teknologi database NoSQL. Untuk tujuan yang sama, layanan cloud mendorong pengguna untuk menggunakan penyandian data JSON.Buka proyek
Pilihan broker MQTT cukup besar. Tapi anehnya praktis tidak ada klien yang nyaman dengan antarmuka pengguna jendela di bawah Windows. Dan klien seperti ini untuk menguasai protokol MQTT sangat diperlukan karena ada banyak nuansa praktis pekerjaan pialang di luar spesifikasi dan semuanya harus dipelajari dan diuji.Diputuskan untuk mengimplementasikan klien MQTT di Delphi.Google untuk Delphi hanya dapat menawarkan komponen TMQTTClient. Tapi ini komponen lama dan tidak berfungsi. Sebagian besar klien lain yang ditulis dalam Java, Erlang, Haskell, Javscript dalam Delphi sangat sulit untuk diintegrasikan.Ditemukan satu-satunya proyek yang cocok - MosquittoDitulis dalam C-i murni. Ini mengkompilasi untuk sistem operasi yang berbeda. Ini memiliki skrip pembuatan proyek untuk Visual Studio. Di pintu keluar di bawah Windows kami mendapatkan file dll dengan implementasi fungsi klien dan broker. Penggunaan C sangat menggembirakan dalam hal kecepatan. Dan perpustakaan dinamis yang ditulis dalam C mudah terhubung ke program Delphi.Delphi sendiri, diwakili oleh Embarcadero RAD Studio XE8, adalah alat yang sangat kuat untuk membuat antarmuka pengguna yang fleksibel dan nyaman untuk Windows, terutama jika dilengkapi dengan DevExpress, TeeChart, RxLib, FireDAC, dll.Alat yang diperlukan
Kami membutuhkan lingkungan pengembangan MS Visual Studio 2015 . Ini akan mengkompilasi proyek Mosquitto dan semua proyek pendukung di mana Mosquitto bergantung . Atau, Mosquitto untuk Windows dapat dikompilasi menggunakan paket Cygwin , tetapi Visual Studio tampak lebih nyaman.Untuk menghasilkan file proyek Visual Studio, Anda perlu mengunduh dan menginstal utilitas Cmake . Sumber cmake.orgDan tentu saja Anda membutuhkan RAD Studio XE8 . Selain itu, di RAD Studio, versi paket komponen DevExpress VCL yang tidak lebih rendah dari 14.2.2 harus diinstal. Meskipun ini tidak terlalu penting, desain antarmuka pengguna dapat dengan mudah dibuat ulang untuk komponen Studio RAD standar.Prosedur Instalasi Perangkat Lunak
Mosquitto bergantung pada beberapa proyek pihak ketiga, yaitu:• OpenSSL v 1.0.2e . Sumber - http://slproweb.com/download/Win32OpenSSL-1_0_2e.exe• Pthreads v 2.9.1 . Sumber - ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip• Libwebsockets v 1.4 . Sumber - https://github.com/warmcat/libwebsocketsUnduh proyek-proyek ini.Kami tidak mengkompilasi OpenSSL , tetapi segera mengambil dua file yang diperlukan dari sana: libeay32.dll dan ssleay32.dll dari direktori bin . Sering terjadi bahwa mereka sudah diinstal pada komputer dari proyek lain. Ini harus diperiksa.Pthreadskami juga tidak mengkompilasi, tetapi mengambil file pthreadVC2.dll yang sudah dikompilasi dari direktori dll \ x86 .Libwebsockets hadir tanpa file yang telah dikompilasi dan tanpa proyek untuk Visual Studio, tetapi ia memiliki file konfigurasi CMakeLists.txt . Dalam hal ini, menggunakan utilitas Cmake , kami membuat file proyek Visual Studio dalam direktori terpisah (libwebsockets_VS_proj direktori). Dan kemudian membuka file proyek yang dihasilkan di Visual Studio yang kami kompilasi. Kami mendapatkan file websockets.dll yang kami butuhkan .Setelah semua langkah sebelumnya, Anda dapat mengkompilasi proyek Mosquitto. Di sini, Anda juga harus terlebih dahulu membuat file proyek Visual Studio (direktori Mosquitto_VS_proj) dari file konfigurasi CMakeLists.txt yang dilampirkan . Proyek yang dihasilkan tidak cukup berfungsi, Anda harus mengubah jalur ke beberapa file dan pustaka header eksternal, menyertakan beberapa makro dalam proyek, dan sedikit memodifikasi kode sumber. Akibatnya, kami mendapatkan file mosquitto.dll .Untuk kesederhanaan, semua file dan struktur direktori dengan proyek-proyek tersebut terkandung dalam file arsip yang dilampirkan pada artikel.Bersama dengan pustaka klien, kompilasi proyek Mosquitto memberi kami file yang dapat dieksekusi dari broker MQTT - mosquitto.exe .Dengan demikian, kami segera mendapatkan klien dan broker MQTT, yaitu hampir semua yang Anda butuhkan untuk mengatur Internet yang efektif.Membuat Proyek Klien MQTT di Delphi
Untuk mengintegrasikan pustaka mosquitto.dll ke dalam Delphi, Anda perlu membuat modul deklarasi fungsi pustaka pada Object Pascal . Untuk melakukan hal ini, konversi file telah dilakukan mosquitto.h berkas MOSQUITTO.PAS .Proyek klien sangat sederhana, hanya terdiri dari 4 file sumber. Klien menunjukkan menghubungkan dan memutus hubungan, membentuk surat wasiat ( Will ), mengirimkan data dengan paket PUBLISH ke broker, menerima data dengan paket PUBLISH dari broker, berlangganan dan berhenti berlangganan.Program menyimpan semua atribut koneksi, yang dirujuk oleh istilah profil dalam tabel profil yang disimpan di disk. Log paket yang diterima dan dikirim PUBLISH juga disimpan ke disk secara terpisah .Metode Penggunaan Pelanggan
Jalankan file TMQTTC.exe .Dalam rangka untuk memiliki seseorang untuk berkomunikasi tim broker uji coba Run_mosquitto.cmd dalam direktori Mosquitto_1_4_5_bin . Untuk kenyamanan, broker dikonfigurasi untuk terhubung tanpa SSL dan verifikasi kata sandi.Isi kolom seperti pada tangkapan layar.
Kata sandi dan nama pengguna adalah opsional. Di navigator, klik tombol komit untuk menyimpan data di tabel. Kemudian klik tombol Connect .Setelah koneksi, terbitkan dan berlangganan perintah menjadi tersedia. Perintah PING klien mosquitto menghasilkan secara otomatis.Agar klien mendapatkan sesuatu, sekali lagi Anda harus menjalankan program TMQTTC.exe dengan pengidentifikasi klien yang berbeda dan berlangganan satu klien untuk menerima data dari yang lain.Terhubung ke IBM Bluemix
Hal pertama yang harus dilakukan adalah mendapatkan akun di BluemixSetelah menerima akun, kita pergi ke panel kontrol kami di Bluemix . Di sini Anda harus segera beralih ke wilayah AS Selatan . Untuk melakukan ini, klik ikon akun di sudut kanan atas dan ubah nilainya di bidang Wilayah . Ada tiga wilayah secara total, tetapi AS Selatan memberi Anda kesempatan untuk mengalami sebagian besar layanan. Selanjutnya, buat Spasi . Layar akan terlihat seperti gambar di bawah ini. Di sini, organisasi INDEMSYS dan Space INDEMSYS SPACE dibuat .
Sekarang klik pada KATALOG di menu atas. Kami turun ke bawah dan memilihInternet of Things Foundation .
Kami tidak mengubah bidang yang diusulkan secara default dan klik Buat
Internet of Things Foundation - ini adalah layanan yang menyertakan broker MQTT dan antarmuka pengguna untuk itu.Setelah membuat di jendela yang muncul, klik tombol berlabel Luncurkan dasbor .
Ini adalah panel kontrol IoT. Sekarang kita perlu membuat perangkat. Klik Tambah perangkat . Dalam dialog yang muncul, buat jenis perangkat ( Buat jenis perangkat ). Beri nama Type1, jangan mengisi bidang yang tersisa untuk kesederhanaan. Klik Berikutnya -> Selanjutnya -> Buat -> Selanjutnya. Beri nama ke perangkat Device1. Next Next -> Next -> Next -> Tambah. Hasilnya, kita mendapatkan jendela berikut:
Semuanya di sini kita memiliki semua syarat untuk sambungan dari perangkat pertama kami ke MQTT broker Bluemix .Kami akan menguji apakah klien kami dapat terhubung ke sana. Masukkan detail di jendela klien.
Seperti yang Anda lihat, klien berhasil terhubung ke Bluemix . Di sini Anda harus memperhatikan nama host. Dimulai dengan ID Organisasi yang diperoleh saat membuat Internet of Things Foundation . Kolom User ID juga komposit dan dikodekan sebagai: d : < Organization ID >: < Device Type >: < Device ID >. Bidang Nama Pengguna berisi string tetapuse-token-auth .Topik pesan untuk broker Bluemix , tidak seperti broker Mosquitto, tidak dapat berisi data sewenang-wenang. Mereka dikodekan menurut aturan tertentu. Aturan-aturan ini harus dipelajari dalam dokumentasi Internet of Things Foundation . Tangkapan layar menunjukkan salah satu topik yang mungkin valid.Repositori Proyek: https://github.com/Indemsys/Delphi_MQTT_mosquittoSource: https://habr.com/ru/post/id388231/
All Articles