Files
observability/tp3.md

92 lines
2.7 KiB
Markdown
Raw Normal View History

2025-12-08 11:16:45 +01:00
# TP3 : Pupitre de commande et dashboard
## NodeRed
2025-12-08 07:49:26 +01:00
```shell
docker run --detach --name nodered ^
--network tp_net ^
-p "1880:1880" ^
-v nodered:/data ^
-e "TZ=Europe/Paris" ^
nodered/node-red:4.1
```
2025-12-08 11:16:45 +01:00
Node-RED est un outil de développement visuel, basé sur des flux (flows), qui permet de créer facilement des applications connectées en assemblant des blocs logiques.
Il fonctionne dans un navigateur et utilise un système de “nœuds” que lon relie entre eux pour traiter des données, piloter des équipements ou créer des interfaces web.
Node-RED est particulièrement utilisé pour :
- lIoT (Internet des Objets)
- lautomatisation industrielle
- la collecte et transformation de données
- la communication avec des protocoles industriels (MQTT, Modbus, OPC-UA…)
- la création de petits dashboards ou synoptiques
## RabbitMQ
RabbitMQ est un serveur de messagerie qui permet à différentes applications de communiquer entre elles en séchangeant des messages de manière fiable, asynchrone et découplée.
Il utilise principalement le protocole AMQP, gère les files dattente, lacheminement intelligent des messages, les accusés de réception et la persistance.
RabbitMQ est très utilisé pour :
- répartir des tâches entre plusieurs services,
- connecter des systèmes industriels ou IoT,
- absorber des flux importants sans perdre de messages,
- assurer une communication robuste entre modules dune application
```shell
docker run --detach --name rabbitmq \
--network proxy_net \
-p "5672:5672" -p "1883:1883" \
-e "PRABBITMQ_DEFAULT_USER=admin" \
-e "RABBITMQ_DEFAULT_PASS=ChangeMe" \
-e "RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbitmq_mqtt tcp_listeners [1883]" \
-v rabbitmq_data:/var/lib/rabbitmq \
-l "caddy=rabbitmq.localhost" \
-l "caddy.reverse_proxy={{upstreams 15672}}" \
-l "caddy.tls=internal" \
rabbitmq:4.1.4-management \
sh -c "rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_management && rabbitmq-server"
```
## Programme C
2025-12-08 07:49:26 +01:00
Ajouter la bibliothèque MQTT
```c
#include <curl/curl.h>
#include <string>
#include <iostream>
#include <thread>
#include <atomic>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <csignal>
#include <chrono>
#include <cstring>
#undef timeout
#include "mqtt/async_client.h"
#include <nlohmann/json.hpp>
```
Dans la fonction ProcessMQTT créer un objet JSON avec les valeurs des différents capteurs.
```c
json obj = {
{"entree", _digital[IN_FLOW_IN].dvalue},
{"sortie", _digital[IN_FLOW_OUT].dvalue}
};
```
Envoyer le message
```c
std::string payload = obj.dump();
auto msg = mqtt::make_message("geii/telemetry", payload);
msg->set_qos(1);
client->publish(msg);
```