Enviar datos a Thingspeak.com con PLC (IoT)

  • 33 Respuestas
  • 18886 Vistas

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Enviar datos a Thingspeak.com con PLC (IoT)
« : octubre 18, 2015, 20:03:36 pm »
Buenas noticias,

Ajuntamos un proyecto StxLadder en lenguaje Pawn (Thingspeak-v001.zip) para enviar datos a un canal de thingspeak.com con el PLC.

Para utilizarlo, requiere:


Dentro del archivo "info.txt" del proyecto se explica en detalle como utilizar el ejemplo.

Sinopsis:

1) Crear una cuenta en thingspeak.com.
2) Crear un canal con el campo "field1" y permitir visualizarlo.
3) Obtener la WRITE API KEY y copiarla en constante THINGSPEAK_WRITE_APIKEY del archivo thingspeak.inc. Escribirla entre comillas "" y sin espacios.
4) Asegurarse de tener configurado el servidor DNS del PLC, en "PLC > Configurar PLC", pestaña RED.
5) Compilar el programa para el modelo de PLC adquirido.
6) Descargar al PLC.

Una vez descargado el programa al PLC, si hay conexion a internet, el programa cada 5 segundos enviará un valor entero al campo "field1" de Thingspeak.
El valor se incrementa en uno por cada envio.

Detalles del código:

El programa esta construido con dos archivos que sirven de librería y pueden usarse en otros proyectos:

  • Thingspeak.p: Rutinas PAWN.
  • Thingspeak.inc: Definiciones y constantes.

Por lo tanto, modificando dichos archivos, es posible escribir clientes para otros servicios similares a thingspeak.com.

En thingspeak.p se encuentran todas las rutinas disponibles (y documentadas), las importantes para el uso son:

ThingspeakInit(): Inicializa la librería, si la misma no lo hace de forma correcta, el resto de las funciones se comportaran erróneamente.

ThingspeakSendFields(): permite enviar "fields" a Thingspeak, tal cual como se hace con la URL del navegador.

Por ejemplo:

Para alterar el field1 con valor 5, hacemos: ThingspeakSendFields("field1=%d", 5)

Para alterar el field1 y field2 con valor 5 y 10, hacemos: ThingspeakSendFields("field1=%d&field2=%d", 5, 10)

Es importante que cada field este separado por un "&" sin espacios.
Los "%d" son los identificadores de formato, como los que usa la función Printf().

Para alterar el field1 con 0.85 float, hacemos: ThingspeakSendFields("field1=%f", 0.85)

Como vemos, el uso de ThingspeakSendFields() permite argumentos variable y un string con formato.

ThingspeakCheckWaitResponse(): Sirve para comprobar que la librería no este esperando una respuesta de Thingspeak.com.

Finalizando:

Para tener en cuenta: El driver creado para Thingspeak utiliza la librería cliente TCP y las funciones de manejo de strings.

Pronto serán actualizados los firmwares de otros modelos de PLC para este soporte.

Cualquier duda, quedamos a disposición.
« Última Modificación: octubre 18, 2015, 20:35:54 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

PabloGa

  • Avanzado
  • ***
  • Mensajes: 103
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #1 : octubre 22, 2015, 17:37:29 pm »
Hola Boris,

Actualicé el firmware del PLC.
Actualicé STX Ladder.
Instalé la librería de ThingSpeak.
La integré con mi proyecto.
Compilé.
Y anduvo desde el primer intento !!!!!

Sinceras felicitaciones y agradecimiento. Excepcional trabajo.

Pablo

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #2 : octubre 22, 2015, 17:48:03 pm »
Buenísimo Pablo, seré curioso pero cual seria mas o menos la aplicación que le darías ? Mas allá de ver el dato on-line.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

PabloGa

  • Avanzado
  • ***
  • Mensajes: 103
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #3 : octubre 23, 2015, 08:20:30 am »
Hola Boris,

El hecho de "ver el dato online" obviamente que es útil. Pero no es la principal utilidad que yo le voy a dar.
El punto es que cuando vos tenés el PLC monitoreando distintas entradas (analógicas o digitales), y vas "actuando" en función de eso, en definitiva lo que tenés en cada instante (en los emails de notificaciones o en el display por ejemplo) es una "foto" en ese momento, o bien porque se generó una situación que amerite una notificación.
Con la utilización de ThingSpeak, uno puede subir una vez por minuto aquellas variables que pueden ser interesantes de monitorear, y vas a tener diariamente TODA LA CURVA, y no solo "fotos" en el momento que consultaste.
Ejemplos:
- Medición de temperatura
- En qué momentos se encendió la caldera
- Nivel del tanque de agua
etc

En definitiva, visualizando un conjunto de variables sobre una escala del tiempo, te da mucha más información que una simple foto en el momento en que te pongas a verla. Ni que decir que el visualizar la curva completa también te permite detectar anormalidades o corregir errores, o eficientizar procesos.

Un gran saludo y felicitaciones de nuevo por tu trabajo.
Pablo.


Buenísimo Pablo, seré curioso pero cual seria mas o menos la aplicación que le darías ? Mas allá de ver el dato on-line.

PabloGa

  • Avanzado
  • ***
  • Mensajes: 103
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #4 : enero 17, 2016, 18:47:19 pm »
Hola Boris nuevamente,

Hoy estuve extendiendo el uso de las funcionalidades de ThingSpeak en mi PLC, y me encontré con un problema que no pude descifrar. Te explico:
Yo hasta ahora venía usando 4 canales: field1, field2, field3 y field4.
A partir de esta "ampliación", empecé a utilizar 6 canales: field1, field2, field3, field4, field5 y field6
Y me encontré que en ningún caso puedo subir la información de los 6 fields simultáneamente, o sea armando correctamente el string con toda la cadena conteniendo los 6 fields.
Sí puedo subir los primeros 4. O bien los últimos 2. o bien los 3 primeros y uno más. Pero nunca los 6 campos. En otras pruebas simplemente no pude subir ningún dato a los fields4, 5 y 6 (!?).
Pensé que habría un problema en thingspeak.p en cuanto al tamaño definido de los strings[], asi que les puse 300 char a todos. Pero eso no cambió nada (aunque tengo el pálpito que con los valores originales nos estamos quedando cortos).

Para mí el problema está en la zona de la función ThingspeakSendFields(), en la parte donde hace los getargs(), pero no pude encontrar ningún error.

Tengo varias dudas:

1- Existe alguna limitación para que no se pueda subir mas de 4 fields al mismo tiempo?

2- Qué hace la función getargs(), como funciona?

3- Cuál es el tamaño máximo de los strings? En el manual si no me equivoco habla de 160 caracteres, pero en tu codigo thingspeak.p ya había originalmente strings más grandes (antes de que yo lo edite). Entonces en algún momento se ha extendido la capacidad de los strings?

4- Existe alguna función substring(string,comienzo,numero_de_caracteres), o sea para extraer un string a partir de un punto.

5- Para monitorear y debugear todo este tema de ThingSpeak, siempre envié el string que armo con los "field´s" al VirtualHDMI Android, pero encontré que VirtualHDMI tiene aparentemente un límite de algo así como 37 caracteres por renglón y trunca la línea, y es como que no hay forma de mostrar un string completo que sea realmente largo (50-200 bytes), si es necesario haciendo line break hacia el siguiente renglón. Quise "partir" mi string largo en varios strings, pero como no tenía función substring() no lo pude resolver. Fijate que VirtualHDMI Android en el modo "Menu Keys" tiene una pantalla enorme, y caracteres muy pequeños, por lo que se podrían mostrar strings realmente largos.

Bueno, si se te ocurre algo avisame. Me gustaría saber si vos podés hacer la prueba y definís en ThingSpeak un Channel con 6 ó mas fields, y les mandás un dato a cada uno, si te los toma o no. Para mí no funciona. Estuve como 5 horas probando y probando !

Desde ya muchas gracias y buenas vacaciones!
Pablo.


PD: se me ocurre ahora: no se tratará de un problema de tiempos?  O sea: que al protocolo TCP no le den los tiempos para realizar la transacción con ThingSpeak cuando la cantidad de campos es más de 4 ??  Fijate que en otro hilo estoy reportando un problema similar con el firmware revisión 215, en el que encontré que accediendo via ModBus, el sistema responde solo con las primeras variables, pero llega un punto en el que se traba...
« Última Modificación: enero 18, 2016, 10:48:30 am por PabloGa »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #5 : enero 24, 2016, 20:25:01 pm »
Buenas tardes Pablo, disculpa la demora pero recién retorno de vacaciones.

Ya voy a analizar mejor lo que me comentas y te daré mas respuestas a tus preguntas.

Es probable que sea un tema de limite de caracteres a enviar, por un tema de buffers internos, ya que se envía un string con con todos los fields, headers y valores numéricos.

Te consulto: ¿No podes enviar primero 3 fields y luego los otros 3? ¿Hay algún inconveniente con eso?.

Quedo a disposición.

SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

PabloGa

  • Avanzado
  • ***
  • Mensajes: 103
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #6 : enero 25, 2016, 07:05:56 am »
Hola Boris, feliz regreso !

Eventualmente, podría hacer una lógica para subir 3 fields y luego los otros 3 fields. Pero hay un problemita: cada "subida" es computada por thingspeak, que no te deja subir datos con una frecuencia mayor a 15 segundos. O sea que hay que asegurarse que entre una subida de datos y la próxima pasen al menos 15 segundos. Se puede implementar la lógica ... pero es un poco desprolijo ...

Saludos !
Pablo.

Buenas tardes Pablo, disculpa la demora pero recién retorno de vacaciones.

Ya voy a analizar mejor lo que me comentas y te daré mas respuestas a tus preguntas.

Es probable que sea un tema de limite de caracteres a enviar, por un tema de buffers internos, ya que se envía un string con con todos los fields, headers y valores numéricos.

Te consulto: ¿No podes enviar primero 3 fields y luego los otros 3? ¿Hay algún inconveniente con eso?.

Quedo a disposición.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #7 : enero 25, 2016, 18:34:47 pm »
Hola Pablo,

Ok, dejame que modifique un poco el código para optimizar el buffer y hacer unas pruebas para ver de enviar más campos.

Luego te comento.

Saludos
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

PabloGa

  • Avanzado
  • ***
  • Mensajes: 103
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #8 : abril 17, 2016, 15:53:33 pm »
Hola Boris qué tal ?

Alguna posibilidad de retomar este tema??

Saludos !
Pablo.


Hola Pablo,

Ok, dejame que modifique un poco el código para optimizar el buffer y hacer unas pruebas para ver de enviar más campos.

Luego te comento.

Saludos

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #9 : abril 18, 2016, 07:49:59 am »
Hola Pablo,

Si por supuesto, lo tengo en mente, solo que ultimamente estuve centrado en nuevos productos y se me pasó.

Pero déjame que me arme un tiempito y lo encaro.

Estamos en contacto.

Saludos
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

PabloGa

  • Avanzado
  • ***
  • Mensajes: 103
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #10 : mayo 21, 2016, 16:37:31 pm »
Hola Boris como te va?

Estuve haciendo unas pruebas a ampliar el tamaño del buffer string FieldStr, que en tu archivo original estaba programado en 160 bytes, y lo pasé a 300. Sin embargo, no me modificó el resultado, y siempre se repite que solo puedo grabar hasta 4 &fields en ThingSpeak.

Fijate por favor en los 2 archivos que te adjunto (el original tuyo, y el modificado por mí), para ver dónde hice los cambios.

Era a estos "buffers" a los que vos te referías en un comentario anterior??  O es el tamaño de otro buffer que sería necesario modificar ?

Saludos y muchas gracias,
Pablo.



Hola Pablo,

Si por supuesto, lo tengo en mente, solo que ultimamente estuve centrado en nuevos productos y se me pasó.

Pero déjame que me arme un tiempito y lo encaro.

Estamos en contacto.

Saludos

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #11 : mayo 22, 2016, 17:47:59 pm »
Hola Pablo,

Esta semana encaro el tema este asi lo hacemos bien, disculpa que no lo haya podido ver antes.

Pero va para esta semana  ;)

Saludos.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #12 : mayo 29, 2016, 21:46:56 pm »
Hola Pablo,

Te comento que estoy viendo este tema.
Por ahora pude determinar que efectivamente, es un tema de recorte de caracteres, ya que estoy simulando con la PC el servidor web y leyendo los datos enviados por el PLC.
A partir de cierta cantidad de "fields", los datos se recortan y no llegan en su totalidad.

Te comento cuando tenga mas novedades.

Saludos.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

PabloGa

  • Avanzado
  • ***
  • Mensajes: 103
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #13 : mayo 30, 2016, 08:20:13 am »
Fantástico Boris,
Cuando se puede reproducir un problema, ya tenemos el 50% de la solución... !
Saludos,
Pablo.


Hola Pablo,

Te comento que estoy viendo este tema.
Por ahora pude determinar que efectivamente, es un tema de recorte de caracteres, ya que estoy simulando con la PC el servidor web y leyendo los datos enviados por el PLC.
A partir de cierta cantidad de "fields", los datos se recortan y no llegan en su totalidad.

Te comento cuando tenga mas novedades.

Saludos.

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2326
  • Soporte Técnico
Re:Enviar datos a Thingspeak.com con PLC (IoT)
« Respuesta #14 : junio 01, 2016, 08:16:24 am »
Buenos días Pablo,

Te paso el proyecto modificado para que acepte mas parámetros, yo lo probé hasta con 6 campos.

También debes actualizar la versión de firmware a la V220 que te adjunto.

Avísame si te funciona bien.

Saludos!
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com