Thread Rating:
  • 2 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Sincronizzazione automatica data e ora
#1
Ciao a tutti,
sto sviluppando un sistema di controllo remoto per i termostati di casa mia. La scheda che mi sono costruito monta un RTC ds1307 per gestire data e ora.
Dopo il recente aggiornamento del firmware µPanel alla versione 003, e la relativa implementazione del TCP socket, ho avuto l'idea di scaricare periodicamente data e ora esatti da un qualche server in internet....evitanto così di impostarli manualmente.
Qualcuno sa darmi qualche dritta sui comandi µPanel che devo usare?
Penso sia un argomento che può interessare a parecchie persone.

Grazie
Reply
#2
Buongiorno Capelot81,

grazie per la domanda che sicuramente interesserà a molti. Ci sono diverse soluzioni per ottenere l'ora con miuPanel, tra le più semplici ne segnaliamo tre, di cui la prima utilizzabile anche con moduli non connessi ad Internet:

1) L'ora viene richiesta all'APP non appena l'utente si collega e visualizza il pannello - Utilizzando i Panel Commands è possibile caricare nel pannello un comando all'interno di un "command slot" affinché venga eseguito non appena il pannello viene visualizzato. Il comando che chiede l'ora all'APP è: S:_da(1); Ad esempio, un pannello con un semplice messaggio di testo e il comando di invio dell'ora potrebbe essere:

$P:T:Invio Data e Ora;C3:S:_da(1);;

In cui viene usato lo slot numero 3 per contenere il comando. Notate anche il doppio punto e virgola finale richiesto per chiudere la definizione del Panel Command.

Quando l'APP si collega, verrà mandato il seguente messaggio al microcontrollore:

#:DATE:1453635745818:2016:01:24:12:42:25:818

dove il simbolo : separa i seguenti campi: Java Time, Anno, Mese, Giorno, Ora, Minuti, Secondi, Millesimi di secondo

2) L'ora può essere prelevata dall'header di un pacchetto di risposta HTTP - E' possibile chiedere una pagina qualunque ad un server web, (es. Google) e leggere il campo Date. Ad esempio eseguendo il seguente comando TCP che richiede l'header di una pagina inesistente:

$TCP0:CA:www.google.com:80:HEAD /xyzxyz HTTP/1.0\r\n\r\n

la risposta sarà del tipo:

$OK-TCP0-Connecting
$TCP0:CONNECTED
$TCP0:SENT:1
$TCP0:#0201,149.003.176.053:00080
$TCP0:>A:HTTP/1.0 404 Not Found
$TCP0:>A:Date: Sun, 24 Jan 2016 11:39:26 GMT
$TCP0:>A:Content-Type: text/html
$TCP0:>A:Server: HTTP server (unknown)
$TCP0:>A:Content-Length: 49
$TCP0:>A:X-XSS-Protection: 1; mode=block
$TCP0:>A:X-Frame-Options: SAMEORIGIN
$TCP0:>A:
$TCP0:DISCONNECTED

a questo punto è sufficiente cercare la linea che contiene $TCP0:>A:Date:

3) E' possibile richiedere l'ora anche al nostro Cloud attraverso l'esecuzione del seguente comando (firmware >= 003A):

$CLOUD GET:TIME

la risposta sarà del tipo:

$CLOUD:TIME:1453635905562 2016-01-24 11:45:05 UTC

dove il primo valore numerico rappresenta nuovamente data e ora in Java Time, mentre la restante linea riporta data e ora UTC.

E' possibile anche chiedere l'ora con un determinato fuso orario, ad esempio l'ora Italiana (UTC+1):

$CLOUD GET:TIME+1

fornirà la risposta:

$CLOUD:TIME:1453635905562 2016-01-24 12:45:05 UTC+1

Il comando CLOUD non è documentato in quanto non è ancora definitivo, pertanto potrebbe ancora subire cambiamenti e limitazioni. Sconsigliamo per ora di utilizzarlo all'interno di applicazioni definitive.
Reply
#3
Testato e funzionante. Grazie mille!
Una curiosità...la data e l'ora in formato "Java time" come vanno interpretate? Ho cercato in internet ma non ho trovato info utili.
Reply
#4
Salve
molto interessante la soluzione numero 1 con i Panel Commands, potreste pubblicare la documentazione ti tali comandi?
Reply
#5
Salve sono riuscito a far funzionare la stringa per l'ora e data.. volevo sapere se era possibile togliere in qualche modo la parte del java time perchè dovrei memorizzare la data e ora sulla eeprom
Reply
#6
Buonasera,
ho provato la soluzione numero 2, quella che preleva data e ora sfruttando google.
Inviando il comando:
$TCP0:CA:www.google.com:80:HEAD /xyzxyz HTTP/1.0\r\n\r\n

ricevo in risposta:
$OK-TCP0-Connecting
$TCP0:CONNECTED
$TCP0:SENT:1

e poi nient'altro. Sapete dirmi come mai?

Grazie
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)