diff options
-rw-r--r-- | Makefile | 5 | ||||
-rw-r--r-- | src/weatherstation_test.c | 73 |
2 files changed, 77 insertions, 1 deletions
@@ -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; +} |