program digitemp do mierzenia temperatury

Wszystko Off Topic
Awatar użytkownika
wojciech_69
Beginner
Posty: 128
Rejestracja: 02 stycznia 2009, 16:04

Re: program digitemp do mierzenia temperatury

Post autor: wojciech_69 »

OK, spróbuję .

Czyli mam rozumieć że zmienna "tempX" jest tym czym w kodzie htlm "czujnikX" (zwał jak zwał, ewentualna zamiana/nazwanie zmienne) i mam rozumieć że prościej niż poprzez liczenie linii to tego nie zrobię/zmienię?
Awatar użytkownika
dedito
Moderator
Posty: 3560
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: program digitemp do mierzenia temperatury

Post autor: dedito »

Można zrobić inaczej.
np. przez podmianę unikatowych stringów.
Awatar użytkownika
pawkrol
Moderator
Posty: 939
Rejestracja: 03 kwietnia 2011, 10:25

Re: program digitemp do mierzenia temperatury

Post autor: pawkrol »

Po co ty chcesz liczyć linie? Skorzystaj z takiego edytora, aby ci pokazywał numer lini.
Awatar użytkownika
wojciech_69
Beginner
Posty: 128
Rejestracja: 02 stycznia 2009, 16:04

Re: program digitemp do mierzenia temperatury

Post autor: wojciech_69 »

pawkrol pisze:Po co ty chcesz liczyć linie? Skorzystaj z takiego edytora, aby ci pokazywał numer lini.
Wiem, że można w ten sposób odczytać numer linii. Chodzi mi ogólnie o to że w kodzie który mi podałeś:

Kod: Zaznacz cały

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

sed podmienia wartości na podstawie obliczenia w której linii się ona znajduje (16s, 21s, 31s, 41s)...
dedito pisze:Można zrobić inaczej.
np. przez podmianę unikatowych stringów.
Możesz pokazać jak to zrobić?
Awatar użytkownika
dedito
Moderator
Posty: 3560
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: program digitemp do mierzenia temperatury

Post autor: dedito »

Przykład na bazie tego co @pawkrol z małymi modyfikacjami komendy sed:

Kod: Zaznacz cały

sed -i -r "s/>Czujnik 1:.*</>Czujnik 1: ${temp1}</" /var/www/html/temp.html 
W pliku html muszą być linie zawierające nazwę czujnika pomiędzy znacznikami > i <.
Przykładowo:

Kod: Zaznacz cały

...>Czujnik 1: 27.13 < ...
PS. Jestem przedszkolakiem w dziedzinie komendy sed, więc gdyby jakieś herezje się trafiły to proszę o poprawki.
Awatar użytkownika
wojciech_69
Beginner
Posty: 128
Rejestracja: 02 stycznia 2009, 16:04

Re: program digitemp do mierzenia temperatury

Post autor: wojciech_69 »

Dobra, ale teraz pojawił się kolejny problem... Czujniki/pomiar przedstawia się następująco:

Kod: Zaznacz cały

# digitemp_DS9097U -s /dev/ttyUSB0 -a -i
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Turning off all DS2409 Couplers
.....
Searching the 1-Wire LAN
28FFC476931503E9 : DS18B20 Temperature Sensor
28FF995B931504FE : DS18B20 Temperature Sensor
28FF6D5D9315044E : DS18B20 Temperature Sensor
28FF5D2693150375 : DS18B20 Temperature Sensor
ROM #0 : 28FFC476931503E9
ROM #1 : 28FF995B931504FE
ROM #2 : 28FF6D5D9315044E
ROM #3 : 28FF5D2693150375
Wrote .digitemprc
Jul 08 13:00:11 Sensor 0 C: 25.69 F: 78.24
Jul 08 13:00:12 Sensor 1 C: 25.63 F: 78.13
Jul 08 13:00:13 Sensor 2 C: 25.63 F: 78.13
Jul 08 13:00:14 Sensor 3 C: 25.63 F: 78.13
Jak będę chciał wyniki wrzucić na stronę to skąd mam wiedzieć czy czujnik umieszczony w pokoju to ten czujnik a nie czujnik z kuchni.... no bo czujniki mają swoje unikatowe numery a stosując komendy które podrzucił pawkrol nie określają który czujnik jest którym (tak by zdefiniować sobie ich nazwy)
pawkrol pisze: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
w związku z tym skąd mam wiedzieć jak sortuje i wg. czego digitemp ustawia numery czujników? Bo np później można by było odczytać raz ile jest czujników pod którym numerem "ROM#1..." i później dopiero przypisać do nich zmienne "temp0, 1,2,3..."..

Ps. chyba że nie ma innego wyjścia tylko podłączać pojedynczo czujniki odczytywac ich numery a pozniej mieć na uwadze że ten o konkretnym numerze będzie zmienną temp2 i jest to pokój i tą zmienną w html wyświetlić/podmienić w tej linijce a inną gdzie indziej - tylko czy po restarcie czy systemu czy digitemp nie przesortuje w inny sposób tych czujników...?
Awatar użytkownika
dedito
Moderator
Posty: 3560
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: program digitemp do mierzenia temperatury

Post autor: dedito »

Raczej musiałbyś identyfikować wg ROM i to już powinno wystarczyć. Potem już tylko wrzucać temperatury do html wg. ROM, a tym czy master (czyli digitemp) oznaczy czujnik jako sensor 1 czy 4 się nie przejmować.
Awatar użytkownika
pawkrol
Moderator
Posty: 939
Rejestracja: 03 kwietnia 2011, 10:25

Re: program digitemp do mierzenia temperatury

Post autor: pawkrol »

Przecież w skrypcie który Ci podałem zawsze będziesz mieć pod zmienną np. temp0 czujnik dajmy na to z id 28FFC476931503E9.
No chyba, ze będziesz od nowa generować plik digitemprc to wtedy może się to zmienić.
A co ty zrobisz już ze zmiennymi od temp0 do temp4, to już Twoja inwencja. I co za problem dla zmiennej temp0, którą wartość sedem ładujesz do html dać w tym pliku np linie wyżej opis iż jest to wartość np z czujnika w kuchni.
ODPOWIEDZ