Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
$CLOUD GET:DATE+TimeZone
#1
Ciao

Sto cercando di utilizzare il comando "
Code:
$CLOUD GET:DATE+TimeZone
 ma non riesco a intercettare la risposta.

Ho capito che devo scrivere il codice ad esempio:

Code:
Serial.println("$CLOUD GET:DATE+TimeZone");

poi usare la Serial.read()
ma se poi leggo la variabile Msg non trovo nulla....
mi fate un esempio di codice ?

Grazie
mic
Reply
#2
Effettivamente il comando
Code:
$CLOUD GET:DATE+TimeZone
non funziona, mentre funziona
Code:
$CLOUD GET:TIME
per intercettarlo nel loop: 
Code:
int c;
 while ((c = Serial.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
 
 if (c == '\n')  // is message complete?
{
 Serial.println(Msg);
 Msg = "";
  }
  }
Reply
#3
(10-23-2017, 03:58 PM)Dok Wrote: Effettivamente il comando
Code:
$CLOUD GET:DATE+TimeZone
non funziona, mentre funziona
Code:
$CLOUD GET:TIME
per intercettarlo nel loop: 
Code:
int c;
 while ((c = Serial.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
 
 if (c == '\n')  // is message complete?
{
 Serial.println(Msg);
 Msg = "";
  }
  }

ho provato ma non funziona.....

il codice che ho inserito è il seguente:


Code:
Serial.println("$CLOUD GET:TIME");

          while (Serial.available()>0) {
          int c;
          while ((c = Serial.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
 
          if (c == '\n')  // is message complete?
          {
            Serial.println(Msg);
            Msg = "";
           }
            }

al primo riavvio ottengo questo sul monitor seriale:


Code:
$CLOUD GET:TIME
$OK-PING
$OK-PANEL


poi ottengo questo sul Monitor Seriale:


Code:
$CLOUD GET:TIME
$ERR-TCP-Syntax
$TCP2:CONNECTED
$TCP2:SENT:1
$TCP1:CONNECTED
$T$OK-TCP1-Connecting
$OK-TCP2-Connecting
$OK-CLOUD
$BUSY-CSCK
$ERR-CLOUD
$ERR-TCP-Socket-Mode
$ERR-TCP-Syntax
$ERR-TCP-Socket-Mode

penso che quando apro la seriale sbaglio qualcosa....
Devo aprire 2 seriali? velocità errata? (apro a 57600)

Ciao
Mic
Reply
#4
Se l'hai inserito nel loop è troppo veloce quindi ti da busy, prova o ad associare la richiesta ad un pulsante oppure inserisci un delay nel loop.
Reply
#5
ho provato in vari modi ma sempre errore


Code:
Serial.println("$CLOUD GET:TIME+1");
          while (Serial.available()>0) {
          int c;
          while ((c = Serial.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
          if (c == '\n')  // is message complete?
          {
            Serial.println(Msg);
            delay(1000); 
            Msg = "";
           }
           }

ho provato ad aumentare il delay ed anche a posizionarlo subito dopo la GET TIME ma ottengo sempre:

$CLOUD GET:TIME+1
$OK-TCP2-Connecting
$OK-CLOUD
$TCP2:CONNECTED
$TCP2:SENT:1
$CLO$OK-TCP2-Connecting
$ERR-TCP-Socket-Mode
$ERR-TCP-Syntax

ma il dubbio che mi viene è il seguente:
la risposta non dovrebbe arrivare come prima riga?
in realtà sembra che prima stabilisca una connessione e poi va in errore socket

Ciao
Mic
Reply
#6
Ciao,
pubblica tutto lo sketch cosi' ci è più facile aiutarti.
Reply
#7
eccolo:


Code:
/**********************************************************/

#include <Time.h>

int x=0;
int val=0;
int BUTTON=7;
int lettura=0;
int lastlettura=0;
String Msg = "";
 

/*********************************************************/
void setup()
{
  
  pinMode(BUTTON,INPUT);

  Serial.begin(57600);       // Inizializzazione della porta seriale (57600 è la velocità di comunicazione

  
  Serial.println("");

   // Abilita la risposta in tempo reale
  Serial.println("$PING 200");  

  Serial.println("$P:D!228;/{-r30!228,114*12{T:Porta Aperta;|L1G:0;_T:Porta Chiusa;|L2R:0;}|{^*8L35:0;&L45:0;_T:Aperture;}}/{-r30!228,114*12{M1#F00*10:Nessuna Apertura ;_M2#F00*10: ;_M3#F00*10;_M4#F00*10:;_M5#F00*10: ;}}");
}
/*********************************************************/
void loop()                                    
 { 
 val=digitalRead(BUTTON);
 lettura=val;
if (val == HIGH) {
    Serial.println("#L20");
    Serial.println("#L11");
    if (lastlettura!=lettura) {
        int d1=(x/10)%10;
        int d2=x%10;
       
        Serial.println(d1);
        Serial.println(d2);
        Serial.println(x);
        Serial.print("#L3"); Serial.println(d1, DEC);
        Serial.print("#L4"); Serial.println(d2, DEC);
        
        Serial.println("$CLOUD SEND:PUSH:Porta Aperta  ");
        
        Serial.println("$CLOUD GET:TIME+1");
          while (Serial.available()>0) {
                int c;
                while ((c = Serial.read()) > '\n') Msg += (char) c;  // Read incoming chars, if any, until new line
                if (c == '\n')  // is message complete?
                {
                  Serial.println(Msg);
                  delay(1000);
                  Msg = "";
                }
            }
            
        Serial.print("#M1"); Serial.println("Aperture");
        //Serial.print("#M2"); Serial.println(dataora);

        x=x+1;
        lastlettura=lettura;
        Msg="";
        }
     else {
    lastlettura=lettura;
    delay(500);
    } 
       
    }
 if (val == LOW) {
    Serial.println("#L10");
    Serial.println("#L21");
    delay(500);
    lastlettura=lettura;
    }
 }

e ottengo:


Code:
$CLOUD SEND:PUSH:Porta Aperta  
$CLOUD GET:TIME+1
$OK-TCP2-Connecting
$OK-CLOUD
$BUSY-CSCK
$ERR-CLOUD
$TCP2:CONNE$OK-TCP2-Connecting
$ERR-TCP-Socket-Mode
#M1Aperture
#L20


uso un sensore di campo magnetico per testare l'apertura della porta.
conto le aperture e accendo i led a secondo se la porta è aperta o meno
volevo aggiungere il time dell'apertura.

Ciao
Mic
Reply
#8
Il tuo codice purtroppo è molto incasinato ed è per quello che non funziona (cosa c'entra poi #include <Time.h> ???). Io partirei prima di tutto tenendo sotto controllo la condizione di un pin (se high o low) e a seconda di ciò implementare i successivi comandi tra cui quello del time.
Reply
#9
(10-25-2017, 09:27 AM)Dok Wrote: Il tuo codice purtroppo è molto incasinato ed è per quello che non funziona (cosa c'entra poi #include <Time.h> ???). Io partirei prima di tutto tenendo sotto controllo la condizione di un pin (se high o low) e a seconda di ciò implementare i successivi comandi tra cui quello del time.

L'include  <Time.h> l'avevo prevista per poi gestire l'orario ma come sappiamo....non la riesco a prendere... Rolleyes

In realtà il ciclo testa il pin 7 dove è collegato un sensore di campo magnetico e se è LOW entra nel ciclo per prendere l'ora.

Comunque provo a scrivere uno ex-novo con solo il ciclo di tale sensore e lancio la get TIME

Un dubbio che mi viene ....
Utilizzo la notifica PUSH nello stesso ciclo (mando una notifica se entro nel ciclo) e poi vorrei visualizzare l'ora sul pannello... non è che il $PING 200 crea problemi?
L'avevo eliminata dal loop ma per errore l'avevo lasciata nella parte di setup
 Serial.println("$PING 200");
Reply
#10
(10-25-2017, 12:34 PM)migreco Wrote:
(10-25-2017, 09:27 AM)Dok Wrote: Il tuo codice purtroppo è molto incasinato ed è per quello che non funziona (cosa c'entra poi #include <Time.h> ???). Io partirei prima di tutto tenendo sotto controllo la condizione di un pin (se high o low) e a seconda di ciò implementare i successivi comandi tra cui quello del time.

L'include  <Time.h> l'avevo prevista per poi gestire l'orario ma come sappiamo....non la riesco a prendere... :rolleyes:

In realtà il ciclo testa il pin 7 dove è collegato un sensore di campo magnetico e se è LOW entra nel ciclo per prendere l'ora.

Comunque provo a scrivere uno ex-novo con solo il ciclo di tale sensore e lancio la get TIME

Un dubbio che mi viene ....
Utilizzo la notifica PUSH nello stesso ciclo (mando una notifica se entro nel ciclo) e poi vorrei visualizzare l'ora sul pannello... non è che il $PING 200 crea problemi?
L'avevo eliminata dal loop ma per errore l'avevo lasciata nella parte di setup
 Serial.println("$PING 200");

Ho trovato.... almeno credo.... l’errore.
Ho eliminato completamente la notifica PUSH ( sia dal loop che dal setup ...il Ping 200) e ora funziona.
Ho provato sia il mondo TIME che quello da pannello (S:_da(1);;) e funzionano.
Ho provato ad inserire al posto della notifica push una chiamata http ad un php ed anche così non funziona...
Possibile che non posso aggiungere ne una notifica push e nemmeno una chiamata http senza far andare in errore il socket?
Ho provato anche prima della Geti time di chiudere il socket ma stesso errore.
Ciao
Mic
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)