From 6ce4855491d22015a9834e577c70bef34c00d072 Mon Sep 17 00:00:00 2001 From: Edward Emelianov Date: Thu, 22 Oct 2020 14:37:07 +0300 Subject: [PATCH] add wind check in Weather_chk --- Auxiliary_utils/Weather_chk/main.c | 36 +++++++++++++----- Auxiliary_utils/bash_scripts/getflats | 26 +++++++++++++ Auxiliary_utils/bash_scripts/run | 52 ++++++++++++++++++++++++++ Daemons/astrosib/HWoff | 0 Daemons/astrosib/HWon | 0 Daemons/astrosib/STARTobs | 0 Daemons/astrosib/STOPobs | 0 Daemons/netsocket/HWpoweroff | 0 Daemons/netsocket/HWpoweron | 0 Daemons/netsocket/MOUNTpoweronoff | 0 Daemons/teldaemon/teldaemon | Bin 38288 -> 0 bytes Docs/Alignment/makelist | 0 Docs/focus | 0 13 files changed, 105 insertions(+), 9 deletions(-) create mode 100755 Auxiliary_utils/bash_scripts/getflats create mode 100755 Auxiliary_utils/bash_scripts/run mode change 100755 => 100644 Daemons/astrosib/HWoff mode change 100755 => 100644 Daemons/astrosib/HWon mode change 100755 => 100644 Daemons/astrosib/STARTobs mode change 100755 => 100644 Daemons/astrosib/STOPobs mode change 100644 => 100755 Daemons/netsocket/HWpoweroff mode change 100644 => 100755 Daemons/netsocket/HWpoweron mode change 100644 => 100755 Daemons/netsocket/MOUNTpoweronoff delete mode 100644 Daemons/teldaemon/teldaemon mode change 100644 => 100755 Docs/Alignment/makelist mode change 100644 => 100755 Docs/focus diff --git a/Auxiliary_utils/Weather_chk/main.c b/Auxiliary_utils/Weather_chk/main.c index 3711638..a18d032 100644 --- a/Auxiliary_utils/Weather_chk/main.c +++ b/Auxiliary_utils/Weather_chk/main.c @@ -23,6 +23,7 @@ #include #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, "", 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; } diff --git a/Auxiliary_utils/bash_scripts/getflats b/Auxiliary_utils/bash_scripts/getflats new file mode 100755 index 0000000..c16116c --- /dev/null +++ b/Auxiliary_utils/bash_scripts/getflats @@ -0,0 +1,26 @@ +#!/bin/bash + +A="90:00:00" +H="85:00:00" + +function sendcmd(){ + echo $1 | nc 192.168.70.33 10001 -q10 +} + +for x in $(seq 1 10); do +sendcmd ":Sz${A}#" +sendcmd ":Sa${H}#" +sendcmd ":MS#" +while true; do + ANS=$(sendcmd ":Gstat#") + echo $ANS + [ $ANS == "0#" ] && break + sleep 2 +done + +sleep 5 +./preflash +/usr/bin/fli_control -r /tmp/10micron.fitsheader -x 15000 -Y flat flat +done + +fli_control -v32 -h32 -x1 -d diff --git a/Auxiliary_utils/bash_scripts/run b/Auxiliary_utils/bash_scripts/run new file mode 100755 index 0000000..08328a2 --- /dev/null +++ b/Auxiliary_utils/bash_scripts/run @@ -0,0 +1,52 @@ +#!/bin/bash +RA="00:12:15" +DEC="50:25:21" +OBJ="EGGR381" +OBS="Emelianov E.V." + +last=$(date -d "Oct 23 05:30" +%s) +echo "Time diff: $(($last-$(date +%s)))" +if [ $(($last-$(date +%s))) -lt 3600 ]; then + echo "There's less an hour for observation!" + exit 2 +fi +export http_proxy="" + +echo "GoTo object: ${RA} ${DEC}" +send_coords -r${RA} -d${DEC} +echo "Start taking object" + +badweatger=0 +while true; do + now=$(date +%s) + chkweather -r -d /dev/ttyS3 > lastweather && badweather=0 || badweather=$((badweather+1)) + #echo "badweather: $badweather" + [ $badweather -gt 5 ] && break + #continue + if [ "$now" -lt "$last" ]; then + ST=$(send_coords | awk '{print $4}') + if [ $ST -ne "0" ]; then + touch lastpointing + send_coords -r${RA} -d${DEC} + else + preflash + /usr/bin/fli_control -r /tmp/10micron.fitsheader -x 60000 -N "${OBS}" -O "${OBJ}" "$OBJ" + fi + else + break + fi +done +#exit 0 + +echo "closed" > closed +curl localhost:4444/close +curl localhost:55555/close + +for x in $(seq 1 10); do + preflash + /usr/bin/fli_control -x60000 -d dark + preflash + /usr/bin/fli_control -x1 -d bias +done + +STOPobs diff --git a/Daemons/astrosib/HWoff b/Daemons/astrosib/HWoff old mode 100755 new mode 100644 diff --git a/Daemons/astrosib/HWon b/Daemons/astrosib/HWon old mode 100755 new mode 100644 diff --git a/Daemons/astrosib/STARTobs b/Daemons/astrosib/STARTobs old mode 100755 new mode 100644 diff --git a/Daemons/astrosib/STOPobs b/Daemons/astrosib/STOPobs old mode 100755 new mode 100644 diff --git a/Daemons/netsocket/HWpoweroff b/Daemons/netsocket/HWpoweroff old mode 100644 new mode 100755 diff --git a/Daemons/netsocket/HWpoweron b/Daemons/netsocket/HWpoweron old mode 100644 new mode 100755 diff --git a/Daemons/netsocket/MOUNTpoweronoff b/Daemons/netsocket/MOUNTpoweronoff old mode 100644 new mode 100755 diff --git a/Daemons/teldaemon/teldaemon b/Daemons/teldaemon/teldaemon deleted file mode 100644 index 8bc4430b729dd3a0d5c18563f5ce149c666330a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38288 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 V#