Odp: Skrypty do stacji meteo
sleep 5
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
eko.one.pl → Termometr → Skrypty do stacji meteo
Strony Poprzednia 1 … 8 9 10 11 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
sleep 5
Niestety - nadal czasem nie wskakuje temp z 2 czujnika. Dlaczego może tak być?
Dodam, że gdy ręcznie pobieram temp - wszytsko jest ok.
Witam po dłuższej przerwie. Instalowałem od nowa skrypty i serwer php. Teraz żeby działało muszę ręcznie uruchamiać /etc/init.d/php5-fastcgi start i /etc/init.d/lighttpd start. Dlaczego nie startuje automatycznie?
/etc/init.d/php5-fastcgi enable
/etc/init.d/lighttpd enable
Już wcześniej to wpisywałem i niedziałało, teraz jest Ok. Magia. Dziękuje pozdrawiam.
Mam skrypt który pobiera dane z czujników ale czujnik ciśnienia parę razy na dobę podaję złe odczyty np 855 hPa lub 1300 hPA i to powoduje że gnuplot źle generowanie wykres z dużą ilością danych na osi.
I teraz pytanie jak wyeliminować ten błędny odczyt zmiennej CA ?
Czy zastosować warunek if jeżeli CA jest większe od 1200 to wstaw przedostatni odczyt jeżeli ok to nie robimy nic
i tak samo dla CA jeśli jest mniejsze od 970 to wstaw przedostatni odczyt jeżeli ok to nie robimy nic.
Wstępnie warunek powinien wyglądać tak ale jak go wstawić w skrypt który wkleiłem poniżej.
if [ $CA -le 970 ] ; then
wstawienie wartości przed ostatniej
else
(jak ma nic nie robić to chyba nie trzeba pisać nic pójdzie dalej
if [ $CA -ge 1200 ] ; then
wstawienie wartości przed ostatniej
else
(jak ma nic nie robić to chyba nie trzeba pisać nic pójdzie dalej)
fi
#!/bin/sh
echo "?" > /dev/ttyACM0 && tail -f /dev/ttyACM0 > /tmp/meteo/odczyt2.txt &
sleep 4
killall -9 tail
#pobierz datę i czas
data=`date +"%Y-%m-%d-%H:%M:%S"`
TW1=`cut -d' ' -f11 /tmp/meteo/odczyt.txt| tail -1 `
CA=`cut -d' ' -f3 /tmp/meteo/odczyt.txt | tail -1 `
W1=`cut -d' ' -f7 /tmp/meteo/odczyt.txt | tail -1 `
T0=`cut -d' ' -f15 /tmp/meteo/odczyt.txt | tail -1 `
T2=`cut -d' ' -f19 /tmp/meteo/odczyt.txt | tail -1 `
T4=`cut -d' ' -f23 /tmp/meteo/odczyt.txt | tail -1 `
T6=`cut -d' ' -f27 /tmp/meteo/odczyt.txt | tail -1 `
T3=`cut -d' ' -f21 /tmp/meteo/odczyt.txt | tail -1 `
T1=`cut -d' ' -f17 /tmp/meteo/odczyt.txt | tail -1 `
T5=`cut -d' ' -f25 /tmp/meteo/odczyt.txt | tail -1 `
T7=`cut -d' ' -f1 /tmp/meteo/odczyt.txt | tail -1 `
TW2=`cut -d' ' -f13 /tmp/meteo/odczyt.txt | tail -1 `
T8=`cut -d' ' -f1 /tmp/meteo/odczyt.txt | tail -1 `
T9=`cut -d' ' -f1 /tmp/meteo/odczyt.txt | tail -1 `
TC=`cut -d' ' -f5 /tmp/meteo/odczyt.txt | tail -1 `
W2=`cut -d' ' -f9 /tmp/meteo/odczyt.txt | tail -1 `
mysql -h host -u root -phaslo -D meteotest -e "INSERT INTO odczyty (id, data, CA, TC, W1, W2, TW1, TW2, T0, T1, T2, T3, T4, T5, T6) VALUES (' ', '$data', '$CA', '$TC', '$W1', '$W2', '$TW1', '$TW2', '$T0', '$T1', '$T2', '$T3', '$T4', '$T5', '$T6')"
#rm /tmp/meteo/odczyt.txtCisnienie nie zmieni się od razu. Więc jeżeli próba ma wartość powiedzmy większą lub mniejszą o 50 niz poprzednia to nie dodawaj do bazy.
Oki idąc sugestią Cezarego napisałem taki skrypt sprawdzający:
#!/bin/sh
CA=1009
OLDCA=1020
roznica=$(($CA-$OLDCA))
if [ $roznica -gt 10 ]; then
echo Nowy odczyt wynosi "$CA" i nie miesci sie w tolerancji odczytu +-10 do ostatnego "$OLDCA" wiec laduje ostatni odczyt "$OLDCA"
elif [ $roznica -lt -10 ]; then
echo Nowy odczyt wynosi "$CA" i jest mniejszy niz ostatni "$OLDCA" o "$roznica" wiec laduje ostatni"$OLDCA"
else
echo Nowy odczyt "$CA" miesci sie w tolerancji odczytu +-10 do ostaniegop odczytu "$OLDCA" wiec laduje "$CA"
fii ma dziłać ![]()
Albo i nie będzie działać bo testowałem na liczbach całkowitych a liczby zmiennoprzecinkowe powodują błąd
/bin/laduj.sh: line 5: arithmetic syntax errorPomóż to razy 10 lub wywal miejsca po przecinku.
No tak ale CA już jest zmienna zmiennoprzecinkową i nie mogę jej pomnożyć razy 10
Myślałem o zastosowaniu kalkulatora BC poprzez
echo $(echo "$CA*10" | bc -l)
ale to nie pójdzie więc na razie nie wpadłem na to jak mnożyć razy 10
Ehhh. Jak masz liczbę 1022.56 to pomnożenie jej przez 100 to po prostu usunięcie kropki
Jak jest liczba stałoprzecinkowa - dopisane dwóch zer. Zwykłe operacje na tekstach bez udziału kalkulatora...
NO tak to ale w którym miejscu wykonać mnożenie lub jak bo zmienna CA jest już zmiennoprzecinkowa i nie mogę jej już mnożyć w bash-u ? sorki za pytania ale nie mogę tego ogarnąć ![]()
Oczywiście PRZED porównaniem wartości. Sam napisałeś że porównanie się nie udaje jak liczba jest zmiennoprzecinkowa. Więc przed porównaniem usuń przecinki (kropki) doprowadzając je do postaci stałoprzecinkowej. Nawet przecież możesz urwać tą końcówkę bo i tak jest zbędna i nie wpływa na to co chcesz zrobić.
Cazary więc tak skrypt dodający do bazy wyniki pomiarów + sprawdzanie ciśnienia +- 10 działa i wygląda tak:
#!/bin/sh
echo "?" > /dev/ttyACM0 && tail -f /dev/ttyACM0 > /tmp/meteo/odczyt.txt &
sleep 4
killall -9 tail
mysql -h host -u root -phaslo -D meteo -e "SELECT data,CA FROM odczyty ORDER BY data DESC limit 1 INTO OUTFILE '/tmp/meteo/ostatniodczyt.txt' FIELDS TERMINATED BY ' ';"
#pobierz datę i czas
data=`date +"%Y-%m-%d-%H:%M:%S"`
#Aktualny odczyt
CAN2=`cut -d' ' -f3 /tmp/meteo/odczyt.txt | tail -1 `
#aktulany odczyt bez przecinka
CAN=`cut -c 7-10 /tmp/meteo/odczyt.txt | tail -1 `
#Ostani odczyt
CAO2=`cut -d' ' -f3 /tmp/meteo/ostatniodczyt.txt | tail -1 `
#Ostatni odczyt bez przecinka
CAO=`cut -c 22-25 /tmp/meteo/ostatniodczyt.txt | tail -1 `
#sprawdzamy rożnice
roznica=$(($CAN-$CAO))
#rożnica wieksza niz + 10 ładujemy ostatni odczyt
if [ $roznica -gt 10 ]; then
CA=$CAO2
#rożnica wieksza niz - 10 ladujemy ostatni odczyt
elif [ $roznica -lt -10 ]; then
CA=$CAO2
#odczyt miesci sie w +- 10 wiec dodajmy nowy
else
CA=$CAN2
fi
echo CA do bazy: "$CA"
echo CA ostatnie: "$CAO2"
TW1=`cut -d' ' -f11 /tmp/meteo/odczyt.txt| tail -1 `
W1=`cut -d' ' -f7 /tmp/meteo/odczyt.txt | tail -1 `
T0=`cut -d' ' -f15 /tmp/meteo/odczyt.txt | tail -1 `
T2=`cut -d' ' -f19 /tmp/meteo/odczyt.txt | tail -1 `
T4=`cut -d' ' -f23 /tmp/meteo/odczyt.txt | tail -1 `
T6=`cut -d' ' -f27 /tmp/meteo/odczyt.txt | tail -1 `
T3=`cut -d' ' -f21 /tmp/meteo/odczyt.txt | tail -1 `
T1=`cut -d' ' -f17 /tmp/meteo/odczyt.txt | tail -1 `
T5=`cut -d' ' -f25 /tmp/meteo/odczyt.txt | tail -1 `
T7=`cut -d' ' -f1 /tmp/meteo/odczyt.txt | tail -1 `
TW2=`cut -d' ' -f13 /tmp/meteo/odczyt.txt | tail -1 `
T8=`cut -d' ' -f1 /tmp/meteo/odczyt.txt | tail -1 `
T9=`cut -d' ' -f1 /tmp/meteo/odczyt.txt | tail -1 `
TC=`cut -d' ' -f5 /tmp/meteo/odczyt.txt | tail -1 `
W2=`cut -d' ' -f9 /tmp/meteo/odczyt.txt | tail -1 `
mysql -h host -u root -phaslo -D meteo -e "INSERT INTO odczyty (id, data, CA, TC, W1, W2, TW1, TW2, T0, T1, T2, T3, T4, T5, T6) VALUES (' ', '$data', '$CA', '$TC', '$W1', '$W2', '$TW1', '$TW2', '$T0', '$T1', '$T2', '$T3', '$T4', '$T5', '$T6')"
rm /tmp/meteo/ostatniodczyt.txtTylko chyba jest jeden mankament tego sprawdzania bo jak ciśnienie spadnie poniżej 1000 to polencie cut -c które wycina pomiar bez przecinka może źle wyciąć bo będzie trzy cyfry i . (przecinek) ale to się okaże jak spadnie poniżej 1000 hPa.
Jak widać rozwiążesz jeden problem to pojawia się drugi ![]()
Więc nie wycinaj po znakach tylko po całym polu.
Więc tak zrobię tylko pytanie mając w pliku txt np takie dane np.
8.60 1014.89 14.20aby wyciąć pierwszą cyfre 8 robię to tak :
cut -f1 -d '.' /tmp/meteo/ostatniodczyt2.txt | tail -1
i jest oki ale jak teraz wyciąć cyfre 1014 bo jak zrobię tak :
cut -f2 -d '.' /tmp/meteo/ostatniodczyt2.txt | tail -1
to wycina mi z cyfrą 60 tak jak widać poniżej:
60 1014
bo jak zrobię zaś
cut -d ' ' -f2- /tmp/meteo/ostatniodczyt2.txt | tail -1
to wycina od 1014 do końca lini jak mam zapisać aby wyciął do kropki
cut -d'.' -f2 /tmp/meteo/ostatniodczyt2.txt | tail -1 | cut -f2 -d" " w tym przypadku.
Dzięki Cezary wszystko działa
dziękuję za pomoc.
Mam skrypt który sprawdza różnice pomiędzy nowym a starym odczytem i dziś pojawił się problem z działaniem skryptu bo ostatni odczyt był liczbą -1 i wywaliło mi błąd line 32: arithmetic syntax error .
tak to wygląda obliczanie roznicy : roznica2=$(($TCN2-$TCO2))
i teraz jak pierwsza zmienna TCN2 jest ujemna nie ma problemu ale jak już druga zmienna TCO2 jest ujemna wywala mi błąd arithmetic syntax error .
# echo $((-1+-2))
-3
tak.
ok dołożyłem nawias przy drugiej zmiennej i jest oki
roznica2=$(($TCN2-($TCO2)))
Dzięki za naprowadzenie
Mam 2 skrypty które odczytują temperaturę z czujników i:
1-szy: zaczytuje temperaturę i wstawia sed-em do html-a wyniki pomiarów - wykonuje się cyklicznie co 1 min.
2-gi: zaczytuje temperaturę (takie samo zapytanie jak w 1-szym skrypcie) i wysyła curl-em na serwery thingspeak-a - wykonuje się cyklicznie co 5 min.
Problem polega na tym, że na thingspeak-u pokazuje się tylko odczyt temperatury z ostatniego czujnika, gdy wykonuję skrypt ręcznie odczyt jest upload-owany ze wszystkich czujników.
#!/bin/sh
# thingspeak api key
api_key='api_key'
# temperatura w salonie
temp0=`/usr/bin/digitemp_DS9097U -c /root/.digitemprc -t 0 -q -o%.2C`
# temperatura w pokoju 1
temp1=`/usr/bin/digitemp_DS9097U -c /root/.digitemprc -t 1 -q -o%.2C`
# temperatura w pokoju 2
temp2=`/usr/bin/digitemp_DS9097U -c /root/.digitemprc -t 2 -q -o%.2C`
# temperatura w sypialni
temp3=`/usr/bin/digitemp_DS9097U -c /root/.digitemprc -t 3 -q -o%.2C`
# post the data to thingspeak
curl -k --data "api_key=$api_key&field1=$temp0&field2=$temp1&field3=$temp2&field4=$temp3" https://api.thingspeak.com/updateCzy problem nie polega przypadkiem na tym, że co 5 min. obydwa skrypty wykonują identyczne polecenie i "coś" w transmisji zostaje urwane z tego powodu? Czy rozwiązaniem jest połączenie tych dwóch skryptów w jeden, czy ewentualnie poprawić którys ze skryptów?
To:
curl -k --data "api_key=$api_key&field1=$temp0&field2=$temp1&field3=$temp2&field4=$temp3" https://api.thingspeak.com/update
Zmień na:
DATA="api_key=$api_key&field1=$temp0&field2=$temp1&field3=$temp2&field4=$temp3"
curl -k --data "$DATA" https://api.thingspeak.com/update
echo "$DATA" >> /tmp/log.txt
Będziesz dokładnie widział co jest wysyłanie, więc się dowiesz czy problem jest w odczycie danych czy serwisie.
Strony Poprzednia 1 … 8 9 10 11 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
eko.one.pl → Termometr → Skrypty do stacji meteo
Forum oparte o PunBB, wspierane przez Informer Technologies, Inc