// gcc weatherstation_test.c -o weatherstation_test `pkg-config --libs --cflags libmodbus` #include #include #include #include #include #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("rain=%d\n", mbregister[6]&1); printf("GPS/RTC=%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; }