Módulo "opticloud" del dashboard optiCLOUD
Descripción
El módulo "opticloud" proporciona una interfaz con el dashboard optiCLOUD. Permite transmitir al dashboard tanto datos de telemetría como atributos de cliente desde el equipo de medición. Además, es posible que el dashboard envíe al equipo de medición los denominados atributos compartidos (shared attributes). Adicionalmente existe la posibilidad de comunicarse con el dispositivo desde el dashboard mediante la interfaz RPC.
Interfaces y protocolos utilizados
- MQTT
Configuración JSON
En la sección siguiente se describe la configuración JSON completa del módulo y se explican los distintos parámetros.
Configuración de ejemplo (mínima)
A continuación se muestra una configuración de ejemplo mínima:
{
"module":"Opticloud",
"factory":"opticloud",
"config":{
"channels":[
{
"name":"*"
}
]
}
}
Configuración de ejemplo (habitual)
{
"module": "Opticloud",
"factory": "opticloud",
"config":{
"pollingIntervalMs":1000,
"channels":[
{
"name": "*",
"refreshIntervalMs":60000,
"minimumSendIntervalMs":0
}
]
}
}
Configuración de ejemplo (máxima)
{
"module":"Opticloud",
"factory":"opticloud",
"config":{
"transmitBoolAsInt": false,
"transmitStatusChannels": false,
"channelnameTransmitData": "TransmitData",
"connectTimeoutS": 10,
"disconnectTimeoutS": 10,
"keepaliveIntervalS": 10,
"completionIntervalS": 10,
"sendingIntervalS": 10,
"maxBufferedMessages": 10,
"channels":[
{
"name":"can*",
"messageType":"telemetry,clientAttribute",
"sendOnlyOnChange":true,
"refreshIntervalMs":60000,
"minimumSendIntervalMs":0,
"useTrueTimestamps":false
}
],
"splitGpsLocationChannels":[
{
"gpsLocationChannelName":"GPS.Location",
"gpsLatitudeChannelName":"GPS.Latitude",
"gpsLongitudeChannelName":"GPS.Longitude",
"gpsAltitudeChannelName":"GPS.Altitude"
}
],
"pollingIntervalMs":1000,
"sharedAttributes":[
{
"name":"dataFromDashboardChannel",
"type":"double",
"persistent":true,
"requestInitialValue":true,
"bufferSize":1024,
"physicalDimension":"temperature",
"physicalUnit":"K"
}
],
"brokerAddress": "ssl://dashboard.opticloud.io:8883",
"brokerUserId": "",
"brokerUserPassword": "",
"brokerAuthentication": true,
"trustStore": "/etc/ssl/certs/ca-certificates.crt",
"clientCertificate": "notImplementedYet"
}
}
El array JSON "splitGpsLocationChannels" solo debe especificarse si realmente se transmiten al dashboard ubicaciones GPS, por ejemplo del módulo GPS, Y se desea configurar libremente la división de estos datos. En ese caso, los canales resultantes de la división se denominan automáticamente de la siguiente manera, ya sea mediante
- la adición de ".Latitude", ".Longitude", ".Altitude" al nombre del canal de ubicación GPS, o bien
- la eliminación del sufijo ".Location" y la adición de ".Latitude", ".Longitude", ".Altitude" al nombre del canal de ubicación GPS, si dicho sufijo existe en el nombre del canal de ubicación GPS.
Externalización global de parámetros específicos del dispositivo
Los parámetros específicos de la conexión pueden externalizarse a la siguiente sección global de la configuración estática de smartCORE (smartcore.json), es decir:
"device_based":{
"instances":{
"opticloudInstance1":{
"brokerAddress": "ssl://awe.some.io:8883",
"brokerUserId": "",
"brokerUserPassword": "",
"brokerAuthentication": true,
"clientCertificate": "notImplementedYet"
}
}
},
Estos parámetros globales tienen prioridad sobre los parámetros configurados específicamente en el módulo. De este modo se simplifica el despliegue de una misma configuración de medición dinámica nueva (smartcore_dynamic.json) en varios dispositivos.
Parámetros del módulo específicos de la conexión (globales)
| Nombre del parámetro | Obligatorio | Tipo de datos | Rango de valores razonable | Valor por defecto | Descripción |
|---|---|---|---|---|---|
| brokerAddress | No | STRING | URL de dashboard válida | "ssl://dashboard.opticloud.io:8883" , "tcp://awe.some.io:1883" (no recomendado) | |
| brokerUserId | No | STRING | Número de serie | Nombre de usuario (ID de usuario) del dispositivo | |
| brokerUserPassword | No | STRING | "" | "" | Contraseña del servidor del dashboard |
| brokerAuthentication | No | BOOL | true, false | true | Autenticación del servidor del dashboard |
| trustStore | No | STRING | /etc/ssl/certs/ca-certificates.crt | Trust store para la autenticación del servidor del dashboard | |
| clientCertificate | No | STRING BASE64 | certificado válido | Certificado para la autenticación del dispositivo (no admitido) |
Parámetros del módulo
| Nombre del parámetro | Obligatorio | Tipo de datos | Rango de valores razonable | Valor por defecto | Descripción |
|---|---|---|---|---|---|
| pollingIntervalMs | No | INT | 1000 - | 1000 | Intervalo de adquisición de datos de canal del módulo [ms] |
| transmitBoolAsInt | No | BOOL | false, true | false | Transmitir valores booleanos (false, true) como enteros (0, 1) |
| transmitStatusChannels | No | BOOL | false, true | false | Indica si deben crearse y transmitirse señales STATUS |
| channelnameTransmitData | No | STRING | nombre de canal válido | "" | Canal para detener y reanudar la transmisión de datos de medición, véase más abajo (a partir de smartCORE 2.12) |
| connectTimeoutS | No | INT | 1 - | 10 | Timeout del establecimiento de la conexión |
| disconnectTimeoutS | No | INT | 1 - | 10 | Timeout de la desconexión tras solicitarla |
| keepaliveIntervalS | No | INT | 1 - | 10 | Timeout para la detección de una conexión interrumpida |
| completionIntervalS | No | INT | 1 - | 10 | Timeout de la recepción de confirmación tras el envío de un mensaje MQTT |
| sendingIntervalS | No | INT | 1 - | 10 | Timeout del envío de un mensaje MQTT |
| maxBufferedMessages | No | INT | 1 - | 10 | Número máximo de mensajes MQTT en búfer dentro del cliente MQTT |
| channels | SÍ | JSON Array | véase más abajo | ||
| splitGpsLocations | opcional en canales GPS | JSON Array | véase más abajo | ||
| sharedAttributes | No | JSON Array | véase más abajo |
Configuración de canales "channels"
Los canales de telemetría/atributos de cliente transmitidos al dashboard se configuran, cada uno, como un objeto JSON con los siguientes parámetros
| Nombre del parámetro | Obligatorio | Tipo de datos | Rango de valores razonable | Valor por defecto | Descripción |
|---|---|---|---|---|---|
| name | SÍ | STRING | nombre de canal válido | Nombre del canal; se admiten comodines simplificados "*" y "?" | |
| messageType | No | STRING | "telemetry", "clientAttribute" | "telemetry" | Tipo de transmisión al dashboard. También es posible "telemetry,clientAttribute" |
| sendOnlyOnChange | No | BOOL | true, false | true | Reducción de datos de valores de canal sin cambios |
| refreshIntervalMs | No | INT | 1 - | 60000 (60 s) | Nuevo envío de valores iguales tras transcurrir un intervalo, si se ha actualizado su marca de tiempo fiable asociada |
| minimumSendIntervalMs | No | INT | 0 - | 0 (0 s) | Intervalo mínimo de transmisión por canal |
| useTrueTimestamps | No | BOOL | false, true | false | Transmisión con las marcas de tiempo de producción, si está activado (de lo contrario, marca de tiempo del ciclo de procesamiento) |
División de los canales de ubicación GPS "splitGpsLocationChannels"
Los canales de ubicación GPS deben dividirse antes de enviarse al dashboard. La división puede definirse para cada canal en forma de objeto JSON
| Nombre del parámetro | Obligatorio | Tipo de datos | Rango de valores razonable | Valor por defecto | Descripción |
|---|---|---|---|---|---|
| gpsLocationChannelName | SÍ | STRING | nombre de canal de ubicación GPS válido | Canal de entrada de smartCORE | |
| gpsLatitudeChannelName | No | STRING | véase arriba | Nombre del canal para transmitir la latitud geográfica al dashboard | |
| gpsLongitudeChannelName | No | STRING | véase arriba | Nombre del canal para transmitir la longitud geográfica al dashboard | |
| gpsAltitudeChannelName | No | STRING | véase arriba | Nombre del canal para transmitir la altitud sobre el nivel del mar al dashboard |
Configuración de canales "sharedAttributes"
Mediante "sharedAttributes" pueden cargarse en el dispositivo atributos creados en el dashboard y producirse en los canales correspondientes. La configuración se realiza con el siguiente objeto JSON para cada canal.
| Nombre del parámetro | Obligatorio | Tipo de datos | Rango de valores razonable | Valor por defecto | Descripción |
|---|---|---|---|---|---|
| name | SÍ | STRING | nombre de canal válido | Nombre del canal | |
| type | SÍ | STRING | tipo de datos válido | "bool", "double", "float", "string", "[u]int8" | |
| persistent | No | BOOL | false, true | true | si el último valor del canal debe conservarse tras un reinicio de smartCORE |
| requestInitialValue | No | BOOL | false, true | true | obtención adicional del sharedAttribute directamente tras el inicio de la medición |
| bufferSize | No | INT | 1 - | 1024 | Tamaño del búfer del canal creado |
| physicalDimension | No | STRING | Magnitud física | ||
| physicalUnit | No | STRING | Unidad física |
Control de la transmisión de datos "channelnameTransmitData"
Este parámetro está disponible a partir de smartCORE 2.12.
Mediante el parámetro opcional "channelnameTransmitData" es posible detener y reanudar en tiempo de ejecución la transmisión de los datos de medición, sin interrumpir la conexión con el dashboard. Se indica el nombre de un canal con marca de tiempo de tipo de datos "bool".
Mientras este canal tenga el valor false, el módulo retiene los datos de medición. Todo lo que mantiene
accesible el dispositivo sigue funcionando sin cambios:
| Tipo de datos | Comportamiento mientras el canal de control tenga el valor false |
|---|---|
| Telemetría | se retiene |
| Atributos de cliente | se retienen |
| Valores STATUS de este módulo | no se transmiten, pero se siguen escribiendo localmente en los canales STATUS |
| El propio canal de control | se sigue transmitiendo, siempre que forme parte de la configuración "channels" |
| Alarmas | sin cambios |
| Shared Attributes (dashboard → dispositivo) | sin cambios |
| RPC | sin cambios |
| Número de serie | sin cambios |
El propio canal de control queda excluido del bloqueo de forma deliberada: así, en el dashboard un silencio intencionado sigue pudiendo distinguirse de una interrupción de la conexión. Como la conexión se mantiene, la transmisión puede volver a activarse en cualquier momento desde el dashboard.
El estado del canal de control se evalúa una vez por cada ciclo de adquisición ("pollingIntervalMs"); cada cambio de estado se escribe en el registro.
En caso de duda, se transmite. La transmisión permanece activa en todos los casos siguientes:
- el parámetro falta o está vacío,
- el canal indicado no existe,
- el canal indicado no tiene marca de tiempo o no es del tipo de datos "bool",
- el canal todavía no tiene ningún valor.
Por tanto, un error tipográfico en el nombre del canal no puede silenciar un dispositivo. Los tres casos relativos al canal se escriben como advertencia en el registro al iniciar la medición.
El caso de uso habitual es el control desde el dashboard mediante un Shared Attribute:
"channelnameTransmitData":"TransmitData",
"sharedAttributes":[
{
"name":"TransmitData",
"type":"bool",
"persistent":true,
"requestInitialValue":true
}
]
Un Shared Attribute creado de este modo es un canal con marca de tiempo del tipo de datos indicado y, por tanto, cumple los requisitos del canal de control. El propio módulo no guarda el estado: tras un reinicio se transmite hasta que el canal de control tenga un valor. "persistent" y "requestInitialValue" garantizan que el último valor establecido vuelva a estar disponible.
El canal de control no tiene que proceder del dashboard. También es posible, por ejemplo, una entrada digital o un canal calculado del módulo "math"; solo se exige un canal con marca de tiempo del tipo de datos "bool".
Información del módulo
| Información | Valor |
|---|---|
| Autores | optiMEAS GmbH |
| desde smartCORE | 0 |
| Tipo de módulo | Consumer, (opcional) Producer |
| Dependencias | dashboard optiCLOUD |