MQTT

MQTT protokolü, Mosquitto ve paho-mqtt kullanarak
Internet of Things altyapısı ve uygulamaları

Güray Yıldırım guray@gurayyildirim.com.tr
Twitter: @GurayYildirim | LinkedIn gryyldrm | Facebook gryyldrm
İçerik Lisansı (Content License)

Iot Nedir?

  • Buzdolabı
  • Hasta takibi
  • Enerji takibi, aydınlatma
  • Araç takibi, yakıt ve zaman optimizasyonu

https://www.youtube.com/watch?v=VlS5SMVeKn0

Facebook Messenger Kullananlar?

IoT?

Internet of Things - Nesnelerin interneti

Veri kullanımı

Enerji tüketimi

Maliyetler(yazılım, donanım)

Protokoller

MQTT

Nedir? - "MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol."[1]

Ne İşe Yarar? - "It was designed as an extremely lightweight publish/subscribe messaging transport."[1]

Nerde kullanılır? - "For example, it has been used in sensors communicating to a broker via satellite link, over occasional dial-up connections with healthcare providers, and in a range of home automation and small device scenarios. It is also ideal for mobile applications because of its small size, low power usage, minimised data packets, and efficient distribution of information to one or many receivers"[1]

MQTT

Nerde kullanılır(devamı) - "It is a publish/subscribe, extremely simple and lightweight messaging protocol, designed for constrained devices and low-bandwidth, high-latency or unreliable networks."[1]

Kim, Ne Zaman Buldu? - "MQTT was invented by Dr Andy Stanford-Clark of IBM, and Arlen Nipper of Arcom (now Eurotech), in 1999."

Varsayılan Port - 1883, Bağlantı Türü: TCP/IP

Güvenlik? - SSL

Yapısı[2]

Yapısı[3]

Nerelerde çalışır?

TCP/IP protokolünde uygulama yazılabilen her yerde.

Platformlar:

  • Linux
  • Windows
  • MacOS
  • Android
  • iOS

Kullanımı

Kurulum ve Ayarlar

Kurulum

Debian Tabanlı Sistemler:

[guray@gry Devfest Düzce]$ sudo apt-get install mosquitto -y

Redhat/CentOS Tabalı Sistemler:

[guray@gry Devfest Düzce]$ sudo yum install mosquitto -y

Fedora:

[guray@gry Devfest Düzce]$ sudo dnf install mosquitto -y

Varsayılan Ayarlar

  • Herhangi bir ayar yapılmadan Mosquitto çalıştırılabilir.
  • Herhangi bir parola veya şifreleme aktif değildir.
  • Anonim girişlere izin verilmektedir.
  • Bir subscriberın aynı mesajı birden çok alması mümkündür.
  • Persistent(kalıcı) mesajları 30 dakikada bir diske yazar
  • 1883 portunu dinler
  • MQTT protokolüyle çalışır, websocket olarak değiştirilebilir

Ayarlar

Ayar dosyalarının konumu:

  • Örnek ayar dosyası: /etc/mosquitto/mosquitto.conf.example
  • Ek ayar dosyaları: /etc/mosquitto/conf.d

Not: Herhangi bir ayar yapılmadan mosquitto çalıştırılabilmektedir.

Temel Ayarlar

  • include_dir /etc/mosquitto/conf.d
  • log_dest file /var/log/mosquitto/mosquitto.log
  • port 1883
  • log_timestamp true

Servis Kontrolü

Hatırlatma: Servis?

  • Servis yüklü mü?: systemctl list-units | grep mosquitto

    Örnek çıktı:loaded active running Mosquitto MQTT v3.1/v3.1.1 Broker
  • Başlatmak: systemctl start mosquitto.service
  • Ne durumda?: systemctl status mosquitto.service
  • Durdurmak: systemctl stop mosquitto.service
  • Otomatik başlasın: systemctl enable mosquitto.service
  • Otomatik başlamasın: systemctl disable mosquitto.service

Kullanım Örnekleri

Örnekleri lokal sunucuda da deneyebilirsiniz. Mosquitto servisinin açık olduğuna emin olunuz.

  • 30 numaralı apartmanın 2. katındaki oturma odasının sıcaklığının yeni değerinin 27.5 derece olması için yayın örneği:

  • mosquitto_pub -t "30/2/oturma/sicaklik" -m "27.5"
  • Geliştiriciler sokağının 11 numaralı lambasının %50 parlaklıkta yanması için yayın:

  • mosquitto_pub -t "gelistiriciler/3/parlaklik" -m "50"
  • Kullanım Örnekleri

  • 30 numaralı apartmanın 2. katındaki oturma odasının sıcaklığının değerini canlı olarak takip etmek için:

  • mosquitto_sub -t "30/2/oturma/sicaklik"
  • Geliştiriciler sokağının 11 numaralı lambasının aydınlık sensörünü takip etmek için::

  • mosquitto_sub -t "gelistiriciler/3/parlaklik"
  • Birden Çok Yayına Abonelik

  • Fedora Sokak'taki bütün apartmanların giriş(0.) katlarındaki gaz sensörü verilerini takip etmek için:

  • mosquitto_sub -t "sokaklar/fedora/+/0/gaz"
  • İstanbul Maslak'taki bütün sokaklarda bulunan bütün binaların kapısındaki hareket sensörlerinde hareket tespit edildiğinde hemen haber almak için:

  • mosquitto_sub -t "istanbul/maslak/+/+/hareket"
  • Birden Çok Yayına Abonelik

  • Fedora Sokak'taki bütün apartmanların bütün verilerini takip etmek için:

  • mosquitto_sub -t "sokaklar/fedora/#"
  • İstanbul Maslak'taki bütün sokaklarda bulunan bütün binalardaki bütün sensörlerden haber almak için:

  • mosquitto_sub -t "istanbul/maslak/#"
  • Daha Gerçekçi Durumlar

  • Bir firmanın Düzce'deki bütün araçlarının bilgilerini takip etmek için:

  • mosquitto_sub -t "duzce/araclar/#"
  • Düzce Kalıcı Konutlar'daki kalp hastalarının sağlık durumlarını takip etmek için(tansiyon, nabız, ...):

  • mosquitto_sub -t "duzce/kkonutlar/kalp/#"
  • Quality of Service (QoS)

    QoS 0

    • Mesaj iletilmeyebilir
    • Minimum trafik

    QoS 1

    • Mesaj kesin iletilir
    • Mesaj birden fazla kez iletilebilir

    QoS 2

    • Mesaj kesin iletilir
    • Mesaj tek sefer iletilir
    • Maksimum trafik

    Python İstemcisi

    Paho-mqtt

    Kurulumu (pip ile)

    pip install paho-mqtt

    Örnek kullanım[4]

    import paho.mqtt.client as mqtt
    def on_connect(client, userdata, flags, rc):
        print("Bağlandı.")
        client.subscribe("istanbul/maslak/+/+/hareket")
    def on_message(client, userdata, msg):
        print(msg.topic+" "+str(msg.payload))
    
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    
    # connect(host, port=1883, keepalive=60)
    client.connect("sunucu.adresi", 1883, 60)
    client.loop_forever()

    Ekstra - Birlikte Kullanılabilecekler

    Raspberry Pi - Mosquitto ve kablosuz ağ ile veri toplanabilir

    ESP8266 - 1.8$'lık Arduino kodu yazılabilen ve MQTT kütüphaneleri mevcut SoC

    Arduino

    Son

    Bu sunumun hazırlanması sırasında, 17 bardak kahve içildi, 9 dilim pizza tüketildi, 3 arkadaşla Taksim'e gitme daveti reddedildi, 7 saat eksik uyundu, 3 saati Serdar Ortaç olmak üzere 14 saat müzik dinlendi, 1713 satır kod yazıldı, sınırsız eğlenildi:)

    guray@gurayyildirim.com.tr

    www.gurayyildirim.com.tr

    gu.ray.kim/devfest-2