Ajout des fonctions de 'sonnette' vers ship2net
This commit is contained in:
+6
-3
@@ -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)
|
||||||
@@ -373,7 +373,7 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG];
|
|||||||
retour_commande = -1;
|
retour_commande = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
} while(0);
|
} while(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);
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -373,6 +376,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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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 :
|
||||||
@@ -434,6 +435,14 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG];
|
|||||||
affichage_debug(__FILE__, __LINE__, "L'entrée Compagnon_Ready est passée à OFF", TYPE_MESSAGE_DEBUG_ERREUR);
|
affichage_debug(__FILE__, __LINE__, "L'entrée Compagnon_Ready est passée à OFF", TYPE_MESSAGE_DEBUG_ERREUR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=============================================
|
||||||
|
// 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 :
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
@@ -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 :
|
||||||
|
|||||||
Reference in New Issue
Block a user