Sincronizza un dispositivo senza impostare direttamente data / ora?

1

Setup: ho un certo numero di dispositivi biometrici, ognuno dei quali registra blocchi di dati di 24 ore su 48 ore che devono essere contrassegnati con il timestamp con la data di inizio di ogni registrazione. Ogni dispositivo deve essere connesso a un PC di volta in volta, a quel punto funzionano come supporti di memorizzazione rimovibili, consentendo il download dei dati raccolti. Ho il controllo del design sul software (.NET) sul PC e alcuni controlli di progettazione limitati sul firmware del dispositivo.

Problema: ogni dispositivo mantiene una data / ora interna e una batteria dell'orologio mantiene questo orologio funzionante anche quando non è alimentato, ma non è intelligente per sapere nulla sull'ora legale o sui fusi orari. Di conseguenza, questo dispositivo a volte non è sincronizzato e deve essere ripristinato manualmente. Il design fisico del dispositivo impedisce qualsiasi cosa diversa dall'utilizzo della memoria rimovibile (una scheda SD) mentre è collegata al PC: non posso inviare comandi direttamente al processore principale del dispositivo. La risoluzione fino al minuto è abbastanza buona.

Soluzione possibile: mentre è connesso a un PC, il software potrebbe scrivere la data / ora locale del PC su un file sulla scheda SD del dispositivo e al successivo avvio del dispositivo potrebbe leggi quel file e usalo per impostare la sua data / ora interna. Tuttavia, se il dispositivo non viene immediatamente riacceso da un utente (e non c'è modo di farlo rispettare), la data / ora che è stata scritta sulla scheda sarà spenta di pochi minuti a giorni. Quello che ho davvero bisogno di sapere è l'attuale data / ora interna sul dispositivo nell'istante in cui si avvia in modalità USB, nonché la data / ora locale sul PC quando il dispositivo è stato collegato (supponiamo che questi accadano entro un minuto di l'un l'altro). Il software può quindi scrivere il delta sulla scheda SD e il dispositivo può utilizzare quel delta per regolare la data / ora interna sul dispositivo. Questo risolve anche le situazioni in cui il dispositivo rimane spento per giorni.

Domanda: Qualcun altro ha avuto a che fare con questo tipo di situazione e, in caso affermativo, sto affrontando questo nel modo giusto? Qualcuno ha qualche suggerimento alternativo o ci sono delle insidie che devo fare attenzione con l'implementazione proposta?

    
posta p.s.w.g 10.11.2016 - 00:17
fonte

1 risposta

1

Ecco alcuni possibili pensieri contrarian ...

Utilizza UTC sul dispositivo

Suppongo che tu abbia effettivamente bisogno dell'ora locale sul dispositivo, altrimenti non lo chiederesti a questo. In caso contrario, il modo più semplice per evitare di uscire dalla sincronizzazione sui fusi orari è utilizzare sempre UTC sul dispositivo e solo tradurre l'ora locale sul PC o altra interfaccia utente.

Comunicare solo l'offset dell'UTC dal PC

Supponendo che il dispositivo abbia bisogno dell'ora locale, ad es. da mostrare a un utente .... potresti ...

  • Esegui il dispositivo sempre in UTC.
  • Trasferisci solo l'offset UTC dal PC.
  • Consenti al dispositivo di applicare l'offset UTC quando visualizza il tempo per l'utente, se il tempo è mai visualizzato.

Questo risolve il problema di passare un ripristino dell'ora tramite un mezzo lento. Passi solo uno scostamento UTC che di solito è preciso fino alla successiva regolazione dell'orario stagionale.

Considera le aspettative degli utenti

Ma ti rimane un dispositivo che non soddisfa le aspettative tipiche dei consumatori.

  • Non esegue automaticamente aggiustamenti stagionali.
  • Non rileva automaticamente le correzioni temporali quando è collegato a un PC o a una rete.

E non hai modo di affrontare un caso in cui il tempo del dispositivo è gravemente fuori sincrono a causa della perdita di energia della batteria, per esempio.

Crea in un orologio che non richiede il ripristino

Dovrebbe essere possibile progettare o acquistare un dispositivo che abbia un orologio sufficientemente preciso e una batteria dell'orologio sufficiente per funzionare per molti anni senza un reset. Ad esempio, token ID MFA hardware. Questa sarebbe la mia prima scelta, design in una batteria per orologio che elimina la necessità di resettare il tempo. Reimpostare l'offset dell'UTC solo se necessario.

Utilizza il database TZ e i tuoi strumenti di sviluppo per automatizzare i cambiamenti stagionali

Se hai il controllo del firmware e stai utilizzando un set di strumenti di sviluppo con librerie decenti, puoi includere i dati dal database del fuso orario nel dispositivo e lasciare che esegua le proprie modifiche stagionali. Ciò richiederebbe solo la parte del database TZ relativa al fuso orario attualmente selezionato e potrebbe essere trasferita dal PC. Ma immagino che tu lo sappia e ci avrei pensato se fosse pratico. Il database TZ è disponibile in molti formati. A volte ha bisogno di un aggiornamento.

Questo è stato un mio amico, quando si tratta di fusi orari. Database IANA TZ È il db dietro a molti strumenti di sviluppo che gestiscono i fusi orari. Quindi potresti non dover armeggiare da solo se il tuo set di strumenti già lo usa.

Altrimenti crea un canale di comunicazione migliore

In caso contrario, suggerisco che per la maggior parte delle applicazioni consumer, se non si riesce a fornire l'orologio e la batteria per mantenere il dispositivo su un tempo UTC sufficientemente preciso per la sua durata effettiva, è necessario un metodo di comunicazione migliore. Che si tratti di cavo USB, bluetooth, wifi, qualsiasi cosa sia appropriata.

Questo è quello che ti viene in mente. Grazie per avermi dato l'opportunità di acquistare una finestra per un orologio atomico di piccole dimensioni. Trovato uno per $ 1500, peso 30g. Very Rube Goldberg, a meno che non ne abbiate bisogno. Su un dispositivo a bassa potenza veramente piccolo un chip RFID potrebbe probabilmente gestire questa comunicazione. Ma probabilmente è sciocco, e al di fuori del tuo ambito.

    
risposta data 10.11.2016 - 02:43
fonte

Leggi altre domande sui tag