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:
parent
db4eeea744
commit
d54597bfb4
|
|
@ -37,6 +37,7 @@
|
||||||
static int read_str(const char *, void *);
|
static int read_str(const char *, void *);
|
||||||
static read_log_data_flag(const char *, void *);
|
static read_log_data_flag(const char *, void *);
|
||||||
static read_log_error_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_foreground_flag(const char *, void *);
|
||||||
static read_verbose_flag(const char *, void *);
|
static read_verbose_flag(const char *, void *);
|
||||||
static int flag_handler(int *, int , const char *);
|
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},
|
{"error_file", read_str, &(global_opts.error_log), DEFAULT_ERROR_FILE},
|
||||||
#endif
|
#endif
|
||||||
{"foreground", read_foreground_flag, &(global_opts.flags), "no"},
|
{"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"},
|
{"verbose", read_verbose_flag, &(global_opts.flags), "no"},
|
||||||
{"pg_host", read_str, &(global_opts.pg_host), DEFAULT_PG_HOST},
|
{"pg_host", read_str, &(global_opts.pg_host), DEFAULT_PG_HOST},
|
||||||
{"pg_user", read_str, &(global_opts.pg_user), DEFAULT_PG_USER},
|
{"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
|
#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){
|
static read_foreground_flag(const char *line, void *arg){
|
||||||
return flag_handler(arg, FOREGROUND_FLAG, line);
|
return flag_handler(arg, FOREGROUND_FLAG, line);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,7 @@
|
||||||
#define LOG_ERROR_FLAG 0x04
|
#define LOG_ERROR_FLAG 0x04
|
||||||
#define LOG_DATA_FLAG 0x08
|
#define LOG_DATA_FLAG 0x08
|
||||||
#endif
|
#endif
|
||||||
|
#define NOT_USE_ADDR_FLAG 0x10
|
||||||
|
|
||||||
|
|
||||||
/* Puffergroeßen -------------------------------------------------------- */
|
/* Puffergroeßen -------------------------------------------------------- */
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ int main(int argc, char *argv[]){
|
||||||
read_config(DEFAULT_CONFIG_FILE,1);
|
read_config(DEFAULT_CONFIG_FILE,1);
|
||||||
|
|
||||||
/* Optionen auswerten */
|
/* 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) {
|
switch (c) {
|
||||||
#ifndef NO_LOGING
|
#ifndef NO_LOGING
|
||||||
case 'e':
|
case 'e':
|
||||||
|
|
@ -112,6 +112,9 @@ int main(int argc, char *argv[]){
|
||||||
case 'c':
|
case 'c':
|
||||||
extra_conf_file = optarg;
|
extra_conf_file = optarg;
|
||||||
break;
|
break;
|
||||||
|
case 'a':
|
||||||
|
opts.flags |= NOT_USE_ADDR_FLAG;
|
||||||
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
opts.flags |= VERBOSE_FLAG;
|
opts.flags |= VERBOSE_FLAG;
|
||||||
break;
|
break;
|
||||||
|
|
@ -142,6 +145,7 @@ int main(int argc, char *argv[]){
|
||||||
DEBUGOUT2(" Device = %s\n", global_opts.device);
|
DEBUGOUT2(" Device = %s\n", global_opts.device);
|
||||||
DEBUGOUT2(" Foreground: %i\n", get_flag(FOREGROUND_FLAG));
|
DEBUGOUT2(" Foreground: %i\n", get_flag(FOREGROUND_FLAG));
|
||||||
DEBUGOUT2(" Verbose: %i\n", get_flag(VERBOSE_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(" LogData: %i\n", get_flag(LOG_DATA_FLAG));
|
||||||
DEBUGOUT2(" DataFile = %s\n", global_opts.data_log);
|
DEBUGOUT2(" DataFile = %s\n", global_opts.data_log);
|
||||||
DEBUGOUT2(" LogError: %i\n", get_flag(LOG_ERROR_FLAG));
|
DEBUGOUT2(" LogError: %i\n", get_flag(LOG_ERROR_FLAG));
|
||||||
|
|
@ -201,6 +205,7 @@ static void write_help(){
|
||||||
#endif
|
#endif
|
||||||
printf("\t-i <interface>\n\t\tThe interface where the reciver is connected \n\t\t(default:/dev/ttyS0)\n");
|
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-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-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");
|
printf("\t-c <Conf-File>\n\t\t tells the Program to use an aditional config-file\n");
|
||||||
#ifndef NO_LOGING
|
#ifndef NO_LOGING
|
||||||
|
|
|
||||||
|
|
@ -156,6 +156,9 @@ static regen_data process_regen(time_t timestamp, u_char address, u_char *buffer
|
||||||
data.address = address; /* Addresse */
|
data.address = address; /* Addresse */
|
||||||
new_rain_count = ((buffer[2] & 0x1F) << 7) | remove_msb(buffer[3]); /* Niederschlagszaehler */
|
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 */
|
if(last_rain_count[address%16] == -1) /* Nach Programmstart Zaehler initialisieren */
|
||||||
last_rain_count[address%16] = new_rain_count;
|
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 */
|
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);
|
DEBUGOUT3("Zaehler: %d Differenz: %d\n", new_rain_count,now_rain_count);
|
||||||
DEBUGOUT2("Niederschlag: %dml/m^2\n", data.counter);
|
DEBUGOUT2("Niederschlag: %dml/m^2\n", data.counter);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -57,49 +57,77 @@ static void clean_write(void *);
|
||||||
/* 'einfacher' Außensensor */
|
/* 'einfacher' Außensensor */
|
||||||
void write_auss1(auss1_data data){
|
void write_auss1(auss1_data data){
|
||||||
check_create_query_buffer();
|
check_create_query_buffer();
|
||||||
|
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);
|
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);
|
pg_insert(query_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 'besserer' Außensensor */
|
/* 'besserer' Außensensor */
|
||||||
void write_auss2(auss2_data data){
|
void write_auss2(auss2_data data){
|
||||||
check_create_query_buffer();
|
check_create_query_buffer();
|
||||||
|
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);
|
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);
|
pg_insert(query_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Regensensor */
|
/* Regensensor */
|
||||||
void write_regen(regen_data data){
|
void write_regen(regen_data data){
|
||||||
check_create_query_buffer();
|
check_create_query_buffer();
|
||||||
|
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);
|
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);
|
pg_insert(query_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Windsensor */
|
/* Windsensor */
|
||||||
void write_winds(winds_data data){
|
void write_winds(winds_data data){
|
||||||
check_create_query_buffer();
|
check_create_query_buffer();
|
||||||
|
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);
|
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);
|
pg_insert(query_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Innensensor */
|
/* Innensensor */
|
||||||
void write_innen(innen_data data){
|
void write_innen(innen_data data){
|
||||||
check_create_query_buffer();
|
check_create_query_buffer();
|
||||||
|
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);
|
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);
|
pg_insert(query_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Helligkeitssensor */
|
/* Helligkeitssensor */
|
||||||
void write_helli(helli_data data){
|
void write_helli(helli_data data){
|
||||||
check_create_query_buffer();
|
check_create_query_buffer();
|
||||||
|
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);
|
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);
|
pg_insert(query_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Pyarnometer */
|
/* Pyarnometer */
|
||||||
void write_pyano(pyano_data data){
|
void write_pyano(pyano_data data){
|
||||||
check_create_query_buffer();
|
check_create_query_buffer();
|
||||||
|
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);
|
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);
|
pg_insert(query_buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue