Ecouter un topic MQTT

Logo MQTT
Logo MQTT

Il peut être utile parfois de savoir ce qui se passe sur un topic particulier dans snips. Que ce soit pour debugger ou récupérer le payload pour analyse, il est toujours intéressant de voir ce qui se passe d’un point de vue MQTT.

Pour ça, j’ai récupéré un petit script python tout bête. Le voici :

#!/usr/bin/env python

import paho.mqtt.client as mqtt
import json

def on_connect(client, userdata, flags, rc):
    print('Connected')
    mqtt.subscribe("hermes/hotword/default/detected")

def on_message(client, userdata, msg):
    print("Msg rcv on topic {0}: {1}".format(msg.topic, msg.payload))

mqtt = mqtt.Client()
mqtt.on_connect = on_connect
mqtt.on_message = on_message
mqtt.connect('localhost', 1883)
mqtt.loop_forever()

copie-colle le contenu et enregistre-le dans un fichier qui s’appelle par exemple : ecoute-mqtt.py

Ensuite, on rend le script exécutable avec la commande :

chmod +x ./ecoute-mqtt.py

Au préalable, il te faudra installer paho. Pour cela exécuter la ligne suivante :

$ pip install paho-mqtt

Il y a 2 lignes que tu pourrais avoir besoin de modifier. La première c’est la ligne qui contient le serveur MQTT auquel tu te connectes :

mqtt.connect('localhost', 1883)

Localhost est la machine locale, celle sur laquelle tu es connecté. Si tu souhaites que le script se connecte à un autre serveur MQTT, alors tu remplaces « localhost » par le nom de cet autre serveur MQTT.

La seconde ligne que tu pourrais être amené à modifier est la ligne spécifiant à quel topic tu t’abonnes :

mqtt.subscribe("hermes/hotword/default/detected")

Dans l’exemple ci-dessus, je m’abonne au topic sur lequel un message sera envoyé lorsque le mot clé est détecté. A toi de modifier le topic en fonction de ton besoin ! Celui qui t’intéressera surement est le topic lié à un intent (ou tous d’ailleurs). Voici la ligne que tu peux mettre si tu veux écouter tous les intents :

mqtt.subscribe("hermes/intent/#")

Tu peux aussi t’abonner à plusieurs topics. Exemple :

mqtt.subscribe("hermes/hotword/default/detected")
mqtt.subscribe("hermes/intent/#")

Voici ce que ça donne avec l’assistant créé dans les articles précédents :

pi@snips-salon:~ $ ./ecoute-mqtt.py
Connected
Message received on topic hermes/hotword/default/detected: {"siteId":"bureau","modelId":"default",[blablabla],"slots":[]}

Voilà ! A toi de jouer 🙂

Edit : j’ai retrouvé d’où j’avais choppé le script, et bien c’est de snips 🙂