# Acerca de WebSocket

Mediante WebSocket, puede recibir notificaciones de variables, alarmas y errores del sistema. Para recibir notificaciones, es necesario establecer una sesión y suscribirlas.

Se puede utilizar los protocolos WebSocket (versión 13) y el número máximo de sesiones WebSocket es 5.

Si utiliza la seguridad, envíe un comando de autorización. Si no se realiza la autorización, o si el nivel de seguridad no es suficiente, no recibirá una notificación de la unidad de visualización.

Si no hay ninguna comunicación desde el cliente, la unidad de visualización enviará Ping en WebSocket cada 10 segundos. Si no hay respuesta a 5 Pings (es decir, si no hay comunicación desde el cliente, incluido Pong durante 60 segundos), la sesión se cerrará desde la unidad de visualización.

### Variables

Puede recibir notificaciones cuando se modifica el valor y/o la calidad de las variables creadas en el software de edición de pantallas.

Para recibir notificaciones, es necesario suscribir las variables a monitorizar. Si la(s) variable(s) suscrita(s) es(son) una(s) variable(s) externa(s), la unidad de visualización comienza a leer el(los) valor(es) desde el(los) dispositivo(s) externo(s).

Nota:

- No se admiten variables de tipo de datos de usuario (estructura, matriz).

- El número máximo de variables es 100 por sesión.

### Alarmas/Errores del sistema

Cuando se producen/confirman/recuperan alarmas o errores del sistema en la unidad de visualización, puede recibir notificaciones. Para recibir notificaciones, es necesario suscribirse.

## Comando

Los comandos son los siguientes:

Nota: El código de ejemplo está escrito en Java.

### Establecer la sesión

Para establecer una sesión para WebSocket.

#### Solicitar

Elemento | Valor
Métodos | GET
URL | <Base URL>/ws Base URL
Parámetros | N/A
Cabecera |
Cabecera | Valor
Upgrade | websocket
Connection | Upgrade
Sec-WebSocket-Version | 13
Sec-WebSocket-Key | Tecla de enlace de WebSocket
Cuerpo | N/A
Ejemplo | GET http://192.168.1.100:8000/api/v1/ws HTTP/1.1 Host: localhost:8082 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Version: 13 Sec-WebSocket-Key: k3CyFjeNOBNzFZx4blx9kg== Origin: ws://localhost:8082

#### Respuesta

Elemento | Valor
Código de estado | Sesión establecida con éxito, la unidad de visualización enviará 101 (Protocolo de conmutación).
Código | Notas
101 Switching Protocols | Éxito al establecer una sesión.
429 Too Many Requests | Error al establecer una sesión porque se ha alcanzado el número máximo de sesiones.
400 Bad Request | Error al establecer una sesión. La razón es diferente de la anterior.
Cabecera |
Cabecera | Valor
Upgrade | websocket
Connection | Upgrade
Sec-WebSocket-Accept | Protocolo de enlace de WebSocket
Cuerpo | N/A
Ejemplo | HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: WLjfOfV0ERDw6E/NUUaBpqXnHFc=

### Autorización

Si utiliza la administración de usuarios, envíe el comando de autorización primero .

Elemento | Valor
Remitente | Cliente
Datos |
Campo | Tipo de datos | Valor | Notas
Authorization | string | "Bearer <token>" | Utilice el token de respuesta en la API de inicio de sesión.
Ejemplo | { " Authorization ": " Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IlVzZXIxIiwibGV2ZWwiOjF9.eqVwAuo0KMqdggICllJVPs3IE67oHdUpo04w68md7kI " }

### Agregar variables de control

Agregue variables para suscribirse. Si el número de variables de control supera el número máximo, queda truncado. Para las variables agregadas, la notificación se enviará inmediatamente como el valor inicial.

Elemento | Valor
Remitente | Cliente
Datos |
Campo | Tipo de datos | Valor | Notas
command | string | "add_monitor" | Agregar variables de control.
variable | matriz de cadena | - | Conjunto de nombres de variables.
Ejemplo | { "command": "add_monitor", "variable": ["Variable1","Variable2"] }

### Eliminar las variables de control

Elimine las variables para darse de baja.

Elemento | Valor
Remitente | Cliente
Datos |
Campo | Tipo de datos | Valor | Notas
command | string | "remove_monitor" | Elimine las variables del monitor.
variable | matriz de cadena | - | Conjunto de nombres de variables.
Ejemplo | { "command": " remove _monitor", "variable": ["Variable1","Variable2"] }

### Sustituir las variables de control

Para sustituir todas las variables suscritas. Si el número de variables de control supera el número máximo, queda truncado.

Para las variables agregadas, la notificación se enviará inmediatamente como el valor inicial.

Elemento | Valor
Remitente | Cliente
Datos |
Campo | Tipo de datos | Valor | Notas
command | string | "replace_monitor" | Sustituya las variables de control.
variable | matriz de cadena | - | Conjunto de nombres de variables.
Ejemplo | { "command": " replace_monitor", "variable": ["Variable1","Variable2"] }

### Borrar las variables de control

Para eliminar todas las variables suscritas.

Elemento | Valor
Remitente | Cliente
Datos |
Campo | Tipo de datos | Valor | Notas
command | string | "clear_monitor" | Borrar variables de control.
Ejemplo | { "command": " clear_monitor", }

### Suscribir alarmas y errores del sistema

Para suscribir alarmas y errores del sistema.

Elemento | Valor
Remitente | Cliente
Datos |
Campo | Tipo de datos | Valor | Notas
command | string | "subscribe" | Suscribir
alarm | matriz de cadena | - | Conjunto de nombres de alarmas a suscribir. Alarma: "alarm" Error del sistema: "error"
Ejemplo | { "command": " subscribe ", " alarm ": ["alarm","error"] }

### Anular alarmas y errores del sistema

Para anular las alarmas y los errores del sistema.

Elemento | Valor
Remitente | Cliente
Datos |
Campo | Tipo de datos | Valor | Notas
command | string | "unsubscribe" | Anular
alarm | matriz de cadena | - | Matriz con el nombre de las alarmas que hay que anular. Alarma: "alarm" Error del sistema: "error"
Ejemplo | { "command": " unsubscribe", " alarm ": ["alarm","error"] }

### Suscripción de variables

Para recibir una notificación de la unidad de visualización cuando se modifica el valor o la calidad de la variable suscrita.

Elemento | Valor
Remitente | Servidor (Unidad de visualización)
Datos |
Campo | Tipo de datos | Valor | Notas
updated | string | "variable" | Variable
data | matriz del objeto | - | Conjunto de información de variables.
Información de la variable:
Campo | Tipo de datos | Valor | Notas
name | string | Nombre de la variable | Nombre de la variable configurada en el software de edición de pantallas.
quality | string | Cualidad | "bueno": Bien "inválido": El valor no es válido "malo": Error "desconocido": Nunca leído
Value | booleano, número, cadena | El valor de la variable. | Este campo sólo está disponible cuando la calidad es "good". El tipo de datos de JSON depende del tipo de datos de la variable.
Ejemplo | { "updated":”variable”, "data": [ { “name”: “Variable1”, “quality”: “good”, “value”: 100 }, { “name”: “Variable2”, “quality”: “bad” }, { “name”: “Variable3”, “quality”: “unknown” } ] }

La siguiente tabla muestra los tipos de datos admitidos entre el software de edición de pantallas y WebSocket:

Tipo de datos | WebSocket (tipo JSON) | Rango de valores de WebSocket
BOOL | booleano | true/false
BYTE, SINT, USINT, WORD, INT, UINT, DWORD, DINT, UDINT, LWORD, LINT, ULINT, REAL, LREAL, TIME | number | Intervalo de valores de un valor de punto flotante de 64 bits. *Precisión de 52 bits para LWORD, LINT y ULINT. *Nulo cuando un valor REAL o LREAL es NaN o INFINITO.
STRING, WSTRING | string | Caracteres admitidos por UTF-8
DATE, TIME_OF_DAY, DATE_AND_TIME | string | Formato ISO 8601

Nota: Los valores LWORD se muestran como flotante en la unidad de visualización.

### Suscripción de alarmas

Para recibir una notificación de la unidad de visualización cuando se producen/confirman/recuperan/no se confirman alarmas en la unidad de visualización.

Elemento | Valor
Remitente | Servidor (Unidad de visualización)
Datos |
Campo | Tipo de datos | Valor | Notas
updated | string | "alarm" | Alarma
data | matriz del objeto | - | Conjunto de información de la alarma.
Información de la alarma:
Campo | Tipo de datos | Valor | Notas
message | string | Mensaje | Mensaje establecido en el software de edición de pantallas.
parameter | number | Parámetro | Parámetro establecido en el software de edición de pantallas.
status | string | Estado | “Active”: Ocurrió "Ack": Confirmado “Return”: Recuperado "UnACK":No confirmado
time | string | Time | Formato ISO-8601
type | string | Tipo | “HiHi”/”Hi”/”Lo”/”LoLo”
variable | string | Nombre de la variable | Nombre de la variable relacionada con la alarma.
groupname | string | Nombre del grupo | Nombre del grupo de la alarma.
severity | number | Gravedad | Gravedad establecida en el software de edición de pantallas.
value | booleano, número | El valor de la variable | El tipo de datos de JSON depende del tipo de datos de la variable.
Ejemplo | { "updated ": “alarm”, "data”:[ { "message": "BOOL_Hi", "parameter": 100, "status": "Active", "time": "2017-07-07T16:20:01", "type": "Hi", "variable": "BOOL_Internal" “groupname”: “AlarmGroup1”, “severity”: 1, “value”: true } ] }

### Suscripción de errores del sistema

Para recibir una notificación de la unidad de visualización cuando se producen/confirman/recuperan errores del sistema en la unidad de visualización.

Elemento | Valor
Remitente | Servidor (Unidad de visualización)
Datos |
Campo | Tipo de datos | Valor | Notas
updated | string | "error" | Error del sistema
data | matriz del objeto | - | Conjunto de información sobre errores del sistema.
Información sobre el error del sistema:
Campo | Tipo de datos | Valor | Notas
message | string | Mensaje | Mensaje de error del sistema.
status | string | Estado | “Active”: Ocurrió "Ack": Confirmado “Return”: Recuperado
time | string | Time | Formato ISO-8601
equipment | string | Nombre del equipo | El nombre del dispositivo externo desde el que se genera el error se establece en el nombre del equipo.
Ejemplo | { "updated”:”error", "data": [ { "equipment": "MODBUS_Equipment", "message": "MODBUS_Equipment:TCP connection open error (IP Address:127.0.0.2)", "status": "Active", "time": “2017-07-07T16:42:00" } ] }