• [^] # Re: reflexion de base

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

    le code pour permettre aux autres de l'anlyser

    #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) {
     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 );
     fclose(file_BL);
     }
     else {
     if((file_TEST = fopen("/home/www/logs/RADIO_TEST.log", "a+")) != NULL) {
     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);
     }
     exit(9);
     }
     if (strstr(old_str,"PLEIN")!=NULL) {
     old_BL=BL_plein;
     }
     if (strstr(old_str,"VIDE")!=NULL) {
     old_BL=BL_vide;
     }
    /**/
     if((file_TEST = fopen("/home/www/logs/RADIO_TEST.log", "a+")) != NULL) {
     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);
     }
    /**/
     while(true) {
     if (mySwitch.available()) {
     radio_code = mySwitch.getReceivedValue();
     if (radio_code != 0) { // on a recu un code
    /**/
     /// pour test
    // if (radio_code==BL_plein || radio_code==BL_vide) { // uniquement la BL
     if((file_TEST = fopen("/home/www/logs/RADIO_TEST.log", "a+")) != NULL) {
     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 test
     if (radio_code==BL_plein || radio_code==BL_vide) { // specifique boite aux lettres
     // if (old_BL != radio_code){ // ecriture nouvel etat
     if((file_BL = fopen("/home/www/logs/BL-state.txt", "r+")) != NULL) {
     if (radio_code==BL_plein){
     fputs("PLEIN", file_BL);
     old_BL=radio_code;
     }
     else if (radio_code==BL_vide){
     fputs("VIDE ", file_BL);
     old_BL=radio_code;
     }
     fclose(file_BL);
     }
     } // fin boite aux lettres
     // Sonnette
     // Capture des codes dans fichier SO-state.txt
     if (radio_code==BPSO) { 
     if((file_SO = fopen("/home/www/logs/SO-state.txt", "w")) != NULL) {
     if (radio_code==BPSO){
     fputs("Dring", file_SO);
     }
     fclose(file_SO);
     } 
     // Envoie de mail avec gmail.pi
     if (radio_code==BPSO){system("python /home/www/py/gmail.py"); 
     }
     }
     // Fin Sonnette
     // detection incendie
     if (radio_code==DI0 || radio_code==DI1) { // Capture des codes dans fichier DI-state.txt 
     if((file_DI = fopen("/home/www/logs/DI-state.txt", "w")) != NULL) {
     if (radio_code==DI0){
     fputs("Feu RdeCh", file_DI);
     sensor_loc="Incendie RdC";
     sensor_type="detecteur";
     }
     else if (radio_code==DI1){
     fputs("Feu Etage", file_DI);
     sensor_loc="Incendie Etage";
     sensor_type="detecteur";}
     fclose(file_DI);
     }
     // fin detection incendie
     // Remplissage fichier incidents Detecteur Incendie
     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 envoi SMS Detecteur Incendie
     } 
     // Alarmes
     if(file_ALARM = fopen("/home/www/logs/ALARM-state.txt","r")) { // alarme active seulement si ALARM-state.txt existe
     fclose(file_ALARM);
     switch(radio_code){ // on cherche a quel emplacement correspond le code recu
     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;
     }
     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