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; \
|
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
|
||||||
|
|
||||||
|
|||||||
@@ -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++
|
||||||
)
|
)
|
||||||
|
|||||||
97
autom.cpp
97
autom.cpp
@@ -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,27 +94,36 @@ 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();
|
||||||
|
|||||||
73
main.cpp
73
main.cpp
@@ -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;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user