Ajout des fonctions de 'sonnette' vers ship2net

This commit is contained in:
2026-10-07 12:07:01 +02:00
parent 7a14254484
commit 56e6cbfd08
6 changed files with 52 additions and 3 deletions
+5 -2
View File
@@ -340,7 +340,7 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG];
} }
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// NOUVEAU : marquage des lignes archivées (remplace l'incrémentation // Marquage des lignes archivées (remplace l'incrémentation
// de No_paquet). Même filtre que celui utilisé pour le dump (donc // de No_paquet). Même filtre que celui utilisé pour le dump (donc
// 'AND Type=0' repris pour TB_Mesures_circuits), pour ne marquer que // 'AND Type=0' repris pour TB_Mesures_circuits), pour ne marquer que
// ce qui vient réellement d'être archivé (cf synthèse §32.4) : // ce qui vient réellement d'être archivé (cf synthèse §32.4) :
@@ -363,7 +363,7 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG];
} }
if (retour_commande != 0) break; if (retour_commande != 0) break;
// NOUVEAU : remise à 'normale' - cette archive vient d'être confirmée transmise avec succès, le signal // Remise à 'normale' de l'origine de la BDD : cette archive vient d'être confirmée transmise avec succès, le signal
// 'factory'/'restauration' n'a donc plus besoin d'être retransmis à la prochaine archive (cf synthèse §35) : // 'factory'/'restauration' n'a donc plus besoin d'être retransmis à la prochaine archive (cf synthèse §35) :
sprintf(requete, "UPDATE TB_Systeme SET Valeur='normale' WHERE Nom='Origine_bdd' "); sprintf(requete, "UPDATE TB_Systeme SET Valeur='normale' WHERE Nom='Origine_bdd' ");
if (mysql_query(bdd.pointeur, requete) != 0) if (mysql_query(bdd.pointeur, requete) != 0)
@@ -410,6 +410,9 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG];
remove(nom_fichier_sauvegarde); remove(nom_fichier_sauvegarde);
sprintf(commande, "%s.%s", nom_fichier_sauvegarde, SUFFIXE_NOM_FICHIER_COMPRESSE_SAUVEGARDE_BDD); sprintf(commande, "%s.%s", nom_fichier_sauvegarde, SUFFIXE_NOM_FICHIER_COMPRESSE_SAUVEGARDE_BDD);
remove(commande); remove(commande);
// Alerte Ship2net :
sonnette_vps("evenement");
} }
affichage_debug(__FILE__, __LINE__, "Fin de sauvegarde de la BDD", TYPE_MESSAGE_DEBUG_PAR_DEFAUT); affichage_debug(__FILE__, __LINE__, "Fin de sauvegarde de la BDD", TYPE_MESSAGE_DEBUG_PAR_DEFAUT);
+6
View File
@@ -350,6 +350,9 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG];
// Enregistrement historique : // Enregistrement historique :
enregistrement_historique(TYPE_SOURCE_HISTORIQUE_EVENTS, EVENT_DECLENCHEMENT, events.events[no_event].cle_primaire, 0, NULL); enregistrement_historique(TYPE_SOURCE_HISTORIQUE_EVENTS, EVENT_DECLENCHEMENT, events.events[no_event].cle_primaire, 0, NULL);
// Alerte Ship2net :
if (events.events[no_event].alarme_email || events.events[no_event].alarme_sms) sonnette_vps("evenement");
declenchement_event(no_event); declenchement_event(no_event);
if (events.events[no_event].conditions_horaires.nb > 0) events.events[no_event].sequenceur.etat = ETAT_SEQUENCEUR_EVENT_REPOS; // S'il y a condition horaire, on revient directement au repos, en attente de la prochaine condition horaire. if (events.events[no_event].conditions_horaires.nb > 0) events.events[no_event].sequenceur.etat = ETAT_SEQUENCEUR_EVENT_REPOS; // S'il y a condition horaire, on revient directement au repos, en attente de la prochaine condition horaire.
@@ -374,6 +377,9 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG];
// Enregistrement historique : // Enregistrement historique :
enregistrement_historique(TYPE_SOURCE_HISTORIQUE_EVENTS, EVENT_FIN_DECLENCHEMENT, events.events[no_event].cle_primaire, 0, NULL); enregistrement_historique(TYPE_SOURCE_HISTORIQUE_EVENTS, EVENT_FIN_DECLENCHEMENT, events.events[no_event].cle_primaire, 0, NULL);
// Alerte Ship2net :
if (events.events[no_event].alarme_email || events.events[no_event].alarme_sms) sonnette_vps("evenement");
events.events[no_event].sequenceur.etat = ETAT_SEQUENCEUR_EVENT_REPOS; // Retour au repos events.events[no_event].sequenceur.etat = ETAT_SEQUENCEUR_EVENT_REPOS; // Retour au repos
} }
+14
View File
@@ -8,6 +8,7 @@
#include "main.h" #include "main.h"
// Prototypes : // Prototypes :
time_t maintenant_monotone(void);
void date_courante(char* chaine, bool flag_ns, int format); void date_courante(char* chaine, bool flag_ns, int format);
int8_t set_date_heure(struct Struct_date date, struct Struct_heure heure); int8_t set_date_heure(struct Struct_date date, struct Struct_heure heure);
void delai_dixieme_sec(uint16_t tempo); void delai_dixieme_sec(uint16_t tempo);
@@ -28,6 +29,19 @@ volatile uint16_t tempo_delai_dixieme_sec;
//**********************************************************************************************************************************************************************************
// Fonction MAINTENANT_MONOTONE
// Renvoie un nombre de secondes insensible aux mises à l'heure
// Reçoit : Rien
// Retour : Valeur en secondes du compteur
//**********************************************************************************************************************************************************************************
time_t maintenant_monotone(void)
{
struct timespec t;
clock_gettime(CLOCK_MONOTONIC, &t);
return t.tv_sec;
}
//********************************************************************************************************************************************************************************** //**********************************************************************************************************************************************************************************
// Fonction DATE_COURANTE // Fonction DATE_COURANTE
+3
View File
@@ -1225,6 +1225,7 @@ struct Struct_systeme
bool flag_new_download; // Positionné à TRUE (par 'modem.c') quand de nouveaux fichiers ont été downloadés du serveur. Permet à 'systeme.c' de lancer l'analyse de ces fichiers. bool flag_new_download; // Positionné à TRUE (par 'modem.c') quand de nouveaux fichiers ont été downloadés du serveur. Permet à 'systeme.c' de lancer l'analyse de ces fichiers.
uint16_t compteur_sauvegarde_bdd; // En secondes uint16_t compteur_sauvegarde_bdd; // En secondes
uint16_t compteur_check_new_download; // En secondes uint16_t compteur_check_new_download; // En secondes
time_t instant_derniere_sonnette;
char cm3p_soft_version[MAX_TAILLE_VERSION_SOFT]; // Contient la version de soft de l'application char cm3p_soft_version[MAX_TAILLE_VERSION_SOFT]; // Contient la version de soft de l'application
char package_version[MAX_TAILLE_VERSION_SOFT]; // Contient la version de package sous la forme 'AAMMJJ_HHMMSS' char package_version[MAX_TAILLE_VERSION_SOFT]; // Contient la version de package sous la forme 'AAMMJJ_HHMMSS'
char package_no_version[MAX_TAILLE_VERSION_SOFT]; // Contient le numéro de la version du package. Par exemple : "1.0.7" char package_no_version[MAX_TAILLE_VERSION_SOFT]; // Contient le numéro de la version du package. Par exemple : "1.0.7"
@@ -1410,6 +1411,7 @@ extern int8_t init_events(void);
extern void gestion_events(void); extern void gestion_events(void);
// Fonctions.c // Fonctions.c
extern time_t maintenant_monotone(void);
extern void date_courante(char* chaine, bool flag_ns, int format); extern void date_courante(char* chaine, bool flag_ns, int format);
extern int8_t set_date_heure(struct Struct_date date, struct Struct_heure heure); extern int8_t set_date_heure(struct Struct_date date, struct Struct_heure heure);
extern void delai_dixieme_sec(uint16_t tempo); extern void delai_dixieme_sec(uint16_t tempo);
@@ -1504,6 +1506,7 @@ extern struct Struct_json_version parse_json_version(char * nom_fichier, bool ve
extern int8_t send_signal (int32_t pid, int32_t signal); extern int8_t send_signal (int32_t pid, int32_t signal);
extern int32_t get_pid_from_name (char * nom, char * parametres); extern int32_t get_pid_from_name (char * nom, char * parametres);
extern int32_t get_pid_numbers_from_name (char * nom, char * parametres); extern int32_t get_pid_numbers_from_name (char * nom, char * parametres);
extern void sonnette_vps(const char *motif);
// Usb.c // Usb.c
extern int8_t init_usb(void); extern int8_t init_usb(void);
+22
View File
@@ -29,6 +29,7 @@ int32_t get_pid_from_name (char * nom, char * parametres);
int32_t get_pid_numbers_from_name (char * nom, char * parametres); int32_t get_pid_numbers_from_name (char * nom, char * parametres);
int8_t version_compute_module(void); int8_t version_compute_module(void);
void affichage_ligne_version_compute_module(char * tmp, char * titre, char * valeur); void affichage_ligne_version_compute_module(char * tmp, char * titre, char * valeur);
void sonnette_vps(const char *motif);
// Variables globales : // Variables globales :
@@ -435,6 +436,14 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG];
} }
} }
//=============================================
// Envoi des heartbeats au VPS pour Ship2net :
if (systeme.generation_shipbase >= GENERATION_SHIPBASE_V3)
{
if ((maintenant_monotone() - systeme.instant_derniere_sonnette) >= SYSTEME_PERIODE_HEARTBEAT_SHIP2NET) sonnette_vps("vie");
}
//================================== //==================================
// Sauvegarde régulière de la BDD : // Sauvegarde régulière de la BDD :
if (systeme.compteur_sauvegarde_bdd == 0) if (systeme.compteur_sauvegarde_bdd == 0)
@@ -2182,3 +2191,16 @@ char chaine[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG];
strcat(tmp, chaine); strcat(tmp, chaine);
} }
//==================================================================================================================================================================
// Fonction : Lance la sonnette en arrière-plan : l'Appli n'attend jamais le réseau.
// Reçoit : Le motif à encapsuler dans le message de la sonnette
// Renvoit : Rien
//==================================================================================================================================================================
void sonnette_vps(const char *motif)
{
char commande[96];
snprintf(commande, sizeof(commande), "/usr/local/bin/sonnette_vps %s >/dev/null 2>&1 &", motif);
if (system(commande) == -1) { /* rien : le battement suivant ou le retour du réseau sonnera */ }
systeme.instant_derniere_sonnette = maintenant_monotone();
}
+1
View File
@@ -50,6 +50,7 @@
#define SYSTEME_TIME_OUT_LECTURE_ID_CARTES 10 // En x 100ms SDIR #304 #define SYSTEME_TIME_OUT_LECTURE_ID_CARTES 10 // En x 100ms SDIR #304
#define SYSTEME_TIME_OUT_ANNUAIRE_ONE_WIRE 5 // En x 100ms #define SYSTEME_TIME_OUT_ANNUAIRE_ONE_WIRE 5 // En x 100ms
#define SYSTEME_TEMPO_ATTENTE_CONFIG_CARTES 30 // En x 10ms NB : tempo non critique car permet juste d'éviter de recevoir des commandes UP sur des cartes non configurées (donc générant des retours d'erreur vers le Compagnon). NB : les commandes UP génériques ET avec Haute Priorité passent quand même pendant ce temps... #define SYSTEME_TEMPO_ATTENTE_CONFIG_CARTES 30 // En x 10ms NB : tempo non critique car permet juste d'éviter de recevoir des commandes UP sur des cartes non configurées (donc générant des retours d'erreur vers le Compagnon). NB : les commandes UP génériques ET avec Haute Priorité passent quand même pendant ce temps...
#define SYSTEME_PERIODE_HEARTBEAT_SHIP2NET 600 // En secondes Le VPS déclare le bateau injoignable au-delà de 720 s sans signal
#define SYSTEME_ATTENTE_DEMARRAGE_COMPTEUR_BOUCLE_PRINCIPALE 5 // en secondes. Défini l'attente avant prise en compte des mesures de nb de boucles principales #define SYSTEME_ATTENTE_DEMARRAGE_COMPTEUR_BOUCLE_PRINCIPALE 5 // en secondes. Défini l'attente avant prise en compte des mesures de nb de boucles principales
#define SYSTEME_ATTENTE_BOUCLE_PRINCIPALE_TEMPO 1000 // en nanosecondes théoriquement... Cf ci-dessous #define SYSTEME_ATTENTE_BOUCLE_PRINCIPALE_TEMPO 1000 // en nanosecondes théoriquement... Cf ci-dessous
// Mesures effectuées le 28/04/2018, le 02/09/2020 et le 26/03/2021 sur CM3+ pour ShipHeart : // Mesures effectuées le 28/04/2018, le 02/09/2020 et le 26/03/2021 sur CM3+ pour ShipHeart :