Files

249 lines
20 KiB
C

/**********************************************************************************************************************************************************************************
Fichier GESTION_BDD.H
Contient toutes les définitions liées à la gestion de la BDD
**********************************************************************************************************************************************************************************/
// Maximums :
#define MAX_LONGUEUR_REQUETE_MYSQL 3500
#define MAX_LONGUEUR_SOUS_REQUETE_MYSQL 1000
#define MAX_NOMBRE_CHAMPS_INTERNES 300 // Utilisé pour dimensionner les tableaux de pointeurs de décodage (exemple : champs 'Entrees' des Réservoirs, Batteries ou Capteurs)
#define MAX_LONGUEUR_NOM_FICHIER_SAUVEGARDE_BDD 150
#define MAX_LONGUEUR_OPTION_COMMANDE_SAUVEGARDE_BDD 300
#define MAX_LONGUEUR_NOM_TABLE 50
#define MAX_NOMBRE_TABLES_FRAGMENTEES 20
#define MAX_LONGUEUR_NOM_CHAMP_BDD 80
// Valeurs fonctionnelles :
#define MAX_TENTATIVES_CONNEXION_BDD 30 // Au démarrage, la connexion à la BDD sera tentée autant de fois, avec une attente de 1s entre chaque essais (permet à tous les services d'être prêts au démarrage)
#define PERIODE_CHECK_SYNCHRO_WEB 10 // x 10ms
#define PERIODE_MAJ_BDD 10 // x 100ms
#define PERIODE_ENREGISTREMENT_MESURES 150 // x 100ms
// Types d'init de la BDD :
#define BDD_MODE_INIT_RESET 0 // Au démarrage après reset
#define BDD_MODE_INIT_RELOAD 1 // Uniquement un rechargement des paramètres de config sur un système déjà démarré
// Types d'enrehistrement de mesures :
#define BDD_ENREGISTREMENT_MESURE_INIT 0 // Au démarrage après reset. Les valeurs enregistrées sont toutes à NULL avec date de dernier Heart-Beat connu
#define BDD_ENREGISTREMENT_MESURE_NORMAL 1 // Enregistrement normal (date en cours et valeur courante)
#define BDD_ENREGISTREMENT_MESURE_PONCTUEL 2 // Enregistrement d'une valeur poctuelle (notamment capteur configuré en mode MODE_ENREGISTREMENT_MESURES_CHANGEMENT_ETAT)
// Types de demandes de mise à jour dans la BDD :
#define BDD_TYPE_MAJ_AUCUNE 0
#define BDD_TYPE_MAJ_COURANTE 1
#define BDD_TYPE_MAJ_CONFIG 2
// Typde d'erreur K-Bus :
#define DEFAUT_K_BUS_AUCUN 0
#define DEFAUT_K_BUS_MINEUR 1
#define DEFAUT_K_BUS_MAJEUR 2
// Types d'archivage :
// Nb : les valeurs 0 et 1 étaient historiqueemnt utilisées et on n'a pas tout redécalé pour des raisons de simplicité...
// D'autant que la valeur 0 est particulière pour les enregistrments de TB_Mesures_circuits...
#define BDD_TYPE_ARCHIVAGE_1_HEURE 2 // L'archivage exécutera d'abord un Type 3 (5 minutes) puis un Type 2 (1h) dans la foulée
#define BDD_TYPE_ARCHIVAGE_5_MINUTES 3 // Uniquement un Type 3
#define BDD_TYPE_ARCHIVAGE_PURGE_SEULE 10
#define BDD_TYPE_ARCHIVAGE_1_HEURE_ET_PURGE 12 // L'archivage exécutera d'abord un Type 3 (5 minutes) puis un Type 2 (1h) dans la foulée puis une purge [ce type d'appel est déconseillé car il cumule les 3 traitements !]
#define BDD_TYPE_ARCHIVAGE_5_MINUTES_ET_PURGE 13 // L'archivage exécutera d'abord un Type 3 (5 minutes) puis une purge dans la foulée
// Modes enregistrement des mesures
#define MODE_ENREGISTREMENT_MESURES_AUCUN 0 // Aucun enregistrement de mesures
#define MODE_ENREGISTREMENT_MESURES_PERIODIQUE 1 // Enregistrement des mesures périodique avec intégration sur la période et création de nouvelles mesures uniquement lorsque le seuil de marge est dépassé
#define MODE_ENREGISTREMENT_MESURES_CHANGEMENT_ETAT 2 // Enregistrement d'une mesure sans cumul, chaque fois que le seuil de marge est dépassé
// Modes enregistrement de l'historique
#define MODE_ENREGISTREMENT_HISTORIQUE_AUCUN 0 // Les changements d'état ne sont pas enregistrés dans l'historique
#define MODE_ENREGISTREMENT_HISTORIQUE_NORMAL 1 // Les changements d'état dont enregistrés dans l'historique
// Type mesure :
#define SOURCE_MESURE_CIRCUIT 1
#define SOURCE_MESURE_CAPTEUR 2
#define SOURCE_MESURE_RESERVOIR 3
#define SOURCE_MESURE_BATTERIE 4
// Etat fichier download:
#define ETAT_FICHIER_DOWNLOAD_LISTE 0
#define ETAT_FICHIER_DOWNLOAD_TELECHARGE 1
#define ETAT_FICHIER_DOWNLOAD_VERIFIE 2
#define ETAT_FICHIER_DOWNLOAD_UPLOADE_COMPAGNON 3
#define ETAT_FICHIER_DOWNLOAD_UPLOADE_EXTENSION 4
#define ETAT_FICHIER_DOWNLOAD_INSTALLE_EXECUTE 5
#define ETAT_FICHIER_DOWNLOAD_ARCHIVE 6
#define ETAT_FICHIER_DOWNLOAD_EFFACE 7
// Codes prédéfinis de messages aux users :
#define MESSAGE_USERS_CODE_AUCUN 0
#define MESSAGE_USERS_CODE_FIN_MINUTEUR 1 // Paramètres = 'compteur_initial' au format 'hh:mm:ss'
#define MESSAGE_USERS_CODE_REVEIL 2 // Paramètres = 'condition_horaire' au format '[jour_semaine] @ [hh:mm]'
#define MESSAGE_USERS_CODE_MAJ_EN_COURS 3 // Paramètres = 'id_module';'avancement_en_%' (id_module: -1=démarrage, 0-N=Id_module en cours, -2=fin)
#define MESSAGE_USERS_CODE_REDEMARRAGE 4 // Paramètres = 'temps_restant' en ms ou rien
#define MESSAGE_USERS_CODE_NOUVELLE_VERSION_DETECTEE 5 // Paramètres = 'ancienne version';'nouvelle version'
#define MESSAGE_USERS_CODE_DEFAUT_CONFIG_K_BUS 6 // Paramètres = 'adresse_k_bus du premier module Nok';'Type_module_physique à cette adresse (yc -1 pour type inconnu)';'Type module configuré'.
// Il peut donc y avoir : - Physique inconnu (pas de module physique à cette adresse) + config d'un type connu => vérifier K-bus entre module (@Adr-1) et module (@Adr)
// - Physique connu + config d'un autre type ==> Il est probable qu'un/des modules aient été ajoutés/enlevés/déplacés ==> Aller dans config-K-Bus
#define MESSAGE_USERS_CODE_DECLENCHEMENT_EVENT 7 // Paramètres = 'id_event'
// Etat du message users :
#define MESSAGE_USERS_ETAT_SUPPRESSION -1
#define MESSAGE_USERS_ETAT_INFO 0
#define MESSAGE_USERS_ETAT_ALERTE 1
#define MESSAGE_USERS_ETAT_URGENT 2
// Historique :
// Valeur principale (Système, Circuits, Capteurs, ... ne sert qu'à router sur la bonne table : TB_Historique_systeme, TB_Historique_circuits, etc...)
// Event en uint8_t (valeur par défaut = 0)
// ID en int (cle primaire de l'élément concerné)
// Valeur en int (valeur par défaut = 0)
// Complément en texte
//-------------------------------------------------------------
#define TYPE_SOURCE_HISTORIQUE_SYSTEME 0
#define SYSTEME_REINIT 1 // Réinitialisation de l'application
#define SYSTEME_ERREUR_MYSQL 2
#define SYSTEME_CONNEXION_USER 3
#define SYSTEME_REBOOT 4 // Reboot du système
#define SYSTEME_ARRET 5
#define SYSTEME_TIME_OUT_CONNEXION 6
#define SYSTEME_DECONNEXION_USER 7
#define SYSTEME_CONFIGURATION_INVALIDE_DEMARRAGE_IMPOSSIBLE 8
#define SYSTEME_SIGNAL_RECU 9 // La valeur du signal reçu est stocké dans Valeur
#define SYSTEME_DEMANDE_REINIT 10
#define SYSTEME_CHANGEMENT_VEILLE 11 // La nouvelle valeur de 'veille' est stockée dans Valeur
#define SYSTEME_ERREUR_SAUVEGARDE_BDD 12 // Le message d'info sur l'erreur est stocké dans le complément.
#define SYSTEME_MODEM_DEMANDE_ACTIVATION 20 // La Valeur indique dans quel sens (On ou Off)
#define SYSTEME_MODEM_CHANGEMENT_ETAT 21 // La Valeur indique dans quel sens (On ou Off)
#define SYSTEME_MODEM_ERREUR_CHANGEMENT_ETAT 22 // La Valeur indique dans quel sens (On ou Off) le changement était demandé et a échoué
#define SYSTEME_MODEM_ERREUR_ETABLISSEMENT_LIAISON 23
#define SYSTEME_MODEM_CHANGEMENT_ETAT_NON_SOLLICITE 24 // La Valeur indique dans quel sens (On ou Off) le modem se trouve alors qu'il ne devrait pas
#define SYSTEME_MODEM_CHANGEMENT_REVISION_FIRMWARE 25 // La valeur de révision est stockée dans Complément
#define SYSTEME_MODEM_CHANGEMENT_IMEI 26 // Le n° est stocké dans Complément
#define SYSTEME_MODEM_CHANGEMENT_IMSI 27 // Le n° est stocké dans Complément
#define SYSTEME_MODEM_CHANGEMENT_ICCID 28 // Le n° est stocké dans Complément
#define SYSTEME_MODEM_CHANGEMENT_NO_TELEPHONE 29 // Le n° est stocké dans Complément
#define SYSTEME_MODEM_CHANGEMENT_APN 30 // Le n° est stocké dans Complément
#define SYSTEME_MODEM_ERREUR_FTP 31 // Le code d'erreur reçu du modem est stocké dans Valeur et la réponse complète du modem dans Complement
#define SYSTEME_MODEM_ERREUR_GNSS 32 // Le cycle d'acquisition n'a pas pu être réalisé complètement. Le nombre de cycles valides est indiqué dans Valeur.
#define SYSTEME_MODEM_ERREUR_M_BUS_PLEIN 33 // Le nombre de refus de nouvelle commande dans le buffer de commandes est trop important. Le nb de refus consécutifs est dans Valeur
#define SYSTEME_MODEM_PERTE_LIAISON_4G_LTE 34
#define SYSTEME_MODEM_ETABLISSEMENT_LIAISON_4G_LTE 35
#define SYSTEME_MODULES_NOUVEAU_MODULE 40 // L'adresse K-Bus où est apparu le module est dans 'id'. Le Type de module est dans Valeur. L'adresse MAC est dans Complément
#define SYSTEME_MODULES_SUPPRESSION_MODULE 41 // L'adresse K-Bus où était le module est dans 'id'. Le Type de module est dans Valeur. L'adresse MAC est dans Complément
#define SYSTEME_FTP_UPLOAD_FICHIER_DEBUT_OK 50 // Le nom du fichier source et du fichier destination sont stockés dans complément. La taille dans valeur
#define SYSTEME_FTP_UPLOAD_FICHIER_DEBUT_NOK 51 // Le nom du fichier source et du fichier destination sont stockés dans complément. La taille dans valeur
#define SYSTEME_FTP_UPLOAD_FICHIER_FIN_OK 52 // Le nom du fichier source et du fichier destination sont stockés dans complément. La taille dans valeur
#define SYSTEME_FTP_UPLOAD_FICHIER_FIN_NOK 53 // Le nom du fichier source et du fichier destination sont stockés dans complément
#define SYSTEME_FTP_DOWNLOAD_FICHIER_DEBUT_OK 60 // Le nom du fichier source et du fichier destination sont stockés dans complément.
#define SYSTEME_FTP_DOWNLOAD_FICHIER_DEBUT_NOK 61 // Le nom du fichier source et du fichier destination sont stockés dans complément. La taille dans valeur
#define SYSTEME_FTP_DOWNLOAD_FICHIER_FIN_OK 62 // Le nom du fichier source et du fichier destination sont stockés dans complément.
#define SYSTEME_FTP_DOWNLOAD_FICHIER_FIN_NOK 63 // Le nom du fichier source et du fichier destination sont stockés dans complément. La taille dans valeur
#define SYSTEME_FTP_DOWNLOAD_LIST_NOK 64 // Le nom du fichier de LIST est stocké dans complément.
#define SYSTEME_FTP_DOWNLOAD_NOMBRE_FICHIERS_LOCAUX_TROP_ELEVE 65 // Le nombre maxi admissible est stocké dans Valeur
#define SYSTEME_FTP_DOWNLOAD_NOMBRE_FICHIERS_SERVEUR_TROP_ELEVE 66 // Le nombre maxi admissible est stocké dans Valeur
#define SYSTEME_EXECUTION_BASH_DEBUT_OK 70 // Le nom du fichier utilisé pour l'upload est dans le complément.
#define SYSTEME_EXECUTION_BASH_DEBUT_NOK 71 // Le nom du fichier utilisé pour l'upload est dans le complément.
#define SYSTEME_EXECUTION_BASH_FIN_OK 72 // Le nom du fichier utilisé pour l'upload est dans le complément.
#define SYSTEME_EXECUTION_BASH_FIN_NOK 73 // Le nom du fichier utilisé pour l'upload est dans le complément.
#define SYSTEME_COPIE_ARCHIVE_A_VALIDER_OK 74 // Le nom du fichier est dans le complément.
#define SYSTEME_COPIE_ARCHIVE_A_VALIDER_NOK 75 // Le nom du fichier est dans le complément.
#define SYSTEME_COPIE_ARCHIVE_A_CHARGER_OK 76 // Le nom du fichier est dans le complément.
#define SYSTEME_COPIE_ARCHIVE_A_CHARGER_NOK 77 // Le nom du fichier est dans le complément.
#define SYSTEME_CHARGEMENT_CODE_DEBUT_OK 80 // Le nom du fichier utilisé pour l'upload est dans le complément. Le n° de la carte dans ID
#define SYSTEME_CHARGEMENT_CODE_DEBUT_NOK 81 // Le nom du fichier utilisé pour l'upload est dans le complément. Le n° de la carte dans ID
#define SYSTEME_CHARGEMENT_CODE_ERASE_FLASH_NOK 82 // Le nom du fichier utilisé pour l'upload est dans le complément. Le n° de la carte dans ID
#define SYSTEME_CHARGEMENT_CODE_ECRITURE_FLASH_NOK 83 // Le nom du fichier utilisé pour l'upload est dans le complément. Le n° de la carte dans ID
#define SYSTEME_CHARGEMENT_CODE_CRC_FLASH_NOK 84 // Le nom du fichier utilisé pour l'upload est dans le complément. Le n° de la carte dans ID
#define SYSTEME_CHARGEMENT_CODE_FIN_OK 85 // Le nom du fichier utilisé pour l'upload est dans le complément. Le n° de la carte dans ID
#define SYSTEME_CHARGEMENT_CODE_FIN_NOK 86 // Le nom du fichier utilisé pour l'upload est dans le complément. Le n° de la carte dans ID
#define SYSTEME_UART_BUFFER_RX_PLEIN 100 // Valeur précise quel UART
#define SYSTEME_BUS_BUFFER_COMMANDES_PLEIN 101 // Valeur précise quel bus ('M' ou 'C')
#define SYSTEME_BACKLIGHT_CHANGEMENT_CONSIGNE 110 // La valeur indique la nouvelle consigne
#define SYSTEME_VOLUME_CHANGEMENT_CONSIGNE 111 // La valeur indique la nouvelle consigne
#define SYSTEME_LEDS_CHANGEMENT_CONSIGNE 112 // La valeur indique la nouvelle consigne
#define SYSTEME_WIFI_MISE_A_JOUR_CONFIG 130 // Les informations sur la nouvelle config sont stockées dans Complément
//-------------------------------------------------------------
#define TYPE_SOURCE_HISTORIQUE_CIRCUITS 1
#define CIRCUIT_CHANGEMENT_CONSIGNE 1 // La nouvelle valeur de consigne est stockée dans Valeur. De plus, Complément comprend 'origine_consigne/id_origine_consigne'.
#define CIRCUIT_OK 10 // La valeur de limitation (en mA) est stockée dans Valeur
#define CIRCUIT_LIMITATION 11 // La valeur de limitation (en mA) est stockée dans Valeur
#define CIRCUIT_PROTECTION 12 // La valeur de limitation (en mA) est stockée dans Valeur
#define CIRCUIT_DISJONCTE 13 // La valeur de limitation (en mA) est stockée dans Valeur
#define CIRCUIT_CC_BATTERIE 14 // La valeur de limitation (en mA) est stockée dans Valeur
#define CIRCUIT_DELESTAGE 15 // La valeur de limitation (en mA) est stockée dans Valeur
#define CIRCUIT_CREATION 20
#define CIRCUIT_MODIFICATION 21
#define CIRCUIT_SUPPRESSION 22
#define CIRCUIT_CONFIGURATION_INVALIDE 30 // L'ID précise la clé primaire. Valeur contient l'ID_Carte actuellement configuré
#define CIRCUIT_EXPIRATION_TIME_OUT 40 // La valeur initiale du time-out est stockée dans Valeur
#define CIRCUIT_ACTION_EVENT 50 // L'ID précise la clé primaire. Valeur contient la clé_primaire de l'event qui a déclenché l'action sur le circuit
//-------------------------------------------------------------
#define TYPE_SOURCE_HISTORIQUE_CAPTEURS 2
#define CAPTEUR_PASSAGE_OK 1 // L'ID précise la clé primaire. VAleur contient la valeur du capteur au moment du changement
#define CAPTEUR_PASSAGE_ALERTE 2 // L'ID précise la clé primaire. VAleur contient la valeur du capteur au moment du changement
#define CAPTEUR_PASSAGE_ALARME 3 // L'ID précise la clé primaire. VAleur contient la valeur du capteur au moment du changement
#define CAPTEUR_OW_DEVICE_OK 40 // L'ID précise la clé primaire. Complément contient le Rom_code du device One_wire
#define CAPTEUR_OW_DEVICE_NOK 41 // L'ID précise la clé primaire. Complément contient le Rom_code du device One_wire
#define CAPTEUR_OW_BUS_NOK 42 // L'ID précise la clé primaire. Complément contient le Rom_code du device One_wire
//-------------------------------------------------------------
#define TYPE_SOURCE_HISTORIQUE_RESERVOIRS 3
#define RESERVOIR_PASSAGE_NIVEAU_NORMAL 1 // L'ID précise le Réservoir. La valeur indique l'ancien état
#define RESERVOIR_PASSAGE_NIVEAU_ALERTE 2 // L'ID précise le Réservoir. La valeur indique l'ancien état
#define RESERVOIR_PASSAGE_NIVEAU_ALARME 3 // L'ID précise le Réservoir. La valeur indique l'ancien état
//-------------------------------------------------------------
#define TYPE_SOURCE_HISTORIQUE_BATTERIES 4
#define BATTERIE_ALARME_TEMPERATURE (BATTERIE_VARIABLE_TEMPERATURE + 1) // L'ID précise la batterie. La valeur indique l'état : 0=Ok, 1=Défaut seuil bas, 2=Défaut seuil haut, 3=Défaut seuil haut ET seuil bas, 99=Défaut calcul ou capteur (état inconnu)
#define BATTERIE_ALARME_TENSION (BATTERIE_VARIABLE_TENSION + 1) // L'ID précise la batterie. La valeur indique l'état : 0=Ok, 1=Défaut seuil bas, 2=Défaut seuil haut, 3=Défaut seuil haut ET seuil bas, 99=Défaut calcul ou capteur (état inconnu)
#define BATTERIE_ALARME_COURANT_DIFFERENTIEL (BATTERIE_VARIABLE_COURANT_DIFFERENTIEL + 1) // L'ID précise la batterie. La valeur indique l'état : 0=Ok, 1=Défaut seuil bas, 2=Défaut seuil haut, 3=Défaut seuil haut ET seuil bas, 99=Défaut calcul ou capteur (état inconnu)
#define BATTERIE_ALARME_COURANT_CHARGE (BATTERIE_VARIABLE_COURANT_CHARGE + 1) // L'ID précise la batterie. La valeur indique l'état : 0=Ok, 1=Défaut seuil bas, 2=Défaut seuil haut, 3=Défaut seuil haut ET seuil bas, 99=Défaut calcul ou capteur (état inconnu)
#define BATTERIE_ALARME_COURANT_DECHARGE (BATTERIE_VARIABLE_COURANT_DECHARGE + 1) // L'ID précise la batterie. La valeur indique l'état : 0=Ok, 1=Défaut seuil bas, 2=Défaut seuil haut, 3=Défaut seuil haut ET seuil bas, 99=Défaut calcul ou capteur (état inconnu)
#define BATTERIE_ALARME_SOH (BATTERIE_VARIABLE_SOH + 1) // L'ID précise la batterie. La valeur indique l'état : 0=Ok, 1=Défaut seuil bas, 2=Défaut seuil haut, 3=Défaut seuil haut ET seuil bas, 99=Défaut calcul ou capteur (état inconnu)
#define BATTERIE_ALARME_SOC (BATTERIE_VARIABLE_SOC + 1) // L'ID précise la batterie. La valeur indique l'état : 0=Ok, 1=Défaut seuil bas, 2=Défaut seuil haut, 3=Défaut seuil haut ET seuil bas, 99=Défaut calcul ou capteur (état inconnu)
#define BATTERIE_ALARME_AUTONOMIE (BATTERIE_VARIABLE_AUTONOMIE + 1) // L'ID précise la batterie. La valeur indique l'état : 0=Ok, 1=Défaut seuil bas, 2=Défaut seuil haut, 3=Défaut seuil haut ET seuil bas, 99=Défaut calcul ou capteur (état inconnu)
#define BATTERIE_ALARME_PUISSANCE (BATTERIE_VARIABLE_PUISSANCE + 1) // L'ID précise la batterie. La valeur indique l'état : 0=Ok, 1=Défaut seuil bas, 2=Défaut seuil haut, 3=Défaut seuil haut ET seuil bas, 99=Défaut calcul ou capteur (état inconnu)
#define BATTERIE_RX_CDE_FORCAGE_PLEINE_CHARGE 11 // L'ID précise la batterie.
#define BATTERIE_RX_CDE_RESET_SOH 12 // L'ID précise la batterie.
#define BATTERIE_RX_CDE_RESET_COMPTEURS 13 // L'ID précise la batterie.
//-------------------------------------------------------------
#define TYPE_SOURCE_HISTORIQUE_USB 5
#define USB_CHANGEMENT_CONSIGNE 1 // La valeur indique le nouvel état. L'ID contient le n° du port (1 pour ports Avant ou 4 pour port Arrière)
#define USB_PASSAGE_OK 10 // L'ID contient le n° du port (1 à 3 ou 4 pour arrière)
#define USB_PASSAGE_DEFAUT 11 // L'ID contient le n° du port (1 à 3 ou 4 pour arrière)
//-------------------------------------------------------------
#define TYPE_SOURCE_HISTORIQUE_EVENTS 6
#define EVENT_DECLENCHEMENT 1 // L'ID contient la cle_primaire de l'event