...sensor checking
git-svn-id: file:///home/jan/tmp/wetterstation/trunk@52 dd492736-c11a-0410-ad51-8c26713eaf7f
This commit is contained in:
parent
f308f7b6ba
commit
eb113fdbe3
|
|
@ -34,7 +34,7 @@
|
|||
#include "checksensor.h"
|
||||
|
||||
|
||||
#define BUFFSIZE 1024
|
||||
#define BUFFSIZE 512
|
||||
|
||||
|
||||
/* Variablen ---------------------------------------------------------- */
|
||||
|
|
@ -81,13 +81,18 @@ static PGresult *pg_check_exec(PGconn *conn, char *query){
|
|||
static void get_sensors_from_db(){
|
||||
int id_field;
|
||||
int i;
|
||||
PGresult *res;
|
||||
sens_id_list_ptr new_id, temp_id = NULL;
|
||||
|
||||
connection = pg_check_connect(conn_string);
|
||||
PGresult *res = pg_check_exec(connection, "select id from sensoren");
|
||||
|
||||
res = pg_check_exec(connection, "SELECT id FROM sensoren");
|
||||
id_field = PQfnumber(res, "id");
|
||||
|
||||
for (i = 0; i < PQntuples(res); i++){
|
||||
new_id = malloc(sizeof(sensor_id));
|
||||
new_id->id = atoi(PQgetvalue(res, i, id_field));
|
||||
new_id->next = NULL;
|
||||
if (temp_id == NULL){
|
||||
temp_id = new_id;
|
||||
global_opts.sens_id_list = temp_id;
|
||||
|
|
@ -97,8 +102,71 @@ static void get_sensors_from_db(){
|
|||
}
|
||||
DEBUGOUT2("add id: (%d)\n", new_id->id);
|
||||
}
|
||||
|
||||
PQclear(res);
|
||||
PQfinish(connection);
|
||||
connection = NULL;
|
||||
}
|
||||
|
||||
static int count_data_by_sensor_id(PGconn *connection, int sens_id){
|
||||
int table_field;
|
||||
int count_field;
|
||||
char *query_buff = malloc(sizeof(char)*BUFFSIZE);
|
||||
char *table;
|
||||
int count;
|
||||
PGresult *table_res;
|
||||
PGresult *count_res;
|
||||
|
||||
DEBUGOUT2("\nPrüfe Sensor mit ID: %d ... \n",sens_id);
|
||||
|
||||
snprintf(query_buff, BUFFSIZE, "select typen.tabelle as tbl FROM typen, sensoren WHERE sensoren.id=%d AND typen.typ=sensoren.typ", sens_id);
|
||||
table_res = pg_check_exec(connection, query_buff);
|
||||
|
||||
if(PQntuples(table_res) < 1)
|
||||
return -1;
|
||||
|
||||
table_field = PQfnumber(table_res, "tbl");
|
||||
table = PQgetvalue(table_res, 0, table_field);
|
||||
|
||||
DEBUGOUT2("\tTabelle: %s \n", table);
|
||||
|
||||
snprintf(query_buff, BUFFSIZE, "SELECT count(sens_id) as num FROM %s WHERE sens_id=%d AND timestamp>(current_timestamp - INTERVAL '%d hours')",table, sens_id, global_opts.interval);
|
||||
count_res = pg_check_exec(connection, query_buff);
|
||||
|
||||
if(PQntuples(count_res) < 1)
|
||||
return -2;
|
||||
|
||||
count_field = PQfnumber(count_res, "num");
|
||||
count = atoi(PQgetvalue(count_res, 0, count_field));
|
||||
|
||||
DEBUGOUT3("\tWerte in den letzten %d Stunden: %d\n", global_opts.interval, count);
|
||||
|
||||
PQclear(count_res);
|
||||
PQclear(table_res);
|
||||
free(query_buff);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int check_sensors(){
|
||||
sens_id_list_ptr temp_ptr = global_opts.sens_id_list;
|
||||
int count;
|
||||
|
||||
connection = pg_check_connect(conn_string);
|
||||
|
||||
for(;temp_ptr ; temp_ptr = temp_ptr->next){
|
||||
if((count = count_data_by_sensor_id(connection, temp_ptr->id)) < global_opts.sendings){
|
||||
|
||||
} else {
|
||||
DEBUGOUT2("\tSensor mit ID %d scheint ok zu sein\n", temp_ptr->id);
|
||||
}
|
||||
}
|
||||
|
||||
PQfinish(connection);
|
||||
connection = NULL;
|
||||
}
|
||||
|
||||
/* Mainfkt. und diverse andere Funktionen zum beenden des Programmes ---*/
|
||||
|
||||
|
|
@ -134,6 +202,7 @@ int main(int argc, char *argv[]){
|
|||
|
||||
generate_conn_string();
|
||||
get_sensors_from_db();
|
||||
check_sensors();
|
||||
|
||||
clean();
|
||||
return EXIT_SUCCESS;
|
||||
|
|
|
|||
|
|
@ -35,7 +35,8 @@ typedef struct address_t *mail_list_ptr;
|
|||
|
||||
/* Optionen */
|
||||
typedef struct {
|
||||
int *interval; /* Das Interval, in dem ein Sensor zuletzt gesendet haben sollte */
|
||||
int interval; /* Das Interval, in dem ein Sensor zuletzt gesendet haben sollte */
|
||||
int sendings;
|
||||
mail_list_ptr address_list; /* Liste der Ids der Sensoren, die ueberprueft werden sollen */
|
||||
sens_id_list_ptr sens_id_list; /* Liste der Mail-Addressen, die benachichtigt werden sollen wenn was ist */
|
||||
char id_from_db; /* Flag, ob die Id's aus der Datenbank gelesen werden sollen */
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ static int read_str(const char *, void *);
|
|||
static const struct config_keyword keywords[] = {
|
||||
/* keyword handler variable address default */
|
||||
{"checkinterval", read_int, &(global_opts.interval), DEFAULT_CHECK_INTERVAL},
|
||||
{"min_sendings", read_int, &(global_opts.sendings), DEFAULT_MIN_SENDINGS},
|
||||
|
||||
{"sensorid_from_db", read_yn, &(global_opts.id_from_db), "yes"},
|
||||
{"sensorid", add_sens_id, &(global_opts.sens_id_list), ""},
|
||||
{"adminaddress", add_address, &(global_opts.address_list), ""},
|
||||
|
|
|
|||
Loading…
Reference in New Issue