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

Fen bilimleri ders linkler

 https://www.khanacademy.org/science/cosmology-and-astronomy/earth-history-topic/earth-title-topic/pi/season-simulator Basit bir simülasyon , dünya konumu ve güneş ışığı aktif değişimini gösteriyor İstenilen konum ayarlanabiliyor  https://www.earthspacelab.com/app/eclipse/ güneş ve ay tutulmaları  https://www.earthspacelab.com/app/moon-phases/ ayın evreleri  https://astro.unl.edu/nativeapps/  şu linkten naap labs v1.1 kurulumu içinde mevismler simulasyonu kullanışlı duruyor. dünya üzerinde konum belirleyip düşen ışığın gösterimi de mevcut https://www.vascak.cz/physicsanimations.php?l=tr https://www.physicsclassroom.com/Physics-Interactives/Refraction-and-Lenses/Optics-Bench/Optics-Bench-Refraction-Interactive https://www.physicsclassroom.com/Physics-Interactives/Reflection-and-Mirrors/Optics-Bench/Optics-Bench-Interactive https://www.physicsclassroom.com/Physics-Interactives/Light-and-Color/Stage-Lighting/Stage-Lighting-Interactive https://phet.colorado.edu/sims/html/bending-light/late

Doopy Run - Godot Engine Game

Doopy run eğitim sırasında oluşturduğum basit bir platform oyun denemesidir. Aşağıdaki linkten demoyu indirebilirsiniz. Windows linki Android APK linki

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