A seguire gli esperimenti di questi giorni, oggi mi sono dedicato alla configurazione su linux di un sistema per leggere i messaggi inviati dal sensore. Ho cercato un client MQTT che potesse essere utilizzato da linea di comando ed ho trovato e configurato questo che adesso decrivero'.
Ho trovato il progetto Eclipse che fa al caso mio, hanno sviluppato una libreria disponibile su github per la gestione delle comunicazioni con un broker MQTT che si chiama paho che risolve la maggior parte dei problemi e consente con 4 righe di codice di ottenere cio' di cui ho bisogno.
I passi necessari per far funzionare tutto sono questi:
su linux ( io per praticita' utilizzo una shell linux in WSL su windows, perche' in questo periodo sto usando un pc con windows) creo la mia direttory di progetto che ho chiamato mqtt_client
quindi entro nella cartella appena creata con
quindi creo il file che conterra' il codice del programma MQTT client subscriber
edito il contenuto del file con i dati del mio broker MQTT pubblico scelto.
file subscribe.py:
# subscribe.py import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): print(f"Connected with result code {rc}") # subscribe, which need to put into on_connect # if reconnect after losing the connection with the broker, it will continue to subscribe to the raspberry/topic topic client.subscribe("TecnoGeppetto/topic") # the callback function, it will be triggered when receiving messages def on_message(client, userdata, msg): print(f"{msg.topic} {msg.payload}") client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message # set the will message, when the system is powered off, or the network is interrupted abnormally, it will send the will message to other clients client.will_set('TecnoGeppetto/status', b'{"status": "Off"}') # create connection, the three parameters are broker address, broker port number, and keep-alive time respectively client.connect("broker.emqx.io", 1883, 60) # set the network loop blocking, it will not actively end the program before calling disconnect() or the program crash client.loop_forever()
Naturalmente per far funzionare tutto sulla distribuzione linux che ho scelto e' presente python 3.xx, se non lo fosse e' necessario installarlo assieme a pip3 che servira' per installare la libreria di cui si fa l' import nel codice.
sudo apt install python3
poi
pip3 install paho-mqtt
A questo punto per far girare il client in ricezione sui topic scelti nel codice ( nel caso qui pubblicato TecnoGeppetto/topic , basta chiamare
Nel caso di problemi di connesisone il sistema rende un codice di errore, questa di seguito e' la legenda dei possibili codici
0: connection succeeded 1: connection failed - incorrect protocol version 2: connection failed - invalid client identifier 3: connection failed - the broker is not available 4: connection failed - wrong username or password 5: connection failed - unauthorized 6-255: undefined If it is other issues, you can check the network situation, or check whether `paho-mqtt` has been installed.
Naturalmente il topic da scegliere deve essere lo stesso sul quale trasmette il sensore, in modo da poter regolarmente ricevere il messaggio trasmesso ogni volta dal sensore.
Buon divertimento
TecnoGeppetto
Nessun commento:
Posta un commento