3
« : marzo 17, 2021, 16:15:05 pm »
Hola Boris, muchas gracias por tu respuesta.
Efectivamente, el problema es solo al usar http.
Este es un extracto del código que uso. La función "ThingSpeakUp" se ejecuta una vez por minuto. Cuando la transacción http finaliza, ejecuta "@OnHttpSendCompleted()". Según mi análisis, lo que ocurre es que @OnHttpSendCompleted() no se estaría ejecutando (deja de ejecutarse porque por alguna razón no se completó la transacción), y por ende ThingSpeakError queda = 255, que es el valor con el que se inicializó al iniciar la funcionalidad.
La forma que yo tengo de "detectar" este problema es -precisamente- detectando que ThingSpeakError se queda clavado en 255.
Buen viaje, y lo seguimos más adelante.
Gracias desde ya,
Pablo
// --------------------------------------------------------------------------------
// Funcion : ThingSpeakUp
// Descripcion : Sube la información a ThingSpeak
// SE EJECUTA 1 VEZ POR MINUTO
// --------------------------------------------------------------------------------
ThingSpeakUP()
{
// Comprobar que no haya otras conexiones http en curso, ni el envío de email en curso
if(ThingSpeakSending == 0 && EmailSending == 0)
{
// Marca que hay un envío en curso
ThingSpeakSending = 1
// Inicializar cliente Thingspeak
ThingSpeakInit()
// Limpia las variables con el string que se enviara a ThingSpeak:
ThingSpeak_String1 = ""
ThingSpeak_String2 = ""
ThingSpeak_String3 = ""
ThingSpeak_String4 = ""
ThingSpeak_String5 = ""
ThingSpeak_String6 = ""
ThingSpeak_String = ""
StrFormat(ThingSpeak_String1, 50, true, "field1=%d.%d&field2=%d&", Dato1,Dato1_d,Dato2)
StrFormat(ThingSpeak_String2, 50, true, "field3=%d&", Letra1+Letra2+Letra3)
StrFormat(ThingSpeak_String3, 50, true, "field4=%d.%d&", Dato2,Dato2_d)
StrFormat(ThingSpeak_String4, 50, true, "field5=%d&field6=%d&", Tiempo_1,Tiempo_2)
StrFormat(ThingSpeak_String5, 50, true, "field7=%d.%d&", Dato3,Dato3_d)
StrFormat(ThingSpeak_String6, 50, true, "field8=%d", Dato4)
// Concatena los 6 segmentos
StrFormat(ThingSpeak_String, 100, true, "%s%s%s%s%s%s", ThingSpeak_String1,ThingSpeak_String2,ThingSpeak_String3,ThingSpeak_String4,ThingSpeak_String5,ThingSpeak_String6)
// Aquí hace la subida de la info a ThingSpeak
HttpSendGet("/update?key=%s&%s", THINGSPEAK_APIKEY, ThingSpeak_String)
}
return 0
}
// --------------------------------------------------------------------------------
// Funcion : ThingSpeakInit
// Descripcion : Inicializa las funcionalidades para ThingSpeak
// --------------------------------------------------------------------------------
ThingSpeakInit()
{
ThingSpeakError = 255
// Inicializar cliente HTTP.
HttpSendInit("api.thingspeak.com", 80, HTTP_SEND_OPT_DEFAULT, 60)
// Activar evento OnHttpSendCompleted()
HttpSendSetCompletedEvent()
return 0
}
// ********************************************************************************
// Funcion : OnHttpSendCompleted()
// Descripcion : Evento generado al finalizar transaccion HTTP.
// ********************************************************************************
@OnHttpSendCompleted()
{
// Aquí si el evento http es por ThingSpeak
if (ThingSpeakSending == 1)
{
// Actualizar flag de error.
ThingSpeakError = !HttpSendCheckValidTransaction()
}
// marca la finalización del comando http y habilita el siguiente
ThingSpeakSending = 0
return 0
}