226

Odp: Skrypty do stacji meteo

sleep 5

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

227

Odp: Skrypty do stacji meteo

Niestety - nadal czasem nie wskakuje temp z 2 czujnika. Dlaczego może tak być?

228

Odp: Skrypty do stacji meteo

Dodam, że gdy ręcznie pobieram temp - wszytsko jest ok.

229

Odp: Skrypty do stacji meteo

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?

230

Odp: Skrypty do stacji meteo

/etc/init.d/php5-fastcgi enable
/etc/init.d/lighttpd enable

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

231

Odp: Skrypty do stacji meteo

Już wcześniej to wpisywałem i niedziałało, teraz jest Ok. Magia. Dziękuje pozdrawiam.

232 (edytowany przez manguscik 2016-02-26 14:08:41)

Odp: Skrypty do stacji meteo

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.txt
Stacja Pogody pracująca na LEDE / Openwrt + arduino. http://dominikowice.one.pl  Pomiar temperatury, ciśnienia, wilgotności  online + wykresy 24 godzinne, 7 dniowe, 30 dniowe, itp. A wszystko to na Routerze NETGEAR WNDR 4300 z wgranym LEDE.

233

Odp: Skrypty do stacji meteo

Cisnienie 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.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

234 (edytowany przez manguscik 2016-02-26 21:55:59)

Odp: Skrypty do stacji meteo

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"

fi

i ma dziłać smile

Stacja Pogody pracująca na LEDE / Openwrt + arduino. http://dominikowice.one.pl  Pomiar temperatury, ciśnienia, wilgotności  online + wykresy 24 godzinne, 7 dniowe, 30 dniowe, itp. A wszystko to na Routerze NETGEAR WNDR 4300 z wgranym LEDE.

235 (edytowany przez manguscik 2016-02-26 22:20:15)

Odp: Skrypty do stacji meteo

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 error
Stacja Pogody pracująca na LEDE / Openwrt + arduino. http://dominikowice.one.pl  Pomiar temperatury, ciśnienia, wilgotności  online + wykresy 24 godzinne, 7 dniowe, 30 dniowe, itp. A wszystko to na Routerze NETGEAR WNDR 4300 z wgranym LEDE.

236

Odp: Skrypty do stacji meteo

Pomóż to razy 10 lub wywal miejsca po przecinku.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

237 (edytowany przez manguscik 2016-02-26 23:09:07)

Odp: Skrypty do stacji meteo

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

Stacja Pogody pracująca na LEDE / Openwrt + arduino. http://dominikowice.one.pl  Pomiar temperatury, ciśnienia, wilgotności  online + wykresy 24 godzinne, 7 dniowe, 30 dniowe, itp. A wszystko to na Routerze NETGEAR WNDR 4300 z wgranym LEDE.

238

Odp: Skrypty do stacji meteo

Ehhh. Jak masz liczbę 1022.56 to pomnożenie jej przez 100 to po prostu usunięcie kropki smile Jak jest liczba stałoprzecinkowa - dopisane dwóch zer. Zwykłe operacje na tekstach bez udziału kalkulatora...

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

239 (edytowany przez manguscik 2016-02-26 23:30:21)

Odp: Skrypty do stacji meteo

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ąć sad

Stacja Pogody pracująca na LEDE / Openwrt + arduino. http://dominikowice.one.pl  Pomiar temperatury, ciśnienia, wilgotności  online + wykresy 24 godzinne, 7 dniowe, 30 dniowe, itp. A wszystko to na Routerze NETGEAR WNDR 4300 z wgranym LEDE.

240

Odp: Skrypty do stacji meteo

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ć.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

241 (edytowany przez manguscik 2016-02-27 13:12:09)

Odp: Skrypty do stacji meteo

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.txt

Tylko 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 smile

Stacja Pogody pracująca na LEDE / Openwrt + arduino. http://dominikowice.one.pl  Pomiar temperatury, ciśnienia, wilgotności  online + wykresy 24 godzinne, 7 dniowe, 30 dniowe, itp. A wszystko to na Routerze NETGEAR WNDR 4300 z wgranym LEDE.

242

Odp: Skrypty do stacji meteo

Więc nie wycinaj po znakach tylko po całym polu.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

243 (edytowany przez manguscik 2016-02-27 15:28:23)

Odp: Skrypty do stacji meteo

Więc tak zrobię tylko pytanie mając w pliku txt np takie dane np.


8.60 1014.89 14.20

aby 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

Stacja Pogody pracująca na LEDE / Openwrt + arduino. http://dominikowice.one.pl  Pomiar temperatury, ciśnienia, wilgotności  online + wykresy 24 godzinne, 7 dniowe, 30 dniowe, itp. A wszystko to na Routerze NETGEAR WNDR 4300 z wgranym LEDE.

244

Odp: Skrypty do stacji meteo

cut -d'.' -f2 /tmp/meteo/ostatniodczyt2.txt | tail -1 | cut -f2 -d" " w tym przypadku.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

245

Odp: Skrypty do stacji meteo

Dzięki Cezary wszystko działa smile dziękuję za pomoc.

Stacja Pogody pracująca na LEDE / Openwrt + arduino. http://dominikowice.one.pl  Pomiar temperatury, ciśnienia, wilgotności  online + wykresy 24 godzinne, 7 dniowe, 30 dniowe, itp. A wszystko to na Routerze NETGEAR WNDR 4300 z wgranym LEDE.

246 (edytowany przez manguscik 2016-03-17 13:01:25)

Odp: Skrypty do stacji meteo

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 .

Stacja Pogody pracująca na LEDE / Openwrt + arduino. http://dominikowice.one.pl  Pomiar temperatury, ciśnienia, wilgotności  online + wykresy 24 godzinne, 7 dniowe, 30 dniowe, itp. A wszystko to na Routerze NETGEAR WNDR 4300 z wgranym LEDE.

247

Odp: Skrypty do stacji meteo

# echo $((-1+-2))
-3

tak.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

248

Odp: Skrypty do stacji meteo

ok dołożyłem nawias przy drugiej zmiennej i jest oki big_smile

roznica2=$(($TCN2-($TCO2)))

Dzięki za naprowadzenie

Stacja Pogody pracująca na LEDE / Openwrt + arduino. http://dominikowice.one.pl  Pomiar temperatury, ciśnienia, wilgotności  online + wykresy 24 godzinne, 7 dniowe, 30 dniowe, itp. A wszystko to na Routerze NETGEAR WNDR 4300 z wgranym LEDE.

249

Odp: Skrypty do stacji meteo

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/update

Czy 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?

===========================================
WRT160NL v1 CUR01 with Gargoyle PL  by obsy

TL-MR3420 v2 (MiFi) + E3372h-153 (nie hilink) = Play

250

Odp: Skrypty do stacji meteo

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.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.