Python ile HiveMQ da Sunucu ve istemci

Standard

Herkese merhabalar,

Yaygın MQTT yapılarından birisi olan HiveMQ ile nasıl veri alışverişi yapacağımıza birlikte göz atalım…

Öncelikle HiveMQ’yu lokalimizde Docker vesilesiyle ayağa kaldırarak başlayabiliriz:

docker run -p 8080:8080 -p 1883:1883 hivemq/hivemq4

Servis ayağa kalktıktan sonra, “http://localhost:8080” e gittiğimizde giriş sayfası bizi karşılayacak:

HiveMQ Control Center login dialog

Burada varsayılan kullanıcı adı “admin” parolası “hivemq” dur.

Şimdi gelelim sunucu ve istemci tarafına:

pip install paho-mqtt

Yükleme işleminin tamamlanmasının ardından, Connect.py dosyamızı oluşturup, kodumuzu ekliyoruz:

 # Created by Sezer BOZKIR<admin@sezerbozkir.com> at 31.05.2021
import paho.mqtt.client as paho


def on_connect(client, userdata, flags, rc):
    print(f"Connack received with code f{rc}, f{client}, f{userdata}, f{flags}")


if __name__ == '__main__':
    client = paho.Client()
    client.on_connect = on_connect
    client.connect("localhost", 1883)
    client.loop_forever()

Kodun içeriğine baktığımızda öncelikle bir client oluşturup, bağlandığında “on_connect” fonksiyonunu çalıştıran ve sürekli çalışması için de “loop_forever” fonksiyonunu çağırdığımız bir yapı görüyoruz.

Çalıştır dedikten sonra, şöyle bir çıktı alıyoruz:

Connack received with code f0, f<paho.mqtt.client.Client object at 0x7faf25982fd0>, fNone, f{'session present': 0}

Buraya kadar herşey yolunda olduğuna göre artık bir sunucu ve istemci de yazarak topic’e subscribe olabilir, bu topik için mesaj gönderimini Publisher ile yapabiliriz.

Publisher.py:

 # Created by Sezer BOZKIR<admin@sezerbozkir.com> at 31.05.2021
import random
import paho.mqtt.client as paho
from time import sleep


def on_connect(client, userdata, flags, rc):
    print(f"Connack received with code f{rc}")


def on_publish(client, userdata, mid):
    print(f"mid: {mid}")


if __name__ == '__main__':
    client = paho.Client()
    client.on_connect = on_connect
    client.on_publish = on_publish
    client.connect("localhost", 1883)

    while True:
        temperature = random.randint(1, 100)
        (rc, mid) = client.publish("sample/temperature", str(temperature), qos=1)
        print(rc)
        print(mid)
        sleep(5)

subscribe.py:

 # Created by Sezer BOZKIR<admin@sezerbozkir.com> at 31.05.2021
import paho.mqtt.client as paho


def on_subscribe(client, userdata, mid, granted_qos):
print("Subscribed: " + str(mid) + " " + str(granted_qos))


def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.qos) + " " + str(msg.payload))


client = paho.Client()
client.on_subscribe = on_subscribe
client.on_message = on_message
client.connect("localhost", 1883)
client.subscribe("sample/#", qos=1)

client.loop_forever()

Öncelikle Publisher’ı çalıştırıyor, sonrasında da subsciber dosyasını başlatıyoruz. Sonuç?

sample/temperature 1 b'17'
sample/temperature 1 b'60'
sample/temperature 1 b'84'
sample/temperature 1 b'15'

Kodlara ayrıca Github repomdan bakabilirsiniz.

Bir başka yazımda görüşmek üzere.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site istenmeyenleri azaltmak için Akismet kullanır. Yorum verilerinizin nasıl işlendiğini öğrenin.