diff --git a/deamon/seriell/config.c b/deamon/seriell/config.c index 2134713..d865fed 100644 --- a/deamon/seriell/config.c +++ b/deamon/seriell/config.c @@ -37,6 +37,7 @@ static int read_str(const char *, void *); static read_log_data_flag(const char *, void *); static read_log_error_flag(const char *, void *); +static read_not_use_addr_flag(const char *, void *); static read_foreground_flag(const char *, void *); static read_verbose_flag(const char *, void *); static int flag_handler(int *, int , const char *); @@ -54,6 +55,7 @@ static const struct config_keyword keywords[] = { {"error_file", read_str, &(global_opts.error_log), DEFAULT_ERROR_FILE}, #endif {"foreground", read_foreground_flag, &(global_opts.flags), "no"}, + {"not_use_address", read_not_use_addr_flag, &(global_opts.flags), "no"}, {"verbose", read_verbose_flag, &(global_opts.flags), "no"}, {"pg_host", read_str, &(global_opts.pg_host), DEFAULT_PG_HOST}, {"pg_user", read_str, &(global_opts.pg_user), DEFAULT_PG_USER}, @@ -88,6 +90,10 @@ static read_log_error_flag(const char *line, void *arg){ } #endif +static read_not_use_addr_flag(const char *line, void *arg){ + return flag_handler(arg, NOT_USE_ADDR_FLAG, line); +} + static read_foreground_flag(const char *line, void *arg){ return flag_handler(arg, FOREGROUND_FLAG, line); } diff --git a/deamon/seriell/definitions.h b/deamon/seriell/definitions.h index debe9f0..e7cb968 100644 --- a/deamon/seriell/definitions.h +++ b/deamon/seriell/definitions.h @@ -68,6 +68,7 @@ #define LOG_ERROR_FLAG 0x04 #define LOG_DATA_FLAG 0x08 #endif +#define NOT_USE_ADDR_FLAG 0x10 /* Puffergroeßen -------------------------------------------------------- */ diff --git a/deamon/seriell/input.c b/deamon/seriell/input.c index 50d3bce..d71fbaf 100644 --- a/deamon/seriell/input.c +++ b/deamon/seriell/input.c @@ -109,7 +109,7 @@ int read_port(){ if((len = poll(&pfd, 1, INPUT_TIMEOUT)) > 0){ /* warten auf Eingabepuffer */ len = read(fd, temp, 1); /* Zeichenweise lesen */ if(readlen == 1){ /* Solange noch nix verwertbares gelesen wurde auf das Startbyte pruefen */ - if(*temp == STX){ + if(*temp == STX){ temp++; /* Wenn startbyte gefunden Zeiger auf das 2. Puffer-Element setzen */ readlen++; /* Und Lese-Zaehler erhoehen */ } diff --git a/deamon/seriell/main.c b/deamon/seriell/main.c index 4b8f653..8f8906e 100644 --- a/deamon/seriell/main.c +++ b/deamon/seriell/main.c @@ -97,7 +97,7 @@ int main(int argc, char *argv[]){ read_config(DEFAULT_CONFIG_FILE,1); /* Optionen auswerten */ - while ((c = getopt (argc, argv, "vfc:e:d:i:h")) != -1) + while ((c = getopt (argc, argv, "vfac:e:d:i:h")) != -1) switch (c) { #ifndef NO_LOGING case 'e': @@ -112,6 +112,9 @@ int main(int argc, char *argv[]){ case 'c': extra_conf_file = optarg; break; + case 'a': + opts.flags |= NOT_USE_ADDR_FLAG; + break; case 'v': opts.flags |= VERBOSE_FLAG; break; @@ -142,6 +145,7 @@ int main(int argc, char *argv[]){ DEBUGOUT2(" Device = %s\n", global_opts.device); DEBUGOUT2(" Foreground: %i\n", get_flag(FOREGROUND_FLAG)); DEBUGOUT2(" Verbose: %i\n", get_flag(VERBOSE_FLAG)); + DEBUGOUT2(" Use address: %i\n", ! get_flag(NOT_USE_ADDR_FLAG)); DEBUGOUT2(" LogData: %i\n", get_flag(LOG_DATA_FLAG)); DEBUGOUT2(" DataFile = %s\n", global_opts.data_log); DEBUGOUT2(" LogError: %i\n", get_flag(LOG_ERROR_FLAG)); @@ -201,6 +205,7 @@ static void write_help(){ #endif printf("\t-i \n\t\tThe interface where the reciver is connected \n\t\t(default:/dev/ttyS0)\n"); printf("\t-f\n\t\tDon't Fork to background\n"); + printf("\t-a\n\t\tDont use Address, Dont use the address of the sensor to get the id. The first available is choosen.\n"); printf("\t-v\n\t\tVerbose, log errors to stdout, even it's forked to background\n"); printf("\t-c \n\t\t tells the Program to use an aditional config-file\n"); #ifndef NO_LOGING diff --git a/deamon/seriell/process.c b/deamon/seriell/process.c index 6386354..a0dbbac 100644 --- a/deamon/seriell/process.c +++ b/deamon/seriell/process.c @@ -156,6 +156,9 @@ static regen_data process_regen(time_t timestamp, u_char address, u_char *buffer data.address = address; /* Addresse */ new_rain_count = ((buffer[2] & 0x1F) << 7) | remove_msb(buffer[3]); /* Niederschlagszaehler */ + if (get_flag(NOT_USE_ADDR_FLAG)) + address = 0; + if(last_rain_count[address%16] == -1) /* Nach Programmstart Zaehler initialisieren */ last_rain_count[address%16] = new_rain_count; @@ -170,7 +173,7 @@ static regen_data process_regen(time_t timestamp, u_char address, u_char *buffer last_rain_count[address%16] = new_rain_count; /* Zaehler neu setzen */ - DEBUGOUT2("Regensensor an Addresse %i\n", address); + DEBUGOUT2("Regensensor an Addresse %i\n", data.address); DEBUGOUT3("Zaehler: %d Differenz: %d\n", new_rain_count,now_rain_count); DEBUGOUT2("Niederschlag: %dml/m^2\n", data.counter); diff --git a/deamon/seriell/write.c b/deamon/seriell/write.c index b7d9c34..0f2aec3 100644 --- a/deamon/seriell/write.c +++ b/deamon/seriell/write.c @@ -57,49 +57,77 @@ static void clean_write(void *); /* 'einfacher' Außensensor */ void write_auss1(auss1_data data){ check_create_query_buffer(); - snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO auss1_data (sens_id, \"temp\") VALUES (get_sensor_id(%d,%d),%d)",AUSS1, data.address, data.temp); + if( get_flag(NOT_USE_ADDR_FLAG) ) { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO auss1_data (sens_id, \"temp\") VALUES (get_first_id(%d),%d)",AUSS1, data.temp); + } else { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO auss1_data (sens_id, \"temp\") VALUES (get_sensor_id(%d,%d),%d)",AUSS1, data.address, data.temp); + } pg_insert(query_buffer); } /* 'besserer' Außensensor */ void write_auss2(auss2_data data){ check_create_query_buffer(); - snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO auss2_data (sens_id, \"temp\", hum) VALUES (get_sensor_id(%d,%d),%d,%d)",AUSS2, data.address, data.temp, data.hum); + if( get_flag(NOT_USE_ADDR_FLAG) ) { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO auss2_data (sens_id, \"temp\", hum) VALUES (get_first_id(%d),%d,%d)",AUSS2, data.temp, data.hum); + } else { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO auss2_data (sens_id, \"temp\", hum) VALUES (get_sensor_id(%d,%d),%d,%d)",AUSS2, data.address, data.temp, data.hum); + } pg_insert(query_buffer); } /* Regensensor */ void write_regen(regen_data data){ check_create_query_buffer(); - snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO regen_data (sens_id, count) VALUES (get_sensor_id(%d,%d),%d)",REGEN, data.address, data.counter); + if( get_flag(NOT_USE_ADDR_FLAG) ) { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO regen_data (sens_id, count) VALUES (get_first_id(%d),%d)",REGEN, data.counter); + } else { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO regen_data (sens_id, count) VALUES (get_sensor_id(%d,%d),%d)",REGEN, data.address, data.counter); + } pg_insert(query_buffer); } /* Windsensor */ void write_winds(winds_data data){ check_create_query_buffer(); - snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO winds_data (sens_id, geschw, schwank, richt) VALUES (get_sensor_id(%d,%d),%d,%d,%d)",WINDS, data.address, data.geschw, data.schwank, data.richt); + if( get_flag(NOT_USE_ADDR_FLAG) ) { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO winds_data (sens_id, geschw, schwank, richt) VALUES (get_first_id(%d),%d,%d,%d)",WINDS, data.geschw, data.schwank, data.richt); + } else { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO winds_data (sens_id, geschw, schwank, richt) VALUES (get_sensor_id(%d,%d),%d,%d,%d)",WINDS, data.address, data.geschw, data.schwank, data.richt); + } pg_insert(query_buffer); } /* Innensensor */ void write_innen(innen_data data){ check_create_query_buffer(); - snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO innen_data (sens_id, \"temp\", hum, press) VALUES (get_sensor_id(%d,%d),%d,%d,%d)",INNEN, data.address, data.temp, data.hum, data.press); + if( get_flag(NOT_USE_ADDR_FLAG) ) { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO innen_data (sens_id, \"temp\", hum, press) VALUES (get_first_id(%d),%d,%d,%d)",INNEN, data.temp, data.hum, data.press); + } else { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO innen_data (sens_id, \"temp\", hum, press) VALUES (get_sensor_id(%d,%d),%d,%d,%d)",INNEN, data.address, data.temp, data.hum, data.press); + } pg_insert(query_buffer); } /* Helligkeitssensor */ void write_helli(helli_data data){ check_create_query_buffer(); - snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO helli_data (sens_id, bight) VALUES (get_sensor_id(%d,%d),%d)",HELLI, data.address, data.abslum); + if( get_flag(NOT_USE_ADDR_FLAG) ) { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO helli_data (sens_id, bight) VALUES (get_first_id(%d),%d)",HELLI, data.abslum); + } else { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO helli_data (sens_id, bight) VALUES (get_sensor_id(%d,%d),%d)",HELLI, data.address, data.abslum); + } pg_insert(query_buffer); } /* Pyarnometer */ void write_pyano(pyano_data data){ check_create_query_buffer(); - snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO pyano_data (sens_id, intens) VALUES (get_sensor_id(%d,%d),%d)",PYANO, data.address, data.absrad); + if( get_flag(NOT_USE_ADDR_FLAG) ) { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO pyano_data (sens_id, intens) VALUES (get_first_id(%d),%d)",PYANO, data.absrad); + } else { + snprintf(query_buffer, QUERY_BUFFERSIZE, "INSERT INTO pyano_data (sens_id, intens) VALUES (get_sensor_id(%d,%d),%d)",PYANO, data.address, data.absrad); + } pg_insert(query_buffer); }