Home > iot, mqtt, python > MQTT: websockets

MQTT: websockets

27 Dicembre 2018

Cosa è un websocket

Da wikipedia:

WebSocket è una tecnologia web che fornisce canali di comunicazione full-duplex attraverso una singola connessione TCP

Dopo aver visto a grandi linee cosa sia MQTT,
vediamo come utilizzarlo con i websockets.

Lato Broker

Per utilizzare i websocket con mqtt bisogna utilizzare MQTT in versione >= 1.5.4 se si utilizzerà un server locale, oppure
un broker online che supporti la tecnologia websocket.
Anche il server di test test.mosquitto.org va benissimo.

Editare il file di configurazione mosquitto.conf ed aggiungere le seguenti righe:

listener 9001

protocol websockets

Avviare il server puntando al file di configurazione appena editato:

mosquitto.exe -v -c <path_to_mosquitto_conf>\mosquitto.conf

Dove al posto di path_to_mosquitto_conf va inserito, ovviamente, il percorso del file di configurazione.

1545916129: mosquitto version 1.5.4 starting
1545916129: Config loaded from \tmp\mosquitto\mosquitto.conf.
1545916129: Opening ipv6 listen socket on port 1883.
1545916129: Opening ipv4 listen socket on port 1883.
1545916129: Opening websockets listen socket on port 9001.

Il broker, come si nota, è in ascolto sia sulla porta 1883 (non le ho decommentate nel file conf pertanto permane attiva la
funzione principale), sia sulla 9001 per chi utilizza i websockets.

Lato Client

Per il client con python, va benissimo la solita libreria paho-mqtt.
Il procedimento è molto simile a quello di base, specificando il protocollo e settando la giusta porta di comunicazione.

>>> from paho.mqtt.client import Client
>>> c = Client("bancaldo", transport="websockets")
>>> c.connect("127.0.0.1", port=9001)
0
>>> c.loop_start()
1545916129: Opening websockets listen socket on port 9001.
1545916601: New client connected from 127.0.0.1 as bancaldo (c1, k60).
1545916601: No will message specified.
1545916601: Sending CONNACK to bancaldo (0, 0)

Abboniamo il nostro client al solito topic, creiamo un altro client, pubblichiamo un messaggio e verifichiamo che tutto funzioni.

>>> c.subscribe(topic)
(0, 1)
>>> c1 = Client("client_1", transport="websockets")
>>> c1.connect("127.0.0.1", port=9001)
0
>>> c1.loop_start()
>>> c1.publish(topic, "ON", qos=2, retain=True)
<paho.mqtt.client.MQTTMessageInfo object at 0x0268D3C0>

come si nota dal lato broker…

1545916794: Received SUBSCRIBE from bancaldo
1545916794:     home/room/lights (QoS 0)
1545916794: bancaldo 0 home/room/lights
1545916794: Sending SUBACK to bancaldo
1545916839: New client connected from 127.0.0.1 as client_1 (c1, k60).
1545916839: No will message specified.
1545916839: Sending CONNACK to client_1 (0, 0)
1545916901: Received PUBLISH from client_1 (d0, q2, r1, m1, 'home/room/lights', ... (2 bytes))
1545916901: Sending PUBREC to client_1 (Mid: 1)
1545916901: Received PUBREL from client_1 (Mid: 1)
1545916901: Sending PUBLISH to bancaldo (d0, q0, r0, m0, 'home/room/lights', ... (2 bytes))
1545916901: Sending PUBCOMP to client_1 (Mid: 1)

…tutto ok.

Categorie:iot, mqtt, python Tag: , ,
I commenti sono chiusi.