Ho messo su un codice per inviare 8 datastream in una singola chiamata PUT.
Ma solo 6 di questi dati vengono ricevuti e loggati.
I dati che non passano sono un int ed un unsigned long.
Tutti gli altri sono float e arrivano perfettamente.
Le float le ho convertite con dtostrf, l’int con itoa e il long con ltoa.
Quello che faccio è questo:
creo dei buffer per le variabili
converto le variabili e le alloco nei buffer
costruisco una stringa e ne calcolo la lunghezza per il content lenght.
inizio la chiamata put secondo lo schema
PUT /v2/feeds/18842.csv HTTP/1.1
Host: api.pachube.com
X-PachubeApiKey: ENTER_YOUR_PACHUBE_API_KEY_HERE
Content-Length: 28
Connection: close
0,value1
1,value2
2,value3
e con dei client.print invio i dati formattandoli riga per riga.
client.print("0,");
client.println(buffer1);
ecc
La mia sensazione è che le variabili int e long non vengano convertite come è necessario, penso a questo perché tutto il resto viene ricevuto senza problemi.
Suggerimenti? Sbaglio ad usare itoa ed ltoa? C’è un altro modo di convertirle?
Grazie
codice completo a seguire
/*----- Pachube -----*/
// buffer per la conversione delle variabili
char charbuffertout[5]; // t_out
char charbufferhout[5]; // h_out
char charbuffertin[5]; // t_in
char charbufferhin[5]; // h_in
char charbufferT1[5]; // T1 h20
char charbufferT2[5]; // T2 Heat
char charbufferluce[7]; //luce
char charbufferssr[2]; // SSR
// conversione delle variabili in ASCII
dtostrf(mydata.toutES,4,1,charbuffertout); // conversione float dtostrf(floatVar, minStringWidthIncDecimalPoint, numVarsAfterDecimal, charBuf);
dtostrf(mydata.houtES,4,1,charbufferhout);
dtostrf(mydata.tinES,4,1,charbuffertin);
dtostrf(mydata.hinES,4,1,charbufferhin);
dtostrf(mydata.T2ES,4,1,charbufferT2);
dtostrf(mydata.T1ES,4,1,charbufferT1);
ltoa(mydata.mediaHzES,charbufferluce,10); // conversione long
itoa(mydata.statusSSRES,charbufferssr,10); // conversione int
//composizione della stringa per il calcolo del Content-Length:
char stringaTs[100] = "t_out,"; // Field 1 t_out
strcat(stringaTs, charbuffertout);
strcat(stringaTs, "rh_out,"); // Field 2 h_out
strcat(stringaTs, charbufferhout);
strcat(stringaTs, "t_in,"); // Field 3 t_in
strcat(stringaTs, charbuffertin);
strcat(stringaTs, "rh_in,"); // Field 4 h_in
strcat(stringaTs, charbufferhin);
strcat(stringaTs, "t_h2o,"); // Field 5 T1 H20
strcat(stringaTs, charbufferT1);
strcat(stringaTs, "t_heat,"); // Field 6 T2 Heat
strcat(stringaTs, charbufferT2);
strcat(stringaTs, "hz,");
strcat(stringaTs, charbufferluce); // Field 7 MediaLuce
strcat(stringaTs, "ssr,");
strcat(stringaTs, charbufferssr); // Field 8 SSR
PgmPrint("StringaTs Contenuto: ");
Serial.println(stringaTs);
PgmPrint("StringaTs lunghezza: ");
Serial.println( strlen(stringaTs) ); // Lunghezza della stringa
// invio dati a pachube
// if there's a successful connection:
if (client.connect()) {
PgmPrintln("connecting to Pachube...");
// send the HTTP PUT request.
[cutttt]
// here's the actual content of the PUT request:
client.print("t_out,");
client.println(charbuffertout);// t_out <------ questo funziona
client.print("rh_out,");
client.println(charbufferhout); // h_out <------ questo funziona
client.print("t_in,");
client.println(charbuffertin); // t_in <------ questo funziona
client.print("rh_in,");
client.println(charbufferhin); // h_in <------ questo funziona
client.print("t_h2o,");
client.println(charbufferT1); // T1 h20 <------ questo funziona
client.print("t_heat,");
client.println(charbufferT2); // T2 Heat <------ questo funziona
client.print("hz,");
client.println(charbufferluce); //luce <------ questo NON funziona
client.print("ssr,");
client.println(charbufferssr); // SSR <------ questo NON funziona
PgmPrintln("Connection Done... Maybe");
client.stop();
delay (500);
}
else {
// if you couldn't make a connection:
PgmPrintln("connection failed");
}