MQTT/UDP
Versi MQTT yang disimpikan melalui UDP: Network is Broker!
Catatan Repo Lainnya: https://gitverse.ru/dzavalishin/mqtt_udp
Lihat Versi Rusia / рсская Версия здесь
MQTT adalah protokol sederhana yang lucu cocok untuk IoT dan hal -hal serupa.
Tapi itu bisa lebih sederhana dan masih sangat bermanfaat: MQTT/UDP hanyalah paket publikasi MQTT yang disiarkan di atas UDP.
MQTT/UDP IS
- Sangat sederhana
- Latensi yang sangat cepat dan minimal mungkin
- Tidak termasuk broker (yang merupakan titik kegagalan tunggal)
- Menurunkan lalu lintas jaringan (masing -masing Masurement dikirim tepat sekali untuk semua)
- Cukup dapat diandalkan (jika kita menggunakannya untuk sensor, yang biasanya mengirim kembali data setiap beberapa detik atau lebih)
- Dapat didukung bahkan pada perangkat keras yang tidak dapat mendukung TCP - pada kenyataannya, hanya kirim UDP yang diperlukan
- Konfigurasi Zero - Node sensor tidak memerlukan pengaturan, itu hanya menyiarkan datanya. (Dan, jika Anda masih membutuhkannya, MQTT/UDP mendukung konfigurasi jarak jauh melalui jaringan.)
- Mendukung tanda tangan digital
Untuk bacaan lebih lanjut
- MQTT/UDP Wiki
- Dokumentasi
Repositori ini berisi
- Implementasi MQTT/UDP sederhana dalam beberapa bahasa pemrograman populer.
- Implementasi MQTT paling sederhana untuk MQTT/UDP di Pyton.
- Alat untuk mengirim data dari MQTT/UDP ke OpenHab
- Aplikasi debug untuk membuang lalu lintas MQTT/UDP (alat/penampil).
- Alat dan Utilitas Lainnya
Jika Anda ingin membantu suatu proyek
Jangan ragu untuk:
- Tambahkan implementasi dalam bahasa pemrograman favorit Anda
- Tulis jembatan ke protokol MQTT klasik (kami memiliki yang sangat sederhana di sini ditulis dalam python)
- Perpanjang broker MQTT favorit Anda atau sistem IoT (OpenHab?) Dengan dukungan MQTT/UDP
- Periksa spesifikasi/implementasi MQTT/UDP terhadap spesifikasi MQTT. Kita harus kompatibel jika memungkinkan.
Itu sangat mudah.
Alasan untuk menghindari MQTT/UDP
- Anda perlu mentransfer muatan panjang. Pada beberapa sistem ukuran datagram UDP terbatas.
- Anda perlu tahu apakah Datagram dikirimkan dengan pasti. Tidak mungkin dengan UDP. Padahal, subsistem pengiriman yang andal sedang dalam pengembangan sekarang dan akan segera tersedia.
Cara untuk memperluas mqtt/udp
- Tampaknya masuk akal untuk menambahkan semacam tanda tangan ke paket untuk mencegah spoofing data. Sebenarnya, ini sudah dilakukan untuk implementasi Java, C dan Pythin akan segera hadir.
- Siaran bukan cara terbaik untuk mengirimkan data. Multicast jauh lebih baik. Meskipun multicast tidak didukung dengan baik di IoT OS atau monitor.
Instruksi Mulai Cepat
- Klon Repositori ke Disk Lokal
- Baca file Howto
Alat pendukung
Repositori ini berisi alat untuk mendukung integrasi dan pengujian MQTT/UDP:
- Alat GUI untuk menunjukkan keadaan data terkini yang dikirimkan dalam direktori Alat/Penampil; Lihat juga halaman Bantuan Penampil.
- Generator data acak (acak_to_udp.py) di direktori python3/contoh
- Kirim/Periksa Alat untuk paket bernomor berurutan. Lihat seq_storm_send.py dan seq_storm_check.py di direktori lang/python3/contoh
- Disektor Wireshark untuk melihat data protokol di jaringan di direktori Lang/Lua/Wireshark
Contoh Kode
Python
Kirim Data:
import mqttudp . engine
if __name__ == "__main__" :
mqttudp . engine . send_publish ( "test_topic" , "Hello, world!" ) Dengarkan data:
import mqttudp . engine
def recv_packet ( ptype , topic , value , pflags , addr ):
if ptype != "publish" :
print ( ptype + ", " + topic + " t t " + str ( addr ) )
return
print ( topic + "=" + value + " t t " + str ( addr ) )
if __name__ == "__main__" :
mqttudp . engine . listen ( recv_packet ) Unduh Paket PYPI
Jawa
Kirim Data:
PublishPacket pkt = new PublishPacket ( topic , value );
pkt . send ();
Dengarkan data:
PacketSourceServer ss = new PacketSourceServer ();
ss . setSink ( pkt -> { System . out . println ( "Got packet: " + pkt ); }); Unduh toples
C
Kirim Data:
int rc = mqtt_udp_send_publish ( topic , value );
Dengarkan data:
int main ( int argc , char * argv [])
{
...
int rc = mqtt_udp_recv_loop ( mqtt_udp_dump_any_pkt );
...
}
int mqtt_udp_dump_any_pkt ( struct mqtt_udp_pkt * o )
{
printf ( "pkt %x flags %x, id %d" ,
o -> ptype , o -> pflags , o -> pkt_id
);
if ( o -> topic_len > 0 )
printf ( " topic '%s'" , o -> topic );
if ( o -> value_len > 0 )
printf ( " = '%s'" , o -> value );
printf ( "n" );
}
Lua
Kirim Data:
local mq = require " mqtt_udp_lib "
mq . publish ( topic , val );
Dengarkan data:
local mq = require " mqtt_udp_lib "
local listener = function ( ptype , topic , value , ip , port )
print ( " ' " .. topic .. " ' = ' " .. val .. " ' " .. " from: " , ip , port )
end
mq . listen ( listener ) Unduh Luarock
Pergi
Ada implementasi bahasa go, lihat lang/go untuk detailnya