Hola Ubidots
He estado buscando alguna solucion en el foro por este tema y no puedo dar con la misma
El problema es que cuando envio 2 variables de la forma:
sprintf(buff, “POST /api/v1.6/collections/values HTTP/1.1\r\nContent-Type:application/json\r\nX-Auth-Token:%s\r\nHost:things.ubidots.com\r\nConnection: close\r\nContent-Length:%d\r\n\r\n[{“variable”:”%s",“value”:%s},{“variable”:"%s",“value”:%s}]\r\n\r\n",token,sizet,idVariable3,tension,idVariable2,corr);
lo hace correctamente
y cuando intento enviar una mas no lo hace. he intentado asignar un buff de mas espacio y ni asi lo puede recibir. No parece ser un problema de ubidots ya que al enviar las 3 variables por un terminal de cliente TCP/IP como Hercules la solicitud es atendida correctamente.
estoy usando un modulo wifi MRF24WB0MA.
Hola, mirando la pieza de código que compartiste, deberías asegurarte que la variable sizet
, que es la que almacena el tamaño de tu payload como valor para Content-Length sea calculada correctamente, en tu código el payload se construye solo al final y probablemente tengas un error en ese cálculo.
Te recomiendo ver ejemplos en nuestra documentación de hardware para que te hagas una idea sobre cómo construir correctamente tus peticiones HTTP.
Saludos.
Jose gracias por la respuesta. lo pude solucionar por el momento partiendo el payload y enviandolo en 2 solicitudes ya que al parece el problema esta en la variable buff es demasiado larga para transmitirla de una sola vez.
char buff[400];
uitoa(ADC1BUF0,temp); //temperatura
size=strlen(temp)+10;
uitoa(ADC1BUF7,corr); //corriente
size2=strlen(corr);
uitoa(ADC1BUF6,tension); //tension
size3=strlen(tension);
sizeid1=strlen(idVariable);
sizeid2=strlen(idVariable2);
sizeid3=strlen(idVariable3);
sizet=size3+size2+sizeid3+sizeid2+51;
//sizet=size+size2+size3+sizeid1+sizeid2+sizeid3+76;
//uitoa(sizet,sizen);
// Place the application protocol data into the transmit buffer. For this example, we are
connected to an HTTP server, so we'll send an HTTP POST request.
if(flag==1)
{
flag=0;
sprintf(buff, "POST /api/v1.6/collections/values HTTP/1.1\r\nContent-Type:application/json\r\nX-
Auth-Token:%s\r\nHost:things.ubidots.com\r\nContent-
Length:%d\r\n\r\n[{\"variable\":\"%s\",\"value\":%s},
{\"variable\":\"%s\",\"value\":%s}]\r\n\r\n",token,sizet,idVariable3,tension,idVariable2,corr);
TCPPutArray(MySocket,buff,strlen(buff));
TCPFlush(MySocket);
}
else if(flag!=1)
{
flag=1;
sprintf(buff, "POST /api/v1.6/variables/%s/values HTTP/1.1\r\nContent-Type: application/json\r\nX-Auth-Token:%s\r\nHost:things.ubidots.com\r\nConnection: close\r\nContent-Length:%d\r\n\r\n{\"value\":%s}\r\n\r\n",idVariable,token,size,temp);
}
TCPPutArray(MySocket,buff,strlen(buff));
TCPFlush(MySocket);
GenericTCPExampleState++;
break;