Quanto sarebbe precisa l'ora sul mio Raspberry Pi 3 se è continuamente connesso a Internet, ma senza un RTC?
Quanto sarebbe precisa l'ora sul mio Raspberry Pi 3 se è continuamente connesso a Internet, ma senza un RTC?
Poiché il protocollo NTP
tenta di misurare e compensare la latenza di rete e altri ritardi, è molto accurato anche quando si utilizzano time server pubblici.
RTC
viene utilizzato per mantenere l'ora del sistema quando viene tolta l'alimentazione, e non è necessariamente nemmeno preciso, dopo che il tuo raspberry PI si è avviato e ha ricevuto l'ora da NTP
continuerà a contare il tempo senza un RTC
anche se la rete è scollegata.
Quando si utilizza NTP
non ci si sincronizza continuamente con la rete, l'ora del sistema viene mantenuta con un timer basato sull'orologio della cpu.
Quando eseguito con un time server di rete locale, NTP
può raggiungere una precisione di <1ms
.
Quando viene eseguito l'internet pubblica, l'instradamento dinamico e potenzialmente asimmetrico dei pacchetti contribuisce a una stima più scarsa dei ritardi di rete. Tuttavia, puoi aspettarti una precisione ben al di sotto di 1s
con la maggior parte della documentazione che richiede una precisione di 100 ms
su Internet pubblico.
Se hai bisogno di una migliore sincronizzazione, senza una migliore precisione, potresti considerare di eseguire un server NTP locale per sincronizzare più raspberry pi l'uno rispetto all'altro con una sincronizzazione migliore di 1ms
(buona per allineare i dati del sensore).
Se hai bisogno sia della precisione che della sincronizzazione, puoi eseguire un server NTP Stratum 1 utilizzando il GPS come origine dell'ora.
Secondo wikipedia, il Network Time Protocol utilizzato per impostazione predefinita su Raspbian e milioni di altri dispositivi e computer in rete:
ha lo scopo di sincronizzare tutti i computer partecipanti a entro pochi millisecondi
In effetti, NTP viene utilizzato su sistemi (server, PC, ecc.) che hanno un RTC per correggere la deriva degli orologi dei computer. Significa che se hai aggiunto un RTC, sarebbe mantenuto accurato utilizzando gli stessi identici meccanismi di rete che sono già usati per impostare l'orologio del "software" del sistema operativo (che, realisticamente, è legato alla frequenza del processore, cioè c'è del cristallo dentro da qualche parte che tenga effettivamente il tempo mentre il sistema è acceso).
La presenza o l'assenza di RTC non ha nulla a che fare con la precisione del cronometraggio. È solo questione di essere in grado di mantenere (una scarsa approssimazione) l'ora corrente mentre il dispositivo è spento in modo che l'ora di sistema sia corretta prima di attivare il dispositivo di rete e ntpd.
Nota che se se si desidera una sorgente di clock remota sicura piuttosto che un semplice ntp, è necessario avere un'idea approssimativa dell'ora corrente (precisa su scala mensile) per convalidare i certificati; questo è probabilmente il principale scopo moderno di un RTC su dispositivi connessi a Internet.
Dopo aver fatto esperimenti con C ++ sul mio RPI3 (Stretch) utilizzando la funzione sys / time.h gettimeofday (**) e l'API wiringPi quindi misurando rispetto a un ambito, le applicazioni semplificate possono ottenere una risoluzione inferiore al millisecondo e una precisione sui tempi.
Ora, se utilizzi altre lingue sull'RPI, potresti non essere in grado di ottenere quelle velocità.
Otteniamo una precisione migliore di un secondo su diverse unità utilizzando un server NTP pubblico dall'altra parte di una rete complessa e occupata. Abbiamo anche bisogno solo di una precisione dell'ordine di 1 (che l'orologio di sistema può mantenere per giorni mentre è acceso).
Controlla la pagina man di ntpd, ma dopo aver configurato un server , assicurandoti che ntpd -g
venga eseguito all'avvio dovrebbe essere tutto ciò di cui hai bisogno. Il -g
ti riporta in tempo reale se l'orologio è fuori uso, ad esempio dopo una perdita di alimentazione.