Publicar datos en ThingSpeak mediante API MQTT


Hoy trataré la subida de datos a ThingSpeak mediante el protocolo MQTT. La plataforma nos ofrece el formato en el que tenemos que enviar la información a fin de poder publicar los datos en un canal:

Al igual que en los anteriores posts, se utilizará Python como lenguaje de programación.  Por lo tanto, cread un archivo .py o abrid uno en el que deseéis integrar la subida de datos MQTT. Importad las siguientes librerías a fin de soportar las comunicaciones MQTT y añadir pausas al programa:

import paho.mqtt.publish as publish
import time

Para poder publicar los datos, en primer lugar es necesario crear el topic en el que se van a publicar. Necesitáis vuestra clave Write API Key y el ID del canal en el que vais a publicar los datos. La dirección del broker MQTT de ThingSpeak que se encarga de gestionar las publicaciones es mqtt.thingspeak.com:

topic='channels/'+str(Channel_Id)+'/publish/'+str(Write_API_Key)
mqttHost = 'mqtt.thingspeak.com'

A continuación, basta construir el cuerpo del mensaje con los datos a publicar y enviarlo (en mi caso son valores de temperatura, humedad, y presión):

payload='field1='+str(temperatura)+'&field2='+str(humedad)+'&field3='+str(p_rocio)+'&field4='+str(presion)

 try:
     publish.single(topic, payload, hostname=mqttHost)
 except:
     print "except: problemas envio datos MQTT"
     break

Debido a que la frecuencia máxima de subida de datos es de 15 segundos, añadimos una espera en el caso de que queramos realizar publicaciones cíclicas:

 time.sleep(15)

Para probar el código, recordad que previamente tenéis que haber creado y configurado un canal en ThingSpeak, ya sea manualmente o mediante código: 


Además, en el entorno Python en el que vayáis a ejecutarlo, tenéis que tener instalada la librería paho-mqtt. En el caso de que vayáis a probarlo sobre una RaspberryPI, tenéis que tener instaladas las herramientas de desarrollo Python (Instalar Python en RaspberryPI) y ejecutar el siguiente comando:

pip install paho-mqtt

Si accedéis al canal al cuál habéis subido los datos, deberíais poder verlos. En mi caso sólo he subido dos datos por campo, pero es suficiente para ilustrar el resultado:


Fig. 1: Canal con datos subidos mediante MQTT

¡Cualquier sugerencia o pregunta que tengáis no dudéis en dejarla en los comentarios!

Comentarios