MQTT Nedir ve Yapısı

MQTT Nedir?

MQTT(Message Queuing Telemetry Transport) protokolü, internette yaygın olarak kullanılan makinalar arası (M2M) mesaj tabanlı bir protokoldür.
Lightweight oluşu ve düşük kaynak tüketmesiyle Internet of Things(IoT) ekosisteminde benimsenmiştir. Hemen hemen tüm IoT bulut platformları akıllı nesnelerden veri gönderip almak için MQTT protokolünü desteklemektedir.

Bu protokol, istek(request)-yanıt(response) yapısına dayalı HTTP'ye karşıt olarak yayın(publish)-abone(subscriber) yapısında TCP/IP bağlantısı kurulur.
TCP/IP protokolünün yazılabildiği Linux, Windows, Android, iOS, MacOS işletim sistemlerinde çalışır.


MQTT Mesaj Yapısı

MQTT protokolü yayıncı-abone yapısında bir mesaj yayınlayan bir client (yayıncı) mesajı alan diğer clientlara ayıracaktır (aboneler). Ayrıca, MQTT asenkron protokoldür, bu da mesajı beklerken clientı engellemediği anlamına gelir. HTTP protokolünün aksine, esas olarak eşzamanlı bir protokoldür. MQTT protokolünün bir başka özelliği, istemcinin (abone) ve yayıncının aynı anda bağlı olmasını gerektirmemesidir.


MQTT Yayıncı-Abone Mimarisi

MQTT'deki kilit unsur MQTT brokerıdir. MQTT brokerın asıl görevi, clientlara (abonelere) mesajlar göndermektir. Yani yayıncıdan mesajlar alır ve bu mesajları abonelere gönderir. Mesaj gönderirken, MQTT broker mesajı alacak olan clientları filtrelemek için konuyu(topic) kullanır. Konu bir dizedir ve konu seviyeleri yaratan konuları birleştirmek mümkündür.

Konu(topic) bir yayıncıyı abonelerine bağlayan sanal bir kanala benzer. Bu konu MQTT brokerı tarafından yönetilmektedir. Bu sanal kanal sayesinde, yayıncı abonelerden ayrılmıştır ve istemcilerin(yayıncılar veya aboneler) birbirlerini tanıması gerekmemektedir. Bu yapısı gereği bu protokolü mesaj üreticisine(yayıncı) ve mesaj tüketicisine(abone) doğrudan bağımlılık olmadan çok ölçeklenebilir hale getirir.

MQTT mimarisi aşağıdaki şekildedir:

 

MQTT brokerlarından Mosquitto'nun nasıl kurulacağı ve MQTT'nin nasıl kullanılacağı ile ilgili "Ubuntu üzerinde MQTT Mosquitto broker'ı kurma" yazımı okuyabilirsiniz.

Konuyla ilgili diğer faydalı linkler:

Ubuntu üzerinde MQTT Mosquitto broker'ı kurma

Merhaba,

MQTT iletişimi gerçekleştirmek için server olarak Mosquitto kurulumunu nasıl yapacağımıza bakalım.

1. Ubuntu'ya root ile giriş yapalım

2. Aşağıdaki komut ile mosquitto deposunu ekleyelim

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update

3. Mosquitto broker paketini yüklemek için aşağıdaki komutu çalıştıralım

sudo apt-get install mosquitto

4. MQTT client için geliştirici kütüphanelerini yüklemek için aşağıdaki komutu çalıştıralım

sudo apt-get install libmosquitto-dev

5. MQTT client pketlerini yüklemek için aşağıdaki komutu çalıştıralım

sudo apt-get install mosquitto-clients

6. Mosquitto broker çalışıyor olduğundan emin olalım

sudo service mosquitto status

Servis kontrolü ile ilgili komutlar

  • Servisin yüklü olup olmadığını kontrol etmek için: systemctl list-units | grep mosquitto
  • Servisi başlatmak için: systemctl start mosquitto
  • Servisin durumunu kontrol etmek için: systemctl status mosquitto
  • Servisi durdurmak için: systemctl stop mosquitto
  • Servisi otomatik başlatmak için: systemctl enable mosquitto
  • Servisi otomatik başlatması kapatmak için: systemctl disable mosquitto

7. Test edelim

Aşağıdaki komut ile "mymqtt" konusuna(topic) abone olup dinlemeyi başlatalım 

mosquitto_sub -h localhost -t "mymqtt" -v

İkinci bir terminal açalım. Aşağıdaki komut ile "mymqtt" konusuna mesaj yayınlayalım

mosquitto_pub -h localhost -t "mymqtt" -m "Led On"

"Led On" mesajı ilk terminal ekranında abone olduğumuz "mymqtt" konusunda gözükecektir.

Facebook Messenger Üzerinden Nöbetçi Eczaneleri Bulma

Merhaba,
İstanbul'daki nöbetçi eczaneleri, facebook messenger üzerinden hızlı ve kolay şekilde erişebilmenizi sağlayan bir chatbot geliştirdim.

Messenger içerisinde arama kısmına "Nöbetçi Eczane Botu" yazarak arama sonuçlarından erişebilirsiniz.

Messenger üzerinden aşağıdaki QR ı okutarak da kullanmaya başlayabilirsiniz.


Web üzerinden de https://m.me/nobetcieczanebotu adresinden web messenger ile kullabilirsiniz.

Nöbetçi Eczane Chatbot'un mesaj gönderme alanına selam veya merhaba yazdığınızda sizi isminizle karşılayacak ve aramak istediğiniz ilçe adını yazarak veya İstanbul'daki ilçe listesinden seçerek veya konumunuzu paylaşarak size en yakın nöbetçi eczaneleri getirecektir. 
Haritada Göster buttonu ile google maps üzerinden eczaneye yol tarifi alabilirsiniz.

 

Nasıl kullanıldığını aşağıdaki videodan izleyebilirsiniz.

 

Sağlıklı günler :)

Humans Chatbot Hikayesi

Merhaba,
Geliştirici ve Tasarımcı Sohbetleri ile bizim ekosistemdeki insanlardan haberdar olmamızı sağlayan ve bizleri motive eden röportajlar yapan Doğukan Güven Nomak, geçtiğimiz günlerde bu videoları istediğimiz sorudan başlayarak izleyebilmemizi sağlayan YouTube projesi geliştirdi.

Bu projeyi Graphcool alt yapısını kullanarak geliştirdi ve açık kaynak haline getirerek herkesin katkısını beklediğini duyurdu.

Ben de GraphQL endpointini alarak youtube videolarına hızlı erişimi sağlayan bir chatbot geliştirdim. 

Geliştirmeye API endpoint'in sorgularını yazarak çıktısını aynı ekranda görebildiğin web konsolu üzerinden başladım. 

Daha sonra chatbot uygulaması içerisinde oluşturduğum sorguları node.js ile istek gönderebilmek için graphql-fetch kütüphanesinden yararlandım.

Projeye github hesabımdan humans-chatbot reposu üzerinden ulaşabilirsiniz.

Chatbot sayesinde facebook messenger üzerinden hızlı ve kolay şekilde röportajlara erişim sağlayabilirsiniz.
Developer, designer, youtuber, clevel ve junior etiketleri seçerek, konuşmacı adı veya ünvanı mesaj alanına yazarak arama yapabilirsiniz.
Kullanım videosunu aşağıdan izleyebilirsiniz. 

Aşağıda QR ı messenger uygulamasına okutarak veya messenger'a bağlan buttonu ile hemen chatbotu kullanmaya başlayabilirsiniz.
 

Chatbotun kullanım videosunu aşağıdan izleyebilirsiniz.

 

Soru ve eleştirilerinizi, geliştirilmesine yönelik düşüncelerinizi yorum olarak paylaşabilir veya benimle komecoglu.yavuz@gmail.com adresinden iletişime geçerek iletebilirsiniz. 

 

Facebook Messenger Chatbot Demo Geliştirme ve Yayınlama

Merhaba, 
Apple Siri, Microsoft Cortana, Amazon Echo(Alexa), Google Assistant gibi sesli asistanlar her geçen gün hayatımızda yer etmeye başladılar. Bunlarla birlikte botlar Telegram, Slack, Kik gibi mesajlaşma uygulamaları chatbot geliştirilmesine imkan verirken, en popüler Facebook Messenger'ın da geliştiriciler için bot platformunu ve chatbotlara özel uygulama mağazasını devreye alması yaygınlaşmasında büyük rol oynadı.

Chatbot, kullanıcıların mesajlaşma platformlarında belirlenmiş kurallar çerçevesinde hizmet eden bir servistir. Kullanıcılar telefonlarda yüzlerce uygulamalar ile dolaşmak yerine tek bir arayüz ile bir çok servisi alabiliyorlar. Yapay zeka (doğal dil işleme) desteği ile konuşmaların doğal akışını taklit edebilme yeteneği kazandırabilirsiniz.

 

Şimdi Node.js ile facebook messenger chatbotu adım adım nasıl geliştirebiliriz ve yayına alabiliriz ona bakalım.

  1. Node.js uygulamasını yayınlamak için Heroku'dan hesap açarak yeni bir uygulama oluşturalım.
  2. Uygulama adını chatbotweather olarak belirlediğimiz için oluşturduğumuz heroku üzerindeki ücretsiz uygulamamızın erişim adresi https://chatbotweather.herokuapp.com/ olacaktır.
  3. Buradan bir Facebook Uygulaması oluşturalım, bir isim ile iletişim e-postası verelim ve ürün olarak Messenger seçelim.


  4. Yeni oluşturduğunuz veya mevcut bir sayfayı seçerek sayfa erişim token'ı oluşturalım.
  5. Facebook'un hızlı bir başlangıç için bize sunduğu demo uygulamasını buradan indirelim.

  6. Örnek uygulama içerisinde config/default.json içerisindeki
    appSecret parametresini facebook uygulamamazın dashboard bölümündeki App Secret değeri ile,
    pageAccessToken parametresini 4. madde de bağladığımız sayfadan oluşturulan Page Access Token değeri ile,
    validationToken parametresini daha sonra facebook uygulamamız ile chatbotumuz arasındaki etkileşimi sağlamak için webhooks bağlantısını doğrulamak için kendimizin belirlediği bir değer ile(test_token),
    serverURL parametresini chatbot uygulamamızın yayında olduğu adres ile(https://chatbotweather.herokuapp.com/)  değiştirelim.

  7. Dilerseniz public/index.html içerisindeki messenger_app_id ve page_id parametrelerini de değiştirerek chatbota dinamik erişim buttonları oluşturabilirsiniz. 

  8. Değişiklerimizi yaptıktan sonra şimdi Heroku'ya yayınlayalım.
    Komut satırından bilgisayarınızda uygulamanızın bulunduğu klasöre gelerek sırasıyla aşağıdaki git komutları ile Heroku'ya deploy yapalım.
    heroku login
    Heroku hesabınızın kullanıcı adı ve şifresi ile giriş yapalım

    git add .
    git commit -am "ilk deploy"
    git push heroku master


  9. Tekrar facebook uygulama ayarlarına dönüyoruz. Messenger ayarlarından Setup Webhooks a tıklayarak  


    Callback URL olarak Heroku yayın adresimiz/webhook: https://chatbotweather.herokuapp.com/webhook
    Verify Token olarak uygulamamız içerisinde config/default.json dosyasında belirlediğimiz validationToken değerini: test_token
    Ve yetki alanlarının tamamını işaretleyelim.



  10. Buraya kadar başarılı şekilde geldiksey şimdi chatbotumuzu test etme zamanı
    Facebook sayfamızın mesaj gönderme bölümünden uygulamamızda text mesajlara cevap olarak tanımlanmış templateleri (image, gif, audio, video, file, button, generic, receipt, qucik reply) test edebiliriz.
          

  11. Node.js uygulamamızın app.js içerisindeki receivedMessage fonksiyonu içerisindeki örnek kodları inceleyerek kendinize göre düzenleyebilirsiniz. 
    Kullanıcıdan gelen mesaja göre API'lere istekler yaparak cevapları parse edip uygun templatelerde cevap olarak dönebilirsiniz.

Hızlı şekilde facebook messengerın örnek chatbotunu nasıl yayına alınacağını ve facebook sayfasına bağlanacağını göstermeye çalıştım. 

Sorularınız olursa yorum kısmından iletişime geçebilirsiniz.

 

İstanbul'daki nöbetçi eczaneleri bulmanıza yardımcı geliştirdiğim nöbetçi eczane chatbotunu da inceleyebilirsiniz.

Kaynak: