Del sensor al cuadro de mando

La permanente necesidad de mejora de procesos industriales, exige la manipulación y la gestión de datos de nuevos dispositivos interconectados a través de internet. Este nuevo ecosistema se denomina Internet of Things Iot. Los sistemas de gestión de información TI convencionales no están preparados para la gestión de dispositivos de información y la operacionalización suele ser compleja.

Este concepto es fundamental en las Smart cities o industria 4.0 (Zanella, 2014) y es necesario desarrollar soluciones que permitan la gestión de la telemetría de los sensores (Jeschke, 2016), su correcta visualización, transformación y, en los casos que se precise, el empleo de algoritmos con inteligencia artificial para optimizar el proceso industrial en cuestión.

En este post, se muestra como leer datos provenientes de un sensor de utra-sonidos conectado a un Arduino UNO R3. Este sensor mide la distancia con el cuerpo más cercano y se procesa a través de  la arquitectura PaaS del porfolio de soluciones Azure, Event Hub, Stream Analytics y Power BI.

Arquitectura

Para el proceso de datos provenientes de IoT, desde myCloudDoor estamos especializados en la gestión de información en Real time con infractucturas PaaS y con filosofía serverless (figura 1)

Figura 1. Arquitectura Lambda Azure para la gestión de datos IoT

 

¿Cómo enviar datos de sensores a Power BI?

Lo primero es configurar el sensor para poder medir la distancia. Para ello, se pueden seguir los pasos descritos en el Post .

Después, a través del script en PowerShell que se muestra a continuación:

$ehName = "your name" # hub name
$ehNameSpace = "your space" # namespace
$keyname = "your name" # name of the policy
$key = "OUR KEY"

# Load the System.Web assembly to enable UrlEncode
[Reflection.Assembly]::LoadWithPartialName("System.Web") | Out-Null

$URI = "{0}.servicebus.windows.net/{1}" -f @($ehNameSpace,$ehName)
$encodedURI = [System.Web.HttpUtility]::UrlEncode($URI)

# Calculate expiry value one hour ahead
$expiry = [string](([DateTimeOffset]::Now.ToUnixTimeSeconds())+3600)

# Create the signature
$stringToSign = [System.Web.HttpUtility]::UrlEncode($URI) + "`n" + $expiry

$hmacsha = New-Object System.Security.Cryptography.HMACSHA256
$hmacsha.key = [Text.Encoding]::ASCII.GetBytes($key)

$signature = $hmacsha.ComputeHash([Text.Encoding]::ASCII.GetBytes($stringToSign))
$signature = [System.Web.HttpUtility]::UrlEncode([Convert]::ToBase64String($signature))


$port= new-Object System.IO.Ports.SerialPort COM3,9600,None,8,one
$port.Open()
$port.ReadLine()

$assoc = New-Object psobject -Property @{
    Id = 42
     Name = "{'Distance':"
    Owner = "}"
}

# create Request Body


$body = $assoc.Name +$port.ReadLine()+$assoc.Owner
 



# API headers
#
$headers = @{
            "Authorization"="SharedAccessSignature sr=" + $encodedURI + "&sig=" + $signature + "&se=" + $expiry + "&skn=" + $keyname;
            "Content-Type"="application/atom+xml;type=entry;charset=utf-8"; # must be this
            "Content-Length" = ("{0}" -f ($body.Length))
            }

# execute the Azure REST API
$method = "POST"
$dest = 'https://' +$URI  +'/messages?timeout=60&api-version=2014-01'

<# used for turning off certificate checking in case you are using fiddler or other man in the middle#>
<#
add-type -TypeDefinition  @"
        using System.Net;
        using System.Security.Cryptography.X509Certificates;
        public class TrustAllCertsPolicy : ICertificatePolicy {
            public bool CheckValidationResult(
                ServicePoint srvPoint, X509Certificate certificate,
                WebRequest request, int certificateProblem) {
                return true;
            }
        }
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
#>
Invoke-RestMethod -Uri $dest -Method $method -Headers $headers -Body $body -Verbose

$port.Close()

Una vez configurado el puesto COM 3 (este método está probado con sistema Linux). Cuando ya este programado el script de PowerShell, es necesario introducir las Keys para el acceso a nuestro event hub. Una vez configurado debería tener una apariencia similar (figura 2)

Figura 2. Azure Event Hub

 

Una vez que funciona el event hub, podremos verificar, que los mensajes se procesan en la pestaña overview. También es posible persistir la información en un Blob Storage.

Después es necesario configurar el servicio de Stream Analytics. En él, definimos como entrada event hub y como salida Power BI. Para ello, se recolecta la información en ventanas de dos segundos y se mide la media, para limitar las fluctuaciones en la lectura.

SELECT
       AVG(CAST(DISTANCE AS BIGINT)) as [Distance],
       System.TimeStamp AS Time
       INTO OutputPBI
FROM
    [InputEH] 

    GROUP BY
    TumblingWindow(second, 2)

Después se configura power BI. Únicamente los dashboards pueden procesar streaming y, en el siguiente enlace se muestran los pasos para su configuración:

https://docs.microsoft.com/es-es/azure/stream-analytics/stream-analytics-power-bi-dashboard

Conclusiones

Esta solución pretende mostrar las capacidades de arquitecturas lambda dentro de las soluciones PaaS de Cortana Intelligence Suite en la gestión de telemetría provenientes de dispositivos IoT.

Referencias

Jeschke, S. (2016). Industrial Internet of Things and Cyber Manufacturing Systems. Industrial Internet of Things.

Zanella, A. (2014). Internet of Things for Smart Cities. IEEE INTERNET OF THINGS JOURNAL. Obtenido de http://industria4.es/empresa/entender-la-industria-4-0/

Avatar
myCloudDoor
Adopt a Cloud!

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Share This

Copy Link to Clipboard

Copy