|
|
El **caso de uso 12** está dedicado a la información relativa a la protección en tiempo real de obreros que realizan actuaciones de conservación en las carreteras. Este servicio incluye la información generada por los **Conos Conectados**
|
|
|
El **caso de uso 12** está dedicado a la información relativa a la protección en tiempo real de obreros que realizan actuaciones de conservación en las carreteras. Este servicio incluye la información generada por los **Conos Conectados**
|
|
|
|
|
|
Recepción y publicación de datos relativos al posicionamiento en tiempo real de:
|
|
|
|
|
|
- Operarios de mantenimiento
|
|
|
|
|
|
- Vehículos de obras y mantenimiento que se encuentran en las vías
|
|
|
|
|
|
Esta información podrá ser enviada a la plataforma DGT 3.0 o bien por dispositivos de IoT o bien por Apps que se puedan utilizar para posicionar estos elementos en la vía.
|
|
|
|
|
|
La plataforma cuenta con dos funcionalidades diferenciadas para la **publicación (envío)** y para la **suscripción (recepción)** de información. La primera es a través de una API REST y la segunda a través de un servicio MQTT en tiempo real.
|
|
|
La plataforma cuenta con dos funcionalidades diferenciadas para la **publicación (envío)** ~~y para la **suscripción (recepción)**~~ de información. La primera es a través de una API REST ~~y la segunda a través de un servicio MQTT en tiempo real~~.
|
|
|
|
|
|
Tanto la funcionalidad de publicación como de suscripción requieren de certificados de acceso distintos que deben ser solicitados y suministrados por DGT 3.0. Estos certificados, de no haber sido solicitados ya, se deberán solicitar a *[soporte@cmobility30.es](mailto:soporte@cmobility30.es)*.
|
|
|
Tanto la funcionalidad de publicación como de suscripción requieren de certificados de acceso distintos que deben ser solicitados y suministrados por DGT 3.0. Estos certificados, de no haber sido solicitados ya, se deberán solicitar a [_soporte@cmobility30.es_](mailto:soporte@cmobility30.es).
|
|
|
|
|
|
A continuación se muestran las URLs con las que se accede a cada funcionalidad:
|
|
|
**Todo lo relacionado con MQTT está deshabilitado temporalmente.**
|
|
|
|
|
|
| Modo | URL | Descripción |
|
|
|
| ----------- | -------------------------------------- | ------------------------------------------------------------------- |
|
|
|
| Publicación | https://pre.cmobility30.es/use-case-12 | Endpoint del entorno de integración de clientes para la publicación |
|
|
|
| Suscripción | mqtt://mqtt.pre.cmobility30.es:8883 | Endpoint del entorno de integración para la suscripción |
|
|
|
A continuación se muestran las URLs con las que se accede a cada funcionalidad:
|
|
|
| Modo | URL | Descripción |
|
|
|
|------|-----|-------------|
|
|
|
| Publicación | <https://pre.cmobility30.es/use-case-12> | Endpoint del entorno de integración de clientes para la publicación |
|
|
|
| ~~Suscripción~~ | [~~mqtt://mqtt.pre.cmobility30.es:8883~~](mqtt://mqtt.pre.cmobility30.es:8883) | ~~Endpoint del entorno de integración para la suscripción~~ |
|
|
|
|
|
|
A continuación se describen las dos funcionalidades.
|
|
|
|
... | ... | @@ -52,117 +52,78 @@ La suscripción al servicio de este caso de uso deberá ser mediante el tópico: |
|
|
En el tópico se publican los eventos en formato JSON. Aquí se puede ver un ejemplo:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"actionId": "CLI_235",
|
|
|
"beaconId": "cff92179-dc0a-47da-bd9e-5e9c5b14d251",
|
|
|
"beaconTypeId": 1,
|
|
|
"timestamp": "2021-06-02T14:15:07.286Z",
|
|
|
"lon": 1.920453,
|
|
|
"lat": 41.496174,
|
|
|
"vehicleTypeId": 2,
|
|
|
"deviceTypeId": 2,
|
|
|
"deviceUeTypeId": 1,
|
|
|
"speed": 3.2,
|
|
|
"provinceId": 8,
|
|
|
"road": "A-2",
|
|
|
"pk": 587.07,
|
|
|
"direction": "UP"
|
|
|
}
|
|
|
```
|
|
|
|
|
|
- actionId (texto): Identificador único del evento
|
|
|
|
|
|
- beaconId (texto): identificador único de la baliza (por ejemplo, la MAC)
|
|
|
|
|
|
- beaconTypeId (número entero): identificador del tipo de baliza. 1 = Start, 2 = End, 3 = Intermediate, 4 = Unique
|
|
|
|
|
|
- timestamp (fecha UTC): fecha y hora en formato UTC del momento en el que el evento se ha generado. Es necesario que sea de un máximo de 30 segundos de antiguedad con respecto a la hora UTC. La fecha debe finalizar con el caracter 'Z' que marca que está en UTC
|
|
|
|
|
|
- lon (número decimal): longitud de coordenadas de tipo WGS 84 donde se ha generado el evento
|
|
|
|
|
|
- lat (número decimal): latitud de coordenadas de tipo WGS 84 donde se ha generado el evento
|
|
|
|
|
|
- vehicleTypeId (número entero): identificador del tipo de vehículo. 0 = None, 1 = Car, 2 = Motorbike
|
|
|
|
|
|
- deviceTypeId (número entero): identificador del tipo de dispositivo desde el que se envía la información. 1 = Baliza, 2 = Chaleco, 3 = Cono
|
|
|
|
|
|
- deviceUseTypeId (número entero): identificador del tipo de uso del dispositivo que envía la información. 1 = Worker, 2 = Vehicle, 3 = Infrastruture
|
|
|
|
|
|
- speed (número decimal): velocidad en kilómetros por hora a la que se encuentra el elemento en el momento que envía el evento
|
|
|
|
|
|
- provinceId (número entero): identificador de la provincia donde se genera el evento según el [INE](https://www.ine.es/daco/daco42/codmun/cod_provincia_estandar.htm)
|
|
|
|
|
|
- road (número entero): nombre oficial de la carretera donde se genera el evento
|
|
|
|
|
|
- pk (número entero): punto kilométrico donde se genera el evento
|
|
|
|
|
|
- direction (texto): dirección de la carretera donde se genera el evento. UP = Sentido ascendente, DOWN = Sentido descendente, UNKNOWN = Desconocido
|
|
|
|
|
|
Ver más información y un ejemplo de conexión [aquí](https://gitlab.cs.cmobility30.es/dgt3.0_esp/general/-/wikis/MQTT).
|
|
|
|
|
|
**Nota:** *La información que se está publicando en el entorno de desarrollo es una simulación con información no real que va cambiando a lo largo del día, de forma que se pueda probar la interface de consumo.*
|
|
|
**Nota:** _La información que se está publicando en el entorno de desarrollo es una simulación con información no real que va cambiando a lo largo del día, de forma que se pueda probar la interface de consumo._
|
|
|
|
|
|
## Errores
|
|
|
|
|
|
Como se ha indicado anteriormente, todas las respuestas HTTP que no sean **200 – OK**, se pueden considerar **inválidas**. El formato de la respuesta de error es como el siguiente ejemplo:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"status": 401,
|
|
|
"code": 1,
|
|
|
"message": "User not found or valid"
|
|
|
}
|
|
|
```
|
|
|
|
|
|
*Esto no aplica para el **Caso de Uso 9 - Grúas**.
|
|
|
\*Esto no aplica para el **Caso de Uso 9 - Grúas**.
|
|
|
|
|
|
Estos errores tendrán tres categorías principales:
|
|
|
|
|
|
#### Error de Autentificación
|
|
|
|
|
|
- HTTP Status: **401 - Unauthorized**
|
|
|
|
|
|
| Code | Message |
|
|
|
| ---- | ----------------------- |
|
|
|
| 1 | User not found or valid |
|
|
|
| Code | Message |
|
|
|
|------|---------|
|
|
|
| 1 | User not found or valid |
|
|
|
|
|
|
|
|
|
#### Error de Cliente
|
|
|
|
|
|
- HTTP Status: **400 - Bad Request**
|
|
|
|
|
|
| Code | Message |
|
|
|
| ---- | ------------------------------------------------------------------- |
|
|
|
| 0 | Authenticate |
|
|
|
| 2 | Entity ID not found |
|
|
|
| 3 | Missing required property |
|
|
|
| 4 | The entity received cannot be proccessed |
|
|
|
| 5 | Incorrect token received |
|
|
|
| 6 | Expired token received |
|
|
|
| 7 | There is an error with the token provided. Please request a new one |
|
|
|
| 8 | No token received |
|
|
|
| 9 | Required request body is missing |
|
|
|
| 10 | Event is marked as expired by timestamp |
|
|
|
| 11 | Missing request header |
|
|
|
| 12 | Permission denied. Role assigned to user missing |
|
|
|
| 13 | There is an error in one or more elements of the list |
|
|
|
| 14 | Cone use type must be Infraestructure |
|
|
|
| 15 | Cone vehicle type must be None |
|
|
|
| 16 | Cone beacon type must be Unique |
|
|
|
|
|
|
En el caso de obtener un *error 3 - Missing required property* la respuesta obtenida tendrá un valor en el *message* que nos indicará los campos que faltan por enviar:
|
|
|
| Code | Message |
|
|
|
|------|---------|
|
|
|
| 0 | Authenticate |
|
|
|
| 2 | Entity ID not found |
|
|
|
| 3 | Missing required property |
|
|
|
| 4 | The entity received cannot be proccessed |
|
|
|
| 5 | Incorrect token received |
|
|
|
| 6 | Expired token received |
|
|
|
| 7 | There is an error with the token provided. Please request a new one |
|
|
|
| 8 | No token received |
|
|
|
| 9 | Required request body is missing |
|
|
|
| 10 | Event is marked as expired by timestamp |
|
|
|
| 11 | Missing request header |
|
|
|
| 12 | Permission denied. Role assigned to user missing |
|
|
|
| 13 | There is an error in one or more elements of the list |
|
|
|
| 14 | Cone use type must be Infraestructure |
|
|
|
| 15 | Cone vehicle type must be None |
|
|
|
| 16 | Cone beacon type must be Unique |
|
|
|
|
|
|
|
|
|
En el caso de obtener un _error 3 - Missing required property_ la respuesta obtenida tendrá un valor en el _message_ que nos indicará los campos que faltan por enviar:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"status": 400,
|
|
|
"code": 3,
|
|
|
"message": "[deviceTypeId: must not be null, deviceUseTypeId: must not be null, informationQualityId: must not be null]"
|
|
|
}
|
|
|
```
|
|
|
|
|
|
#### Error de Servidor
|
|
|
|
|
|
- HTTP Status: **500 - Internal Server Error**
|
|
|
|
|
|
| Code | Message |
|
|
|
| ---- | -------------- |
|
|
|
| 17 | Internal error | |
|
|
\ No newline at end of file |
|
|
| Code | Message |
|
|
|
|------|---------|
|
|
|
| 17 | Internal error |
|
|
|
|