1

Temat: Gnuplot i dodatkowe informacje na wykresie

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

2

Odp: Gnuplot i dodatkowe informacje na wykresie

Nie rób tego przez gunplot smile Jeżeli mówisz o przypadku taki jak ja mam (http://eko.one.pl/temp.html) to po prostu z danych wybierz sobie wartość min,max,aktualną przez zwykle wycinanie posortowanych wartości - pierwszej, ostatniej i ostatniego wyniku. W na wykresie umieszczasz to jak napis po prostu.

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

3

Odp: Gnuplot i dodatkowe informacje na wykresie

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?

4

Odp: Gnuplot i dodatkowe informacje na wykresie

Właśnie w skrypcie to robisz.

Masz plik z temperaturami, zrób go cat plik.txt | sort > plik.txt i pierwsza w nim (do wyciągnięcia przez head -1) to minimium. Ostatnia (tail -1) to maksimum. Ostatnia z nieposortowanego to ostatnia wartość.

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

5

Odp: Gnuplot i dodatkowe informacje na wykresie

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

6

Odp: Gnuplot i dodatkowe informacje na wykresie

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?

7

Odp: Gnuplot i dodatkowe informacje na wykresie

albo set label albo set xlabel

AKT=$(cut -d' ' -f6 /usr/meteo/temperatura.txt | tail -1)

i dalej:

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

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

8

Odp: Gnuplot i dodatkowe informacje na wykresie

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

Odp: Gnuplot i dodatkowe informacje na wykresie

Ale to nie jest polecenie od gnuplota tylko poza nim. Zwykła linia w skrypcie. Przed wywołaniem gnuplota to zrób.

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

10

Odp: Gnuplot i dodatkowe informacje na wykresie

a nie lepiej byłoby Ci użyć do tego OWFS + RRDTOOL. Tutaj masz gotowe skrypty z min, max odczytami, z przesuwną bazą danych która sobie ustalasz na jaki okres chcesz archiwizować dane. http://openrouter.info/index.php?option … ;Itemid=61
Chyba ze wolisz powalczyć z gnuplptem smile

11

Odp: Gnuplot i dodatkowe informacje na wykresie

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}

12

Odp: Gnuplot i dodatkowe informacje na wykresie

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

13

Odp: Gnuplot i dodatkowe informacje na wykresie

Pokaż skrypt który zrobiłeś.

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

14

Odp: Gnuplot i dodatkowe informacje na wykresie

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

15

Odp: Gnuplot i dodatkowe informacje na wykresie

Ale to nie tak. Bo przecież gnuplot nie wie co to jest ${AKT}

Jak już upierasz się w takim połączeniu 2 oddzielnych skryptów  to zamiast gnuplot /usr/sbin/plot.cmd daj np. coś w ten deseń:

sed 's/${AKT}/'$AKT'/g' /usr/sbin/plot.cmd > /tmp/plot.cmd
gnuplot /tmp/pliot.cmd

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

16

Odp: Gnuplot i dodatkowe informacje na wykresie

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.

17

Odp: Gnuplot i dodatkowe informacje na wykresie

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.

18

Odp: Gnuplot i dodatkowe informacje na wykresie

No to zobacz jak to zrobić w jednym skrypcie: http://eko.one.pl/forum/viewtopic.php?pid=1516#p1516

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

19

Odp: Gnuplot i dodatkowe informacje na wykresie

Sed służy do podmiany czegoś na coś.

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

20

Odp: Gnuplot i dodatkowe informacje na wykresie

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

21

Odp: Gnuplot i dodatkowe informacje na wykresie

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}

22

Odp: Gnuplot i dodatkowe informacje na wykresie

Zrobiłem również pomiary temperatur na wykresach, które są zapisywane jako pliki png oraz gif.
Zapis mam do katalogu tmp, (ponieważ jest w ramie) bo pendrive mógłby tego nie wytrzymać.

Teraz pytanie jak wyświetlić ten obrazek na stronie? Bo z tego co się orientuję to obrazek musi być w katalogu co strona czyli www lub podrzędnym.

23

Odp: Gnuplot i dodatkowe informacje na wykresie

Dokładnie tak: http://eko.one.pl/?p=openwrt-webcam#fswebcam ostatni punkt. robisz link z /tmp/obrazek do /www/obrazek

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

24

Odp: Gnuplot i dodatkowe informacje na wykresie

Dzięki za informacje o dowiązaniu.

25 (edytowany przez migos 2012-12-23 00:21:08)

Odp: Gnuplot i dodatkowe informacje na wykresie

Zauważyłem ostatnio złe odczyty temp min i max na wykresie gnulpota i wyświetlane przez set label
Dzieje się tak przy ujemnej temperaturze, a mianowicie
zadania szukania wykonuję przez:
MIN=$(cut -d' ' -f5 /scieżka/dwor_24 | sort -n | head -1)
MAX=$(cut -d' ' -f5 /scieżka/dwor_24 | sort -n | tail -1)
Temperatura min i max wyszukana jest zawsze podawana jako pierwsza po całkowitej liczbie w zakresie, który jest zapisany w pliku z odczytem temp tzn.
(rzeczywista min zapisana wynosi -15.79 a wyszukana -15.06)
(rzeczywista max zapisana wynosi -7.06 a wyszukana -7.94)
W jaki sposób można to zautomatyzować, aby i przy odczycie dodatniej i ujemnej temperatury odczyty dla max i min były poprawne?
PunBB bbcode test