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. Los campos obligatorios están marcados con *

You May Also Like

PowerApprízate

En un mundo que se mueve rápido, la capacidad de reacción ante la toma de decisiones es primordial. Te enseñaremos a llevar tus datos allá donde vayas, visualizarlos como necesites y tomar el control. Para ello PowerApps permite visualizarlos como necesites y tomar el control. Para ello PowerApps permite integrar la suite de aplicaciones de Microsoft, de una manera ágil e intuitiva.
Leer más

SQL Server downgrades: Enterprise Edition a Standard Edition

Un problema habitual al que nos tenemos que enfrentar es el realizar downgrades de SQL Server Enterprise Edition a Standard Edition. Las razones pueden ser desde un error cuando se realizó el despliegue inicial hasta un cambio para obtener una reducción de costes en licenciamiento. La forma soportada para realizar este cambio pasa por una desinstalación completa de la instancia y una reinstalación.