Odp: Skrypty do stacji meteo
Jak byś pokazał jak wygląda źródło strony, która Ci się nie załadowała, to może pomogę ![]()
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
eko.one.pl → Termometr → Skrypty do stacji meteo
Strony Poprzednia 1 … 6 7 8 9 10 11 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
Jak byś pokazał jak wygląda źródło strony, która Ci się nie załadowała, to może pomogę ![]()
Jednak musiał być błąd w twoim skrypcie.
Nie mogłem go znaleźć więc napisałem moją wersję:
<?php
if(!$all) {
echo "series: [{
name: 'Temperatura',
data: [";
$tekst = file_get_contents('czujniki/'.$id.'.txt');
$tablica = explode("],", $tekst);
foreach ($tablica as $pomiar) {
$nowytekst .= str_replace(",","000,",$pomiar).'],';
}
echo $nowytekst."
type: 'spline',
shadow: true,
tooltip: {
valueDecimals: '1',
valueSuffix: '°C'
}
}] ";
} else {
echo "series: [";
$f = false;
foreach($temp as $k => $v) {
if(!$v['all']) continue;
if($f) echo ",";
echo "{
name: '".$v['name']."',
data: [";
$tekst = file_get_contents('czujniki/'.$k.'.txt');
$tablica = explode("],", $tekst);
foreach ($tablica as $pomiar) {
$nowytekst .= str_replace(",","000,",$pomiar)."],";
}
echo $nowytekst."
type: 'spline',
shadow: true,
tooltip: {
valueDecimals: '1',
valueSuffix: ' °C'
}
}";
$f = true;
}
echo "] ";
}
?>Hmm, gwarantuję, że u mnie zadziałało.
Może dzisiaj sprawdzę jak będę mieć czas.
Ja prawdopodobnie będę przerabiać plik meteo.php (a raczej napiszę od nowa) żeby odbierał dane przez post bo meteo umieszczę na zewnętrznym serwerze, a arduino dostało wczoraj shield LAN, więc pominę w tym wszystkim mojego Gargulca (serwer stoi na Ubuntu).
Nie wiem co to ma do rzeczy.
Może coś na styl - po co budować quadrocopter samemu wg własnych potrzeb i zmieścić się w 1000pln, jak można kupić phantoma za ponad 3000pln i patrzeć jak sam odlatuje?
http://bbarwik.com/meteo/newm.zip
Podrzucam pierwszą testową wersję nowego skryptu, parę zmian:
- Sterowanie piecem
- Do plików z pomiarem nie będą dodawana już 000, trzeba usunąć je z obecnych żeby działało
- Zrobiłem algorytm który ogranicza ilość wyświetlanych pomiarów temperatur. Można ustawić żeby pierwsze np. 1000 pomiarów było dokładnie pokazywanych na wykresie, a sama ich ilość była ograniczona do 9000 (kolejne będą potem przycinane, np. zamiast co 10 min, zwróci informacje co godzinę). Na mojej stacji meteo już to działa więc możecie sobie zobaczyć jak to w praktyce wygląda, skrypt ładuje się o wiele szybciej.
Przetestujcie czy działa, jak będzie OK to opisze dokładnie co i jak zrobić dla mniej zorientowanych użytkowników. Skrypt crona trzeba ustawić na co minutę zamiast co 10 minut.
U mnie nowy index.php nie działa.
Analizując wyjście widzę serie danych a w nich zera dodane do danych ale mniej więcej do połowy, a potem już nie.
Przez to nie widać wykresu:
http://przeklej.org/file/YfpWFV/zrodlo.txt
Oczywiście dane podstawione poprawne.
Może to wina stawień php ? Za mało ramu?
A może dlatego, że postawiłem webserwer na uhttpd?
Podoba mi się pomysł ze stanem pieca, też tak sobie zrobię. Nawet już tak mam, bo u mnie Integra zarządza ogrzewaniem i mam dostęp do danych o załączeniu/wylączeniu
W nowym skrypcie jest chyba błąd. U mnie to też działać nie chciało. Pomogło zmienienie linii 40 w pliku /www/index.php
z:
$t .= "[".$time.",".$temp."],";
na
$t .= "[".$time."000,".$temp."],";
@bbarwik, pomysł rozwiązania świetny, faktycznie Twój wykres ładuje się znacznie szybciej.
Zrobiłem test u siebie i podobnie jak u kolegów wystąpiły problemy, choć nieco inne niż w/w. Dodam że do testów wykasowałem wszystkie odczyty z plików 0 - 5.txt i test oparty jest jedynie na nowo wygenerowanych odczytach (bez 000 na końcu).
Co zauważyłem że jest nie tak:
- nie zgadza się data i godzina (w index.php przed zmianami było ok), również przedział czasowy na wykresie pomiędzy odczytami się nie zgadza?, u Ciebie jest 10 min, u mnie różnie co 1 sek. 1 min 7 min
- zmiany te zrobiłem 25.11 wieczorem i w tym dniu sprawdzałem kilka razy i moje wykresy działały, z błędami jak powyżej ale działały
- nie zmieniając nic chciałem zobaczyć wykresy następnego dnia tj. 26.11 i strona otwierała się, było wszystko poza liniami (odczytami) temperatury. Wyświetlając źródło strony zauważyłem że wartości odczytów były rozjechane, początkowe były dobrze później już nie
- na potrzeby pokazania tego co jest obecnie, ponownie wykasowałem odczyty z plików 0-5.txt wykres tutaj http://modyfikacje.ezua.com/meteo/
Na koniec moja konfiguracja
- nie użyłem pliku piec.php (chyba nie jest konieczny ? na razie nie wykorzystam tej opcji, zresztą do końca nie wiem jak to zastosować)
- index.php nowa Twoja wersja, jedynie nazwy swoje wstawiłem
- meteo.php (użyłem swój, bez opcji pieca) usuwając jedynie 000
<?php
$path = "/meteo/dane/"; // Sciezka gdzie bedzie zapisywalo dane, domyslnie /www/meteo/
system("digitemp_DS9097U -s /dev/ttyUSB0 -a -i > 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]);
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).",".$temp."]",FILE_APPEND);
else
file_put_contents($path.$id.".txt","[".time(NULL).",".$temp."]",FILE_APPEND);
$a[($id)] = $temp;
}
file_put_contents($path."last.txt",serialize($a)); // ostatnie dane
?>- ustawiania w cron co 1 minutę */1 * * * * /usr/bin/php-cli /meteo/meteo.php
- serwer Lighttpd i Fastcgi, TL-WDR4300, GG 1.5.11.4
Krynio
@Krynio widzę że masz ten problem co ja go miałem. Spróbuj dopisać te 3 zera do pliku index.php.
foreach($data as $time => $temp) {
if($prog+$limit_after > $ile) {
$t .= "[".$time."000,".$temp."],";
} else {
if(floor($lprog) <= floor($prog)) {
$t .= "[".$time."000,".$temp."],";
$lprog += $lim;
}
}
$prog++;
}
return rtrim($t, ",");
Ja u siebie mam taki problem że wchodząc na link http://IP/meteo/ widzę tylko pliki które są w katalogu, dopiero jak kliknę index.php to otwiera się wykres.
Jeśli to ważne to korzystam z uhttpd (mam też LuCI), TP-Link WDR4300, OpenWrt Barrier Breaker 14.07 / LuCI Trunk (0.12+svn-r10530), 1Wire z GPIO 1.
Konfiguracja:
root@OpenWrt:~# cat /etc/config/uhttpd
config uhttpd 'main'
list listen_http '0.0.0.0:80'
list listen_http '[::]:80'
list listen_https '0.0.0.0:443'
list listen_https '[::]:443'
option home '/www'
option rfc1918_filter '1'
option max_requests '3'
option max_connections '100'
option cert '/etc/uhttpd.crt'
option key '/etc/uhttpd.key'
option cgi_prefix '/cgi-bin'
option script_timeout '60'
option network_timeout '30'
option http_keepalive '20'
option tcp_keepalive '1'
option ubus_prefix '/ubus'
list interpreter '.php=/usr/bin/php-cgi'
config cert 'px5g'
option days '730'
option bits '1024'
option country 'DE'
option state 'Berlin'
option location 'Berlin'
option commonname 'OpenWrt'@Krynio widzę że masz ten problem co ja go miałem. Spróbuj dopisać te 3 zera do pliku index.php.
Zrobię jutro, najpierw chcę zobaczyć czy po upływie czasu do jutra znowu wykres się wysypie i w jakiej postaci będą zapisane odczyty. Dziś za szybko to wykasowałem.
Edycja, stan wykresu sprawdzony następnego dnia.
Po upływie kilkunastu godzin sytuacja się powtórzyła. Wykres widać lecz bez linii wskazujących temperaturę. Sprawdzając w źródle strony widać że po pewnym czasie odczyty błędnie się dopisują, bez 000 co widać poniżej.
...[1417042268000,41.56],[1417042328000,41.56],[1417042388,41.50],[1417042448,41.50]...Po dopisaniu 000 o których piszesz w poście 185 wykres & linie wskazujące temperaturę pokazują się prawidłowo. Również po tym zabiegu data na wykresie jest już dobra. Pozostaje do poprawy temat przedziału czasowego odczytów pokazywanych na wykresie. Chyba że autor tak skonstruował nowy index.php że do prawidłowego wyświetlania czasu i jego przedziałów potrzeba jest niezbędna minimalna ilość X odczytów (której moja baza nie zawiera), w stosunku do zmiennych Y widocznych poniżej.
Kombinowałem ze zmianami np.
$limit_after = 100; // po ilu pomiarach zacznie zmieniac dokladnosc
$max_res = 200; // ile pomiarow maksymalnie wyswietlii były widoczne zmiany w wyświetlaniu przedziałów czasowych pomiędzy odczytami, jednak nie uzyskałem efektu zgodnego z założeniem autora, a to co było np. tak się wyświetlało, pierwsze przedziały co 7 min końcowe co 1 min. itp.
No ale nie ma co narzekać jest progres i pewnie będzie dobrze ![]()
Krynio
@Cezary, jest prośba. Dasz radę w wolnej chwili napisać skrypt który z istniejących plików np. 0.txt pousuwa pogrubione zera
,[1386008408000,31.00],[1386009008000,30.50],[1386009608000,30.31],
oraz jak to zastosować ![]()
Próbowałem znajdź 000 i zamień na puste lecz przy niektórych zapisach podmienia nie to co powinno.
Krynio
Trochę nadmiarowe ale powinno być bezpiecze:
echo ",[1386008408000,31.00],[1386009008000,30.50],[1386009608000,30.31]," | sed 's/000,\([0-9]\)/,\1/g'Albo przez php:
http://eko.one.pl/forum/viewtopic.php?p … 68#p123468
Chcesz do następnego czujnika to zamieniasz 0.txt na 1.txt itd.
@Cezary sposób dobry tyle że nie da się w konsoli wkleić na raz wszystkich odczytów. W każdym z 6 plików jest ich 46200, podmiana po kawałku zajmie mi pokolenia.
@xury dzięki za linka ale napisz jeszcze jak to użyć. Z góry przepraszam za niewiedzę.
Jaki jeden kawałek? Przecież sed cały plik robi: sed 's///g nazwa pliku.
Kopiujesz skrypt np. do notepad++
zapisujesz jako np. tnijzera.php do tego samego katalogu co dane z czujników
Odpalasz przez przeglądarkę lub przez basha np.
php-cli /www1/tnijzera.php
Co do sposobu Cezarego to np:
cat /www1/0.txt | sed 's/000,\([0-9]\)/,\1/g' > nowe0.txt Możesz uśmiercić tego kotka.
sed 's/000,\([0-9]\)/,\1/g' /www1/0.txt > nowe0.txt Można znacznie łatwiej ale nie tak linuxowo.
Połączyć się przez winscp ( lub podobnym) w edytorze tekstowym otworzy plik i w edycja - znajdź/zamień zmienić "000," na ","
Profanacja ![]()
Można znacznie łatwiej ale nie tak linuxowo.
Połączyć się przez winscp ( lub podobnym) w edytorze tekstowym otworzy plik i w edycja - znajdź/zamień zmienić "000," na ","
Fuuuuuuuuuu.
Panowie zera usunięte dziękuję. Zrobiłem sposobem @xury
Lecz co zauważyłem, plik oryginalny 0.txt który z zerami maił 984 KiB po tym zabiegu ma 1700 KiB (a miał być lżejszy)
Podczas edycji obydwu plików jest bardzo zauważalna różnica, w samej szybkości otwierania, oryginalny 0.txt szybciej.
Po tym zabiegu i skasowaniu zer mój wykres nie działa, strona ładuje się lecz po czasie jest tylko biało bez niczego. Wyświetlając źródło białej strony na końcu widać (mam Lighttpd i Fastcgi)
<b>Fatal error</b>: Maximum execution time of 30 seconds exceeded in <b>/tmp/usb_mount/5a43430c-52d8-4d57-a3dd-a490d92e69b4/www/meteo/index.php</b> on line <b>39</b><br />
W configu Lighttpd nigdzie time of 30 nie widzę, co to za ograniczenie, przeglądarki ?
Na próbę wywaliłem 3/4 odczytów z każdego pliku txt i wykres działa. Wygląda na to że przy nowej wersji index.php sprzęt / serwer nie wyrabia przy takiej ilości?
Jutro wykasuje zera sposobem Cezarego, jestem ciekaw jakich rozmiarów będzie plik.
Edycja 1
Zera metodą Cezarego wykasowane, router zniósł to bez problemu.
sed 's/000,\([0-9]\)/,\1/g' /www1/0.txt > nowe0.txti plik wejściowy 984 KiB po tym zabiegu ma 850 KiB
Niestety pomimo iż pliki są lżejsze, wykres z tak dużą bazą, ilością odczytów i tak się nie wyświetla.
Myślę że u mnie może dokładać się to że odczyty txt zapisywane mam na pendrive (extroot), a strona meteo jest /www/meteo/ na innym dysku zewnętrznym usb i mam zrobione linki do plików txt na pendrive. Wszystko po to że dysk mam usypiany podczas bezczynności, a zapis odczytów txt bezpośrednio na dysk pewnie wybudzałby go.
Jednak zastanawia mnie to że używając poprzedniej wersji index.php (meteo) oraz tej samej pełnej bazy txt wykresy co prawda długo się ładowały ale się załadowały. A teraz wywala
<b>Fatal error</b>: Maximum execution time of 30 seconds exceeded in <b>/tmp/usb_mount/5a43430c-52d8-4d57-a3dd-a490d92e69b4/www/meteo/index.php</b> on line <b>39</b><br />Edycja 2
Aby wyeliminować przyczynę po mojej stronie przeniosłem pliki txt (czytaj Edycja 1) z pendrive na dysk zewnętrzny do /www/meteo/ (tam gdzie index.php) i to nic nie pomogło. Efekt jest taki jak w opisie Edycja 1. Dopiero po wykasowaniu 3/4 odczytów z każdego pliku txt wykres działa.
......
Heinz, "Profanacja" nie działa, sprawdzałem tak wcześniej i ciąg trzech 000 u mnie nie występował tylko zawsze na końcu poza tym po kilku minutach WinSCP przestał odpowiadać.
i ciąg trzech 000 u mnie nie występował tylko zawsze na końcu.
Może, i ciąg trzech zer występować gdzie indziej, ale na pewno nie ciąg trzech zer z przecinkiem "000," ![]()
Może, i ciąg trzech zer występować gdzie indziej, ale na pewno nie ciąg trzech zer z przecinkiem "000,"
A zobacz jak jest zapisany ciąg znaków i jaki jest znak oddzielający czas od temperatury ![]()
Nie rozumiem... przecież o tym piszę właśnie. Kłania się czytanie ze zrozumieniem ![]()
Widzisz
tak Cię zrozumiałem, ale ok nie róbmy OT
Strony Poprzednia 1 … 6 7 8 9 10 11 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
eko.one.pl → Termometr → Skrypty do stacji meteo
Forum oparte o PunBB, wspierane przez Informer Technologies, Inc