Si vous avez mis un mot de passe à votre broker MQTT, vous pouvez le changer ci-dessous ou utiliser des variables d'environnement comme moi:

Ensuite chaque canal MQTT est listé dans les clés d'un dictionnaire, et son petit nom comme valeur. On va prendre pour exemple celui dans le bureau:

On va maintenant récupérer les dernières valeurs du capteur dans le bureau avec la bibliothèque paho-mqtt:

A noter que l'option retained=True aurait été sans effet si vous ne l'aviez pas activée dans la configuration du broker.

Les données du capteur se trouvent dans payload.

On va maintenant utiliser le module stream du package holoviews. Un stream est tout simplement un tuple nommé dans laquelle on va pouvoir injecter un élément à chaque fois qu'un nouveau message provient du capteur.

Nous n'avons créé qu'une metaclasse. En effet plusieurs streams avec les mêmes paramètres mais différentes sources peuvent être créé. Il faut instancier notre nouvel objet ainsi:

On va maintenant s'abonner au canal TH_Chambre afin d'alimenter notre objet bureau_stream. Plutôt qu'utiliser la fonction suscribe de paho-mqtt, on va créer un client.

Je lui donne un nom avec client_id. On pourrait aussi laisser à la bibliothèque le soin de donner un nom aléatoire, ce qui sera plus judicieux: en effet le broker n'accepte qu'un seul client, ou listener, par id.

Le zéro indique que le client a pu se connecter. On va maintenant faire deux choses:

  1. créer une fonction qui va venir alimenter notre stream holoviews avec de nouvelles données
  2. puis inscrire le client mqtt au canal TH_bureau

quelque temps plus tard...

On peut maintenant visualiser ce stream, on va donc créer une fonction qui retournera un objet holoviews. Panel étant ce qu'il est, il pourra accepter cette fonction en entrée dans un Pane et nous aurons notre dashboard dynamique!

Pour que le graph se mette à jour, il faut lui indiquer de se mettre à jour à chaque fois que la valeur change. On va utiliser le décorateur depends de la bibliothèque param, utilisé par Holoviews comme Panel. Vous noterez que les paramètres du décorateur sont exactement les mêmes que les paramètres en entrée de la fonction qui retourne le graph.

Et voilà, on peut faire la même chose pour chaque canal du broker, donc pour chaque capteur. Il y a certainement des points à améliorer quant à la présentation graphique...