En este artículo vamos a ver como enviar un stream de datos a PowerBi mediante un pequeño script de powershell para hacer un seguimiento en tiempo real de unos sensores (por ejemplo), también podríamos usar el script para enviar cualquier tipo de información de monitorización, como datos de un log, estadísticas de uso de una base de datos o cualquier otra métrica que queramos monitorizar en tiempo real.

En el ejemplo que nos ocupa suponemos que tenemos 2 estaciones (Front y Rear) con sensores de temperatura, Longitud, Angulo y número de elementos detectados, simularemos el envío de datos de cada estación mediante un script de PowerShell que genere los valores de los sensores de forma aleatoria.

Lo primero que debemos hacer es ver que estructura tienen nuestros datos, en este caso la información que enviaremos será una colección con 5 elementos con la siguiente información:

[
{
"Fecha" :"2019-04-30T11:37:37.846Z",
"NombreSensor" :"AAAAA555555",
"Temperatura" :98.6,
"Angulo" :98.6,
"Longitud" :98.6,
"Elementos" :98.6
}
]

Una vez que tenemos clara nuestra estructura creamos un nuevo conjunto de datos streaming en PowerBI, para ello vamos a nuestra área de trabajo y le damos a la etiqueta “Crear” en la parte superior derecha, luego seleccionamos “Conjunto de datos de streaming”:

Seguimiento de métricas en tiempo real con PowerBI y PowerShell

Lo siguiente que debemos hacer es elegir qué tipo de streaming queremos analizar, en nuestro caso será mediante el api de Powerbi (Seleccionamos API):

Seguimiento de métricas en tiempo real con PowerBI y PowerShell

Ahora debemos configurar el streaming, tal y como vemos en la siguiente imagen, añadiendo los 6 elementos de la colección que vamos a enviar.

Seguimiento de métricas en tiempo real con PowerBI y PowerShell

Una vez creado Desde el panel de PowerBI podemos localizar la URL de inserción, en nuestro caso es:

https://api.powerbi.com/beta/35069d74-1489-4194-80c7-3a81385exxxx/datasets/0145fafxxxx

Esta es la dirección que usaremos en nuestro script de PowerShell para hacer push de los datos y alimentar el stream.

Nuestro script es el siguiente (esta comentado para que se comprenda su funcionamiento

#Establecemos un valor inicial para el Angulo, Longitud y Temperatura de cada una de las estaciones
$Angulo1 = 1
$Angulo2 = 1
$Longitud1 = 100
$Longitud2 = 100
$Temperatura1 = (Get-Random -Minimum 1000 -Maximum 3000)/100
$Temperatura2 = (Get-Random -Minimum 1000 -Maximum 3000)/100
$Elementos1 = (Get-Random -Minimum 1 -Maximum 5)
$Elementos2 = (Get-Random -Minimum 1 -Maximum 5)

#Creamo sunbucle infinito que envie la informacion de los sensores
#en nuestro ejemplo la informacion se genera de forma aleatoria, pero podriamos extraerla de una
#base de datos o de ficheros de log en formato de texto, por ejemplo.
while (1 -eq 1)
{
    #Obtenemos la feha
    $date = Get-Date -UFormat "%Y-%m-%dT%H:%M:%SZ"

    #Establecemos en una variable el endpoint en el que debemos hacer push
    $endpoint = "https://api.powerbi.com/beta/35069d74-1489-4194-80c7-3a81385exxxx/datasets/0145faf9-a501-435e-xxxx-b1a5483eb12a/rows?key=PO5kCmCzCmR5fd3muXvYpjMmsu7Tf%2F77y3rQJY3mSMecy4KO0Phg0f6MzKA%2BGhMCqZcKDpYM31UeCdIA3DSzWw%3D%3D"
    
    #Creamos la coleccion de elementos a enviar al streaming con los datos
    #de la primera estacion "Front"
    $payload1 = @{
    "Fecha" ="$date"
    "NombreSensor" ="Front"
    "Temperatura" =$Temperatura1
    "Angulo" =$Angulo1
    "Longitud" =$Longitud1
    "Elementos" =$Elementos1
    }

    #Escribimos por pantalla la informacion a enviar
    Write-Host $payload1["Fecha"].ToString() + "---" + $payload1["NombreSensor"] + "---" + $payload1["Temperatura"].ToString()+ "---" + $payload1["Angulo"].ToString()+ "---" + $payload1["Longitud"].ToString()+ "---" + $payload1["Elementos"].ToString()
    
    #enviamos la informacion mediante post, enviadno en el Body el json de la coleccion con los valores.
    Invoke-RestMethod -Method Post -Uri "$endpoint" -Body (ConvertTo-Json @($payload1))

    #Hacemos lo mismo con los datos de la segunda estacion "Rear"
    $payload2 = @{
    "Fecha" ="$date"
    "NombreSensor" ="Rear"
    "Temperatura" =$Temperatura2
    "Angulo" =$Angulo2
    "Longitud" =$Longitud2
    "Elementos" =$Elementos2
    }
    Write-Host $payload2["Fecha"].ToString() + "---" + $payload2["NombreSensor"] + "---" + $payload2["Temperatura"].ToString()+ "---" + $payload2["Angulo"].ToString()+ "---" + $payload2["Longitud"].ToString()+ "---" + $payload2["Elementos"].ToString()
    Invoke-RestMethod -Method Post -Uri "$endpoint" -Body (ConvertTo-Json @($payload2))
    
    #Esperamos un segundo
    sleep 1

    #Modificamos las variables con los datos aleatorios

    #Añadimos entre 1 y 5 grados a los angulos
    $Angulo1 += Get-Random -Minimum 1 -Maximum 5
    $Angulo2 += Get-Random -Minimum 1 -Maximum 5

    #Si el angulo de alguno de las estaciones supera los 360 grados lo reiniciamos a 1
    if($Angulo1-ge360){$Angulo1 = 1}
    if($Angulo2-ge360){$Angulo2 = 1}

    #Obtenemos un signo positivo o negativo de forma aleatoria
    $signo1 = if(((Get-Random -Minimum 1 -Maximum 10) % 2) -eq 0){-1} else {1}
    $signo2 = if(((Get-Random -Minimum 1 -Maximum 10) % 2) -eq 0){-1} else {1}

    #añadimos o restamos entre 1 o 5 unidades a la longitud
    $Longitud1 += (Get-Random -Minimum 1 -Maximum 5) * $signo1
    $Longitud2 += (Get-Random -Minimum 1 -Maximum 5) * $signo2

    #añadimos o restamos entre 1 y 2 grados a la temperatura
    $Temperatura1 += ((Get-Random -Minimum 100 -Maximum 200)/100)* $signo1
    $Temperatura2 += ((Get-Random -Minimum 100 -Maximum 200)/100)* $signo2

    #Establecemos el numeor de elementos detectados.
    $Elementos1 = (Get-Random -Minimum 1 -Maximum 5)
    $Elementos2 = (Get-Random -Minimum 1 -Maximum 5)
}

 

Para crear un panel solo tenemos que crear un panel nuevo darle a agregar ventana y seguir los siguientes pasos:

Seguimiento de métricas en tiempo real con PowerBI y PowerShell

Una vez que hemos creado todas los paneles que queremos mostrar podemos probar el funcionamiento de nuestro sistema.

Si ejecutamos el script de PowerShell el resultado en PowerBI se vería del siguiente modo:

Seguimiento de métricas en tiempo real con PowerBI y PowerShell

De este modo estamos simulando la lectura de varios sensores en tiempo real para ver su estado y poder reaccionar a tiempo ante posibles eventualidades adversas.

Espero que os sirva de ayuda en vuestros proyectos.

0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada.

You May Also Like

Entornos tradicionales de BI desplegados en arquitecturas cloud

Entornos tradicionales de BI desplegados en arquitecturas cloud. El procedimiento con el cual podremos realizar la puesta a punto de una arquitectura híbrida, comentando los requisitos y diferentes configuraciones necesarias para su creación y funcionamiento. Para esta arquitectura, debemos también comentar como antecedentes la arquitectura clásica de un dwh y la arquitectura Dwh moderna.
Leer más

ScaleOut SSIS

Lo primero es saber que debemos esperar de ScaleOut, cuando se habla de Scale Out estamos hablando de la capacidad de un sistema o proceso para manejar una cantidad creciente de trabajo, y el potencial que tiene, es su capacidad de adaptarse para asumir el crecimiento del sistema o proceso.