Temat: Jak usunąć puste odczyty digitemp i DS18B20?

Witam, posiadam MR3220 z podłączonym USB/1WIRE i na nim wiszą 4szt DS18B20 - wszstko ładnie jest odczytywane co 15min przez CRON za pomocą skryptu:

"/temperatura/gettemp.sh
echo `digitemp_DS9097 -t0 -q -o "%Y-%m-%d %H:%M:%S %.2C"` >> /temperatura/temppiec.txt
echo `digitemp_DS9097 -t1 -q -o "%Y-%m-%d %H:%M:%S %.2C"` >> /temperatura/tempout.txt
echo `digitemp_DS9097 -t2 -q -o "%Y-%m-%d %H:%M:%S %.2C"` >> /temperatura/tempbojler.txt
echo `digitemp_DS9097 -t3 -q -o "%Y-%m-%d %H:%M:%S %.2C"` >> /temperatura/tempsalon.txt"

ale co jakiś czas jeden czujnik nie zatrybi i mam puste wpisy w pliku np:

"/temperatura/temppiec.txt
2016-01-07 03:47:02 60.38
2016-01-07 04:02:02 58.13
2016-01-07 04:17:11 58.13


2016-01-07 05:02:02 51.69
2016-01-07 05:17:03 48.00
2016-01-07 05:32:03 46.38
2016-01-07 05:47:02 56.88
2016-01-07 06:02:02 57.69
2016-01-07 06:17:02 55.88
2016-01-07 06:32:02 57.75
2016-01-07 06:47:02 57.63
2016-01-07 07:02:02 52.56
2016-01-07 07:17:02 52.94
2016-01-07 07:32:02 53.25
2016-01-07 07:47:02 52.56
2016-01-07 08:02:02 51.94"

I wtedy na wykresie powstają dziury, które bardzo mi przeszkadzają wizualnie.

http://tufotki.pl/iYGuf

Czy jest możliwość wywołania digitempu w  taki sposób by "brak odczytu" nie kierował do pliku z danymi, lub o jakąś cykliczną konwersje pliku z danymi która powodowała by usuwanie linijek bez danych?

Z góry dziekuję zapomoc i pozdrawiam

2

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

A choćby dopisz sobie sprawdzenie czy string jest pusty przed "echowaniem" do pliku, albo wrzucaj wyniki do jakiegoś pliku temp a potem usuwając puste linie wrzucaj wyniki do docelowego. Możliwości masa smile

3

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

Ok ok, z tym stringiem fajnie brzmi, to co miał bym przed echo dopisać? za pewne jakiś IF?

4 (edytowany przez g0f3r 2016-01-07 10:45:03)

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

Najlepiej wynik digitempa wrzucaj do zmiennej;
np
zmienna=$(digitemp_DS9097 -t0 -q -o "%Y-%m-%d %H:%M:%S %.2C")
if [ -z "$zmienna" ]
then
echo "pusta, nic nie robie"
else
echo "jest wynik, wrzucam do pliku"
fi

albo

if [ ! -z "$zmienna" ]
then
echo ""jest wynik, wrzucam do pliku"
else
echo "pusta, nic nie robie"
fi
tak lepiej ;]

5

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

Dzięki, wieczorem sprawdzę czy wszystko gra... i się odezwę. Pozdrawiam

6

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

if [ ! -z "$zmienna" ] to to samo co if [ -n "$zmienna" ] w tym przypadku smile

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

7

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

Oj tam oj tam, ma działać smile

8

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

Działa! :

/temperatura/gettemp.sh

zmienna=$(digitemp_DS9097 -t0 -q -o "%Y-%m-%d %H:%M:%S %.2C")
if [ ! -z "$zmienna" ]
then
echo "$zmienna" >> /temperatura/temppiec.txt
else
echo
fi

zmienna=$(digitemp_DS9097 -t1 -q -o "%Y-%m-%d %H:%M:%S %.2C")
if [ ! -z "$zmienna" ]
then
echo "$zmienna" >> /temperatura/tempout.txt
else
echo
fi

zmienna=$(digitemp_DS9097 -t2 -q -o "%Y-%m-%d %H:%M:%S %.2C")
if [ ! -z "$zmienna" ]
then
echo "$zmienna" >> /temperatura/tempbojler.txt
else
echo
fi

zmienna=$(digitemp_DS9097 -t3 -q -o "%Y-%m-%d %H:%M:%S %.2C")
if [ ! -z "$zmienna" ]
then
echo "$zmienna" >> /temperatura/tempsalon.txt
else
echo
fi

Jeśli coś spartoliłem to piszcie ale na razie nie zauważam błędów w działaniu.

9

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

To else echo nie jest potrzebne.

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

10

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

Potrzebne nie jest, ale jak wywołuje warunek to wypada podać coś z poza zakładanego zakresu - profesjonalnie wygląda ;] (tak mówił mój Pan z programowania)...

11

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

Teoria teorią ale tu nie jest potrzebne.

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

12 (edytowany przez mistrzluk 2016-03-14 07:27:19)

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

Witam, ponownie, jeszcze jedno do powyższego - jak wykluczyć jeszcze w tym kodzie temperature 85 stopni (często błąd odczytu czujnika):

/temperatura/gettemp.sh
zmienna=$(digitemp_DS9097 -t0 -q -o "%Y-%m-%d %H:%M:%S %.2C")
if [ ! -z "$zmienna" ] && "(coś co wyklucza liczbe 85)"
then
echo "$zmienna" >> /temperatura/temppiec.txt
else
echo
fi

Z góry dziekuję za odpowiedź.

13 (edytowany przez Cezary 2016-03-14 07:49:19)

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

if [ $zmienna -tl 85 ];
coś zrób
fi
Jeżeli zmienna ma wartość mniejszą niż 85 to coś zrób.

PS. Nie zadziała jak liczba będzie miała znak dziesiętny.

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

14

Odp: Jak usunąć puste odczyty digitemp i DS18B20?

Miałem podobny problem ale z czujnikiem ciśnienia z błędnym odczytem i liczbą po przecinku zerknij sobie tutaj:

http://eko.one.pl/forum/viewtopic.php?id=7073&p=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.