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_plikuTylko 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.24po 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 13a, ż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.24po 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 13a, ż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.74ale 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.htmlWykresy 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