aboutsummaryrefslogtreecommitdiffstats
path: root/src/weatherstation_test.c
blob: b2cfab425c4404b8b76b9a648a689a63e21cffa6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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;
}