program digitemp do mierzenia temperatury

Wszystko Off Topic
ww71
Beginner
Posty: 442
Rejestracja: 04 grudnia 2008, 11:44
Lokalizacja: lubelskie

program digitemp do mierzenia temperatury

Post autor: ww71 »

Witam,

Znalazłem taki programik - digitemp do mierzenia temperatury, ale nie umiem go skonfigurować, jest z powyższej strony:
http://www.wiki.piwo.org/Cyfrowy_pomiar ... w_browarze

Chodzi mi, żeby pokazał , jeśli to możliwe, temperaturę procesora.

Kod: Zaznacz cały

# digitemp_DS9097 -i -s /dev/ttyS0 -a
Oznaczenie przełączników:
-i inicjalizacja pliku konfiguracyjnego w katalogu domowym
-s określenie portu szeregowego. W tym przypadku port pierwszy RS232
-a zapisanie danych wszystkich wykrytych czyjników

Właśnie nie wiem co ma byc na pozycjij s
Proszę o jakieś wskazówki.
Awatar użytkownika
Rafal_F
Moderator
Posty: 2350
Rejestracja: 29 sierpnia 2008, 16:45

Post autor: Rafal_F »

Ten program służy do czego innego, jeżeli chcesz znać temperaturę procesora w komputerze, skorzystaj z lm-sensors http://linuxg.net/how-to-use-lm-sensors ... nd-debian/
ww71
Beginner
Posty: 442
Rejestracja: 04 grudnia 2008, 11:44
Lokalizacja: lubelskie

Post autor: ww71 »

Ok. dzięki.
Awatar użytkownika
pawkrol
Moderator
Posty: 939
Rejestracja: 03 kwietnia 2011, 10:25

Post autor: pawkrol »

Ja za pomocą digitemp odczytuje temp z czujnikow 1-wire DS19b20
Polecenie

Kod: Zaznacz cały

digitemp_DS9097U -s /dev/ttyUSB0 -a -i
to powoduje wygenerowanie pliku konfiguracyjnego, w którym będą numery seryjne czujników na magistrali.
/dev/ttyUSB0 - to jest konweter usb-1wire (np MP00202).
Awatar użytkownika
wojciech_69
Beginner
Posty: 128
Rejestracja: 02 stycznia 2009, 16:04

Re: program digitemp do mierzenia temperatury

Post autor: wojciech_69 »

A czy zna ktoś jakieś proste rozwiązanie jak wyświetlać same wyniki pomiaru temperatury z czujników na stronie www?
Wiem o gotowych programach typu 'gnuplot' ale mnie interesuje proste rozwiązanie bez wizualizacji (wykresów) tak jak jest to pokazane tutaj :https://haklabos.wordpress.com/projekti/digitemp/.
Jedyne co jest dla mnie niezrozumiałe (a nie jestem programistą php/html) to w jaki sposób to działa-wysyła temperaturę to html-a (zadanie crona w tym momencie znam :-) ) i wstawia w konkretne miejsce kodu (bo żadnej zmiennej nie zauważyłem...) oraz co gdy czujników będzie np 4?
Awatar użytkownika
LordRuthwen
Moderator
Posty: 2324
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Re: program digitemp do mierzenia temperatury

Post autor: LordRuthwen »

Po prostu podmienia sedem zawartość pliku.
Każdy czujnik ma swój adres, więc ich ilość to nie problem.
Awatar użytkownika
dedito
Moderator
Posty: 3560
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: program digitemp do mierzenia temperatury

Post autor: dedito »

wojciech_69 pisze:Jedyne co jest dla mnie niezrozumiałe (a nie jestem programistą php/html) to w jaki sposób to działa-wysyła temperaturę to html-a (zadanie crona w tym momencie znam :-) ) i wstawia w konkretne miejsce kodu (bo żadnej zmiennej nie zauważyłem...) oraz co gdy czujników będzie np 4?
To zadanie z crona:

Kod: Zaznacz cały

 */1* * * * TEMP=`digitemp_DS9097 -a | grep -i sensor | awk '{print $7}'`; sed -i -r "14s,>[^<]*</,>${TEMP}</," /www/index.html
Masz dwa zadania wykonywane oddzielone średnikiem.
W pierwszym do zmiennej TEMP trafia bieżąca temperatura : digitemp odpytuje sensor który zwraca jakieś kilka linijek tekstu, grep ogranicza wynik do linii zawierającej słowo sensor , awk ogranicza wynik do kolumny 7 na której jest wartość cyfrowa temperatury która to ostatecznie trafia do zmiennej TEMP.
W drugim sed w wierszu 14 pliku index.html podmienia zawartość znalezioną pomiędzy >*<, w przykładzie jest to 27.13.

Dziwi mnie jedynie ten wiersz 14 bo w pliku index.html temperatura jest we wcześniejszym wierszu (wg moich obliczeń w linii 12).
Analogicznie kolumna 7 też nie wygląda na prawidłowo dobraną (wg mnie powinna być 6).
W przypadku większej ilości czujników wyniki powinny trafiać do html jako ciąg w jednej linii np. 27.13 27.16 itd.
Awatar użytkownika
pawkrol
Moderator
Posty: 939
Rejestracja: 03 kwietnia 2011, 10:25

Re: program digitemp do mierzenia temperatury

Post autor: pawkrol »

A ja tylko dodam:
Takie coś wyrzuca temperaturę z czujnika nr 4. Lista wykrytych czujników w pliku digitemprc. Wyświetlana temperatura w stopniach C do dwóch miejsc po przecinku. Tu omijamy stosowanie grepa i awk.

Kod: Zaznacz cały

digitemp_DS9097U  -c /root/.digitemprc -t 4 -q -o%.2C 
Awatar użytkownika
wojciech_69
Beginner
Posty: 128
Rejestracja: 02 stycznia 2009, 16:04

Re: program digitemp do mierzenia temperatury

Post autor: wojciech_69 »

dedito pisze: Masz dwa zadania wykonywane oddzielone średnikiem.
W pierwszym do zmiennej TEMP trafia bieżąca temperatura : digitemp odpytuje sensor który zwraca jakieś kilka linijek tekstu, grep ogranicza wynik do linii zawierającej słowo sensor , awk ogranicza wynik do kolumny 7 na której jest wartość cyfrowa temperatury która to ostatecznie trafia do zmiennej TEMP.
W drugim sed w wierszu 14 pliku index.html podmienia zawartość znalezioną pomiędzy >*<, w przykładzie jest to 27.13.
Dziękuję za jasne wytłumaczenie polecenia!
dedito pisze: Dziwi mnie jedynie ten wiersz 14 bo w pliku index.html temperatura jest we wcześniejszym wierszu (wg moich obliczeń w linii 12).
Analogicznie kolumna 7 też nie wygląda na prawidłowo dobraną (wg mnie powinna być 6).
W przypadku większej ilości czujników wyniki powinny trafiać do html jako ciąg w jednej linii np. 27.13 27.16 itd.
Też przeliczałem te linie i również mi się to nie zgadzało :-)
pawkrol pisze:A ja tylko dodam:
Takie coś wyrzuca temperaturę z czujnika nr 4. Lista wykrytych czujników w pliku digitemprc. Wyświetlana temperatura w stopniach C do dwóch miejsc po przecinku. Tu omijamy stosowanie grepa i awk.

Kod: Zaznacz cały

digitemp_DS9097U  -c /root/.digitemprc -t 4 -q -o%.2C 

Myślałem żeby napisać skrypt i dodać jego wykonywanie do cron-a w którym by było (np. dla czterech czujników a nie 4-tego czujnika):

Kod: Zaznacz cały

digitemp_DS9097U -t 0 -q -o "%Y-%m-%d %H:%M:%S %.2C" | grep -v Found; sed -i -r "znaczniki_seda" /www/temp.html 
digitemp_DS9097U -t 1 -q -o "%Y-%m-%d %H:%M:%S %.2C" | grep -v Found ...........................
digitemp_DS9097U -t 2 -q -o "%Y-%m-%d %H:%M:%S %.2C" | grep -v Found ...........................
digitemp_DS9097U -t 3 -q -o "%Y-%m-%d %H:%M:%S %.2C" | grep -v Found ...........................
Tylko nie znam na tyle dobrze sed-a żeby np odwoływać się w nim do pola ID w kodzie html który miałby wyglądać następująco:

Kod: Zaznacz cały

 <html>
        <head>
                <title>Temperature</title>
        </head>
        <body bgcolor="#222222">
                <table align="center" border="0" cellpadding="0" cellspacing="0">
                <tbody>
                <tr>
                <td style="text-align: center; "><span style="color:#696969;"><span style="font-size: 90px; "><strong><span style="font-family: verdana, geneva, sans-serif; ">Pokój 1</span></strong></span></span></td>
                </tr>
                <tr>
                <td style="text-align: center; "><span style="color:#66cc00;"><span style="font-size:300px;"><span style="font-family: verdana, geneva, sans-serif; "><div id="czujnik1">27.13</div></span></span></td>
                <td style="text-align: center; "><span style="color:#696969;"><span style="font-size: 90px; "><strong><span style="font-family: verdana, geneva, sans-serif; ">Pokój 2</span></strong></span></span></td>
                </tr>
                <tr>
                <td style="text-align: center; "><span style="color:#66cc00;"><span style="font-size:300px;"><span style="font-family: verdana, geneva, sans-serif; "><div id="czujnik2">27.13</div></span></span></td>
                ...................................................... itd ....................................................
                </tr>
                </tbody>
                </table>
                <p>
                &nbsp;</p>
        </body>
</html>
czyli odniesienie do:

Kod: Zaznacz cały

 <div id="czujnik1">27.13</div>
 ...
  <div id="czujnik2">21.12</div>
macie pomysł jak to zapisać w sed-zie, bo przedstawione powyżej liczenie linii jest wg mnie trochę nietrafione jeśli w przyszłości będziemy dodawać jakieś "upiększacze" - nowe linie kodu html (jest to do wykonania/zapisania przez sed-a)?
Awatar użytkownika
pawkrol
Moderator
Posty: 939
Rejestracja: 03 kwietnia 2011, 10:25

Re: program digitemp do mierzenia temperatury

Post autor: pawkrol »

Dajesz polecenie:

Kod: Zaznacz cały

/usr/bin/digitemp_DS9097U -i -s /dev/usb1wire
Utworzy ci się plik z listą wykrytych czujników na magistrali.
Utwórz sobie skrypt basha, a w nim np:

Kod: Zaznacz cały

#! /bin/bash
temp0=`/usr/bin/digitemp_DS9097U  -c /root/.digitemprc -t 0 -q -o%.2C`
temp1=`/usr/bin/digitemp_DS9097U  -c /root/.digitemprc -t 1 -q -o%.2C`
temp2=`/usr/bin/digitemp_DS9097U  -c /root/.digitemprc -t 2 -q -o%.2C`
temp3=`/usr/bin/digitemp_DS9097U  -c /root/.digitemprc -t 3 -q -o%.2C`
sed -i -r "16s,>[^<]*</,>${temp0}</,"  /var/www/html/temp.html
sed -i -r "21s,>[^<]*</,>${temp1}</,"  /var/www/html/temp.html
sed -i -r "31s,>[^<]*</,>${temp2}</,"  /var/www/html/temp.html
sed -i -r "41s,>[^<]*</,>${temp3}</,"  /var/www/html/temp.html
Numery lini seda zmień według swojego pliku.
/dev/usb1wire - urządzenie 1wire
Skrypt dodaj do crona i tyle.
Tu masz przykład dla 5 min.

Kod: Zaznacz cały

*/5 * * * * /home/user/skrypty/temp_ds.sh > /dev/null 2>&1
ODPOWIEDZ