From 457aa963c2fd67ad64bdebbd65f58dfd0e20a04e Mon Sep 17 00:00:00 2001 From: medina5 Date: Mon, 8 Dec 2025 12:46:07 +0100 Subject: [PATCH] tp3 --- tp3.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/tp3.md b/tp3.md index f64c420..96a71b9 100644 --- a/tp3.md +++ b/tp3.md @@ -39,7 +39,7 @@ 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_DEFAULT_PASS=geii2025" \ -e "RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbitmq_mqtt tcp_listeners [1883]" \ -v rabbitmq_data:/var/lib/rabbitmq \ -l "caddy=rabbitmq.localhost" \ @@ -49,6 +49,8 @@ docker run --detach --name rabbitmq \ sh -c "rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_management && rabbitmq-server" ``` +Ajouter la bibliothèque Dashboard2 + ## Programme C Ajouter la bibliothèque MQTT @@ -72,6 +74,49 @@ Ajouter la bibliothèque MQTT #include ``` +Déclarer les constantes + +```c +/* Configuration MQTT */ +const std::string ADDRESS = "tcp://rabbitmq:1883"; +const std::string CLIENTID = "CppClientTP"; +const std::string TOPIC = "geii/ordre/#"; +const int QOS = 1; +const int CYCLE_MS = 100; +``` + + +Écrire la fonction qui va traiter l'arrivée des messages + +```c +class callback : public virtual mqtt::callback { +public: + void message_arrived(mqtt::const_message_ptr msg) override { + std::string payload = msg->to_string(); + //... Effectuer les actions en conséquences + } +}; +``` + +```c +mqtt::async_client client(ADDRESS, CLIENTID); + callback cb; + client.set_callback(cb); + + mqtt::connect_options connOpts; + connOpts.set_clean_session(true); + connOpts.set_user_name("admin"); + connOpts.set_password("geii2025"); + try { + client.connect(connOpts)->wait(); + client.start_consuming(); + client.subscribe(TOPIC, QOS)->wait(); + } catch (const mqtt::exception &exc) { + std::cerr << "Erreur MQTT: " << exc.what() << "\n"; + return 1; + } +``` + Dans la fonction ProcessMQTT créer un objet JSON avec les valeurs des différents capteurs. ```c @@ -89,3 +134,15 @@ auto msg = mqtt::make_message("geii/telemetry", payload); msg->set_qos(1); client->publish(msg); ``` + +Après la boucle principale déconnecter MQTT. + +```c +try { + client.unsubscribe(TOPIC)->wait(); + client.stop_consuming(); + client.disconnect()->wait(); +} catch(const mqtt::exception &exc){ + std::cerr << "Erreur déconnexion MQTT: " << exc.what() << "\n"; +} +```