Introduction
Esta entrada del blog es sólo una demostración de la versatilidad y flexibilidad del PLC Raspberry. Es compatible con una plétora de servicios que hay en el mercado y para este blog, estamos recogiendo datos de las entradas del PLC y mostrándolos en tiempo real en el panel de control de PowerBI.
Conjuntos de datos en tiempo real de PowereBI
PowerBI tiene tres tipos de conjuntos de datos en tiempo real, que son:
- Conjunto de datos pushEn esto, cuando los datos son empujados en el servicio de PowerBI, una base de datos se crea automáticamente y por lo tanto los informes pueden ser generados. Se pueden generar visuales con esta base de datos en el panel de control de PowerBI.
- Conjunto de datos en streamingEn este caso, los datos, al ser empujados en el servicio PowerBI, sólo se almacenan en la caché temporal del mismo, que caduca rápidamente. Esto significa que con estos datos almacenados sólo se pueden hacer visuales de visualización y no se pueden generar informes o visuales basados en informes.
- Conjunto de datos de streaming PubNubCon esto, usted tiene que utilizar un SDK PubNub para leer un flujo de datos PubNub existente. En este caso, no hay datos almacenados por el servicio PowerBI. PubNub es una plataforma de comunicación en tiempo real que proporciona una infraestructura sobre la que se pueden construir aplicaciones de chat en tiempo real.
Utilizaremos el conjunto de datos Streaming para transmitir la salida de nuestro sensor de temperatura y humedad.
Los pasos del proceso son los siguientes:
1) Regístrate en PowerBi
2) Dirigete a "Mi espacio de trabajo"; haga clic en nuevo para añadir un conjunto de datos de streaming.
3) Al hacer clic en el conjunto de datos de streaming, tendrás que elegir la opción API en la ventana emergente que aparece.
Asegúrate de añadir la variable timestamp, ya que es importante para los tipos de datos de streaming y, muy importante, activa el interruptor de análisis de datos históricos.
5) En la siguiente ventana, obtendrás el enlace de la API que se utilizarás para conectar tu script a la base de datos, por lo tanto, cópialo y la estructura del par clave:valor de las variables que insertó en los pasos anteriores.
6) Tu conjunto de datos de streaming está listo, ahora vamos a preparar un tablero de instrumentos con mosaicos que transmitirán tus datos. Para ello, haz clic en "+new" de nuevo desde el paso 2 y selecciona "Dashboard" esta vez.
7) En la página del Tablero de mandos, haz clic en editar y añade un mosaico
8) Rellena todos los datos requeridos
9) Elije tu conjunto de datos de streaming
10) Ahora tienes que seleccionar el tipo de visualización y añadirle valores desde el menú desplegable. Repite este paso hasta que hayas introducido todos los valores de los conjuntos de datos creados anteriormente.
Añade los datos necesarios en los siguientes pasos y ya está listo.
Los siguientes pasos consisten únicamente en codificar el programa y añadir el enlace API obtenido en el paso 5.
Código
"""
Python sample for Raspberry Pi which reads temperature and humidity values from
a DHT22 sensor, and sends that data to Power BI for use in a streaming dataset.
"""
import urllib3, time
from datetime import datetime
from rpiplc_lib import rpiplc
rpiplc.init("RPIPLC_50RRA")
rpiplc.pin_mode("I0.5",rpiplc.INPUT)
REST_API_URL = 'API LINK'
while True:
try:
humidity,temp = dht.read_retry(SENSOR, PIN)
now=datetime.strftime(datetime.now(), "%Y-%m-%dT%H:%M:%S%Z")
# data that we're sending to Power BI REST API
data = '[{{ "timestamp": "{0}", "temperature": {1:0.1f}, "humidity": {2:0.1f} }}]'.format(now, temp, humidity)
print (data)
# make HTTP POST request to Power BI REST API
http = urllib3.PoolManager()
req = http.request(url=REST_API_URL,method='POST', body=data, headers={'Content-Type':'application/json'})
response = req.read()
print("POST request to Power BI with data:{0}".format(data))
print("Response: HTTP {0} {1}\n".format(response, response))
# rpiplc.delay(1000)
except urllib3.exceptions.HTTPError as e:
print("HTTP Error: {0} - {1}".format(e.code, e.reason))
except urllib3.exceptions.RequestError as e:
print("Request Error: {0}".format(e.reason))
except Exception as e:
print("General Exception: {0}".format(e)) except Exception as e: print("General Exception: {0}".format(e))
Algunos enlaces útiles
1) Análisis de Big Data en la Industria 4.0
PowerBI con Raspberry PLC