Odp: Pierwszy termometr
A można generować lokalnie i wysyłać na osobny serwer jednocześnie ?
Chodzi o skrypt bbarwika
RB951-2HnD / Celeron J1900 / 4G DDR3 / MiniITX - Satpol 100M
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
eko.one.pl → Termometr → Pierwszy termometr
Strony Poprzednia 1 2 3 4 5 6 7 8 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
A można generować lokalnie i wysyłać na osobny serwer jednocześnie ?
Chodzi o skrypt bbarwika
A coś stoi na przeszkodzie żeby to zrobić?
A coś stoi na przeszkodzie żeby to zrobić?
pewnie know-how... w zasadzie to też bym chętnie się dowiedział....
Skrypt zbiera dane do pliku. A później ten plik jest wykorzystywany jako źródło danych do wykresu. Więc... zbierajcie dane do pliku a potem go prześlijcie na drugi serwer? Tak po prostu?
Tak dla ułatwienia
scp plik uzytkownik@serwer:nazwa_folderu/nazwa_pliku
Tylko wcześniej trzeba wygenerować klucz dla ssh co by nie pytało o hasło do serwera za każdym razem
Zmodyfikowałem trochę skrypt bbarwika, tak że zapisuje dokładnie te same informacje do pliku o nazwie jak numer seryjny czujnika z rozszerzeniem .txt
Potrzeba zmiany wynika z tego, że jak dodaje kolejny czujnik to "rozjeżdżają" się numery id.
Niestety dalej nie mogę sobie poradzić z wyciąganiem tych danych z pliku - wynika to z nieznajomości php.
Napiszcie proszę co zmodyfikować żeby skrypt czytał dane z plików gdzie id=SN czujnika.
pliki z danymi mają np. nazwy:
28B6AECC00000011.txt
Tablicy o takiej długości się nie da zadeklarować...
Może jakieś mapowania wewnętrzne z sn na ID np. sortując po SN rosnąco...
<?php
$temp = array(); $obecna = array();
// Trzeba uzupelnic nazwy
// Jeszcze tam na dole trzeba tez pozmieniac
$temp[0] = "Sypialnia";
$temp[1] = "Salon";
$temp[2] = "PokĂłj Martynki";
$temp[3] = "Na ZewnÄ…trz";
//$temp[4] = "Ĺazienka";
//$temp[5] = "PokĂłj Bartosza";
//$temp[6] = "Salon";
//$temp[7] = "Zewnątrz (cień)";
// obecna temp
$f = file_get_contents("/root/meteo.txt");
$e = explode("Sensor ",$f); unset($e[0]);
foreach($e as $v) {
$e1 = explode(" ",$v);
$id = $e1[0];
$t = $e1[2];
$obecna[($id)] = "".$t."°C";
}
if(!isset($_GET['id']))
$_GET['id'] = 6;
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Temperatura</title>
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$(function() {
$.getJSON('data.php?id=<?php echo $_GET['id']; ?>', function(data) {
Highcharts.setOptions({
lang: {
months: ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec',
'Lipiec', 'Śierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień'],
//months: ['Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze',
//'Lip', 'Ĺšie', 'Wrz', 'PaĹş', 'Lis', 'Gru'],
weekdays: ['Nie', 'Pon', 'Wt', 'Ĺšr', 'Czw', 'Pt', 'Sob']
},
global: {
useUTC: false
}
}),
// Create the chart
window.chart = new Highcharts.StockChart({
chart: {
renderTo: 'container'
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
second: '%d-%m-%y<br/>%H:%M:%S',
minute: '%d-%m<br/>%H:%M',
// minute: '%d-%m-%y<br/>%H:%M',
hour: '%d-%m<br/>%H:%M',
// hour: '%d-%m-%y<br/>%H:%M',
day: '%Y<br/>%d-%m',
week: '%Y<br/>%d-%m',
month: '%m-%Y',
year: '%Y'
}
},
rangeSelector: {
buttons: [{
type: 'day',
count: 1,
text: '1d'
}, {
type: 'day',
count: 7,
text: '7d'
}, {
type: 'month',
count: 1,
text: '1m'
}, {
type: 'year',
count: 1,
text: '1rok'
}, {
type: 'all',
text: 'All'
}],
selected: 0
},
title: {
text: 'Temperatura - <?php echo $temp[($_GET['id'])]; ?>'
},
yAxis: {
title: {
text: 'Temperatura ( °C )'
}
},
series: [{
name: 'Temperatura',
data: data,
type: 'spline',
shadow : true,
tooltip: {
valueDecimals: 2,
valueSuffix: ' °C'
}
}]
});
});
});
</script>
</head>
<body>
<script src="js/highstock.js"></script>
<script src="js/modules/exporting.js"></script>
<script type="text/javascript" src="js/themes/gray.js"></script>
<b>Temperatura by BBarwik</b>
<table rules="all" border=1 width="80%"><tr width="80%">
<td align="center"><a href="?id=28B6AECC00000011">SALON</a></td>
<td align="center"><a href="?id=5">POKĂ“J BARTOSZA</a></td>
<td align="center"><a href="?id=2">POKĂ“J DAGMARY</a></td>
<td align="center"><a href="?id=0">SYPIALNIA</a></td>
<td align="center"><a href="?id=4">ĹAZIENKA</a></td>
<td align="center"><a href="?id=3">STRYCH</a></td>
<td align="center"><a href="?id=1">ZEWNĄTRZ (słońce)</a></td>
<td align="center"><a href="?id=7">ZEWNĄTRZ (cień)</a></td></tr>
<td align="center"><b><?php echo $obecna[6]; ?></b></td>
<td align="center"><b><?php echo $obecna[5]; ?></b></td>
<td align="center"><b><?php echo $obecna[2]; ?></b></td>
<td align="center"><b><?php echo $obecna[0]; ?></b></td>
<td align="center"><b><?php echo $obecna[4]; ?></b></td>
<td align="center"><b><?php echo $obecna[3]; ?></b></td>
<td align="center"><b><?php echo $obecna[1]; ?></b></td>
<td align="center"><b><?php echo $obecna[7]; ?></b></td>
</table><br>
<div id="container" style="height: 500px"></div>
</body>
</html>
Już sobie poradziłem, zrobiłem
ln -s 28B6AECC00000011.txt 0.txt
Teraz po dodaniu termometru nie będzie zamieszania.
Pozdr.
Dostałem urządzenie
Działa jak należy, poprosiłem żeby nie montować od razu przełączników. Dodatkowo dostałem wejście I/O widoczne po prawej stronie i tu pojawia się pytanie. Czy wie ktoś jak je obsłużyć (działa, jest na nim napięcie ok 5V)
zamieniłem "trzy słowa" z producentem tej płytki, chłopak jest ogarnięty i wszystko projektuje sam, jest to hobby a nie sposób na zarabianie więc rozwija się od kilku lat....
wejścia są na przełączniki/włączniki/styczniki co tam sobie zapragniesz i zaprogramujesz, w tej chwili nie są oprogramowane przez niego ale widać że płytka "na wyrost" bo nawet wejście na czujniki 1wire jest
ma dotrzeć do mnie niebawem więc będzie kolejny do testowania.
Koledzy mam pytanie, bo nie umię wyświetlić wykresów na stronie jest tylko tabelka.
Odczyt z czujników ma taką formę zapisu ( mam oskryptowany odczyt)
Dec 28 19:29:25 Sensor 0 C: 20.56 F: 69.01
Dec 28 19:29:26 Sensor 1 C: 22.19 F: 71.94
Dec 28 19:29:27 Sensor 2 C: 44.31 F: 111.76
.
.
.
ponieważ nie wiem dlaczego przy konwerterze MP00200A odczyt z digitemp_DS2490 -a wygląda następująco i tylko z jednego czujnika
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Found DS2490 device #1 at 001/005
Dec 26 23:36:53 Sensor 0 C: 20.69 F: 69.24
po wydaniu komendy /usr/bin/php-cli /root/meteo.php dostaję wynik
PHP Warning: Module 'mysql' already loaded in Unknown on line 0
Fatal error: Call to undefined function file_exist() in /root/meteo.php on line 13
a, że nie znam php prośba o pomoc co jest nie tak
Koledzy mam pytanie, bo nie umię wyświetlić wykresów na stronie jest tylko tabelka.
Odczyt z czujników ma taką formę zapisu ( mam oskryptowany odczyt)Dec 28 19:29:25 Sensor 0 C: 20.56 F: 69.01 Dec 28 19:29:26 Sensor 1 C: 22.19 F: 71.94 Dec 28 19:29:27 Sensor 2 C: 44.31 F: 111.76 . . .
ponieważ nie wiem dlaczego przy konwerterze MP00200A odczyt z digitemp_DS2490 -a wygląda następująco i tylko z jednego czujnika
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane GNU Public License v2.0 - http://www.digitemp.com Found DS2490 device #1 at 001/005 Dec 26 23:36:53 Sensor 0 C: 20.69 F: 69.24
po wydaniu komendy /usr/bin/php-cli /root/meteo.php dostaję wynik
PHP Warning: Module 'mysql' already loaded in Unknown on line 0 Fatal error: Call to undefined function file_exist() in /root/meteo.php on line 13
a, że nie znam php prośba o pomoc co jest nie tak
1) w jaki sposób zapisujesz "do bazy" txt/sql/mysql etc.
2) co jest w 13 wierszu?
"Call to undefined function file_exist() in /root/meteo.php on line 13"
1) w jaki sposób zapisujesz "do bazy" txt/sql/mysql etc.
2) co jest w 13 wierszu?
"Call to undefined function file_exist() in /root/meteo.php on line 13"
ad.1 Zapisane jest do bazy jako meteo.txt w katalogu root
ad.2 if(file_exist("/www1/".$id.".txt"))
po przeniesieniu bazy meteo.txt do katalogu www1 dalej jest to samo
Tommi napisał/a:1) w jaki sposób zapisujesz "do bazy" txt/sql/mysql etc.
2) co jest w 13 wierszu?
"Call to undefined function file_exist() in /root/meteo.php on line 13"ad.1 Zapisane jest do bazy jako meteo.txt w katalogu root
ad.2 if(file_exist("/www1/".$id.".txt"))
po przeniesieniu bazy meteo.txt do katalogu www1 dalej jest to samo
Coś zamotane. ..
Meteo.txt zawiera info o czujnikach z ostatnim "nie obrobionym" odczytem, pliki id.txt to pliki "bazy" ale każdy plik to inny czujnik, do tego powinien być jeden plik który zawiera ostatnie odczyty.
Swoją drogą ktoś z chwilą czasu mógłby przerobić skrypt z obsługą SQL a nie plików tekstowych.
Ja próbowałem ale kompletnie nic nie wychodziło;)
Meteo.txt zawiera info o czujnikach z ostatnim "nie obrobionym" odczytem, pliki id.txt
Mam go w takiej formie z powodu powyższego opisu i niewiem czy jest on dobry
Dec 29 22:01:24 Sensor 0 C: 20.50 F: 68.90
Dec 29 22:01:25 Sensor 1 C: 21.56 F: 70.81
Dec 29 22:01:26 Sensor 2 C: 40.38 F: 104.68
Dec 29 22:01:27 Sensor 3 C: 32.00 F: 89.60
Dec 29 22:01:28 Sensor 4 C: 32.13 F: 89.82
Dec 29 22:01:29 Sensor 5 C: 45.63 F: 114.13
Dec 29 22:01:31 Sensor 7 C: 3.19 F: 37.74
Dec 29 22:01:32 Sensor 8 C: 21.50 F: 70.70
Dec 29 22:01:33 Sensor 9 C: 31.06 F: 87.91
Dec 29 22:01:34 Sensor 10 C: 46.75 F: 116.15
Dec 29 22:01:35 Sensor 11 C: 41.19 F: 106.14
Dec 29 22:01:36 Sensor 12 C: 35.75 F: 96.35
Dec 29 22:01:37 Sensor 13 C: 5.69 F: 42.24
Dec 29 22:01:38 Sensor 14 C: 33.38 F: 92.07
Dec 29 22:01:39 Sensor 15 C: 6.56 F: 43.81
Dec 29 22:01:40 Sensor 18 C: 41.50 F: 106.70
Dec 29 22:01:41 Sensor 17 C: 37.25 F: 99.05
Dec 29 22:01:43 Sensor 18 C: 41.50 F: 106.70
Dec 29 22:01:44 Sensor 19 C: 43.19 F: 109.74
ale każdy plik to inny czujnik, do tego powinien być jeden plik który zawiera ostatnie odczyty.
Jak mają wyglądać te pliki i gdzie on jest umieszczony?
Mam go w takiej formie z powodu powyższego opisu i niewiem czy jest on dobry
Dec 29 22:01:24 Sensor 0 C: 20.50 F: 68.90 Dec 29 22:01:25 Sensor 1 C: 21.56 F: 70.81 Dec 29 22:01:26 Sensor 2 C: 40.38 F: 104.68 Dec 29 22:01:27 Sensor 3 C: 32.00 F: 89.60 Dec 29 22:01:28 Sensor 4 C: 32.13 F: 89.82 Dec 29 22:01:29 Sensor 5 C: 45.63 F: 114.13 Dec 29 22:01:31 Sensor 7 C: 3.19 F: 37.74 Dec 29 22:01:32 Sensor 8 C: 21.50 F: 70.70 Dec 29 22:01:33 Sensor 9 C: 31.06 F: 87.91 Dec 29 22:01:34 Sensor 10 C: 46.75 F: 116.15 Dec 29 22:01:35 Sensor 11 C: 41.19 F: 106.14 Dec 29 22:01:36 Sensor 12 C: 35.75 F: 96.35 Dec 29 22:01:37 Sensor 13 C: 5.69 F: 42.24 Dec 29 22:01:38 Sensor 14 C: 33.38 F: 92.07 Dec 29 22:01:39 Sensor 15 C: 6.56 F: 43.81 Dec 29 22:01:40 Sensor 18 C: 41.50 F: 106.70 Dec 29 22:01:41 Sensor 17 C: 37.25 F: 99.05 Dec 29 22:01:43 Sensor 18 C: 41.50 F: 106.70 Dec 29 22:01:44 Sensor 19 C: 43.19 F: 109.74
imo jest ok.
Jak mają wyglądać te pliki i gdzie on jest umieszczony?
meteo.php
$path = "/www1/"; // Sciezka gdzie bedzie zapisywalo dane,
system("digitemp_DS9097U -a > meteo2.txt && mv meteo2.txt meteo.txt");
ini_set( 'date.timezone', 'Europe/Berlin' );
$a = array();
$e = explode("Sensor ",file_get_contents("meteo.txt")); unset($e[0]); //bierze z pliku meteo.txt dane do generowania baz
foreach($e as $v) {
$e1 = explode(" ",$v);
$id = $e1[0]; // Id Termometra
$temp = $e1[2]; // Temperatura na termometrze
if(file_exists($path.$id.".txt"))
file_put_contents($path.$id.".txt",",[".time(NULL)."000,".$temp."]",FILE_APPEND);
else
file_put_contents($path.$id.".txt","[".time(NULL)."000,".$temp."]",FILE_APPEND);
$a[($id)] = $temp;
}
file_put_contents($path."last.txt",serialize($a)); // ostatnie dane
?>
ten skrypt w folderze www1 utworzy tyle plików txt ile masz czujników.
w kazdym bedzie cos takiego
[1386017405000,23.50],[1386018005000,23.50],
data/czas/temp w stopniachC
Tommi napisał/a:1) w jaki sposób zapisujesz "do bazy" txt/sql/mysql etc.
2) co jest w 13 wierszu?
"Call to undefined function file_exist() in /root/meteo.php on line 13"ad.1 Zapisane jest do bazy jako meteo.txt w katalogu root
ad.2 if(file_exist("/www1/".$id.".txt"))
po przeniesieniu bazy meteo.txt do katalogu www1 dalej jest to samo
Masz literówkę, powinno być file_exists( a masz file_exist(
Masz literówkę, powinno być file_exists( a masz file_exist(
Dzięki bardzio snifer. To było to
Wynika z tego, że błąd już jest w plikach zapodanych przez kolegi bbarwik
P.S.
Czy ten kod odpowiada też za wyświetlenie wszystkich wykresów na jednym obrazku? bo mam tylko jeden wykreślony wykres i każdy z osobna mogę sobie też podejrzeć, ale razem wszystkich nie
A oskryptował ktoś juz Digitempa tak, żeby zapisywało do bazdy mysql ?
http://eko.one.pl/?p=Termometr identycznie, z tym że ja postgresqla miałem.
Miałem na myśli juz gotowca, bo próbowałem coś zrobić, coś podobnego do Twojego, nie udało sie, poszedłęm na kompromis i napisalem skrypt do munina ale on mnie nie satysfakcjonuje..
Ja wykorzystałem hosting z php i bazą mysql do archiwizowania wyników, bo na routerze mam oczywiście ograniczone zasoby.
Zrobiłem prosty skrypcik odczytujący temperaturę i przekazujący ją wgetem do serwera www.
wartosci="`digitemp_DS9097U -a -q -o "temperatura=%.2C&czujnik=%R"`"
wget -s -q http://serwer.www/temperatura.php?$wartosci
A na serwerze plik "temperatura.php" pobiera dwie wartości "temperatura" i "czujnik" i zapisuje te wartości do bazy danych wraz z aktualną datą.
uzylem dtgraph v0.4n ale wygla srednio, mimo to działa z bazą mysql
p.s. wygląd jest tali że tak powiem staro wyglądający, jak ktoś by miał kod normalnie wyglądającego, np jak u Cezarego to chętnie przyjmę
No to i ja się pochwalę działającą stacją:
HW:WRT160nl + USB HUB + external root + interfejs 1-Wire (MP00202) + 2 czujniki DS18S20
Wiem że miałem możliwość wyciągnięcia z routera GPIO i dam wpiąć się czujnikami, ale prościej było podłączyć interfejs do huba pod USB (sam router znajduje się w miejscu małodostępnym)
Efekt końcowy wygląda tak:
http://rtrdialog.dyndns.org:9090/temp.html
Wykresy będą odwzorowywać pomiary z dwóch dni (ostatnie 288 pomiarów, określone przez skrypt tail).
Odczyty następują co 10 minut. Skrypt gettemp.sh rzucony do crona:
root@Gargoyle:~# cat /usr/sbin/gettemp.sh
#!/bin/sh
echo `digitemp_DS9097U -t 1 -a -q -o "%Y-%m-%d %H:%M:%S %.2C"` >> /tmp/usb_mount/dev_sda3/termometr/inside.txt
echo `digitemp_DS9097U -t 0 -a -q -o "%Y-%m-%d %H:%M:%S %.2C"` >> /tmp/usb_mount/dev_sda3/termometr/outside.txt
tail -288 /tmp/usb_mount/dev_sda3/termometr/inside.txt > /tmp/data_inside.txt
tail -288 /tmp/usb_mount/dev_sda3/termometr/outside.txt > /tmp/data_outside.txt
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 "%d%b %H:%M "
set grid
set key left
#same_usrednione
plot '/tmp/data_inside.txt' using 1:3 smooth bezier t 'Inside' with lines lt rgb "red" lw 3, '/tmp/data_outside.txt' using 1:3 smooth bezier t 'Outside' with lines lt rgb "blue" lw 3
#################################################
# INSIDE
set output '/www/tempi.png'
set title "Wykres temperatury INSIDE"
plot '/tmp/data_inside.txt' using 1:3 t 'dane rzeczywiste inside' with lines lt 3, '/tmp/data_inside.txt' using 1:3 smooth bezier t 'dane usrednione inside' with lines lt rgb "red" lw 3
#################################################
# OUTSIDE
set output '/www/tempo.png'
set title "Wykres temperatury OUTSIDE"
plot '/tmp/data_outside.txt' using 1:3 t 'dane rzeczywiste outside' with lines lt 3, '/tmp/data_outside.txt' using 1:3 smooth bezier t 'dane usrednione outside' with lines lt rgb "red" lw 3
quit
__EOF__
gnuplot ${GNUPLOT_COMMAND}
rm ${GNUPLOT_COMMAND}
"Strona internetowa jest niedostępna"
U mnie to samo
Strony Poprzednia 1 2 3 4 5 6 7 8 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
eko.one.pl → Termometr → Pierwszy termometr
Forum oparte o PunBB, wspierane przez Informer Technologies, Inc