Buka proyek klien MQTT di Delphi. Lanjutan


Permulaannya ada di sini: Protokol MQTT dan proyek terbuka klien MQTT di Delphi

Proyek klien MQTT di Delphi dilengkapi dengan dashboard untuk memantau aliran informasi dari Internet hal-hal secara real time dan generator publikasi berkala untuk menguji broker MQTT. Format JSON untuk mentransmisikan informasi telah diadopsi, karena ini adalah standar untuk layanan Internet.
Dan juga lihat apa yang dapat ditawarkan IBM Bluemix kepada kami untuk mengatur pemantauan jarak jauh dan mengelola berbagai hal di Internet.


Apa yang baru?


Setelah versi klien sebelumnya memiliki kesempatan untuk menerima, mengirim, dan berlangganan paket MQTT, giliran untuk mengimplementasikan pembuatan aliran pesan untuk menguji operasi broker MQTT. Tugas lain adalah menentukan struktur isi pesan. Di sini, metode penataan informasi yang digunakan dalam layanan IBM Bluemix IoTF digunakan untuk membantu. Bahkan jika penataan yang diterapkan di sana tidak ideal, ada alasan untuk mematuhi aturan semacam itu untuk sementara waktu, karena IBM adalah merek yang sangat berwibawa.
Struktur dalam konteks ini adalah bagaimana informasi dikodekan dalam setiap paket dan dalam komposisi apa ia dikirimkan. Kita perlu memutuskan apakah kita mentransfer dengan satu variabel atau dengan kelompok, jika dengan kelompok, bagaimana memisahkan variabel dari satu sama lain, bagaimana membedakan antara variabel, metadata dan sebagainya, bagaimana membandingkan variabel dengan deskripsi atau nama mereka, dan apakah dalam semua kasus variabel harus disertai dengan nama atau indeks yang cukup dan dll. Protokol MQTT tidak mengatur masalah ini dengan cara apa pun, kecuali bahwa data teks dikodekan dalam format UTF8, yang pada prinsipnya juga tidak buruk, karena memungkinkan Anda untuk memanggil topik dalam bahasa Rusia.
Raksasa internet telah memilih format JSON untuk menyelesaikan masalah penataan, meskipun MQTT akan secara diam-diam mentransfer XML dan ASN.1 dalam format enkode dan lainnya. Ngomong-ngomong, JSON memiliki beberapa spesifikasi kompresi, jika ada keluhan tentang redundansi format teks.

Generasi lalu lintas MQTT


Jadi, sekarang klien kami dapat mengirim paket yang berisi data teks dalam format JSON dan dikodekan dalam UTF8. Untuk melakukan ini, ia memiliki tab "Publikasi berkala". Penerbitan pada gaul MQTT berarti mengirim paket data ke node lain di jaringan IoT.

Di tangkapan layar, setiap baris dalam tabel berhubungan dengan pesan tertentu. Semua pesan dalam contoh ini memiliki topik yang sama. Di sini kebijakannya adalah ini: semakin sedikit topik yang berbeda, semakin sedikit beban broker untuk mengurai, mencari dan menyimpan topik ini. Topik-topik dipilih dalam format di mana mereka diterima oleh layanan IBM Bluemix IoTF. Kolom Payload berisi isi pesan. Ini disajikan dalam format JSON, tetapi di dalamnya untuk satu variabel diperbolehkan menggunakan penentu format sesuai dengan aturan untuk fungsi Format bahasa Delphi. Dalam kasus ini, specifier% g digunakan. Sebagai gantinya akan diganti nilai variabel yang dihasilkan sesuai dengan aturan yang ditentukan dalam kolom: Waktu habis (periode pengiriman pesan), Fungsi (hanya ada pilihan antara variabel acak dan fungsi sinus), Min, Max (nilai minimum dan maksimum dari nilai yang dihasilkan),Periode (periode fungsi sinus, ditentukan dalam jumlah sampel), Offs (offset argumen fungsi sinus, ditentukan oleh jumlah sampel). Kolom QoS dan Retain menentukan atribut paket MQTT. Kolom yang Diaktifkan menunjukkan apakah pesan ini akan diaktifkan ketika tombol "Mulai" diklik. Tombol "Mulai" menjadi aktif hanya setelah membuat koneksi dengan broker.
Penting! Layanan IBM Bluemix IoTF sangat sensitif terhadap sintaksis dan terputus segera jika topiknya entah bagaimana tidak sesuai dengan format.
Di bagian bawah formulir adalah log: umum, log pesan publikasi yang dikirim dan log pesan publikasi yang diterima. Log dapat dihapus atau dinonaktifkan. Larangan log mempercepat pembuatan paket dan penerimaan paket.

Visualisasi data dari node IoT




Anda harus mulai dengan berlangganan data jika mereka tidak berlangganan secara permanen di sesi komunikasi sebelumnya, jika tidak, broker tidak akan mengirim apa pun.
Di tab "Berlangganan menurut daftar", Anda perlu merekam topik yang ingin kami terima dari broker. Dalam hal ini, topik ditulis dengan nilai pesan yang akan dikirim oleh generator.
Jika bidang Berlangganan ditandai, maka topik akan berlangganan setelah mengklik tombol "Berlangganan". Jika nilai bidang Langganan tidak ditandai, maka langganan akan berhenti berlangganan dari topik ini ketika Anda mengklik tombol "Berlangganan". Sekali lagi, operasi berlangganan hanya tersedia setelah membuat koneksi dengan broker.
Bahkan sebelum berlangganan, Anda dapat menulis dalam tabel komponen visual variabel-variabel yang ingin kami amati secara real time. Untuk melakukan ini, klik tombol "Table".


Kolom "Nama Variabel" berisi nama variabel yang sama (kunci dalam terminologi JSON) sebagaimana dicatat dalam pesan dalam format JSON. Kolom "Keterangan Variabel" berisi nama variabel yang ditampilkan pada komponen visual. Kolom "Kelas Widget" menetapkan jenis komponen visual. Di sini Anda dapat memilih skala, prasasti atau grafik gaya LCD / LED.
Setelah mengedit tabel, klik tombol Widget dan atur komponen visual dalam formulir. Pada awalnya, semua komponen akan berada di tumpukan di sudut kiri atas. Anda perlu menyeret dan menempatkannya di formulir di konfigurasi yang diinginkan. Lokasi komponen diingat dan direproduksi setelah pembukaan formulir berikutnya. Gaya docking komponen mengikuti gaya IDE RAD Studio atau MS Visual Studio.


Jika koneksi dengan broker dibuat dan berlangganan, maka dalam kasus pesan dengan variabel yang sesuai, nilainya akan segera tercermin di jendela komponen visual.

Program ini menyimpan semua pengaturan dan log dalam file JSON pada disk, yang dapat diedit secara manual.
Repositori berisi versi program dengan konfigurasi yang disiapkan dan disimpan dalam file JSON yang siap untuk pengujian menggunakan broker Mosquitto yang disertakan secara lokal.
Pialang, siap diluncurkan, terletak di repositori di arsip Mosquitto_broker_projs.zip di direktori Mosquitto_1_4_5_bin. Anda harus menjalankan file Run_mosquitto.cmd.

Tentang Parsing JSON


Program ini menggunakan parser JSON pihak ketiga dari proyek https://github.com/hgourvest/superobject Terlepas dari kenyataan bahwa RAD Studio XE8 memiliki parser JSON bawaan, superobject tampak lebih menarik dan lebih kuat dalam hal kemampuan. Ketika sebuah pesan tiba, program klien MQTT mem-parsing isi pesan dan memilih pasangan nilai kunci individual di dalamnya. Jika array ditemukan, maka diabaikan karena objek dalam array tidak memiliki nama, dan tidak ada mekanisme (dalam program ini) untuk mengaitkannya dengan variabel bernama apa pun di klien. Objek bernama yang tersisa dipindai secara mendalam secara rekursif sampai semua pasangan nilai kunci diambil. Kuncinya adalah nama variabel, program akan mencoba untuk mengkonversi nilai-nilai ke angka floating-point, jika gagal, jumlahnya sama dengan nol.

Mencoba Aplikasi Wawasan Waktu Nyata IBM IoT


Aplikasi ini adalah yang kedua dari dua aplikasi praktis yang ditawarkan oleh IBM untuk IoT. Pertama, Internet of Things Foundation dibahas dalam artikel sebelumnya. Ada beberapa aplikasi demo lebih lanjut untuk IoT dalam katalog IBM, tetapi mereka memerlukan penyebaran dan peluncuran kode khusus pada server, yang secara otomatis menyertakan penghitung pembayaran.
Tetapi kembali ke IoT Real-Time Insights. Kami masuk ke akun Anda. Seperti biasa, pilih wilayah AS Selatan. Klik di menu Katalog atas. Kami turun ke bagian paling bawah mengamati banyak layanan dan aplikasi yang berbeda dari IBM. Kita melihat:


Klik pada IoT Real-Time Insights. Aplikasi ini memungkinkan Anda untuk hanya mengamati, mengelola langsung perangkat darinya tidak akan berfungsi, kecuali jika perangkat memiliki saluran komunikasi lain selain MQTT.
Saat membuat bidang Aplikasi: biarkan cuti tidak terikat. Kami tidak membuat aplikasi tambahan, karena IBM segera mulai menghitung uang untuk mereka. Rencana Lapangan: tinggalkan Lite. Jadi semuanya akan gratis untuk kita.


Sebelum itu, layanan Internet of Things Foundation seharusnya sudah dibuat dan diaktifkan, dan setidaknya satu perangkat atas nama yang klien kami kirim paket MQTT telah dibuat di dalamnya. Ini dijelaskan dalam artikel sebelumnya.


Di halaman beranda aplikasi IoT Real-Time Insights, kami segera mulai dengan menghubungkan sumber data, dan ini akan menjadi layanan Internet of Things Foundation yang kami buat sebelumnya. Kita perlu mengetahui nama kodenya (ID Organisasi), Kunci API dan Token Otentikasi. Jika kita tidak tahu, maka kembalilah ke Internet of Things Foundation dan ciptakan apa yang tidak kita ketahui.
Setelah terhubung, pada tab Perangkat, semua perangkat yang terdaftar oleh kami akan ditampilkan. Dalam hal ini, hanya ada satu.


Maka Anda perlu mengkonfigurasi skema pesan. Klik Kelola Skema dan pada tanda plus Tambahkan skema pesan baru. Ini adalah bagaimana Anda dapat memahami pengaturan untuk mendekripsi pesan dari perangkat.


Berikut adalah contoh pengaturan untuk variabel T, L1, L2, L3.


Variabel L1, misalnya, ketika mengedit diwakili oleh jendela seperti itu.


Setelah mengkonfigurasi skema, Anda dapat mengonfigurasi analitik. Yaitu sebenarnya, aturan untuk mengirim pesan ke penerima pesan eksternal. Yang paling terjangkau adalah dengan mengirim email.
Ini adalah bagaimana aturan untuk mengirim email terlihat jika variabel T melebihi 24:


Tapi pesan email seperti itu tiba:


Tetapi poin utama dari aplikasi adalah dashboard. Mungkin ada banyak panel. Dasbor terdiri dari komponen visual yang menampilkan nilai variabel yang dibuat di tab Kelola Skema secara real time. Tangkapan layar di bawah ini menunjukkan contoh dasbor untuk menampilkan 4 variabel: T, L1, L2, L3. Paket dengan nilai variabel dihasilkan oleh klien MQTT kami. Variabel T dihasilkan sebagai angka acak, L1, L2, L3 sebagai fungsi sinus.


Tayangan IBM IoT Real-Time Insights.


Sejauh ini, aplikasinya sangat mentah. Windows dan dialog terbuka dengan penundaan lama. Pembuat dasbor terbatas dalam fungsi, untuk gerakan sederhana atau mengubah ukuran Anda harus melalui beberapa dialog. Komponen panel itu sendiri tidak memiliki sifat yang dapat diedit. Hal yang sama berlaku untuk grafik. Bagan tidak memiliki riwayat, dan dihapus pada perubahan ukuran jendela sekecil apa pun. Email tidak stabil, dan mungkin ditunda untuk waktu yang lama.
Tetapi tetap ini adalah layanan gratis, tersedia di sini dan sekarang, dan jika perangkat dapat mempublikasikan pesan dalam format JSON yang sesuai, maka Anda harus mengingat aplikasi semacam itu dari IBM.

Proyek klien MQTT masih di tempatnya: https://github.com/Indemsys/Delphi_MQTT_mosquitto

Source: https://habr.com/ru/post/id388343/


All Articles