forum Tomkii

Pełna wersja: Wykrywanie wyładowań atmosferycznych
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
No niestety. System który zbudowałem na osobnym routerze ASUSv2 dla pomiarów dokonywanych na poziomie strychu trochę nie zdał egzaminu.
Okazało się, że wersja softu którą wgrałem:
Backfire (10.03.1-rc4, r24045)
pomimo że teoretycznie działa z WiFi to zawiesza się okazjonalnie. Wszystko wskazuje na razie na to, że przyczyną jest właśnie włączone WiFi.
Stąd ostatnie przerwy w statystykach. No cóż radio dzisiaj wyłączyłem i zobaczymy co z tego wyniknie.

Drugą nieprzyjemną niespodziankę sprawiła mi część skryptu odpowiedzialna za zliczanie i zapis danych z czujnika wyładowań atmosferycznych.
Niestety błędy dało się wyłapać dopiero w czasie burzy, więc wcześniejsze dane nie istnieją.
Popełniłem dwa zasadnicze błędy. Zastosowałem obliczenia które jako wynik wystawiały różnicę nowej wartości licznika minus stara wartość a w przypadku wykrycia za dużego skoku zwracały 0.
Następna część skryptu wykonywała się tylko dla wartości >0 co było błędem. W ten sposób stan licznika nie miał szansy się skorygować w przypadku błędnych obliczeń (za duży skok).
Drugi błąd polegał na tym, że zapomniałem wykrywać stany gdy nowa wartość licznika jest mniejsza (tak!) od starej. Taki stan może się pojawić po restarcie routerka bądź magistrali 1-wire.
Włączenie zaś zapisu (i wykonywania reszty obliczeń) zawsze powodowałoby niepotrzebne obciążenie routerka (burze są w końcu przecież stosunkowo rzadko).

Poprawione obliczenia wyglądają tak:
na=`echo "old=$lic ;new=$a ;y=-2 ;if(new>=old)y=new-old ;if(y>1000)y=-1 ;y" |bc`
Gdzie lic - stary stan, a - nowy stan, na - wynik.
Wynik zawiera różnicę między starym zliczaniem a nowym, ale dla błędów zwraca wyniki ujemne - co pozwoliło mi wywoływać resztę procedur i zapis tylko wtedy gdy na jest różne od zera.
Przekierowanie