• [^] # Re: reflexion de base

    Posté par . En réponse au message Fichier python pour lecture Arduino. Évalué à 3.

    meaculpa, j'utilise les Variables au lieu des Valeurs dans les cases (pour remplacer les multiples if).

    avec ce code, ca doit compiler,
    j'ai modifié la partie BPSO pour faire directement le lancement du script python

    et toujours, pour l'instant, sans faire les alarmes SMS/mail

    #include "RCSwitch.h"
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <unistd.h>
    #include <time.h>
    RCSwitch mySwitch;
    //int main(int argc, char *argv[]) {
    int main() {
     int PIN = 5;
     int radio_code = 0;
     int old_BL = 0;
     int new_BL = 0;
     char old_str[10] ;
     const char * sensor_loc ;
     const char * sensor_type ;
     // log
     struct tm * timeinfo;
     char timestamp_str[20] ;
     char localtime_s[20] ;
     char evnt_str[50] ;
     // capteurs BL
     int BL_plein = 5592332 ;
     int BL_vide = 5592323 ;
     // capteurs DI
     int DI0 = 1381717 ;
     int DI1 = 7673173 ;
     // capteurs Sonnette
     int BPSO = 13487999 ;
     // les fichiers
     FILE *file_BL;
     FILE *file_ALARM;
     FILE *file_SMS;
     FILE *file_TEST;
     FILE *file_DI;
     FILE *file_SO;
     // taille de file_ALARM
     //int file_ALARM_size = 0;
     int file_ALARM_size;
     int file_DI_size;
     int file_SO_size;
     // nanosleep
     struct timespec delay;
     delay.tv_sec =0 ;
    // delay.tv_nsec = 100000000L; // tts les 1/10 sec (10/s)
    // delay.tv_nsec = 200000000L; // tts les 1/5 sec (5/s)
    // delay.tv_nsec = 250000000L; // tts les 1/4 sec (4/s)
     delay.tv_nsec = 330000000L; // tts les 1/3 sec (3/s)
    // delay.tv_nsec = 500000000L; // tts les 1/2 sec (2/s)
    // delay.tv_nsec = 1000000000L; // tts les 1 sec (1/s)
     if(wiringPiSetup() == -1) {
     if((file_TEST = fopen("/home/www/logs/RADIO_TEST.log", "a+")) != NULL) {// Ecrire erreur dans le log
     time_t now;
     time(&now);
     strftime(timestamp_str, 80, "%d/%m/%y %H:%M:%S", localtime (&now)); // mef horodatage --> timestamp_str
     sprintf(evnt_str,"%s : Erreur de lancement \n", timestamp_str); // prep ligne --> evnt_str
     fputs(evnt_str, file_TEST);
     fclose(file_TEST);
     }
     exit(9);
     }
     mySwitch = RCSwitch();
     mySwitch.enableReceive(PIN);
     // lecture de l'etat initial de la boite aux lettres
     if((file_BL = fopen("/home/www/logs/BL-state.txt", "r")) != NULL) {
     fgets( old_str,10, file_BL );
     if (strstr(old_str,"PLEIN")!=NULL) {
     old_BL=BL_plein;
     }
     if (strstr(old_str,"VIDE")!=NULL) {
     old_BL=BL_vide;
     }
     fclose(file_BL);
     if((file_TEST = fopen("/home/www/logs/RADIO_TEST.log", "a+")) != NULL) {// Ecriture dans le fichier de log
     time_t now;
     time(&now);
     strftime(timestamp_str, 80, "%d/%m/%y %H:%M:%S", localtime (&now)); // mef horodatage --> timestamp_str
     sprintf(evnt_str,"%s : Etat initial BL : %d \n", timestamp_str, old_BL); // prep ligne --> evnt_str
     fputs(evnt_str, file_TEST);
     fclose(file_TEST);
     } // Fin ecriture dans fichier de log
     }
     else {// echec de l'ouverture du fichier BL-state.txt
     if((file_TEST = fopen("/home/www/logs/RADIO_TEST.log", "a+")) != NULL) {// Ecriture dans le fichier de log
     time_t now;
     time(&now);
     strftime(timestamp_str, 80, "%d/%m/%y %H:%M:%S", localtime (&now)); // mef horodatage --> timestamp_str
     sprintf(evnt_str,"%s : Erreur lecture etat initial BL \n", timestamp_str); // prep ligne --> evnt_str
     fputs(evnt_str, file_TEST);
     fclose(file_TEST);
     } // Fin ecriture dans fichier de log
     exit(9);// On quitte avec un code 9
     } // Fin de la lecture de l'etat initial de la boite aux lettres
    /* ICI Commence la boucle d'attente et de traitement */
     while(true) {
     if (mySwitch.available()) {
     radio_code = mySwitch.getReceivedValue();
     if (radio_code != 0) { // on a recu un code
     if((file_TEST = fopen("/home/www/logs/RADIO_TEST.log", "a+")) != NULL) {//Ecriture dans les logs
     time_t now;
     time(&now);
     strftime(timestamp_str, 80, "%d/%m/%y %H:%M:%S", localtime (&now)); // mef horodatage --> timestamp_str
     sprintf(evnt_str,"%s : Code radio %d \n", timestamp_str, radio_code); // prep ligne --> evnt_str
     fputs(evnt_str, file_TEST);
     fclose(file_TEST);
     }// Fin ecriture dans les logs
     // Occupons nous du message radio
     switch(radio_code){ // on cherche a quel message et quel emplacement correspond le code recu
     case 5592332 : // BL_Plein
     if((file_BL = fopen("/home/www/logs/BL-state.txt", "r+")) != NULL) {
     fputs("PLEIN", file_BL);
     old_BL=radio_code;
     fclose(file_BL);
     }
     break;
     case 5592323 : // BL_vide 
     if((file_BL = fopen("/home/www/logs/BL-state.txt", "r+")) != NULL) {
     fputs("VIDE ", file_BL);
     old_BL=radio_code;
     fclose(file_BL);
     }
     break;
     case 13487999 : // BPSO - Sonnette
     // Envoie de mail avec gmail.pi
     system("python /home/www/py/gmail.py");
     break;
     case 1381717 : // DI0 : detection incendie RDC
     if((file_DI = fopen("/home/www/logs/DI-state.txt", "w")) != NULL) {
     fputs("Feu RdeCh", file_DI);
     sensor_loc="Incendie RdC";
     sensor_type="detecteur";
     fclose(file_DI);
     }
     break;
     case 7673173 : //DI1 : detection incendie Etage
     if((file_DI = fopen("/home/www/logs/DI-state.txt", "w")) != NULL) {
     fputs("Feu Etage", file_DI);
     sensor_loc="Incendie Etage";
     sensor_type="detecteur";
     fclose(file_DI);
     }
     break;
     case 5592320 :
     sensor_loc="Garage";
     sensor_type="contact";
     break;
     case 5592404 :
     sensor_loc="Salon";
     sensor_type="radar";
     break;
     case 5592405 :
     sensor_loc="Sejour";
     sensor_type="radar";
     break;
     case 5592341 :
     sensor_loc="Entree";
     sensor_type="radar";
     break;
     case 5592389 :
     sensor_loc="Chambre";
     sensor_type="radar";
     break;
     case 5592149 :
     sensor_loc="Atelier";
     sensor_type="radar";
     break;
     case 5591381 :
     sensor_loc="Cuisine";
     sensor_type="radar";
     break;
     default: 
     sensor_loc="";
     sensor_type="";
     break;
     }
     // Remplissage fichier incidents Detecteur Incendie
    /* NE FAIT PAS l'ALERTE SMS pour l'instant, à conditionner par le type de l'alarme, et necessite de recuperer le lieu
     if((file_ALARM = fopen("/home/www/logs/ALARM-cumul.txt", "a+")) != NULL) {
     // le log
     time_t now;
     time(&now);
     strftime(timestamp_str, 80, "%d/%m/%y %H:%M:%S", localtime (&now)); // mef horodatage --> timestamp_str
     sprintf(evnt_str,"%s | ALARME detecteur %s\n", timestamp_str, sensor_loc); // prep ligne --> evnt_str
     fputs(evnt_str, file_ALARM);
     file_ALARM_size = ftell(file_ALARM);
     // Fin Remplissage fichier incidents Detecteur Incendie
     // log pour envoi SMS
     if((file_SMS = fopen("/home/www/logs/ALARM-SMS.txt", "a+")) != NULL) {
     fputs(evnt_str, file_SMS);
     fclose(file_SMS);
     }
     // envoi SMS si file_DI >= 300
     if (file_DI_size>=300) {
     system("python /home/www/py/SMS2send.py >> /home/www/logs/SMS.log & ");
     }
     fclose(file_DI);
     }
     * FIN ALARME INCENDIE SMS */
     // Fin envoi SMS Detecteur Incendie
     /* ne fait pas le log d'alarme car ne sait pas ou est l'alerte
     // Alarmes
     if(file_ALARM = fopen("/home/www/logs/ALARM-state.txt","r")) { // alarme active seulement si ALARM-state.txt existe
     fclose(file_ALARM); 
     if (sensor_loc!="") {
     if((file_ALARM = fopen("/home/www/logs/ALARM-state.txt", "a+")) != NULL) {
     // le log
     time_t now;
     time(&now);
     strftime(timestamp_str, 80, "%d/%m/%y %H:%M:%S", localtime (&now)); // mef horodatage --> timestamp_str
     sprintf(evnt_str,"%s | ALARME capteur %s\n", timestamp_str, sensor_loc); // prep ligne --> evnt_str
     fputs(evnt_str, file_ALARM);
     file_ALARM_size = ftell(file_ALARM);
     // log pour envoi SMS
     if((file_SMS = fopen("/home/www/logs/ALARM-SMS.txt", "a+")) != NULL) {
     fputs(evnt_str, file_SMS);
     fclose(file_SMS);
     }
     // declenchement sirene et envoi SMS si file_ALARM >= 300 ou si sensor_type=contact
     if (file_ALARM_size>=300) {
     system("python /home/www/py/SMS2send.py >> /home/www/logs/SMS.log & ");
     system("python /home/www/py/Expander-set.py A 2 close 60 & ");
     }
     fclose(file_ALARM);
     // declenchement buzzer (GPA4)
     if (sensor_loc=="Garage") {
     system("python /home/www/py/Expander-set.py A 4 close 30 & ");
     }
     }
     }
     } // fin alarmes
     */
     }
     mySwitch.resetAvailable();
     } // fin mySwitch.available
     //sleep(1);
     //usleep(50000); // microsecond
     nanosleep(&delay, NULL); // nanosecond
     } // fin infinite loop
     exit(9);
    } // fin main