tp3
This commit is contained in:
59
tp3.md
59
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 <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.
|
||||
|
||||
```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";
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user