2
0

Retrait des bibliothèques superflues pour l'exercice sarii

This commit is contained in:
2026-01-09 19:45:24 +01:00
parent 8a4c0a501d
commit 1491c30e75
4 changed files with 121 additions and 89 deletions

View File

@@ -20,16 +20,8 @@ RUN RUN set -eux; \
RUN set -eux; \ RUN set -eux; \
apt-get update; \ apt-get update; \
apt-get install -y \ apt-get install -y \
libncurses-dev \
libmicrohttpd-dev \
libcurl4-openssl-dev \ libcurl4-openssl-dev \
zlib1g-dev \ nlohmann-json3-dev \
prometheus-cpp-dev \
nlohmann-json3-dev
RUN set -eux; \
apt-get update; \
apt-get install -y \
libpaho-mqtt-dev libpaho-mqtt-dev
RUN set -eux; \ RUN set -eux; \
@@ -42,13 +34,6 @@ RUN set -eux; \
cmake --build . --target install; \ cmake --build . --target install; \
ldconfig; ldconfig;
RUN set -eux; \
apt-get update; \
apt-get install -y \
librabbitmq4 \
librabbitmq-dev;\
apt-get clean
USER $USERNAME USER $USERNAME
WORKDIR /workspace WORKDIR /workspace

View File

@@ -20,40 +20,19 @@ add_executable(pompes
# CURL # CURL
find_package(CURL REQUIRED) find_package(CURL REQUIRED)
# Microhttpd
find_library(MICROHTTPD_LIB microhttpd REQUIRED)
# Threads et compression # Threads et compression
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
find_library(Z_LIB z REQUIRED)
# ncursesw
find_library(NCURSESW_LIB ncursesw REQUIRED)
# RabbitMQ C client
find_library(RABBITMQ_LIB rabbitmq REQUIRED)
# Paho MQTT C client # Paho MQTT C client
find_library(PAHO_MQTTPP3_LIB paho-mqttpp3 REQUIRED) find_library(PAHO_MQTTPP3_LIB paho-mqttpp3 REQUIRED)
find_library(PAHO_MQTT3C_LIB paho-mqtt3c REQUIRED) find_library(PAHO_MQTT3C_LIB paho-mqtt3c REQUIRED)
# -------------------------------
# Prometheus C++
# -------------------------------
find_package(prometheus-cpp REQUIRED)
# ------------------------------- # -------------------------------
# Lien des bibliothèques # Lien des bibliothèques
# ------------------------------- # -------------------------------
target_link_libraries(pompes target_link_libraries(pompes
prometheus-cpp::core
prometheus-cpp::pull
${CURL_LIBRARIES} ${CURL_LIBRARIES}
${MICROHTTPD_LIB}
Threads::Threads Threads::Threads
${Z_LIB}
${NCURSESW_LIB}
${RABBITMQ_LIB}
${PAHO_MQTT3C_LIB} # dépendance C ${PAHO_MQTT3C_LIB} # dépendance C
${PAHO_MQTTPP3_LIB} # lib C++ ${PAHO_MQTTPP3_LIB} # lib C++
) )

View File

@@ -56,6 +56,8 @@ int s0, s1, s2, s3, s4, s5, s6, s7;
int m0, m1, m2, m3; int m0, m1, m2, m3;
int v0; int v0;
void process();
/* ******************************************************** /* ********************************************************
* MQTT * * MQTT *
* * * *
@@ -70,35 +72,12 @@ const int CYCLE_MS = 100;
mqtt::async_client client(ADDRESS, CLIENTID); mqtt::async_client client(ADDRESS, CLIENTID);
void mqtt_process(mqtt::async_client* client) void mqtt_send(mqtt::async_client *client);
{
json obj = {
{"s0", s0 },
{"s1", s1 },
{"s2", s2 },
{"s3", s3 },
{"s4", s4 },
{"s5", s5 },
{"s6", s6 },
{"s7", s7 },
{"m0", m0 },
{"m1", m1 },
{"m2", m2 },
{"m3", m3 },
};
std::string payload = obj.dump();
auto msg = mqtt::make_message("geii/out", payload);
msg->set_qos(1);
client->publish(msg);
usleep(100000);
}
// Réception des messages MQTT // Réception des messages MQTT
// ************************************************************ // ************************************************************
class callback : public virtual mqtt::callback { class callback : public virtual mqtt::callback
{
public: public:
void message_arrived(mqtt::const_message_ptr msg) override { void message_arrived(mqtt::const_message_ptr msg) override {
std::string payload = msg->to_string(); std::string payload = msg->to_string();
@@ -115,28 +94,37 @@ public:
if (j.contains("marche")) marche = j["marche"].get<int>() != 0; if (j.contains("marche")) marche = j["marche"].get<int>() != 0;
if (j.contains("arret")) arret = j["arret"].get<int>() != 0; if (j.contains("arret")) arret = j["arret"].get<int>() != 0;
if (j.contains("b0")) b0 = j["b0"].get<int>() != 0; if (j.contains("b0") && j["b0"].is_number())
if (j.contains("b1")) b1 = j["b1"].get<int>() != 0; b0 = j["b0"].get<int>();
if (j.contains("b2")) b2 = j["b2"].get<int>() != 0; if (j.contains("b1") && j["b1"].is_number())
if (j.contains("b3")) b3 = j["b3"].get<int>() != 0; b1 = j["b1"].get<int>();
if (j.contains("b4")) b4 = j["b4"].get<int>() != 0; if (j.contains("b2") && j["b2"].is_number())
if (j.contains("b5")) b5 = j["b5"].get<int>() != 0; b2 = j["b2"].get<int>();
if (j.contains("b6")) b6 = j["b6"].get<int>() != 0; if (j.contains("b3") && j["b3"].is_number())
if (j.contains("b7")) b7 = j["b7"].get<int>() != 0; b3 = j["b3"].get<int>();
if (j.contains("b4") && j["b4"].is_number())
b4 = j["b4"].get<int>();
if (j.contains("b5") && j["b5"].is_number())
b5 = j["b5"].get<int>();
if (j.contains("b6") && j["b6"].is_number())
b6 = j["b6"].get<int>();
if (j.contains("b7") && j["b7"].is_number())
b7 = j["b7"].get<int>();
if (j.contains("i0")) i0 = j["i0"].get<int>() != 0; if (j.contains("i0")) i0 = j["i0"].get<int>();
if (j.contains("i1")) i1 = j["i1"].get<int>() != 0; if (j.contains("i1")) i1 = j["i1"].get<int>();
if (j.contains("i2")) i2 = j["i2"].get<int>() != 0; if (j.contains("i2")) i2 = j["i2"].get<int>();
if (j.contains("i3")) i3 = j["i3"].get<int>() != 0; if (j.contains("i3")) i3 = j["i3"].get<int>();
if (j.contains("i4")) i4 = j["i4"].get<int>() != 0; if (j.contains("i4")) i4 = j["i4"].get<int>();
if (j.contains("i5")) i5 = j["i5"].get<int>() != 0; if (j.contains("i5")) i5 = j["i5"].get<int>();
if (j.contains("i6")) i6 = j["i6"].get<int>() != 0; if (j.contains("i6")) i6 = j["i6"].get<int>();
if (j.contains("i7")) i7 = j["i7"].get<int>() != 0; if (j.contains("i7")) i7 = j["i7"].get<int>();
if (j.contains("v0") && j["v0"].is_number()) v0 = j["v0"].get<int>(); if (j.contains("v0") && j["v0"].is_number()) v0 = j["v0"].get<int>();
std::cout << "Pompes : " << marche << " " << arret << " B " << b0 << " " << b1 << " " << b2 << " " << b3 << " " << b4 << " " << b5 << " " << b6 << " " << b7 << " I " << i0 << " " << i1 << " " << i2 << " " << i3 << " " << i4 << " " << i5 << " " << i6 << " " << i7 << " " << v0 << std::endl; process();
} mqtt_send(&client);
}
catch (const json::parse_error& e) { catch (const json::parse_error& e) {
std::cerr << "Erreur JSON : " << e.what() << "\n"; std::cerr << "Erreur JSON : " << e.what() << "\n";
} }
@@ -162,6 +150,29 @@ void mqtt_open(mqtt::async_client* client) {
} }
void mqtt_send(mqtt::async_client *client)
{
json obj = {
{"s0", s0},
{"s1", s1},
{"s2", s2},
{"s3", s3},
{"s4", s4},
{"s5", s5},
{"s6", s6},
{"s7", s7},
{"m0", m0},
{"m1", m1},
{"m2", m2},
{"m3", m3},
};
std::string payload = obj.dump();
auto msg = mqtt::make_message("geii/out", payload);
msg->set_qos(1);
client->publish(msg);
}
void mqtt_close() { void mqtt_close() {
try { try {
client.unsubscribe(TOPIC)->wait(); client.unsubscribe(TOPIC)->wait();

View File

@@ -1,21 +1,78 @@
#include "main.hpp" #include "main.hpp"
#include "autom.cpp" #include "autom.cpp"
#include <thread>
#include <atomic>
int marche_precedent = 0;
int marche_frontmontant = 0;
int arret_precedent = 1;
int arret_frontdescedant = 0;
int b0_precedent = 0;
int b0_frontmontant = 0;
int b1_precedent = 0;
int b1_frontmontant = 0;
int b2_precedent = 0;
int b2_frontmontant = 0;
int b3_precedent = 0;
int b3_frontmontant = 0;
int b4_precedent = 0;
int b4_frontmontant = 0;
int b5_precedent = 0;
int b5_frontmontant = 0;
int b6_precedent = 0;
int b6_frontmontant = 0;
int b7_precedent = 0;
int b7_frontmontant = 0;
int main() int main()
{ {
mqtt_open(&client); mqtt_open(&client);
while (1) std::atomic<bool> running{true};
while (running)
{ {
// Début du code std::this_thread::sleep_for(std::chrono::seconds(1));
// *****************************************************
// *****************************************************
// Fin du code
mqtt_process(&client);
} }
mqtt_close(); mqtt_close();
return 0; return 0;
} }
void process() {
// Détection du front montant (état courant supérieur à l'état précédent)
b0_frontmontant = b0 > b0_precedent;
b1_frontmontant = b1 > b1_precedent;
b2_frontmontant = b2 > b2_precedent;
b3_frontmontant = b3 > b3_precedent;
b4_frontmontant = b4 > b4_precedent;
b5_frontmontant = b5 > b5_precedent;
b6_frontmontant = b6 > b6_precedent;
b7_frontmontant = b7 > b7_precedent;
s0 = i0;
if (b1_frontmontant == 1)
{
s1 = !s1; // Inversion
}
if (b2_frontmontant == 1)
{
s2 = !s2; // Inversion
}
// Prêt pour un nouveau tour
// L'état courant devient l'état précédent
b0_precedent = b0;
b1_precedent = b1;
b2_precedent = b2;
b3_precedent = b3;
b4_precedent = b4;
b5_precedent = b5;
b6_precedent = b6;
b7_precedent = b7;
}