// C program to illustrate // non I/O blocking calls #include #include #include #include // library for fcntl function #include #include "logging.h" #include #include #define MSGSIZE 6 #define UPDATE_INTERVAL 17 int main(int argc, char **argv) { int fdPipe[2]; // File descriptor för pipe pipe(fdPipe); // Skapar en pipe pid_t cpid = fork(); // Skapar en till process if (fcntl(fdPipe[0], F_SETFL, O_NONBLOCK) < 0) exit(2); switch(cpid) { // Fel case -1: exit(3); // Child process case 0: dup2(fdPipe[1], STDOUT_FILENO); // Skriva till stdout, skrivs till pipe istället close(fdPipe[1]); // Stäng änden som inte används mqtt_sub(); break; // Parent process default: dup2(fdPipe[0], STDIN_FILENO); close(fdPipe[0]); parent_init(); } return 0; } int parent_init(){ int nrOfEntries = 0; LogEntry sensorLog[200]; char updates[3000] = "\0"; time_t omega; time_t alpha = time(NULL); time_t seconds = UPDATE_INTERVAL; // Hur många sekunder mellan varje thingspeak update omega = alpha + seconds; // Detta är början printf("start time is : %s", ctime(&alpha)); // För resten av programmet, läs och logga data och uppdatera thingspeak varje UPDATE_INTERVAL char stdinput[MSGSIZE]; int nread; while (1) { while (fgets(stdinput, 10, stdin) != NULL) { // text read // by default return no. of bytes // which read call read at that time fprintf(stdout,"MSG = %s", stdinput); // sensorLogging(sensorLog, &nrOfEntries); /* while (alpha < omega){ // Loggar data under UPDATE_INTERVAL alpha = time(NULL); } fprintf(stdout,"En minut har passerat!\n"); sortLog(sensorLog, &nrOfEntries); // Slå ihop sensorvärden som har skett samma sekund buildUpdates(sensorLog, nrOfEntries); // Skapar strängar av datum,tid och effekt i CSV format buildURI(sensorLog, nrOfEntries, updates); // Bygger strängen av all sensordata som ska skickas till thingspeak if(nrOfEntries > 0){ curling(updates); } nrOfEntries = 0; // Börjar om, obs structen har kvar sina värden tills de skrivs över omega = alpha + seconds; // Detta är den nya början*/ } } } void sensorLogging(LogEntry *sensorLog, int *entries){ int nread; char line[MSGSIZE]; while( fgets(line, MSGSIZE,stdin) != NULL){ fprintf(stdout,"%s",line); } // text read // by default return no. of bytes // which read call read at that time //fprintf(stdout,"MSG = %s, COUNT: %d\n", buf, *entries); //loggingParent(sensorLog, buf, entries); }