Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Atmega - Czas NTP - wykrycie poprawności czasu

Elektronik_Kraków 01 Jul 2016 16:59 1926 7
  • #1
    Elektronik_Kraków
    Level 13  
    Witam
    Czy jest możliwość "określenia", czy odebrany czas NTP jest poprawny ? Tak, aby nie dopuścić do aktualizacji zegara RCT błednymi wskazaniami.
  • #2
    User removed account
    User removed account  
  • #3
    Elektronik_Kraków
    Level 13  
    Witam
    Interesujące rozwiązanie. Nie wiem tylko, czy da się je wykorzystać w przypadku skorzystania z ESP8266 ( zapomniałem wspomnieć ,że z niego korzystam ).

    Wykorzystuje taki kod ( publikował go Kolega Pusiek ), nieco go rozbudowałem o "zabezpieczenie" właściwie sprawdzenie, czy jest internet, gdyż gdy go nie będzie, program się zatrzyma.
    Code: vbnet
    Log in, to see the code


    I to działa, tylko nie wiem dlaczego za pierwszym pobraniem czasu NTP są jakieś dziwne wartości.
  • #4
    krru
    Level 33  
    Ale to chyba nie jest NTP. Ten protokół działa na porcie 123, a w przykładzie masz port 37 (o ile dobrze rozumiem ten kod), czyli tzw "time protocol". W NTP przesyłana jest wartość tzw stratum - liczba określająca jakość czasu (jak daleko od źródła wzorcowego) i wartość 16 oznacza że czas jest niewiarygodny. Do prostych zastosowań można użyć uproszczonej wersji NTP zwanej SNTP (Simple Time Network Protocol) - o ile pamiętam nie jest wtedy liczony czas propagacji ramek po sieci.
  • #5
    Elektronik_Kraków
    Level 13  
    No to wygląda, że część stron ma nie poprawny kod, np. na Forum MCS.
    również mają port 37. Przeglądając strony jest tak 50 % dla portu 123 i 50 % dla portu 37
  • #6
    krru
    Level 33  
    Nie należy ufać ślepo wszystkiemu znalezionemu w internecie (moim postom też).
    W sumie jeśli chodzi tylko o ustawienie czasu to "time protocol" też jest dobry, ale on przesyła pakiet 4-bajtowy, zawierający tylko czas (timestamp) więc nie ma tam informacji na ile ten czas jest dobry. W NTP jest cała sieć serwerów i konkretny serwer zaczyna podawać czas jako dobry dopiero jak zsynchronizuje się z serwerami nadrzędnymi, co trwa czasem nawet kilkanaście minut (zależnie od łącza). Na twoje pytanie odpowiedź brzmi TAK - w NTP jest taka możliwość, natomiast to co używasz to nie jest NTP.
    Jak widać wielu nie rozróżnia "NTP" i "time protocol".
    https://pl.wikipedia.org/wiki/Network_Time_Protocol
    https://en.wikipedia.org/wiki/Time_Protocol
  • #7
    User removed account
    User removed account  
  • #8
    Elektronik_Kraków
    Level 13  
    Quote:

    No i trzeba sobie postawic pytanie jak dokladny czas jest potrzebny. W wiekszosci zastosowan nawet ten znieksztacony przez czasy przejscia przez siec jest bardziej niz wystaczajaco dobry.


    Dokładnie tak. Jak dla mnie czas odebrany przez NTP lub time protocol jest wystarczający. Dodatkowo stopień komplikacji w porównaniu z DCF77 jest mniejszy - DCF 77 zajmuje dodatkowo 1 Timer, a pewność, że się odbierze większa ( u mnie DCF77 odbierał tylko po północy ). Można nawet przeboleć to, że za pierwszym razem nie odbiera - przynajmniej u mnie :D .

    Mama jednak problem z wykryciem braku sieci. Bo brak samego internetu można sprawdzić przez Ping.
    Myślałem, że coś takiego:
    Code: vbnet
    Log in, to see the code


    czyli najpierw sprawdzam, czy nie ma FAIL, ( nie zalogowano lub brak sygnału WifI ), jeśli nie doczekał się na FAIL, a wyskoczyła flaga od Timer'a to powinien iść dalej i sprawdzić czy OK, tak się nie dzieje