26

(16 odpowiedzi, napisanych Oprogramowanie / Software)

Wydaje mi się, że router nie widzi, że LAN został wypięty.
Dość długo czekałem, ale sprawdzę jeszcze raz.

27

(16 odpowiedzi, napisanych Oprogramowanie / Software)

Przepraszam ;-)
Trzyma stare (np. 192.168.1.15), nawet jeśli się podepnę do innej sieci, gdzie obowiązuje 172.16.11.x po DHCP.

28

(16 odpowiedzi, napisanych Oprogramowanie / Software)

No to po firstboocie sprawa się wyjaśniła.
Wan sam z siebie (nawet po DHCP) nie zadziałał póki nie kliknąłem ikonki connect w interfejsach... ale głupota... skąd szary użytkownik miałby chociaż podejrzewać, że takie coś musi robić?

offtop: mam jeszcze WDR4300:
po wypięciu LAN'u i wpięciu innego (2 różne sieci i zupełnie inne DHCP, jedno z 192.x.x.x, drugie z 172.x.x.x) Gargoyle (najnowszy build Cezarego 1.6.xx) router nie odświeża połączenia (nie aktualizuje DHCP na WAN).

29

(16 odpowiedzi, napisanych Oprogramowanie / Software)

Nie musiało docierać, ja to wiem i tak też zrobiłem (kumpla router) :-)
Ogólnie wan i wan6 pojawia się pod eth0.2 a lan pod eth0.1.
Dopiero po zbindowaniu eth0.2 z eth0 pojawia się mac przy wan i wan6.
Co oznaczają zielone i czerwone tła interfejsów w LuCi? wan6 jest do ipv6?
LAN mam zielony i działa (WiFi i LAN), a WAN czerwony i nie działa, może coś nie jest włączone?
Czy gdzieś jest jakaś sensowna dokumentacja interfejsu LuCi? Bo ja nigdzie nic nie widzę...

30

(16 odpowiedzi, napisanych Oprogramowanie / Software)

Po instalacji pojawiły się 3 interfejsy: lan, wan i wan6 z czego oba wany nie miały MAC'a (same zera).
Tak to powinno wyglądać?
Czy te interfejsy trzeba jakoś bindować żeby zaczęły działać?

31

(16 odpowiedzi, napisanych Oprogramowanie / Software)

WANem jest fizyczne wyjscie WAN routera.
Na WAN jest stale IP i wpiecie w ISP (brama itd. poprawnie ustawiona).

32

(16 odpowiedzi, napisanych Oprogramowanie / Software)

Lukis, a Tobie WAN zadzialal?
Kumpel dzisiaj przeniosl sie z tego samego gargoyle'a co Ty i rowniez na najnowsza wersje, ale bez zachowywania ustawien.
Niestety nie umielismy uruchomic WAN, polaczenie po wifi i gniazdach LAN dziala.

Cezary, firstboot cos da?

33

(256 odpowiedzi, napisanych Termometr)

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?

34

(256 odpowiedzi, napisanych Termometr)

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

35

(256 odpowiedzi, napisanych Termometr)

Jak byś pokazał jak wygląda źródło strony, która Ci się nie załadowała, to może pomogę wink

36

(256 odpowiedzi, napisanych Termometr)

@krynio
1. Mój kod z 169 postu nie pomija '000'. On zakłada, że w odczytach (stworzonych przez meteo.php) nie ma tych '000' i je dopisuje w locie.
2. Trzeba się pozbyć '000' z plików z temperaturami, chciałem napisać kod, który by dopisywał te zera gdyby ich brakowało, albo nie dopisywał gdyby były, ale jakoś tak się zakręciłem w kodzie (i pisałem to jeszcze będąc w pracy tongue), że się poddałem.
Czekam na robotę xury - podziel się :-D
3. Musisz usunąć wyłącznie te 000 z poniższych dwóch linijek, nie usuwając przecinka:

            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); 

O, tak:

            file_put_contents($path.$id.".txt",",[".time(NULL).",".$temp."]",FILE_APPEND);
        else
            file_put_contents($path.$id.".txt","[".time(NULL).",".$temp."]",FILE_APPEND); 

4. Chyba nic więcej zmieniać nie trzeba, oprócz zwrócenia uwagi na moje: 'czujniki/', ja trzymam pomiary w podkatalogu, nienawidzę burdelu w głównym katalogu strony.
5. Post 167, to próba, ale cel był ten sam co w poście 169. Kod z 167 jest błędny.

37

(256 odpowiedzi, napisanych Termometr)

@wabikboy
w moim wypadku nie jest wystarczający, ale za długo by opowiadać dlaczego ;-)

38

(256 odpowiedzi, napisanych Termometr)

Trzeba zmodyfikować ten odcinek kodu tak jak pokazałem (2 razy w data) no i oczywiście w meteo.php pozbyć się dopisywania 000.
Uważajcie, bo obie zawartości data są identyczne oprócz $id i $k.
Zaznaczam, że to nie zadziała z już istniejącymi pomiarami gdzie te dodatkowe '000' są zapisane w plikach.

Testujcie, u mnie to działa, ale nie wiem czy nie ma drobnych błędów wink

        <?php
            if(!$all) {
                echo "series: [{
                    name: 'Temperatura',
                    data: [";
                        $file = fopen('czujniki/'.$id.'.txt','r');
                        while(!feof($file)){
                        $content = stream_get_line($file, 20, "]");
                        if(!empty($content)){
                                echo substr($content, 0, 11).'000'.substr($content, 12).']';
                                };
                        };
                        fclose($file);
                    echo "],
                    type: 'spline',
                    shadow: true,
                    tooltip: {
                        valueDecimals: 2,
                                                valueSuffix: '..C'
                    }
                }] ";
            } else {
                echo "series: [";
                                        $f = false;
                    foreach($temp as $k => $v) {
                        if(!$v['all']) continue;
                        if($f) echo ",";
                        echo "{
                        name: '".$v['name']."',
                        data: [";
                            $file = fopen('czujniki/'.$k.'.txt','r');
                            while(!feof($file)){
                            $content = stream_get_line($file, 20, "]");
                            if(!empty($content)){
                                echo substr($content, 0, 11).'000'.substr($content, 12).']';
                                };
                            };
                            fclose($file);
                        echo "],
                        type: 'spline',
                        shadow: true,
                        tooltip: {
                            valueDecimals: '2',
                            valueSuffix: ' ..C'
                            }
                        }";
                                                $f = true;
                    }
                echo "] ";
            }
        ?>

@wabikboy
Nie podzielam Twojego zdania.
Skoro się da zminimalizować zbędną ilość danych, to należy to zrobić, szybka kalkulacja jak to u mnie wygląda:
Średnio odczyt mam co 6min. czyli mam 10odczytów/h -> 240 odczytów na dobę.
Jeden odczyt to 19 znaków -> 4560 znaków/dobę
A jeśli zapisuję o 3 znaki mniej -> 3840 znaków/dobę
Czyli w dobę upakuję 45 pomiarów więcej.

Nawet jeśli ograniczenie leży w highcharts, to w dalszym ciągu pomiary zajmują mniej miejsca, odczyt szybszy, itd.

39

(256 odpowiedzi, napisanych Termometr)

--- POPRAWNY KOD JEST W POŚCIE 169! ---
OLAĆ PONIŻSZE tongue

Myślę, że coś na styl poniższego by zadziałało:

while(!feof($id.'.txt')) {
    $content = stream_get_line($id.'.txt', 100, "[");
    $content1 = substr($content, 0, 10);
    $content2 = substr($content, 11);
    echo "[".$content1."000".$content2;
}

Wstawić to w miejsce kwadratowych nawiasów (linijka 87/88 u mnie)

data: [".file_get_contents('czujniki/'.$id.'.txt')."],

Myślę, że coś na ten styl powinno zadziałać, pisane z palca, mogą być błędy, ale co do logiki działania myślę, że wiecie o co mi chodzi smile

--- UWAGA ---
Kod póki co się zapętla albo mocno wysypuje, póki nie poprawię, to wycinam ;-)

40

(256 odpowiedzi, napisanych Termometr)

No zdecydowanie xury podszedłeś sprytniej do tematu niż ja i mi pomogłeś.
Nie chciało mi się myśleć i uczyć jak poprawnie wydłubać tę datę i czas z plików z pomiarami, a Ty wpadłeś na prostszy sposób tworząc timestamp.txt.

Za to nasze wypociny mogą posłużyć nawet do zmodyfikowania pierwotnego kodu przez autora dzięki czemu będzie jeszcze lepiej wink

41

(256 odpowiedzi, napisanych Termometr)

Rozumiem co masz na myśli, ale nic nie stoi na przeszkodzie dopisania zaraz za pierwszą linijką z deklaracją zmiennej $path następującego kodu:

if (!file_exists($path."timestamp.txt)) {
     if(empty(system("ntpd -n -q -p  0.europe.pool.ntp.org -p 1.europe.pool.ntp.org -p 2.europe.pool.ntp.org"))) {
          file_put_contents($path."timestamp.txt",time(NULL));
     }
     else die;
}

Jeśli nigdzie nie ma literówki, to stanie się tak:
1. Sprawdzi czy istnieje plik timestamp.txt
2. Jeśli nie istnieje, to sprawdza czy uda się pobrać aktualną datę i czas z internetsów (na sztywno wpisałem 3 adresy).
3. Jeśli się nie uda, to ubija całe php (die)
4. Jeśli się uda, to tworzy plik i zapisuje aktualną datę i czas (to samo polecenie co dopisał xury na koniec pliku).

BTW
zamiast wywoływać poprzez system "ntpd itd." z na sztywno ustalonymi adresami jak to wyżej napisałem to można zapisać napisany przeze mnie skrypt do pliku, który pobiera te adresy przez UCI i się do niego odwołać poprzez system.

42

(256 odpowiedzi, napisanych Termometr)

@wabikboy
Nie, nie dogadaliśmy się - u mnie jest tak:
Mam uruchomiony skrypt w pythonie w tle, który monitoruje szeregowca pod /dev/ttyACM0.
Jak wchodzą dane z czujników, to na samym końcu zapisuję je do "meteo.txt" w dokładnie takim samym formacie jak to robi digitemp (np. Sensor 0 C: 25.00).
Czyli jeśli zakomentujesz linijkę z digitemp w pierwotnej wersji meteo, to będzie to od razu działać.

wabikboy napisał/a:

A jeśli chodzi o sprawdzanie czy istnieje timestamp.txt to moim zdaniem wystarczy dodać jeden warunek "if" na początku który to sprawdza i jeśli brak to tworzy go i wpisuje bieżący czas smile

A co jeśli akurat bieżący czas jest błędny? Nie masz gwarancji właśnie, stąd myślałem o wymuszeniu aktualizacji NTP z sprawdzeniem czy się powiodło...

@xury
Kolego, wrzuciłem skrypcik do siebie i działa bez zarzutu, oprócz jednego błędu, który musiałem na początku poprawić.
Zostawiłeś przecinek między cudzysłowiem, a nawiasem:

"timestamp.txt",)

wystarczy go skasować:

$timestamp1 = file_get_contents($path."timestamp.txt"); // czas ostatniego zapisu

I działa jak ta lala, dzięki za pomoc smile

43

(256 odpowiedzi, napisanych Termometr)

OK, faktycznie prościej stworzyć osobny plik z ostatnim dato-czasem niż orać w np. 0.txt za ostatnią datą.
Bardzo fajny pomysł!

A przez PHP nie da się utworzyć tego pliku w razie gdyby go nie było? Byłoby to bardziej idiotoodporne ;-)
Tylko fakt, jak utworzymy plik i wrzucimy datę z automatu, to nie ma pewności czy jest właściwy dato-czas.

Trochę wyolbrzymiam, wiem, ale jak by jeszcze przed utworzeniem pliku wymusić synchro z NTP wg mojego pomysłu to mamy idiotoodporność^2.

44

(256 odpowiedzi, napisanych Termometr)

Ale temat poszedł pod moją nieobecność big_smile
Czas jest zapisywany, jak już pewnie z kodu powyżej wyczaiłeś w takim formacie:
[1416349960000,te.mp]
Gdzie ciąg cyfr to czas w sekundach od słynnego 1.1.1970 i temperatura z kropką oddzielającą jedności od dziesiętnych.
Kolejne temperatury oddzielane są przecinkiem między nawiasami.

xury, mógłbyś wyjaśnić co dokładnie zmieniłeś, może zrozumiem jak to działa wink
Wtedy pisanie tego w bashu czy czymkolwiek nie byłoby potrzebne, a wystarczyłoby dane odpowiednio podać do meteo.php (jak to robię teraz).

45

(256 odpowiedzi, napisanych Termometr)

Byłbym wdzięczy ;-)
W ogóle spróbuję ten pliczek meteo.php sobie przepisać w pythonie czy bashu, bo aktualnie to mam swoisty wrapper w pythonie, który podaje dane tak żeby meteo.php bez żadnych przeróbek odzczytał dane, a nie lubię rozwiązań na około ;-)

46

(256 odpowiedzi, napisanych Termometr)

Jaack napisał/a:

Myślałem nad tym by ustawić jakieś zabezpieczenie i chyba najprostszym wydaje się sprawdzenie czy ostatni wpis w pierwszym pliku (0.txt) ma datę/czas mniejszy niż aktualnie mam zamiar zapisać.
Jeśli tak, to zapisuję, jeśli nie to dane kasuję.

Czy ktoś umiałby to napisać w PHP?

Tak że wpadłem na to, ale niestety nie jestem na tyle dobry w PHP żeby to ogarnąć...
Jeśli chciałbyś pomóc to byłbym wdzięczny wink

47

(256 odpowiedzi, napisanych Termometr)

Nie pomyślałem, żeby tam poszukać.
Poniżej kod, który u mnie zadziałał, w pythonie wywołuję ten skrypt subprocessem, przechwytuję output, jeśli jest pusty, to jest OK, a jeśli nie to znaczy że są błędy.
Nie wiem czy da się lepiej zaciągąć functions.sh.
Nie wiem czy to poprawne czy eleganckie, ale na pewno działa - może ktoś wie jak to lepiej albo poprawniej napisać?

#!/bin/sh
# Copyright (C) 2011 OpenWrt.org
# Skrypt do testowania ntp - jak OK, to nic nie zwraca.
. $IPKG_INSTROOT/lib/functions.sh

local peers
local args="-n -q"
config_load system
config_get peers ntp server

if [ -n "$peers" ]; then
        local peer
        for peer in $peers; do
                append args "-p $peer"
        done
fi

/usr/sbin/ntpd $args

48

(256 odpowiedzi, napisanych Termometr)

To zanim wejdę w główną pętlę mojego "odbieradła" mógłbym wykonać takie polecenie:

ntpd -n -q -p XXX

gdzie: XXX to serwer ntp, który chciałbym pobrać z UCI.
Sprawdzić czy coś zwraca - jeśli nie, to OK, a jeśli zwraca, to są to błędy, więc wtedy musiałbym przeczekać ileś czasu i spróbować ponownie.

Aby pobrać dane z UCI msuiałbym wykonać poniższe polecenie, ale kilka serwerów (w przypadku gargoyle mam 3) trzeba podać po  po kilku "-p".

uci get system.ntp.server

Nie bardzo umiem to tak skonstruować żeby w pętli rozbił te dane na styl:

ntpd -n -q -p $1 -p $2 -p $3

Ktoś pomoże? :-)

49

(256 odpowiedzi, napisanych Termometr)

Widzisz, to byłem nieprecyzyjny w wypowiedzi, mam Gargoyle.
Czyli to tłumaczy wszystko - dzięki.

A czt ntp ma jakąś flagę żeby sprawdzić czy udało mu się zaktualizować czas?
W skrypcie w pythonie bym ją odpytał i jeśli tak, to ok, a jeśli nie, to dane bym wrzucał z zanotowaniem uptime w jakiś pliczek i jak by w końcu zsynchronizował czas, to mógłbym je wrzucić na wykres bez straty :-)

50

(256 odpowiedzi, napisanych Termometr)

Ale rzecz w tym, że nie dorabiałem niczego pamiętającego czas, to dlaczego tak się dzieje, skąd on bierze tę datę?
Jak byś ten problem rozwiązał Cezary? :-)