Dans l’exemple ci dessous, l’adresse 192.168.50.31 correspond à l’adresse IP de mon PC sur le réseau WIFI e021
Sur ce PC, je peux tester un échange en local :
Lancement du Broker
mosquitto -c /etc/mosquitto/conf.d/custom.conf
REMARQUE :
custom.conf
listener 1883
allow_anonymous true
log_type all
log_timestamp true
persistence true
max_inflight_messages 20
SUBSCRIBE TO TOPIC test/message
mosquitto_sub -d -h 192.168.50.31 -t test/message
PUBLISH MESSAGE IN TOPIC test/message
mosquitto_pub -d -t test/message -m "hello" -h 192.168.50.31
Dès lors qu’un Broker est présent à une adresse donnée sur un réseau, je peux échanger des messages depuis n’importe quel PC connecté à ce réseau, en faisant uniquement référence au Broker.
L’application ci-dessous doit faire en sorte que :
Installations :
si nécessaire, faire au préalable :
pip install paho-mqtt
Le Broker doit être lancé, dans un autre terminal lancer le programme suivant :
#! /usr/bin/python3
import sys
import paho.mqtt.client as mqtt
import time
########################################################################
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
def on_connect(client, userdata, flags, reason_code, properties):
print("Connected with result code {reason_code}")
#client.subscribe("$SYS/#")
########################################################################
if __name__ == '__main__':
mqttc = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
mqttc.on_connect = on_connect
mqttc.connect("localhost", 1883, 60)
time.sleep(1)
mqttc.on_message = on_message
mqttc.subscribe("test/message",0)
mqttc.loop_start()
while(1):
mqttc.publish("control", "f")
time.sleep(3)
########################################################################
Adapter l’adresse IP 192.168.50.x pour qu’elle corresponde à celle du Broker ( votre PC ).
import logging
import time
from fischertechnik.mqtt.MqttClient import MqttClient
from lib.controller import *
ctl = None
client_local = None
def mqtt_callback(message):
global ctl, client_local
if not not len(message.payload.decode("utf-8")):
msg= message.payload.decode("utf-8")
print("msg rcv ="+msg)
if message.topic=="control":
print("control")
ctl=message.payload.decode("utf-8")
ctl = 0
client_local = MqttClient()
client_local.connect(host='192.168.50.31', port=1883, user='', password='')
time.sleep(2)
if client_local.is_connected():
client_local.publish(topic='test/message', payload='INIT', qos=0, retain=False)
client_local.subscribe(topic='control', callback=mqtt_callback, qos=0)
while True:
client_local.publish(topic='test/message', payload='in the loop', qos=0, retain=False)
print(ctl)
time.sleep(2)