Bu dökümanda IoT cihazları için kullanılmaya tasarlanmış MQTT[1] protokolü pratikte nasıl çalıştığı gösterilecektir.
Senaryo olarak Debian üzerinde çalışan sunucu ve aynı sunucu üzerinde farklı process te çalışan bir adet sanal istemci ve raspberry pi cihazı üzerinde çalışan fiziksel bir istemci kullanılmıştır.
MQTT uygulaması olarak mosquitto[2] kullanılmıştır.
apt-get install mosquitto
mosquitto mqtt sunucusu indirilir
/etc/mosquitto/mosquitto.conf
dosyası aşağıdaki gibi ayarlanır
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
listener 1883 XXX.XXX.XXX.XXX
connection_messages true
log_timestamp true
log_type error
log_type warning
log_type notice
log_type information
listener 1883 XXX.XXX.XXX.XXX satırı port-ip ikilisidir. Çalışmasını istediğiniz ip ve port numarası girilebilir.
service mosquitto start
veya
mosquitto -c /etc/mosquitto/mosquitto.conf
komutlarıyla mosquitto sunucusu çalıştırılır.
mosquitto sunucusuna gelen hareketler
tail -1000f /var/log/mosquitto/mosquitto.log
komutuyla takip edilebilir.
MQTT protokolü publisher/subscriber mantığı ile çalışmaktadır. Bu sebeple demo için aynı sunucu üzerinde bir adet subscriber client i çalıştıracağız.
Client için
apt-get install mosquitto-clients
ile mosquitto clients eklentisi indirilir.
Aynı sunucu üzerinde subscriber istemcisi çalıştıracağımız için girilecek komutta IP parametresi olarak 127.0.0.1 gireceğiz.
subscriber için mosquitto_sub komutunu kullanılır.
mosquitto_sub -t hello -h 127.0.0.1
subscriber bağlantısı sağlanınca mosquitto.log dosyasına aşağıdaki kayıtlar düşer. Bu kayıtlar subscribe işleminin başarıyla gerçekleştirdiğini belirtir.
Burada dikkat edin subscriber istemcisi mosqsub ile bağlanmaktadır.
1482096960: New connection from 127.0.0.1 on port 1883.
1482096960: New client connected from 127.0.0.1 as mosqsub/11445-debian-1g (c1, k60).
Şimdi raspberry pi cihazımız publisher clienti olarak çalışacak. Publisher olarak "hello" konulu bir mesaj yayınlayacağız.
bunun için mosquitto-clients komut seti raspberry pi üzerinde çalışan işletim sistemi için de indirilmelidir.
Biz demomuzda debian tabanlı raspbian işletim sistemi üzerinde çalıştık. Raspbian, Debian işletim sistemindeki apt-get paket indirme komutunu kullanmaktadır. Bu sebeple debian sunucumuzda indirdiğimiz
apt-get install mosquitto
komutunu burada da girebiliriz.
İndirme işlemi tamamlandıktan sonra publish işlemi için mosquitto_pub komutunu kullanacağız.
mosquitto_pub -t hello -h XXX.XXX.XXX.XXX -m "Hello from Raspberry PI"
Yukarıdaki komutta -t topic parametresi. Debian subscriber da hello topic ini açtık. Bu topic üzerinden "Hello from Raspberry PI" mesajını, bu topic e kayıtlı kullanıcılara yayınlayacağız.
Komutu girdikten sonra işlemin başarıyla bitip bitmediğini
echo $?
komutunun çıktısını istemci tarafında kontrol ederek öğrenebiliriz. Bu komut sonuç olarak 0(sıfır) değerini döndürürse işlemimiz raspberry pi tarafında başarıyla gerçekleşmiştir.
root@raspberrypi:~# mosquitto_pub -t hello -h 139.59.145.205 -m "Hello from Raspberry PI 2"
root@raspberrypi:~# echo $?
0
Bu komut çalıştırıldıktan sonra mosquitto.log dosyasına aşağıdaki satır kayıtları gelmektedir.
Publisher istemcisi sunucuya mosqpub ile bağlanmaktadır
1482097004: New client connected from 85.102.169.241 as mosqpub/1456-raspberryp (c1, k60).
1482097004: Client mosqpub/1456-raspberryp disconnected.
Subscriber tarafında baktığımız vakit raspberry üzerinden gönderdiğimiz mesaj konsola düşmüş gözükecektir.
root@debian-1gb-fra1-01:/var/log/mosquitto# mosquitto_sub -t hello
Hello from Raspberry PI
şimdi aynı topic e raspberry pi üzerinden subscribe oluyoruz.
root@raspberrypi:~# mosquitto_sub -t hello -h XXX.XXX.XXX.XXX
Ve debian sunucumuz üzerinden hello topicli bir mesaj yayınlıyoruz. MQTT gereği yayınladığımız mesaj raspberry pi ve sunucu üzerinde açılmış subscriber istemcilerine gidecektir.
root@debian-1gb-fra1-01:~# mosquitto_pub -t hello -h 127.0.0.1 -m "Welcome to Team Raspberry PI"
Raspberry pi daki istemcimize düşen mesaj
root@raspberrypi:~# mosquitto_sub -t hello -h XXX.XXX.XXX.XXX
Welcome to Team Raspberry PI
Debian sunucu üzerinde çalışan subscriber a iletilen mesaj
root@debian-1gb-fra1-01:/var/log/mosquitto# mosquitto_sub -t hello
Hello from Raspberry PI
Welcome to Team Raspberry PI
Hiç yorum yok:
Yorum Gönder