daemon: add option to ignore the sensor address

git-svn-id: file:///home/jan/tmp/wetterstation/trunk@261 dd492736-c11a-0410-ad51-8c26713eaf7f
This commit is contained in:
jan 2008-10-07 10:20:41 +00:00
parent db4eeea744
commit d54597bfb4
6 changed files with 53 additions and 10 deletions

View File

@ -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);
}

View File

@ -68,6 +68,7 @@
#define LOG_ERROR_FLAG 0x04
#define LOG_DATA_FLAG 0x08
#endif
#define NOT_USE_ADDR_FLAG 0x10
/* Puffergroeßen -------------------------------------------------------- */

View File

@ -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 */
}

View File

@ -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 <interface>\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 <Conf-File>\n\t\t tells the Program to use an aditional config-file\n");
#ifndef NO_LOGING

View File

@ -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);

View File

@ -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);
}