Ana içeriğe atla

MQTT Topic Kısıtlama ve Retained Mesaj




Daha önce mqtt protokolünü kullanan ücretsiz mosquitto broker kurulumunu ve kullanıcı tanımlamayı yapmıştık. Ancak tanımladığımız kullanıcılar broker da publish yaparken ya da subscribe yaparken her konuya erişebiliyordu.


Bu yazıda her kullanıcı için erişimi topic bazında kısıtlayacağız. Ek olarak da retained message özelliğine değineceğim.

Konulara(topic) Göre Kısıtlama


Her kullanıcının erişim yetkisi olduğu topicleri bir liste olarak dosyaya yazacağız. Format aşağıdaki gibi.
Dosyamızı Oluşturuyoruz
sudo nano /etc/mosquitto/topicliste.txt


topic topicA –> topicA için readwrite yetkisi user1 ‘e verildi. user1 topicA ve bu topic in altında bulunacak subtopic ler için her türlü yayın ve takip yetkisine sahip. Yani user1 topicA/priz2 topic için de tüm yetkilere sahip.

topic read topicD –> topicD nin sadece okuma yetkisi user1 e verildi. yani user1 bu topiğe yayın yapamaz.

topicB için user1’in yetkisi olmadığı için herhangi bir işlem yapamaz.

Daha sonra mosquitto config dosyasında topic kısıtlama dosyasının konumunu bildireceğiz. Config dosyasının alt satırına acl_file dosyakonumu şeklinde ekliyoruz.

mosquitto config
sudo nano /etc/mosquitto/mosquitto.conf

Daha önce kullanıcı kısıtlaması için iki satır kod eklemiştik. Biri broker a kullanıcı adı olmadan giriş yapılamaması için, diğeri de kullanıcı adı ve şifre dosyasının yerine göstermek için idi. En alta topic kısıtlama dosyasını tanımlamış olduk
Mosquitto yenile
sudo service mosquitto restart


Mosquitto servisini yenilediğimizde artık hiçbir kullanıcı belirtilen yetkiler dışına çıkamayacak. Sunucumuzu çok kişili kullanıma uygun hale getirdik ve topicleri birbirinden soyutladık ki birbirlerine müdahale edemesinler.


Hemen deneme yapalım…
Mosquitto yayın ve takip komutları
mosquitto_pub -h localhost -u ‘admin’ -P ‘admin’ -t ‘topicA’ -m ‘yayın1’ -r
mosquitto_sub -v -h localhost -u ‘user1’ -P ‘passwd1 -t ‘topicA’
admin kullanıcısı için tüm topicler için yetkiye sahip olarak ayarlamıştık. Yayını onla yapıyoruz ve user1 ile topicA ‘ yı takip ediyoruz ve değeri okuyabiliyoruz.


user1 ile topicB yi takip etmeye kalktığımızda ise hiçbir değer okuyamıyoruz çünkü topicB için yetki vermedik.


Son olarak user1 ile yine topicB ye yayın yapmaya çalıştığımızda, user2 ile topicB de okuduğumuz değer bir önceki yayın oluyor retained message dan dolayı. Yani yine user1 in topicB için yaptığı yayın kabul edilmiyor.




RETAiNED MESSAGES


Diyelim ki bir takipçi ev/sensör topiğini takip ediyor. Takip etmeye başladığı andan itibaren eğer topicte bir değişim olursa yani topiğe bir değer yayın yapılırsa bu değişimi takipçimiz görebiliyor. Ancak takipçimiz takibe başladığı andan sonra herhangi bir yayın yapılmazsa takipçi herhangi bir değer okuyamıyor. Bunun için retained message özelliği mevcut. Yayın yapılırken retained message özelliği ile gönderirsek değeri, bu değer daha sonra bir yayın yapılana kadar o topicte tutuluyor. Yani takipçimiz takibe başladığında son yapılan yayının değerini hemen görebilir.

mosquitto_pub uygulamasıyla yayın yaparken -r komut seçeneğini eklersek yaptığımız yayın-gönderdiğimiz değer bir sonraki yayına kadar o topicte saklanacak.

Eğer retained message ları silmek istersek şu komutu gönderiyoruz
Retained message silmek için
mosquitto_pub -t “topicA” -r -n
Tabi sadece yetkiniz olanlara müdahale edebilirsiniz. Eğer brokerdaki tüm retained message ları silmek istiyorsanız:
Retained message Hepsini Sil
mosquitto_sub -t “#” -v | while read line _; do mosquitto_pub -t “$line” -r -n; done

Bu blogdaki popüler yayınlar

MQTT Broker Kurulumu – Mosquitto ve deneme

MQTT (Message Queuing Telemetry Transport), nesnelerin interneti alanında önemli haberleşme protokollerinden biridir. Kısaca bir sunucu üzerinden (broker) bir cihazın yayın yapması (publish) ve başka bir cihazın da bu yayını takip etmesi (subscribe) ‘ne dayalı bir yapıdır. Yayın ve takip işlemleri broker üzerinde açılan topicler üzerinden olur. Örneğin; Publisher1 isimli yayıncımız brokerda /ev/priz1 isimli topic (konu) içine ‘aç’ diye yayın yapar. Prize bağlı röle içeren Subscriber1 isimli takipçimiz de brokerdaki /ev/priz1 isimli topic değerini takip eder. ‘aç’ yayınını gören Subscriber1 röleyi sürüp prizi aktifleştirebilir. Aynı topic için birden fazla yayıncı olabilir. (aile üyelerinin telefonlarından aynı prizi kontrol edebilmesi) Bir yayıncı birden fazla topic için yayın yapabilir. Örneğin nem ve sıcaklık sensörü olan cihaz bu değerleri /sensor/nem ve /sensor/sicaklik gibi iki ayrı topic için yayın yapabilir. Yine bir topic’i birden fazla subscriber takip edebilir.(

Mikroskop Gözlemi - Paramesyum Kültürü

Mikroskobik canlılarından birkaç örnek gözlemek için sınıf etkinliğinde kullanılmak üzere bir kültür ortamı oluşturduk. Bu ortam için bir miktar akvaryum suyu aldık. İçine canlı bir yapraklı bitki bir parça, bir tutam toprak, kuru yaprak attık. Ağzını peçete ile örtüp lastik ile tutturduk. 2 hafta mutfakta rafta ışıklı bir ortamda beklettikten sonra hazırladığımız preparatta aşağıdaki gözlemleri gerçekleştirdik. Fotoğraf ve videolar telefon adaptörü aracılığıyla telefon kamerası ile kaydedildi. Resimlerin kaliteli versiyonlarını linkten indirebilirsiniz: Mikroskop Gözlemi

Arduino Bluetooth - Uzaktan Kumandalı Araba Upgrade

  Bozuk olarak satın aldığım swat uzaktan kumandalı aracın içerisine önce arduino ile nrf24l01 kullanarak uzaktan kumandalı işler hale getirmiştim ancak nrf mesafesi mini versiyonu kullandığım için kısa olduğundan bluetooth ile tekrar yaptım. İçine arduino pro mini + Bluetooth + tp4056 + 2 x 18650 ile açık alanda 80 m civarı rahat çalışıyor. Bir de polis ışığı korna far vs hepsini eklemiştim. Google playden Arduino Bluetooth RC Car uygulaması ile kullanabiliyorsunuz.  içinde bluetooth kod var, kolay bir kod. Bir de nrf ile yaptığım kodu ekledim. o biraz daha karışık oldu. joystick modülü ile kontrol edilecek şekilde yapmıştım hem alıcı hem verici kodlarıyla uğraştırıyor onu önermem ama denemek isterseniz kullanabilirsiniz. Kodu İndir