Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
$CLOUD GET:DATE+TimeZone
#11
Il PING 200 nel setup ha una sua funzione specifica che non va ad influire nel resto del codice. I collegamenti a server http cloud etc devono rispettare delle tempistiche, se eseguiti troppo vicini vanno in errore in quanto il socket tcp risulta occupato dalla funzione precedentemente eseguita.
Reply
#12
(10-27-2017, 06:23 AM)Dok Wrote: Il PING 200 nel setup ha una sua funzione specifica che non va ad influire nel resto del codice. I collegamenti a server http cloud etc devono rispettare delle tempistiche, se eseguiti troppo vicini vanno in errore in quanto il socket tcp risulta occupato dalla funzione precedentemente eseguita.

Concordo con Dok. E' proprio così.
E' bene attendere che il modulo restituisca il messaggio di risposta prima di inviare altro.

Inoltre, se usi comandi subito dopo l'accensione del modulo wifi, è bene attendere qualche secondo, o meglio, attendere il messaggio che conferma l'avvenuta connessione al router prima di inviare comandi che coninvolgono internet.
Reply
#13
Grazie mille a tutti .... ho ristrutturato il flusso e ora funziona bene
Il modulo controlla un sensore magnetico alla porta di ingresso dicendomi se è aperta o chiusa, quante volte è stata aperta, gli orari di apertura.
Con 3 pulsanti posso:
  •   Abilitare o disabilitare la notifica Push sul cell
  •   Abilitare o disabilitare la scrittura su un db mysql su un sito web che logga le aperture
  •   Reset dei conteggi

Comunque alla fine ho usato per la data il comando del pannello, quello del GET TIME continuava a non funzionare....
Ciao
Mic
Reply
#14
(11-12-2017, 06:21 PM)migreco Wrote: Comunque alla fine ho usato per la data il comando del pannello, quello del GET TIME continuava a non funzionare....
Ciao
Mic

Ciao,
ho provato e funziona tutto. Ma non è che invii comandi CLOUD senza prima attendere che il modulo si sia effettivamente connesso al cloud?????

Provo a spiegare meglio il mio ultimo messaggio: il modulo, dopo l'accensione, si connette al cloud dopo pochi secondi (ovviamente se è stato abilitato a connettersi Big Grin ) .

Non appena si connette al cloud, il modulo restituisce il seguente messaggio:

$CLOUD-JOINED

Quindi, basta intercettare questo messaggio per sapere con certezza quando si è connesso al cloud. Dopo il micro può inviare tutti i comandi cloud che volete (PUSH, TIME etc...)
Reply
#15
Con questo semplice sketch non ricevo niente:
Code:
String Msg;

void setup() {
 Serial.begin(57600);
 Serial.print("GO!");
}

void loop() {
 int c;
 while ((c = Serial.read()) > '\n') Msg += (char) c;  
 if (c == '\n')                                        
 {
   if (Msg.substring(0,14).equals("$CLOUD-JOINED")) Serial.println("OK");    
   Msg = "";
 }
}
Se invece uno questo sketch visualizzo solo come informazione interessante:
Code:
$CLOUD:TIME:154801656927$ERR-TCP-Socket-Mode

che non so interpretare.
Saluti
Reply
#16
non si capisce cosa vorresti fare, ti consiglio di rileggiti bene tutto
Reply
#17
Vorrei leggere , ricevere un orario attendibile per poi utilizzarlo a mio piacere senza dover usare un RTC esterno tipo DS3231, ecc.
Nei post precedenti c'era scritto che se io attendevo il messaggio $CLOUD-JOINED che restituisce il modulo, poi potevo usare il comando $GET:TIME per scaricare l'orario.
Con il semplice programmino che intercetta il $CLOUD-JOINET, non mi arriva niente, non vedo il comando indietro quando il modulo è connesso al Cloud.
Se uso invece l'esempio scritto nei post precedenti da "migrerco" mi arriva indietro la stringa :$CLOUD:TIME:154801656927$ERR-TCP-Socket-Mode.
Il numero scritto in JAVA e l'$ERR non mi sono utili.
Saluti
Reply
#18
$CLOUD-JOINET significa che il modulo si è connesso al cloud. A questo punto puoi inviare il comando  $GET:TIME e rilevare pertanto l'orario.

Quindi riassumendo intercetta l comando $CLOUD-JOINET

Code:
 if (Msg.substring(0, 13).equals("$CLOUD-JOINET")) {
   
     Serial.println("$CLOUD GET:TIME); 
    }

e poi vedrai su seriale la risposta
Reply
#19
Ok!
Grazie

Con:
Code:
String Msg;

void setup() {
 Serial.begin(57600);
 Serial.print("GO!");
}

void loop() {
 int c;
while ((c = Serial.read()) > '\n') Msg += (char) c;  
if (c == '\n')                                        
{
  if (Msg.substring(0,13).equals("$CLOUD-JOINED")) Serial.println("$CLOUD GET:TIME");    
  Msg = "";
}

}

Sulla seriale mi visualizza solo "GO!" ma nessuna data, rimane in attesa della risposta dal cloud.
Saluti
Reply
#20
devi abilitare la lettura su seriale


Code:
 while ((c = Serial1.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
  if (c == '\n')                                       // is the message complete?
  {
    Serial.println(Msg);
   
 if (Msg.substring(0, 13).equals("$CLOUD-JOINED")) Serial.println("$CLOUD GET:TIME");

Msg = "";
}

se non ti va il GET:TIME prova anche il GET:DATE, potrebbe dipendere anche dal firmware
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)