#include "sample_sensors.h"
-unsigned int collect_data(char *buffer, unsigned int size)
+int check_handle_line(char *buffer, unsigned int buflen, char *cmpstr, char *rrd_file, char *txt_file)
{
char *cmd;
- if (size >= 8 && strncmp("movement", buffer, 8) == 0)
- return 1;
-
- if (size > 16 && strncmp("temp0:", buffer, 5) == 0)
+ unsigned int cmpstrlen = strlen(cmpstr);
+ unsigned int value = atoi(buffer + cmpstrlen);
+ if (buflen > cmpstrlen && strncmp(cmpstr,buffer,cmpstrlen) == 0)
{
- if (asprintf(&cmd, "rrdtool update %s -t temp N:%s", rrd_temp_, buffer + 15))
+ if (asprintf(&cmd, "rrdtool update %s N:%d", rrd_file, value))
{
- /*printf("%s\n",cmd);*/
+ //printf("%s\n",cmd);
system(cmd);
free(cmd);
}
+ int fd = open(txt_file, O_WRONLY | O_CREAT | O_TRUNC, 0666);
+ if (fd)
+ {
+ if (asprintf(&cmd, "%d", value))
+ {
+
+ write(fd,cmd, strnlen(cmd,12)); //elim. newline
+ free(cmd);
+ }
+ close(fd);
+ }
+ return 1;
}
-
- if (size > 16 && strncmp("photo0:", buffer, 6) == 0)
+ return 0;
+}
+
+int check_handle_line_float(char *buffer, unsigned int buflen, char *cmpstr, char *rrd_file, char *txt_file)
+{
+ char *cmd;
+ unsigned int cmpstrlen = strlen(cmpstr);
+ float value = atof(buffer + cmpstrlen);
+ if (buflen > cmpstrlen && strncmp(cmpstr,buffer,cmpstrlen) == 0)
{
- if (asprintf(&cmd, "rrdtool update %s -t light N:%s", rrd_light_, buffer + 15))
+ if (asprintf(&cmd, "rrdtool update %s N:%f", rrd_file, value))
{
- /*printf("%s\n",cmd);*/
system(cmd);
free(cmd);
}
+ int fd = open(txt_file, O_WRONLY | O_CREAT | O_TRUNC, 0666);
+ if (fd)
+ {
+ if (asprintf(&cmd, "%f", value))
+ {
+
+ write(fd,cmd, strnlen(cmd,12)); //elim. newline
+ free(cmd);
+ }
+ close(fd);
+ }
+ return 1;
}
- return 0;
+ return 0;
+}
+
+unsigned int collect_data(char *buffer, unsigned int size)
+{
+ if (size >= 8 && strncmp("movement", buffer, 8) == 0)
+ return 1;
+ else if (check_handle_line_float(buffer, size, "temp0: ", rrd_temp_, txt_temp_))
+ return 0;
+ else if (check_handle_line(buffer, size, "photo0: ", rrd_light_, txt_light_))
+ return 0;
+ return 0;
}
void sample_sensors(int fd)
{
if (fd < 3)
return;
- struct timespec timeout;
+ struct timeval timeout;
fd_set fds_r;
unsigned int const buffer_size=1024;
unsigned int buffer_offset=0;
FD_ZERO(&fds_r);
FD_SET(fd,&fds_r);
timeout.tv_sec=1;
- timeout.tv_nsec=0;
+ timeout.tv_usec=0;
last_sample_time=time(0);
- while (select(fd+1,&fds_r,0,0,0) > 0)
+ while (select(fd+1,&fds_r,0,0,&timeout) > -1)
{
curr_time=time(0);
if (FD_ISSET(fd,&fds_r))
buffer_offset+=num_byte;
}
- if (num_byte == 0 || (num_byte <0 && errno != EAGAIN))
+ if (num_byte < 1)
return;
char linebreak_found=0;
FD_SET(fd,&fds_r);
timeout.tv_sec=1;
- timeout.tv_nsec=0;
+ timeout.tv_usec=0;
}
}
int main(int argc, char* argv[])
{
- int ret = 0;
int socket_fd = 0;
char *socket_file;
if (argc > 1)
else
socket_file = default_socket_file_;
- socket_fd = establish_socket_connection(socket_file);
- if(socket_fd)
- {
- sample_sensors(socket_fd);
- }
- else
+ while (1)
{
- fprintf(stderr, "%s error, aborting..\n", socket_file);
- ret=2;
- }
+ socket_fd = establish_socket_connection(socket_file);
+ if(socket_fd)
+ {
+ sample_sensors(socket_fd);
+ }
+ else
+ {
+ fprintf(stderr, "%s error, retrying..\n", socket_file);
+ }
- if(socket_fd > 0)
- shutdown(socket_fd,SHUT_RDWR);
- return(ret);
+ if(socket_fd > 0)
+ shutdown(socket_fd,SHUT_RDWR);
+
+ sleep(2);
+ }
+ return 0;
}