aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Makefile5
-rw-r--r--src/weatherstation_test.c73
2 files changed, 77 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index fbf0267..3c3c86f 100644
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,7 @@ GITTAGFLAG := -D'VERSION_STRING="$(shell LC_ALL=C git describe --tags)"'
MODBUSLOGCFLAGS += $(GITTAGFLAG)
FTPHELPERCFLAGS += $(GITTAGFLAG)
-all: modbuslog ftphelper
+all: modbuslog ftphelper weatherstation_test
modbuslog: $(SDIR)/modbuslog.c
$(CC) -o $(SDIR)/$@ $^ $(MODBUSLOGCFLAGS) $(MODBUSLOGLIBS)
@@ -26,6 +26,9 @@ modbuslog: $(SDIR)/modbuslog.c
ftphelper: $(SDIR)/ftphelper.c
$(CC) -o $(SDIR)/$@ $^ $(FTPHELPERCFLAGS) $(FTPHELPERLIBS)
+weatherstation_test: $(SDIR)/weatherstation_test.c
+ $(CC) -o $(SDIR)/$@ $^ $(MODBUSLOGCFLAGS) $(MODBUSLOGLIBS)
+
install: all
$(INSTALL) $(SDIR)/modbuslog $(MODBUSLOGBINDIR)/modbuslog
test -f $(MODBUSLOGCFGDIR)/modbuslog.cfg || $(INSTALL) -m 644 $(SDIR)/modbuslog.cfg $(MODBUSLOGCFGDIR)/modbuslog.cfg
diff --git a/src/weatherstation_test.c b/src/weatherstation_test.c
new file mode 100644
index 0000000..b2cfab4
--- /dev/null
+++ b/src/weatherstation_test.c
@@ -0,0 +1,73 @@
+// gcc weatherstation_test.c -o weatherstation_test `pkg-config --libs --cflags libmodbus`
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include <modbus.h>
+
+#define SLAVE_ID 1
+#define START_ADDRESS 0
+#define NUMBER_REGISTERS 17
+
+#define DEBUG_MODE 1
+
+int main(int argc, char *argv[])
+{
+
+modbus_t *ctx;
+int16_t mbregister[64];
+int rc;
+
+ctx = modbus_new_rtu("/dev/ttyUSB0", 19200, 'E', 8, 1);
+modbus_set_slave(ctx, SLAVE_ID);
+
+modbus_set_debug(ctx, DEBUG_MODE);
+
+printf("Verteco Elsner Weatherstation\n\n");
+
+if (ctx == NULL) {
+ fprintf(stderr, "Unable to create the libmodbus context\n");
+ return -1;
+}
+
+if (modbus_connect(ctx) == -1) {
+ fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
+ modbus_free(ctx);
+ return -1;
+}
+
+rc = modbus_read_input_registers(ctx, START_ADDRESS, NUMBER_REGISTERS, mbregister);
+
+
+if (rc == -1) {
+ fprintf(stderr, "ERROR: %s\n", modbus_strerror(errno));
+ return -1;
+}
+
+printf("Read %i mbregisters\n\n", rc);
+
+printf("temperature=%d\n", mbregister[0]);
+printf("sun_south=%d\n", mbregister[1]);
+printf("sun_east=%d\n", mbregister[2]);
+printf("sun_west=%d\n", mbregister[3]);
+printf("light=%d\n", mbregister[4]);
+printf("wind=%d\n", mbregister[5]);
+printf("GPS/RTC=%d\n", mbregister[6]&255);
+printf("rain=%d\n", mbregister[6]>>8);
+printf("day=%d\n", mbregister[7]);
+printf("month=%d\n", mbregister[8]);
+printf("year=%d\n", mbregister[9]);
+printf("hour=%d\n", mbregister[10]);
+printf("min=%d\n", mbregister[11]);
+printf("second=%d\n", mbregister[12]);
+printf("azimuth=%d\n", mbregister[13]);
+printf("elevation=%d\n", mbregister[14]);
+printf("long=%d\n", mbregister[15]);
+printf("lat=%d\n", mbregister[16]);
+modbus_close(ctx);
+modbus_free(ctx);
+
+ return 0;
+}