1

(45 odpowiedzi, napisanych Termometr)

Na koniec dzialajacy tak jak nalezy jeden skrypt. Moze komus kiedys sie przyda pomimo tego, ze na tym forum w roznych miejscach ma niezbedne informacje.


root@Gargoyle:~$ cat /usr/sbin/templot.sh
#!/bin/sh

echo `digitemp_DS9097U -a -q -o "%Y-%m-%d %H:%M:%S %.2C"` >> /usr/meteo/temperatura.txt

AKT=$(cut -d' ' -f6 /usr/meteo/temperatura.txt | tail -1)
MIN=$(cut -d' ' -f6 /usr/meteo/temperatura.txt | sort -n | head -1)
MAX=$(cut -d' ' -f6 /usr/meteo/temperatura.txt | sort -n | tail -1)


GNUPLOT_COMMAND="/tmp/gnuplot_cmd"
touch ${GNUPLOT_COMMAND}

cat > ${GNUPLOT_COMMAND} << __EOF__
set terminal png small size 800,500
set output '/www/temp.png'
set title "Wykres temperatury"
set xlabel "godzina"
set timefmt "%Y-%m-%d %H:%M:%S"
set xdata time
set ylabel "temperatura °C"
set format x "%H"
set grid
set key left
set style line 1 linecolor rgbcolor "#0000AA
set key spacing 1.3
set label "aktualna: ${AKT}" at graph 0.4, graph 0.97
set label "minimalna: ${MIN}" at graph 0.4, graph 0.92
set label "maksymalna: ${MAX}" at graph 0.4, graph 0.87
plot '/usr/meteo/temperatura.txt' using 4:6 t 'zewnętrzny' with lines lt 1, \
'/usr/meteo/temperatura.txt' using 10:12 t 'parapet' with lines lw 1, \
'/usr/meteo/temperatura.txt' using 1:3 t 'ziemia' with lines lw 1, \
'/usr/meteo/temperatura.txt' using 7:9 t 'luzny' with lines lw 1, \
'/usr/meteo/temperatura.txt'  using 4:6 smooth bezier t 'dane usrednione' with lines lt 1
quit
__EOF__

gnuplot ${GNUPLOT_COMMAND}

2

(45 odpowiedzi, napisanych Termometr)

Ok, no to ponownie dziekuje za kolejna porcje wiedzy. Zalozenie juz rozumiem i popracuje nad tym aby byl jeden skrypt.

3

(45 odpowiedzi, napisanych Termometr)

Jeszcze szybki dopisek.. nie wiem jak dziala polecenie SED ale w kazdym razie dziala i na wykresie jest to co ma byc smile Przynajmniej wartosc aktualna na ktorej mi najbardziej zalezalo.
Bardzo dziekuje za pomoc. Przeanalizuje pozniej co to sed i jak dziala to pewnie dojde do tego jak mu przemycic tez dane dla min i max.

4

(45 odpowiedzi, napisanych Termometr)

Cezary, nie upieram sie. Po prostu nie rozumiem niektorych procesow wiec podchodze do tego moze czasem naiwnie a czasem bardzo bezposrednio (przy okazji testujac kilkanascie razy rozne opcje.. czasem zupelnie bezsensowne dla osoby, ktora wie jak to powinno wygladac).
Moze inaczej.. w takim razie w ktorym miejscu wprowadzic mu informacje ile wynosi wartosc AKT? Cron uruchamia co 10 minut gettemp.sh. W nim uzupelniane sa pomiary temperatury no i kolejny krok to rysowanie przez gnuplota. Wolalbym sobie nie utrudniach zycia przez niepotrzebne "upieranie sie". Zwlaszcza, ze oprocz AKT beda jeszcze wartosci minimalne i maksymalne albo i jeszcze cos.

5

(45 odpowiedzi, napisanych Termometr)

Opiera sie to u mnie na dwoch skryptach.

root@Gargoyle:~$ cat /usr/sbin/gettemp.sh
echo `digitemp_DS9097U -a -q -o "%Y-%m-%d %H:%M:%S %.2C"` >> /usr/meteo/temperatura.txt
AKT=$(cut -d' ' -f6 /usr/meteo/temperatura.txt | tail -1)
gnuplot /usr/sbin/plot.cmd



root@Gargoyle:~$ cat /usr/sbin/plot.cmd
set terminal png small size 800,500

# definiowanie pliku z danymi do kreslenia wykresu
set output '/www/temperatura.png'

set title "Wykres temperatury"
set xlabel "godzina"
set timefmt "%Y-%m-%d %H:%M:%S"
set xdata time

set ylabel "temperatura °C"
set format x "%H"

# wyswietla siatke na wykresie
set grid

set key left
set style line 1 linecolor rgbcolor "#0000AA
set key spacing 1.3

set label "aktualna: ${AKT}" at graph 0.9, graph 0.85

plot '/usr/meteo/temperatura.txt' using 4:6 t 'zewnętrzny' with lines lt 1, \
'/usr/meteo/temperatura.txt' using 10:12 t 'parapet' with lines lw 1, \
'/usr/meteo/temperatura.txt' using 1:3 t 'ziemia' with lines lw 1, \
'/usr/meteo/temperatura.txt' using 7:9 t 'luzny' with lines lw 1, \
'/usr/meteo/temperatura.txt'  using 4:6 smooth bezier t 'dane usrednione' with lines lt 1

quit

6

(45 odpowiedzi, napisanych Termometr)

Kamillo, pojecia nie mam czy byloby mi lepiej. Czytalem i doczytalem, ze moge to zrobic digitemp'em i gnuplottem (zreszta tutaj artykule ). No to przewalczylem i mam odczyty, mam wykres tylko brakuje mi tych kilku napisow na grafice. Majac to zapominam, ze jest cos takiego jak gnuplot czy inny digitemp smile

7

(45 odpowiedzi, napisanych Termometr)

Ponownie dziekuje. Teraz domyslam sie, ze gnuplot wie ile to jest AKT tylko niestety nie chce tego przeniesc na wykres. W okreslonym miejscu jest po prostu napis    aktualna: ${AKT}

8

(45 odpowiedzi, napisanych Termometr)

Dziekuje i pozwole sobie meczyc dalej smile. Wyskakuje

root@Gargoyle:~$ gnuplot /usr/sbin/plot.cmd

AKT=$(cut -d' ' -f6 /usr/meteo/temperatura.txt | tail -1)
     ^
"/usr/sbin/plot.cmd", line 2: Column number expected

9

(45 odpowiedzi, napisanych Termometr)

Mam te dane o ktore mi chodzilo w oddzielnych plikach.  Moze to jak to wykombinowalem jest "naokretke" ale jakos tak wyszlo.
Z jakiegos powodu polecenie sort nie dziala tak jakbym chcial tzn. nie potrafie go zmusic do sortowania Ntej kolumny. Obojetnie jaki parametr wpisze (np. sort -k6n) to i tak sortuje mi pierwsza kolumne. 
Plik temperatura.txt to wiele linijek czegos takiego:

2012-09-30 19:30:02 21.50 2012-09-30 19:30:03 13.50 2012-09-30 19:30:04 23.69 2012-09-30 19:30:06 22.50

Koniec koncow zrobilem w dodatkowym skrypcie takie wpisy:

cut -d' ' -f6 /usr/meteo/temperatura.txt | sort -n | tail -1 >/usr/meteo/temp_max.txt
cut -d' ' -f6 /usr/meteo/temperatura.txt | sort -n | head -1 >/usr/meteo/temp_min.txt
cut -d' ' -f6 /usr/meteo/temperatura.txt | tail -1 >/usr/meteo/temp_akt.txt

No i mam w odrebnych plikach swoje temperatury do wklejenia.

Tylko kombinuje i grzebie po necie i nie potrafie w gnuplocie po prostu tego wkleic. Poprzednio w skrypcie do gnuplota aby uzyskac ponizszy wpis zajelo mi to chyba z pol dnia grzebania.
set label 'minimalna:' right at graph 0.9, graph 0.85

Jak zmusic gnuplota aby wyciagnal jedna dana z zewnetrznego pliku i wkleil w grafike?

10

(45 odpowiedzi, napisanych Termometr)

Dzieki bardzo za pomoc i nakierowanie. Biore sie do roboty.

11

(45 odpowiedzi, napisanych Termometr)

Te gun to mnie przesladuje od poczatku jak tylko o nim uslyszalem i doinstalowalem smile
Dokladnie ten Twoj przypadek chcialbym uzyskac. W sumie chyba w miare prosta rzecz uzytkowa ale aby uzyskac czesc tego co chce to musiale sie dowiedziec co to jest openwrt, putty, winscp i kilka innych zupelnie nieznanych mi rzeczy.
Wracajac do wykresu. Moge to oczywiscie recznie wybrac i powycinac ale nie mozna wpisac w ten skrypt jakis magicznych polecen i wartosci ktore by to zrobily automagicznie?

12

(45 odpowiedzi, napisanych Termometr)

Witajcie.
Pierwszy moj post. Staralem sie w miare zapoznac z zawartoscia forum.

Chcialem miec pomiar temperatury w kilku miejscach. Tak doszedlem tutaj i do rozwiazania z openwrt ktore wydaje sie najbardziej optymalne.
Poczytalem troche i skompletowalem TL-WR1043ND, Mp00202, kilka termometrow DS18B20
Jakos do kupy wszystko poskladalem, doinstalowalem do routera co potrzeba i mam odczyty.

Nie mialem do czynienia nigdy z linuxem, tworzeniem w php czy samym openwrt wiec w pewnym momencie pojawily sie schody z ktorymi trudno mi jest samemu sobie poradzic.
Zacialem sie na gnuplocie (zaktualizowalem do wer.4.6 ze wzgledu na polecenie stats). Wykres mam dzieki metodzie prob i bledow oraz tego co udalo mi sie przeczytac w necie.
Problemem jest uzyskanie dodatkowych informacji ktore chcialbym miec na wykresie. Chodzi o minimum i maksimum temperatury z danego okresu a przede wszystkim abym na tym samym wykresie mial biezaca temperature. Odczyty mam dopiero z 3 dni wiec niedlugo pewnie pojawi sie kolejny problem jak ograniczyc wykres do kilku ostatnich dni (7, 14 itp.). No ale to pozniej. Moze ktos podzielic sie wiedza jak uzyskac to o czym pisze powyzej?



set terminal png small size 800,500
set output '/www/temperatura.png'

set title "Wykres temperatury"
set xlabel "godzina"
set timefmt "%Y-%m-%d %H:%M:%S"
set xdata time
set ylabel "temperatura °C"
set format x "%H"
set grid
set key left
set style line 1 linecolor rgbcolor "#0000AA
set key spacing 1.3

set label 'maksymalna:' right at graph 0.9, graph 0.9
set label 'minimalna:' right at graph 0.9, graph 0.85

# stats "/usr/meteo/temperatura.txt" u 5:6 - nie dziala bo dane timedata
# stats "/usr/meteo/temperatura.txt" using 6 - to samo ale moze zadziala pod koniec skryptu smile - probuje dalej

plot '/usr/meteo/temperatura.txt' using 4:6 t 'zewnętrzny' with lines lt 1, \
'/usr/meteo/temperatura.txt' using 10:12 t 'parapet' with lines lw 1, \
'/usr/meteo/temperatura.txt' using 1:3 t 'ziemia' with lines lw 1, \
'/usr/meteo/temperatura.txt' using 7:9 t 'luzny' with lines lw 1, \
'/usr/meteo/temperatura.txt'  using 4:6 smooth bezier t 'dane usrednione' with lines lt 1

# a to juz takie tam proby
reset
stats "/usr/meteo/temperatura.txt" using 6 prefix "temp" nooutput
# plot temp_min at graph 0.9, graph 0.9
# plot temp_min

quit