tp3
This commit is contained in:
59
tp3.md
59
tp3.md
@@ -39,7 +39,7 @@ docker run --detach --name rabbitmq \
|
|||||||
--network proxy_net \
|
--network proxy_net \
|
||||||
-p "5672:5672" -p "1883:1883" \
|
-p "5672:5672" -p "1883:1883" \
|
||||||
-e "PRABBITMQ_DEFAULT_USER=admin" \
|
-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]" \
|
-e "RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=-rabbitmq_mqtt tcp_listeners [1883]" \
|
||||||
-v rabbitmq_data:/var/lib/rabbitmq \
|
-v rabbitmq_data:/var/lib/rabbitmq \
|
||||||
-l "caddy=rabbitmq.localhost" \
|
-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"
|
sh -c "rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_management && rabbitmq-server"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Ajouter la bibliothèque Dashboard2
|
||||||
|
|
||||||
## Programme C
|
## Programme C
|
||||||
|
|
||||||
Ajouter la bibliothèque MQTT
|
Ajouter la bibliothèque MQTT
|
||||||
@@ -72,6 +74,49 @@ Ajouter la bibliothèque MQTT
|
|||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
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.
|
Dans la fonction ProcessMQTT créer un objet JSON avec les valeurs des différents capteurs.
|
||||||
|
|
||||||
```c
|
```c
|
||||||
@@ -89,3 +134,15 @@ auto msg = mqtt::make_message("geii/telemetry", payload);
|
|||||||
msg->set_qos(1);
|
msg->set_qos(1);
|
||||||
client->publish(msg);
|
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";
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user