giovedì 31 dicembre 2020

MQTT publisher sistema di test del protocollo MQTT

 Chi non volesse costruire il device come trattato negli articoli precedenti, ma avesse comunque necessita' di veder funzionare il sistema basato sui pacchetti di messaggi MQTT, puo' sempre far girare un software sul pc che simula il device stesso e che fornisce messaggi sul broket MQTT necessari.

Per questi test ho scelto il broker messo a disposizione dal progetto Eclipse che potete trovare qui 

Per far questo, sempre attraverso il progetto Eclipse ho trovato un codice che con poche righe consente di inviare messaggi ad un qualsiasi broker MQTT ad intervalli regolari

Utilizzando sempre il sitema Linux su WSL in Windows, nella mia shell, sempre nella cartella mqtt_client, ho creato un nuovo file chiamato publisher.py che crea una connessione con il broker MQTT, ed invia una serie di messaggi sul topic scelto ( nel mio caso TecnoGeppetto/topic

publisher.py

import paho.mqtt.client as mqtt
import time

def on_connect(client, userdata, flags, rc):
    print(f"Connected with result code {rc}")
    
client = mqtt.Client()
client.on_connect = on_connect
client.connect("broker.emqx.io", 1883, 60)

# send a message to the TecnoGeppetto/topic every 10 second, 50 times in a row
for i in range(50):
    # the four parameters are topic, sending content, QoS and whether retaining the message respectively
    client.publish('TecnoGeppetto/topic', payload=i, qos=0, retain=False)
    print(f"send {i} to TecnoGeppetto/topic")
    time.sleep(1)

client.loop_forever()

Quindi, su un sistema sul quale gira python 3 e sul quale e' installata la libreria paho.mqtt.client bastera' chiamare python3 publisher.py per ottenere una serie di 50 messaggi ogni 10 secondi pubblicati sul broker pubblico scelto sul topic preferito (nel caso del codice in oggetto, sul topic  TecnoGeppetto/topic

Naturalmente i messaggi potranno essere ricevuto su un'altra shell sulla quale gira il software subcriber, descritto nel post precedente.


Buon divertimento 

TecnoGeppetto




Nessun commento: