wtorek, lipca 04, 2017

Zegar w Raspberry Pi nie jest zawsze godzien zaufania

Mam moje urządzenie do mierzenia jak długo stoję i siedzę przy biurku.
Problem w tym, że co jakiś czas zwiększa mi czas stania o kilkanaście godzin na dzień...

Poinwestygowałem i rozumiem co się dzieje.

Raspberry Pi, które robi za mózg urządzenia jest zasilane kablem USB z laptopa.
Dzięki temu działa tylko wtedy gdy włączony jest mój komputer.

W momencie gdy system startuje uruchamia się też mój program do sprawdzania czy stoję czy siedzę.
Dzieje się tak dzięki tej linii w crontab:
@reboot python /home/pi/distance2.py

Ale system w tym momencie często nie ma jeszcze aktualnego czasu....
W RPi nie ma bateryjnie podtrzymywanego zegara...

Ale, że głupio tak zaczynać z czasem ustawionym na 0 to system bazuje na ostatnim znanym czasie, jednocześnie próbując pobrać przez NTP od serwera czasu aktualny czas.

Teraz wróćmy do mojego programu, który sprawdza czy stoję czy siedzę...
On bierze pod uwagę aktualny czas systemowy.

Używa go do wyliczenia czasu między poprzednim pomiarem i obecnym i zakłada, że przez ten czas prawdą było co teraz zmierzył (zwykle ten czas jest krótszy niż 1 sekunda, więc nie ma jakichś wielkich niedokładności).
Ale jeśli akurat między rozpoczęciem pomiarów, a ich zakończeniem system zdobędzie przez NTP aktualny czas to sprawy zaczynają się komplikować ;-)
Nagle okazuje się, że ten czas to np. 17 godzin.... (gdy wyłączyłem komputer po 2 w nocy i włączyłem po 19...) i mam zafałszowany wynik.

Stąd dziś dodałem warunek, który sprawdza czy ten czas jest dłuższy niż 10 minut ;-) jeśli tak to go po prostu ignoruje.

Liczę, że jutro już zacznie dobrze raportować :-)


Podobne postybeta
Biurko
Polowanie na Nexus 4 - wersja automagiczna ;-)
Rant po toolach w stylu Mavane, Gradle, Bowera i całej tej hałastry
OpenOffice.org -> GoogleDocs v0.3
Status 302 i import arkuszy z Google Docs