CFLAGS=-Wall -O2 -g
RRDD_OBJS= main.o process.o rrdtool.o parser.o scheduler.o string.o \
- debug.o config.o
+ debug.o config.o onewire_parser.o
ALL_OBJS = $(RRDD_OBJS)
ALL_DEBS = $(patsubst %.o,.%.o.d,$(ALL_OBJS))
all: rrdd
rrdd: $(RRDD_OBJS)
- $(QUIET_LINK)$(CC) -o rrdd $(RRDD_OBJS) -lconfig
+ $(QUIET_LINK)$(CC) -o rrdd $(RRDD_OBJS) -lconfig -lownet
clean:
rm -vf rrdd *~ *.o .*.d
if (!strcmp(str, "netstats"))
return netstats_parser;
+ if (!strcmp(str, "onewire"))
+ return onewire_parser;
+
return NULL;
}
if (parser == netstats_parser)
return "netstats";
+ if (parser == onewire_parser)
+ return "onewire";
+
return NULL;
}
--- /dev/null
+#include <ownetapi.h>
+
+#include "parser.h"
+#include "debug.h"
+#include "string.h"
+
+int onewire_parser(char *rrd_data, const char **parser_data)
+{
+ OWNET_HANDLE h;
+ const char *server_addr;
+ char buf[24], *tmp;
+ int i = 1, ret;
+ int max_str = RRD_DATA_MAX_LEN;
+
+ if (!parser_data) {
+ pr_err("No parser data available\n");
+ return -1;
+ }
+
+ server_addr = parser_data[0];
+
+ if (!server_addr) {
+ pr_err("Server address not specified\n");
+ return -1;
+ }
+
+ h = OWNET_init(server_addr);
+ if (h < 0) {
+ pr_err("Failed to connect to server %s\n", server_addr);
+ return -1;
+ }
+
+ while (parser_data[i]) {
+ if (!strcmp("U", parser_data[i])) {
+undefined:
+ ret = snprintf(rrd_data, max_str, "U");
+ max_str -= ret;
+ rrd_data += ret;
+ goto next;
+ }
+
+ pr_info("Reading data for entry %s\n", parser_data[i]);
+ ret = OWNET_read(h, parser_data[i], &tmp);
+ if (ret < 0) {
+ pr_err("Failed to read entry %s\n", parser_data[i]);
+ goto undefined;
+ }
+
+ /* The data from OWNET_read appears to not be NULL terminated */
+ memcpy(buf, tmp, MIN(ret, sizeof(buf) -1));
+ free(tmp);
+ buf[ret] = 0;
+
+ ret = snprintf(rrd_data, max_str, "%s", buf);
+ max_str -= ret;
+ rrd_data += ret;
+
+next:
+ i++;
+ if (!parser_data[i])
+ break;
+
+ ret = snprintf(rrd_data, max_str, ":");
+ max_str -= ret;
+ rrd_data += ret;
+ }
+ rrd_data = 0;
+
+ OWNET_finish();
+ return 0;
+}
int digitemp_parser_mod(char *data, const char **p);
int script_parser(char *rrd_data, const char **parser_data);
int netstats_parser(char *rrd_data, const char **parser_data);
+int onewire_parser(char *rrd_data, const char **parser_data);
#define MIN(a, b) ((a) < (b) ? (a) : (b))