add wind check in Weather_chk

This commit is contained in:
2020-10-22 14:37:07 +03:00
parent c53e6e4932
commit 6ce4855491
13 changed files with 105 additions and 9 deletions

View File

@@ -23,6 +23,7 @@
#include <usefull_macros.h>
#include "cmdlnopts.h"
#define ERRCTR_MAX 7
#define BUFLEN 2048
/**
@@ -53,38 +54,47 @@ int main(int argc, char **argv){
initial_setup();
G = parse_args(argc, argv);
TTY_descr *dev = new_tty(G->ttyname, G->speed, 64);
if(!dev || !(dev = tty_open(dev, 1))) return 1; // open exclusively
if(!dev) return 1;
size_t got, L = 0;
char buff[BUFLEN], *ptr = buff;
int errctr = 0;
for(errctr = 0; errctr < 5; ++errctr){
for(; errctr < ERRCTR_MAX; ++errctr){
if(!tty_open(dev, 1)){
sleep(1);
continue;
}
while(read_tty(dev)); // clear buffer
if(write_tty(dev->comfd, "?U\r\n", 3)){
WARNX("write_tty()");
continue;
}
double t0 = dtime();
while(dtime() - t0 < 1.){ // timeout - 1s
while(dtime() - t0 < 10.){ // timeout - 10s
got = read_tty(dev);
if(got == 0) continue;
t0 = dtime();
if(L + got > BUFLEN - 1) break;
L += got;
buff[L] = 0;
if(BUFLEN > L){
strncpy(ptr, dev->buf, dev->buflen);
ptr += got;
}else break;
if(buff[L-1] == '\n' && L > 8) break; // full line received
}
buff[L] = 0;
if(L == 0){
WARNX("Got nothing from TTY");
continue;
}else if(strncmp(buff, "<?U>", 4)){
WARNX("Wrong answer: %s", buff);
L = 0;
ptr = buff;
continue;
}else break;
}
if(errctr == 5){
close_tty(&dev);
while(read_tty(dev));
close_tty(&dev);
if(errctr == ERRCTR_MAX){
ERRX("No connection to meteostation");
}
ptr = &buff[4];
@@ -96,10 +106,18 @@ int main(int argc, char **argv){
if(eol) *eol = 0;
DBG("Now: %s\n", ptr);
if(G->showraw) green("%s\n", ptr);
double rain = 1., clouds = 1.;
double rain = 1., clouds = 1., temperature = -300., wind = 100.;//, windpeak = 100.;
if(!getpar(ptr, &rain, "RT")) printf("Rain=%g\n", rain);
if(!getpar(ptr, &clouds, "WU")) printf("Clouds=%g\n", clouds);
close_tty(&dev);
if(rain > 0.1 || clouds < 1800.) return 1;
if(!getpar(ptr, &temperature, "TE")) printf("Exttemp=%g\n", temperature);
if(!getpar(ptr, &wind, "WG")){
wind /= 3.6;
printf("Wind=%.1f\n", wind);
}
/* if(!getpar(ptr, &windpeak, "WS")){
windpeak /= 3.6;
printf("Windpeak=%.1f\n", windpeak);
}*/
if(rain > 0.1 || clouds < 1900. || wind > 20.) return 1;
return 0;
}