Retrait des bibliothèques superflues pour l'exercice sarii
This commit is contained in:
@@ -20,16 +20,8 @@ RUN RUN set -eux; \
|
||||
RUN set -eux; \
|
||||
apt-get update; \
|
||||
apt-get install -y \
|
||||
libncurses-dev \
|
||||
libmicrohttpd-dev \
|
||||
libcurl4-openssl-dev \
|
||||
zlib1g-dev \
|
||||
prometheus-cpp-dev \
|
||||
nlohmann-json3-dev
|
||||
|
||||
RUN set -eux; \
|
||||
apt-get update; \
|
||||
apt-get install -y \
|
||||
nlohmann-json3-dev \
|
||||
libpaho-mqtt-dev
|
||||
|
||||
RUN set -eux; \
|
||||
@@ -42,13 +34,6 @@ RUN set -eux; \
|
||||
cmake --build . --target install; \
|
||||
ldconfig;
|
||||
|
||||
RUN set -eux; \
|
||||
apt-get update; \
|
||||
apt-get install -y \
|
||||
librabbitmq4 \
|
||||
librabbitmq-dev;\
|
||||
apt-get clean
|
||||
|
||||
USER $USERNAME
|
||||
WORKDIR /workspace
|
||||
|
||||
|
||||
@@ -20,40 +20,19 @@ add_executable(pompes
|
||||
# CURL
|
||||
find_package(CURL REQUIRED)
|
||||
|
||||
# Microhttpd
|
||||
find_library(MICROHTTPD_LIB microhttpd REQUIRED)
|
||||
|
||||
# Threads et compression
|
||||
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
|
||||
find_library(PAHO_MQTTPP3_LIB paho-mqttpp3 REQUIRED)
|
||||
find_library(PAHO_MQTT3C_LIB paho-mqtt3c REQUIRED)
|
||||
|
||||
# -------------------------------
|
||||
# Prometheus C++
|
||||
# -------------------------------
|
||||
find_package(prometheus-cpp REQUIRED)
|
||||
|
||||
# -------------------------------
|
||||
# Lien des bibliothèques
|
||||
# -------------------------------
|
||||
target_link_libraries(pompes
|
||||
prometheus-cpp::core
|
||||
prometheus-cpp::pull
|
||||
${CURL_LIBRARIES}
|
||||
${MICROHTTPD_LIB}
|
||||
Threads::Threads
|
||||
${Z_LIB}
|
||||
${NCURSESW_LIB}
|
||||
${RABBITMQ_LIB}
|
||||
${PAHO_MQTT3C_LIB} # dépendance C
|
||||
${PAHO_MQTTPP3_LIB} # lib C++
|
||||
)
|
||||
|
||||
99
autom.cpp
99
autom.cpp
@@ -56,6 +56,8 @@ int s0, s1, s2, s3, s4, s5, s6, s7;
|
||||
int m0, m1, m2, m3;
|
||||
int v0;
|
||||
|
||||
void process();
|
||||
|
||||
/* ********************************************************
|
||||
* MQTT *
|
||||
* *
|
||||
@@ -70,35 +72,12 @@ const int CYCLE_MS = 100;
|
||||
|
||||
mqtt::async_client client(ADDRESS, CLIENTID);
|
||||
|
||||
void mqtt_process(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);
|
||||
}
|
||||
|
||||
void mqtt_send(mqtt::async_client *client);
|
||||
|
||||
// Réception des messages MQTT
|
||||
// ************************************************************
|
||||
class callback : public virtual mqtt::callback {
|
||||
class callback : public virtual mqtt::callback
|
||||
{
|
||||
public:
|
||||
void message_arrived(mqtt::const_message_ptr msg) override {
|
||||
std::string payload = msg->to_string();
|
||||
@@ -115,28 +94,37 @@ public:
|
||||
if (j.contains("marche")) marche = j["marche"].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("b1")) b1 = j["b1"].get<int>() != 0;
|
||||
if (j.contains("b2")) b2 = j["b2"].get<int>() != 0;
|
||||
if (j.contains("b3")) b3 = j["b3"].get<int>() != 0;
|
||||
if (j.contains("b4")) b4 = j["b4"].get<int>() != 0;
|
||||
if (j.contains("b5")) b5 = j["b5"].get<int>() != 0;
|
||||
if (j.contains("b6")) b6 = j["b6"].get<int>() != 0;
|
||||
if (j.contains("b7")) b7 = j["b7"].get<int>() != 0;
|
||||
if (j.contains("b0") && j["b0"].is_number())
|
||||
b0 = j["b0"].get<int>();
|
||||
if (j.contains("b1") && j["b1"].is_number())
|
||||
b1 = j["b1"].get<int>();
|
||||
if (j.contains("b2") && j["b2"].is_number())
|
||||
b2 = j["b2"].get<int>();
|
||||
if (j.contains("b3") && j["b3"].is_number())
|
||||
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("i1")) i1 = j["i1"].get<int>() != 0;
|
||||
if (j.contains("i2")) i2 = j["i2"].get<int>() != 0;
|
||||
if (j.contains("i3")) i3 = j["i3"].get<int>() != 0;
|
||||
if (j.contains("i4")) i4 = j["i4"].get<int>() != 0;
|
||||
if (j.contains("i5")) i5 = j["i5"].get<int>() != 0;
|
||||
if (j.contains("i6")) i6 = j["i6"].get<int>() != 0;
|
||||
if (j.contains("i7")) i7 = j["i7"].get<int>() != 0;
|
||||
if (j.contains("i0")) i0 = j["i0"].get<int>();
|
||||
if (j.contains("i1")) i1 = j["i1"].get<int>();
|
||||
if (j.contains("i2")) i2 = j["i2"].get<int>();
|
||||
if (j.contains("i3")) i3 = j["i3"].get<int>();
|
||||
if (j.contains("i4")) i4 = j["i4"].get<int>();
|
||||
if (j.contains("i5")) i5 = j["i5"].get<int>();
|
||||
if (j.contains("i6")) i6 = j["i6"].get<int>();
|
||||
if (j.contains("i7")) i7 = j["i7"].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) {
|
||||
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() {
|
||||
try {
|
||||
client.unsubscribe(TOPIC)->wait();
|
||||
|
||||
73
main.cpp
73
main.cpp
@@ -1,21 +1,78 @@
|
||||
#include "main.hpp"
|
||||
#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()
|
||||
{
|
||||
mqtt_open(&client);
|
||||
|
||||
while (1)
|
||||
std::atomic<bool> running{true};
|
||||
|
||||
while (running)
|
||||
{
|
||||
// Début du code
|
||||
// *****************************************************
|
||||
|
||||
// *****************************************************
|
||||
// Fin du code
|
||||
|
||||
mqtt_process(&client);
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
}
|
||||
|
||||
mqtt_close();
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user