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>RCSwitchmySwitch;//int main(int argc, char *argv[]) {intmain(){intPIN=5;intradio_code=0;intold_BL=0;intnew_BL=0;charold_str[10];constchar*sensor_loc;constchar*sensor_type;// logstructtm*timeinfo;chartimestamp_str[20];charlocaltime_s[20];charevnt_str[50];// capteurs BLintBL_plein=5592332;intBL_vide=5592323;// capteurs DIintDI0=1381717;intDI1=7673173;// capteurs SonnetteintBPSO=13487999;// les fichiersFILE*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;intfile_ALARM_size;intfile_DI_size;intfile_SO_size;// nanosleepstructtimespecdelay;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 logtime_tnow;time(&now);strftime(timestamp_str,80,"%d/%m/%y %H:%M:%S",localtime(&now));// mef horodatage --> timestamp_strsprintf(evnt_str,"%s : Erreur de lancement \n",timestamp_str);// prep ligne --> evnt_strfputs(evnt_str,file_TEST);fclose(file_TEST);}exit(9);}mySwitch=RCSwitch();mySwitch.enableReceive(PIN);// lecture de l'etat initial de la boite aux lettresif((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 logtime_tnow;time(&now);strftime(timestamp_str,80,"%d/%m/%y %H:%M:%S",localtime(&now));// mef horodatage --> timestamp_strsprintf(evnt_str,"%s : Etat initial BL : %d \n",timestamp_str,old_BL);// prep ligne --> evnt_strfputs(evnt_str,file_TEST);fclose(file_TEST);}// Fin ecriture dans fichier de log}else{// echec de l'ouverture du fichier BL-state.txtif((file_TEST=fopen("/home/www/logs/RADIO_TEST.log","a+"))!=NULL){// Ecriture dans le fichier de logtime_tnow;time(&now);strftime(timestamp_str,80,"%d/%m/%y %H:%M:%S",localtime(&now));// mef horodatage --> timestamp_strsprintf(evnt_str,"%s : Erreur lecture etat initial BL \n",timestamp_str);// prep ligne --> evnt_strfputs(evnt_str,file_TEST);fclose(file_TEST);}// Fin ecriture dans fichier de logexit(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 codeif((file_TEST=fopen("/home/www/logs/RADIO_TEST.log","a+"))!=NULL){//Ecriture dans les logstime_tnow;time(&now);strftime(timestamp_str,80,"%d/%m/%y %H:%M:%S",localtime(&now));// mef horodatage --> timestamp_strsprintf(evnt_str,"%s : Code radio %d \n",timestamp_str,radio_code);// prep ligne --> evnt_strfputs(evnt_str,file_TEST);fclose(file_TEST);}// Fin ecriture dans les logs// Occupons nous du message radioswitch(radio_code){// on cherche a quel message et quel emplacement correspond le code recucase5592332:// BL_Pleinif((file_BL=fopen("/home/www/logs/BL-state.txt","r+"))!=NULL){fputs("PLEIN",file_BL);old_BL=radio_code;fclose(file_BL);}break;case5592323:// 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;case13487999:// BPSO - Sonnette// Envoie de mail avec gmail.pisystem("python /home/www/py/gmail.py");break;case1381717:// DI0 : detection incendie RDCif((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;case7673173://DI1 : detection incendie Etageif((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;case5592320:sensor_loc="Garage";sensor_type="contact";break;case5592404:sensor_loc="Salon";sensor_type="radar";break;case5592405:sensor_loc="Sejour";sensor_type="radar";break;case5592341:sensor_loc="Entree";sensor_type="radar";break;case5592389:sensor_loc="Chambre";sensor_type="radar";break;case5592149:sensor_loc="Atelier";sensor_type="radar";break;case5591381: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); // microsecondnanosleep(&delay,NULL);// nanosecond}// fin infinite loopexit(9);}// fin main
[^] # Re: reflexion de base
Posté par NeoX . 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