

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Interactúa con otros AWS servicios
<a name="interact-with-other-services"></a>

AWS IoT SiteWise puede publicar datos de activos en el intermediario de mensajes de publicación y suscripción de AWS IoT MQTT, de modo que pueda interactuar con los datos de sus activos desde otros servicios. AWS AWS IoT SiteWise asigna a cada propiedad de activo un tema de MQTT único que puede utilizar para dirigir los datos de sus activos a otros AWS servicios mediante las reglas básicas. AWS IoT Por ejemplo, puede configurar las reglas AWS IoT principales para realizar las siguientes tareas:
+ Identificar fallos en los equipos y notificar al personal idóneo mediante el envío de datos a [AWS IoT Events](https://docs.aws.amazon.com/iotevents/latest/developerguide/).
+ Crear un historial de los datos de activos seleccionados para utilizarlos en soluciones de software externas mediante el envío de datos a [Amazon DynamoDB](https://docs.aws.amazon.com/dynamodb/).
+ Generar informes semanales mediante la activación de una función de [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/).

Puede seguir un tutorial que recorre los pasos necesarios para configurar una regla que almacene valores de propiedad en DynamoDB. Para obtener más información, consulte [Publicar actualizaciones de valor de propiedad en Amazon DynamoDB](publish-to-amazon-dynamodb.md).

Para obtener más información sobre cómo configurar una regla, consulte [Reglas](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html) en la *Guía para desarrolladores de AWS IoT *.

También puede volver a consumir datos de otros AWS servicios AWS IoT SiteWise. Para ingerir datos mediante la acción de la AWS IoT SiteWise regla, consulte[Ingiera datos para AWS IoT SiteWise usar reglas AWS IoT Core](iot-rules.md).

**Topics**
+ [Descripción de propiedades de activos en temas de MQTT](mqtt-topics.md)
+ [Activa las notificaciones de propiedades de activos en AWS IoT SiteWise](property-notifications.md)
+ [Consulte las notificaciones de propiedades de activos en AWS IoT SiteWise](query-notification-messages.md)
+ [Exportación de datos a Amazon S3 con notificaciones sobre propiedades de activos](export-to-s3.md)
+ [Integre AWS IoT SiteWise con Grafana](grafana-integration.md)
+ [Integrar AWS IoT SiteWise y AWS IoT TwinMaker](integrate-tm.md)
+ [Detección de anomalías con Lookout for Equipment](anomaly-detection.md)

# Descripción de propiedades de activos en temas de MQTT
<a name="mqtt-topics"></a>

Cada propiedad de activo tiene una ruta de tema MQTT única en el siguiente formato.

```
$aws/sitewise/asset-models/assetModelId/assets/assetId/properties/propertyId
```

**nota**  
AWS IoT SiteWise no admite el comodín de filtro de temas `#` (de varios niveles) del motor de reglas AWS IoT principales. Puede utilizar el comodín `+` (de un solo nivel). Por ejemplo, puede utilizar el siguiente filtro de temas para que coincida con todas las actualizaciones de un modelo de activos concreto.  

```
$aws/sitewise/asset-models/assetModelId/assets/+/properties/+
```
Para obtener más información sobre los comodines del filtro de temas, consulte [Temas](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html) en la *Guía para desarrolladores de AWS IoT *.

# Activa las notificaciones de propiedades de activos en AWS IoT SiteWise
<a name="property-notifications"></a>

Puede activar las notificaciones de propiedades para publicar actualizaciones de datos de activos y AWS IoT Core, a continuación, ejecutar consultas sobre sus datos. Con las notificaciones de propiedades de los activos, AWS IoT SiteWise proporciona una CloudFormation plantilla que puede utilizar para exportar AWS IoT SiteWise datos a Amazon S3.

**nota**  
Los datos de los activos se envían AWS IoT Core cada vez que los reciben AWS IoT SiteWise, independientemente de si el valor ha cambiado.

**Topics**
+ [Activación de notificaciones sobre propiedades de activos (consola)](#enable-property-notifications-console)
+ [Activación de notificaciones sobre propiedades de activos (AWS CLI)](#enable-property-notifications-cli)

## Activación de notificaciones sobre propiedades de activos (consola)
<a name="enable-property-notifications-console"></a>

De forma predeterminada, AWS IoT SiteWise no publica las actualizaciones del valor de las propiedades. Puede utilizar la AWS IoT SiteWise consola para activar las notificaciones de una propiedad de un activo.

**Para habilitar o desactivar las notificaciones de la propiedad de un activo (consola)**

1. <a name="sitewise-open-console"></a>Vaya a la [consola de AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/).

1. <a name="sitewise-choose-assets"></a>En el panel de navegación, elija **activos**.

1. Elija el activo para habilitar las notificaciones de una propiedad.
**sugerencia**  <a name="sitewise-expand-asset-hierarchy"></a>
Puede elegir el icono de flecha para expandir una jerarquía de activos y encontrar su activo.

1. Seleccione **Editar**.

1. Para el **Estado de la notificación** de la propiedad del activo, elija **HABILITADO**.  
![\[AWS IoT SiteWise Captura de pantalla de la página «Editar activo» con el texto «Estado de la notificación» resaltado.\]](http://docs.aws.amazon.com/es_es/iot-sitewise/latest/userguide/images/sitewise-enable-property-notifications-console.png)

   También puede elegir **DESHABILITADO** para desactivar las notificaciones de la propiedad del activo.

1. Seleccione **Save**.

## Activación de notificaciones sobre propiedades de activos (AWS CLI)
<a name="enable-property-notifications-cli"></a>

De forma predeterminada, AWS IoT SiteWise no publica las actualizaciones del valor de las propiedades. Puede utilizar el AWS Command Line Interface (AWS CLI) para activar o desactivar las notificaciones de una propiedad de un activo.

Debe conocer los `assetId` de sus activos y los `propertyId` de las propiedades para completar este procedimiento. También puede utilizar el ID externo. Si has creado un activo y no lo sabes`assetId`, usa la [ListAssets](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_ListAssets.html)API para enumerar todos los activos de un modelo específico. Utilice la [DescribeAsset](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAsset.html)operación para ver las propiedades de su activo, incluida la propiedad IDs.

Utilice la [UpdateAssetProperty](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_UpdateAssetProperty.html)operación para activar o desactivar las notificaciones de una propiedad de un activo. Especifique los siguientes parámetros:
+ `assetId`: el ID del activo.
+ `propertyId`: el ID de la propiedad del activo.
+ `propertyNotificationState`: el estado de notificación del valor de la propiedad, `ENABLED` o `DISABLED`.
+ `propertyAlias`: el alias de la propiedad. Especifique el alias existente de la propiedad cuando actualice el estado de notificación. Si omite este parámetro, se elimina el alias existente de la propiedad.

**Para habilitar o desactivar las notificaciones de la propiedad de un activo (CLI)**

1. Ejecute el siguiente comando para recuperar el alias de la propiedad del activo. *asset-id*Sustitúyalo por el identificador del activo y *property-id* por el identificador de la propiedad.

   ```
   aws iotsitewise describe-asset-property \
     --asset-id asset-id \
     --property-id property-id
   ```

   La operación devuelve una respuesta que contiene detalles de la propiedad del activo en el siguiente formato. El alias de propiedad se encuentra en `assetProperty.alias` en el objeto JSON.

   ```
   {
     "assetId": "a1b2c3d4-5678-90ab-cdef-22222EXAMPLE",
     "assetName": "Wind Turbine 7",
     "assetModelId": "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE",
     "assetProperty": {
       "id": "a1b2c3d4-5678-90ab-cdef-33333EXAMPLE",
       "name": "Wind Speed",
       "alias": "/company/windfarm/3/turbine/7/windspeed",
       "notification": {
         "topic": "$aws/sitewise/asset-models/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/assets/a1b2c3d4-5678-90ab-cdef-22222EXAMPLE/properties/a1b2c3d4-5678-90ab-cdef-33333EXAMPLE",
         "state": "DISABLED"
       },
       "dataType": "DOUBLE",
       "unit": "m/s",
       "type": {
         "measurement": {}
       }
     }
   }
   ```

1. Ejecute el siguiente comando para habilitar las notificaciones de la propiedad del activo. *property-alias*Sustitúyalo por el alias de la propiedad de la respuesta del comando anterior u `--property-alias` omita actualizar la propiedad sin un alias.

   ```
   aws iotsitewise update-asset-property \
     --asset-id asset-id \
     --property-id property-id \
     --property-notification-state ENABLED \
     --property-alias property-alias
   ```

   También puede pasar `--property-notification-state DISABLED` para desactivar las notificaciones de la propiedad del activo.

# Consulte las notificaciones de propiedades de activos en AWS IoT SiteWise
<a name="query-notification-messages"></a>

Para consultar las notificaciones de propiedades de los activos, cree AWS IoT Core reglas compuestas por sentencias SQL.

AWS IoT SiteWise publica las actualizaciones de los datos de propiedades de los activos en AWS IoT Core en el siguiente formato.

```
{
  "type": "PropertyValueUpdate",
  "payload": {
    "assetId": "String",
    "propertyId": "String",
    "values": [
      {
        "timestamp": {
          "timeInSeconds": Number,
          "offsetInNanos": Number
        },
        "quality": "String",
        "value": {
          "booleanValue": Boolean,
          "doubleValue": Number,
          "integerValue": Number,
          "stringValue": "String",
          "nullValue": {
            "valueType": "String
            }           
        }
      }
    ]
  }
}
```

Cada estructura de la `values` lista es una estructura timestamp-quality-value (TQV).
+ El `timestamp` contiene el tiempo actual en formato de tiempo Unix en segundos con desplazamiento en nanosegundos.
+ `quality` contiene una de las siguientes cadenas, que indican la calidad del punto de datos:
  + `GOOD`: los datos no se ven afectados por ningún problema.
  + `BAD`: los datos se ven afectados por un problema, como un fallo del sensor.
  + `UNCERTAIN`: los datos se ven afectados por un problema, como la falta de precisión de un sensor.
+ El `value` contiene uno de los siguientes campos, en función del tipo de propiedad:
  + `booleanValue`
  + `doubleValue`
  + `integerValue`
  + `stringValue`
  + `nullValue`

`nullValue`— Una estructura con el siguiente campo que indica el tipo de valor de la propiedad con un valor nulo y una calidad de `BAD` o. `UNCERTAIN`
+ `valueType`— Enuma de \$1"B», «D», «S», «I"\$1

Para analizar valores fuera de la matriz `values`, debe usar consultas complejas de objetos anidados en las instrucciones SQL de sus reglas. Para obtener más información, consulte [Consultas de objetos anidados](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-nested-queries.html) en la *Guía para desarrolladores de AWS IoT *, o consulte el tutorial de [Publicar actualizaciones de valor de propiedad en Amazon DynamoDB](publish-to-amazon-dynamodb.md) para ver un ejemplo concreto de análisis sintáctico de mensajes de notificación de propiedades de activo.

**Example Consulta de ejemplo para extraer la matriz de valores**  
La siguiente instrucción demuestra cómo consultar la matriz de valores de propiedad actualizados para una propiedad de tipo doble específica en todos los activos con esa propiedad.  

```
SELECT
  (SELECT VALUE (value.doubleValue) FROM payload.values) AS windspeed
FROM
  '$aws/sitewise/asset-models/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/assets/+/properties/a1b2c3d4-5678-90ab-cdef-33333EXAMPLE' 
WHERE
  type = 'PropertyValueUpdate'
```
La instrucción de consulta de regla anterior genera los datos con el siguiente formato.  

```
{
  "windspeed": [
    26.32020195042838,
    26.282584572975477,
    26.352566977372508,
    26.283084346171442,
    26.571883739599322,
    26.60684140743005,
    26.628738636715045,
    26.273486932802125,
    26.436379105473964,
    26.600590095377303
  ]
}
```

**Example Consulta de ejemplo para extraer un solo valor**  
La siguiente instrucción demuestra cómo consultar el primer valor de la matriz de valores de propiedad para una propiedad de tipo doble específica en todos los activos con esa propiedad.  

```
SELECT
  get((SELECT VALUE (value.doubleValue) FROM payload.values), 0) AS windspeed
FROM
  '$aws/sitewise/asset-models/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE/assets/+/properties/a1b2c3d4-5678-90ab-cdef-33333EXAMPLE' 
WHERE
  type = 'PropertyValueUpdate'
```

La instrucción de consulta de regla anterior genera los datos con el siguiente formato.

```
{
  "windspeed": 26.32020195042838
}
```

**importante**  
Esta instrucción de consulta de regla ignora las actualizaciones de valores distintas de la primera en cada lote. Cada lote puede contener hasta 10 valores. Si necesita incluir los valores restantes, debe configurar una solución más compleja para generar valores de propiedad de activos a otros servicios. Por ejemplo, puede configurar una regla con una AWS Lambda acción para volver a publicar cada valor de la matriz en otro tema y configurar otra regla para consultar ese tema y publicar cada valor en la acción de regla deseada.

# Exportación de datos a Amazon S3 con notificaciones sobre propiedades de activos
<a name="export-to-s3"></a>

Puede exportar los datos entrantes AWS IoT SiteWise a un bucket de Amazon S3 de su cuenta. Puede realizar una copia de seguridad de los datos en un formato que le permita crear informes históricos o para analizar los datos con métodos complejos. 

 Para exportar datos de series temporales AWS IoT SiteWise, habilite la función de capa fría para almacenar los datos en un bucket de Amazon S3. Consulte [Administrar el almacenamiento de datos en AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/manage-data-storage.html) para obtener más información. 

 Para exportar el modelo de activos y los metadatos de los activos AWS IoT SiteWise, utilice la función de operaciones masivas para exportar los metadatos a un bucket de Amazon S3. Consulte [Operaciones masivas con activos y modelos](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/bulk-operations-assets-and-models.html) para obtener más información. 

# Integre AWS IoT SiteWise con Grafana
<a name="grafana-integration"></a>

Grafana es una plataforma de visualización de datos que se utiliza para visualizar y monitorear los datos en los paneles de control. En la versión 10.4.0 y posteriores de Grafana, utilice el AWS IoT SiteWise complemento para visualizar los datos de sus AWS IoT SiteWise activos en los paneles de Grafana. Los usuarios pueden visualizar datos de múltiples AWS fuentes (como AWS IoT SiteWise Amazon Timestream y CloudWatch Amazon) y otras fuentes de datos con un único panel de Grafana.

Tienes dos opciones para usar el complemento: AWS IoT SiteWise 
+ **Servidores locales de Grafana**

  Puede configurar el AWS IoT SiteWise complemento en un servidor Grafana que administre. Para obtener más información sobre cómo añadir y usar el complemento, consulta el archivo [README de la AWS IoT SiteWise fuente](https://github.com/grafana/iot-sitewise-datasource/blob/main/src/README.md) de datos en el sitio web. GitHub 
+ **AWS Managed Service for Grafana**

  Puede utilizar el AWS IoT SiteWise complemento en AWS Managed Service for Grafana (AMG). AMG administra los servidores de Grafana por usted para que pueda visualizar sus datos sin tener que construir, empaquetar ni implementar ningún hardware ni cualquier otra infraestructura de Grafana. Para obtener más información, consulte los siguientes temas en la Guía del usuario de *AWS Managed Service for Grafana*:
  + [¿Qué es Amazon Managed Service for Grafana (AMG)?](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html)
  + [Uso de la fuente de datos AWS IoT SiteWise](https://docs.aws.amazon.com/grafana/latest/userguide/using-iotsitewise-in-AMG.html)

**Example Ejemplo de panel de control de Grafana**  
El siguiente panel de control de Grafana visualiza el [parque eólico de demostración](getting-started-demo.md). Puede acceder a este panel de control de demostración en el sitio web [Grafana Play](https://play.grafana.org/d/avzwehmz/demo-wind-farm?orgId=1).  

![\[Un ejemplo de panel de Grafana que visualiza el parque eólico de AWS IoT SiteWise demostración.\]](http://docs.aws.amazon.com/es_es/iot-sitewise/latest/userguide/images/grafana-dashboard-example.png)


# Integrar AWS IoT SiteWise y AWS IoT TwinMaker
<a name="integrate-tm"></a>

La integración con AWS IoT TwinMaker ella permite acceder a funciones sólidas AWS IoT SiteWise, como la `ExecuteQuery` API de recuperación de AWS IoT SiteWise datos y la búsqueda avanzada de activos en la AWS IoT SiteWise consola. Para integrar los servicios y utilizar estas características, primero debe habilitar la integración.

**Topics**
+ [Habilitación de la integración](#it-enable)
+ [Integrar y AWS IoT SiteWise AWS IoT TwinMaker](#it-integrate)

## Habilitación de la integración
<a name="it-enable"></a>

Los administradores pueden usar las políticas de AWS JSON para especificar quién tiene acceso a qué. Es decir, qué *entidad principal* puede realizar *acciones* en qué *recursos* y en qué *condiciones*. El elemento `Action` de una política JSON describe las acciones que puede utilizar para conceder o denegar el acceso en una política. Para obtener más información sobre las acciones AWS IoT SiteWise admitidas, consulte [las acciones definidas AWS IoT SiteWise](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsiotsitewise.html#awsiotsitewise-actions-as-permissions) en la *Referencia de autorización de servicios*.

*Para obtener más información sobre las funciones AWS IoT TwinMaker vinculadas a un servicio, consulte [Funciones vinculadas a servicios AWS IoT TwinMaker en la Guía del usuario](https://docs.aws.amazon.com/iot-twinmaker/latest/guide/security_iam_service-with-iam.html#security_iam_service-with-iam-roles-service-linked).AWS IoT TwinMaker *

Antes de poder realizar la integración AWS IoT SiteWise AWS IoT TwinMaker, debe conceder los siguientes permisos que le permitan integrarse en un espacio de trabajo AWS IoT SiteWise vinculado: AWS IoT TwinMaker 
+ `iotsitewise:EnableSiteWiseIntegration`— Permite AWS IoT SiteWise integrarse con un espacio de AWS IoT TwinMaker trabajo vinculado. Esta integración permite AWS IoT TwinMaker leer toda la información de modelado AWS IoT SiteWise a través de una función AWS IoT TwinMaker vinculada al servicio. Para habilitar este permiso, añada la siguiente política a su rol de IAM:

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "iotsitewise:EnableSiteWiseIntegration"
        ],
        "Resource": "*"
      }
    ]
  }
  ```

------

## Integrar y AWS IoT SiteWise AWS IoT TwinMaker
<a name="it-integrate"></a>

Para integrar AWS IoT SiteWise y AWS IoT TwinMaker, debe tener lo siguiente:
+ AWS IoT SiteWise función vinculada al servicio configurada en su cuenta
+ AWS IoT TwinMaker función vinculada a un servicio configurada en tu cuenta
+ AWS IoT TwinMaker espacio de trabajo con un ID `IoTSiteWiseDefaultWorkspace` en tu cuenta en la región.

### Para integrarlo mediante la AWS IoT SiteWise consola
<a name="it-integrate-console"></a>

Cuando vea el banner **Integración con AWS IoT TwinMaker** en la consola, seleccione **Conceder permiso**. Los requisitos previos se crean en su cuenta.

### Para realizar la integración mediante AWS CLI
<a name="it-integrate-cli"></a>

Para integrar AWS IoT SiteWise y AWS IoT TwinMaker utilizar el AWS CLI, introduzca los siguientes comandos:

1. Llame a `CreateServiceLinkedRole` con un `AWSServiceName` de `iotsitewise.amazonaws.com`.

   ```
   aws iam create-service-linked-role --aws-service-name iotsitewise.amazonaws.com
   ```

1. Llame a `CreateServiceLinkedRole` con un `AWSServiceName` de ` iottwinmaker.amazonaws.com`.

   ```
   aws iam create-service-linked-role --aws-service-name iottwinmaker.amazonaws.com
   ```

1. Llame a `CreateWorkspace` con un `ID` de `IoTSiteWiseDefaultWorkspace`.

   ```
    aws iottwinmaker create-workspace --workspace-id IoTSiteWiseDefaultWorkspace
   ```

# Detección de anomalías con Lookout for Equipment
<a name="anomaly-detection"></a>

**nota**  
La detección de anomalías solo se encuentra disponible en las regiones donde está disponible Amazon Lookout for Equipment.

Puede realizar la integración AWS IoT SiteWise con Amazon Lookout for Equipment para obtener información sobre sus equipos industriales mediante la detección de anomalías y el mantenimiento predictivo de los equipos industriales. Lookout for Equipment es un servicio de machine learning (ML) para supervisar equipos industriales que detecta un comportamiento anormal de los equipos e identifica errores potenciales. Con Lookout for Equipment, puede implementar programas de mantenimiento predictivo e identificar los procesos poco óptimos en los equipos. Para obtener más información sobre Lookout for Equipment, consulte [What is Amazon Lookout for Equipment?](https://docs.aws.amazon.com/lookout-for-equipment/latest/ug/what-is.html) en la *Guía del usuario de Amazon Lookout for Equipment*.

Al crear una predicción para entrenar un modelo de aprendizaje automático a fin de detectar el comportamiento anómalo del equipo, AWS IoT SiteWise envía los valores de las propiedades de los activos a Lookout for Equipment para entrenar un modelo de aprendizaje automático a fin de detectar el comportamiento anómalo del equipo. Para crear una definición de predicción en un modelo de activos, debe especificar los roles de IAM necesarios para que Lookout for Equipment acceda a los datos y las propiedades que se deben enviar a Lookout for Equipment y enviar datos procesados a Amazon S3. Para obtener más información, consulte [Cree modelos de activos en AWS IoT SiteWise](create-asset-models.md).

Para integrar AWS IoT SiteWise Lookout for Equipment, realizarás los siguientes pasos de alto nivel:
+ Añada una definición de predicción a un modelo de activos que describa las propiedades de las que desea hacer un seguimiento. La definición de predicción es un conjunto reutilizable de mediciones, transformaciones y métricas que se utiliza para crear predicciones sobre los activos que se basan en ese modelo de activos.
+ Entrene la predicción en función de los datos históricos que proporcione.
+ Programa la inferencia, que indica la AWS IoT SiteWise frecuencia con la que se debe ejecutar una predicción específica.

Una vez programada la inferencia, el modelo de Lookout for Equipment supervisa los datos que recibe de su equipo y busca anomalías en el comportamiento de los equipos. Puede ver y analizar los resultados en SiteWise Monitor, mediante las operaciones de la API AWS IoT SiteWise GET o la consola Lookout for Equipment. También puede crear alarmas utilizando detectores de alarmas desde el modelo de activos para recibir alertas sobre el comportamiento anormal de los equipos.

**Topics**
+ [Adición de una definición de predicción (consola)](#ad-add-prediction-definition-console)
+ [Entrenamiento de una predicción (consola)](#ad-train-prediction-console)
+ [Inicie o detenga la inferencia sobre una predicción (consola)](#ad-start-stop-inference-console)
+ [Adición de una definición de predicción (CLI)](#ad-add-prediction-definition-cli)
+ [Entrenamiento de una predicción e inicio de la inferencia (CLI)](#ad-train-inference-prediction-cli)
+ [Entrenamiento de una predicción (CLI)](#ad-train-prediction-cli)
+ [Inicie o detenga la inferencia sobre una predicción (CLI)](#ad-start-stop-inference-cli)

## Adición de una definición de predicción (consola)
<a name="ad-add-prediction-definition-console"></a>

Para empezar a enviar los datos recopilados por AWS IoT SiteWise Lookout for Equipment, debes añadir AWS IoT SiteWise una definición de predicción a un modelo de activos.

**Para añadir una definición de predicción a un modelo de AWS IoT SiteWise activos**

1. <a name="sitewise-open-console"></a>Vaya a la [consola de AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/).

1. En el panel de navegación, elija **Modelos** y seleccione el modelo de activos al que desea añadir la definición de predicción.

1. Elija **Predicciones**.

1. Seleccione **Agregar definición de predicciones**.

1. Defina los detalles sobre la definición de predicción.

   1. Introduzca un **Nombre** único y una **Descripción** para la definición de predicción. Elija el nombre con cuidado porque, una vez que haya creado la definición de predicción, no podrá modificarlo.

   1. Cree o seleccione un **rol de permisos de IAM** que permita a AWS IoT SiteWise compartir los datos de sus activos con Amazon Lookout for Equipment. El rol debe tener las siguientes políticas de IAM y de confianza. Para obtener ayuda en la creación de roles, consulte [Crear un rol mediante políticas de confianza personalizadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html).

      **Política de IAM**

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "L4EPermissions",
                  "Effect": "Allow",
                  "Action": [
                      "lookoutequipment:CreateDataset",
                      "lookoutequipment:CreateModel",
                      "lookoutequipment:CreateInferenceScheduler",
                      "lookoutequipment:DescribeDataset",
                      "lookoutequipment:DescribeModel",
                      "lookoutequipment:DescribeInferenceScheduler",
                      "lookoutequipment:ListInferenceExecutions",
                      "lookoutequipment:StartDataIngestionJob",
                      "lookoutequipment:StartInferenceScheduler",
                      "lookoutequipment:UpdateInferenceScheduler",
                      "lookoutequipment:StopInferenceScheduler"
                  ],
                  "Resource": [
                      "arn:aws:lookoutequipment:us-east-1:123456789012:inference-scheduler/IoTSiteWise_*",
                      "arn:aws:lookoutequipment:us-east-1:123456789012:model/IoTSiteWise_*",
                      "arn:aws:lookoutequipment:us-east-1:123456789012:dataset/IoTSiteWise_*"
                  ]
              },
              {
                  "Sid": "L4EPermissions2",
                  "Effect": "Allow",
                  "Action": [
                      "lookoutequipment:DescribeDataIngestionJob"
                  ],
                  "Resource": "*"
              },
              {
                  "Sid": "S3Permissions",
                  "Effect": "Allow",
                  "Action": [
                      "s3:CreateBucket",
                      "s3:ListBucket",
                      "s3:PutObject",
                      "s3:GetObject"
                  ],
                  "Resource": [
                      "arn:aws:s3:::iotsitewise-*"
                  ]
              },
              {
                  "Sid": "IAMPermissions",
                  "Effect": "Allow",
                  "Action": [
                      "iam:GetRole",
                      "iam:PassRole"
                  ],
                  "Resource": "arn:aws:iam::111122223333:role/Role_name"
              }
          ]
      }
      ```

------

      **Política de confianza**

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "iotsitewise.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceAccount": "123456789012"
                      },
                      "ArnEquals": {
                          "aws:SourceArn": "arn:aws:iotsitewise:us-east-1:123456789012:asset/*"
                      }
                  }
              },
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "lookoutequipment.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "aws:SourceAccount": "123456789012"
                      },
                      "ArnEquals": {
                          "aws:SourceArn": "arn:aws:lookoutequipment:us-east-1:123456789012:*"
                      }
                  }
              }
          ]
      }
      ```

------

   1. Elija **Siguiente**.

1. Seleccione los atributos de datos (mediciones, transformaciones y métricas) que quiera enviar a Lookout for Equipment.

   1. (Opcional) Seleccione las mediciones.

   1. (Opcional) Seleccione las transformaciones.

   1. (Opcional) Seleccione las métricas.

   1. Elija **Siguiente**.

1. Revise sus selecciones. Para añadir la definición de predicción al modelo de activos, en la página de resumen, seleccione **Agregar definición de predicciones**.

También puede **Editar** o **Eliminar** una definición de predicción existente que tenga predicciones activas asociadas.

## Entrenamiento de una predicción (consola)
<a name="ad-train-prediction-console"></a>

Después de añadir una definición de predicción a un modelo de activos, puede entrenar las predicciones que están en sus activos.

**Para entrenar una predicción en AWS IoT SiteWise**

1. <a name="sitewise-open-console"></a>Vaya a la [consola de AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/).

1. En el panel de navegación, seleccione **Activos** y el activo que desea supervisar.

1. Elija **Predicciones**.

1. Seleccione las predicciones que desea entrenar.

1. En **Acciones**, seleccione **Comenzar entrenamiento** y haga lo siguiente:

   1. En **Detalles de la predicción**, selecciona un rol de permisos de IAM que te permita AWS IoT SiteWise compartir los datos de tus activos con Lookout for Equipment. Si necesita crear un nuevo rol, elija **Crear un nuevo rol**.

   1. En **Configuración de los datos de entrenamiento**, introduzca un **Intervalo de tiempo de los datos de entrenamiento** para seleccionar qué datos desea usar para entrenar la predicción.

   1. (Opcional) Seleccione la frecuencia de muestreo de los datos después del procesamiento posterior.

   1. (Opcional) En**Etiquetas de datos**, proporcione un bucket y un prefijo de Amazon S3 que contenga los datos de etiquetado. Para obtener más información sobre el etiquetado de datos, consulte [Labeling your data](https://docs.aws.amazon.com/lookout-for-equipment/latest/ug/labeling-data.html) en la *Guía del usuario de Amazon Lookout for Equipment*.

   1. Elija **Siguiente**.

1. (Opcional) Si quiere que la predicción esté activa en cuanto termine el entrenamiento, en **Configuración avanzada**, seleccione **Activar automáticamente la predicción después del entrenamiento** y, a continuación, haga lo siguiente:

   1. En **Datos de entrada**, en **Frecuencia de carga de datos**, defina la frecuencia con la que se cargan los datos y, en **Tiempo de retraso de desplazamiento**, defina la cantidad de búfer que desea utilizar.

   1. Elija **Siguiente**.

1. Revise los detalles de la predicción y seleccione **Guardar e iniciar**.

## Inicie o detenga la inferencia sobre una predicción (consola)
<a name="ad-start-stop-inference-console"></a>

**nota**  
Los cargos de Lookout for Equipment se aplican a las inferencias programadas con los datos transferidos AWS IoT SiteWise entre Lookout for Equipment y Lookout for Equipment. Para obtener más información, consulte [Amazon Lookout for Equipment pricing](https://aws.amazon.com/lookout-for-equipment/pricing/).

Si ha añadido la predicción `lookoutequipment:CreateDataset`, pero no ha decidido activarla después del entrenamiento, debe activarla para iniciar la supervisión de sus activos.

**Inicio de la inferencia de una predicción**

1. <a name="sitewise-open-console"></a>Vaya a la [consola de AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/).

1. En el panel de navegación, elija **Activos** y seleccione el activo al que se añade la predicción.

1. Elija **Predicciones**.

1. Seleccione las predicciones que desea activar.

1. En **Acciones**, seleccione **Iniciar inferencia** y haga lo siguiente:

   1. En **Datos de entrada**, en **Frecuencia de carga de datos**, defina la frecuencia con la que se cargan los datos y, en **Tiempo de retraso de desplazamiento**, defina la cantidad de búfer que desea utilizar.

   1. Elija **Guardar e iniciar**.

**Detención de la inferencia de una predicción**

1. <a name="sitewise-open-console"></a>Vaya a la [consola de AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/).

1. En el panel de navegación, elija **Activos** y seleccione el activo al que se añade la predicción.

1. Elija **Predicciones**.

1. Seleccione las predicciones que desea detener.

1. En **Acciones**, elija **Detener inferencia**.

## Adición de una definición de predicción (CLI)
<a name="ad-add-prediction-definition-cli"></a>

Para definir una definición de predicción en un modelo de activos nuevo o existente, puede usar (). AWS Command Line Interface AWS CLI Tras definir la definición de predicción en el modelo de activos, entrena y programa la inferencia de una predicción sobre un activo para detectar anomalías con Lookout for Equipment. AWS IoT SiteWise 

**Requisitos previos**

Para completar estos pasos debe tener un modelo de activos y haber creado al menos un activo. Para obtener más información, consulte [Creación de un modelo de activos (AWS CLI)](create-asset-models.md#create-asset-model-cli) y [Creación de un activo (AWS CLI)](create-assets.md#create-asset-cli).

Si es la primera vez que lo utiliza AWS IoT SiteWise, debe llamar a la operación de la `CreateBulkImportJob` API para importar los valores de las propiedades de los activos AWS IoT SiteWise, que se utilizarán para entrenar el modelo. Para obtener más información, consulte [Crea un trabajo de importación AWS IoT SiteWise masiva ()AWS CLI](CreateBulkImportJob.md).

**Adición de una definición de predicción**

1. Cree un archivo denominado `asset-model-payload.json`. Siga los pasos de estas otras secciones para añadir los detalles de su modelo de activos al archivo, pero no envíe la solicitud para crear o actualizar el modelo de activos.
   + Para obtener más información acerca de cómo crear un modelo de activos, consulte [Creación de un modelo de activos (AWS CLI)](create-asset-models.md#create-asset-model-cli)
   + Para obtener más información acerca de cómo actualizar un modelo de activos existente, consulte [Actualice un modelo de activo, un modelo de componentes o una interfaz (AWS CLI)](update-asset-models.md#update-asset-model-cli)

1. Añada un modelo compuesto de Lookout for Equipment (`assetModelCompositeModels`) al modelo de activos añadiendo el siguiente código.
   + Reemplace `Property` por el ID de las propiedades que desea incluir. Para obtenerlos IDs, llama [https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModel.html](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_DescribeAssetModel.html).
   + `RoleARN`Sustitúyalo por el ARN de un rol de IAM que permita a Lookout for Equipment acceder a tus datos. AWS IoT SiteWise 

   ```
   { 
     ...
     "assetModelCompositeModels": [
       {
         "name": "L4Epredictiondefinition",
         "type": "AWS/L4E_ANOMALY",
         "properties": [
             {
               "name": "AWS/L4E_ANOMALY_RESULT",
               "dataType": "STRUCT",
               "dataTypeSpec": "AWS/L4E_ANOMALY_RESULT",
               "unit": "none",
               "type": {
                 "measurement": {}
               }
             },
             {
               "name": "AWS/L4E_ANOMALY_INPUT",
               "dataType": "STRUCT",
               "dataTypeSpec": "AWS/L4E_ANOMALY_INPUT",
               "type": {
                  "attribute": {
                    "defaultValue": "{\"properties\": [\"Property1\", \"Property2\"]}"
                  }
               }
             },
             {
               "name": "AWS/L4E_ANOMALY_PERMISSIONS",
               "dataType": "STRUCT",
               "dataTypeSpec": "AWS/L4E_ANOMALY_PERMISSIONS",
               "type": {
                 "attribute": {
                   "defaultValue": "{\"roleArn\": \"RoleARN\"}"
                 }
               }
             },
             {
               "name": "AWS/L4E_ANOMALY_DATASET",
               "dataType": "STRUCT",
               "dataTypeSpec": "AWS/L4E_ANOMALY_DATASET",
               "type": {
                   "attribute": {}
               }
             },
             {
               "name": "AWS/L4E_ANOMALY_MODEL",
               "dataType": "STRUCT",
               "dataTypeSpec": "AWS/L4E_ANOMALY_MODEL",
               "type": {
                 "attribute": {}
               }
             },
             {
               "name": "AWS/L4E_ANOMALY_INFERENCE",
               "dataType": "STRUCT",
               "dataTypeSpec": "AWS/L4E_ANOMALY_INFERENCE",
               "type": {
                 "attribute": {}
               }
             },
             {
               "name": "AWS/L4E_ANOMALY_TRAINING_STATUS",
               "dataType": "STRUCT",
               "dataTypeSpec": "AWS/L4E_ANOMALY_TRAINING_STATUS",
               "type": {
                 "attribute": {
                   "defaultValue": "{}"
                 }
               }
             },
             {
               "name": "AWS/L4E_ANOMALY_INFERENCE_STATUS",
               "dataType": "STRUCT",
               "dataTypeSpec": "AWS/L4E_ANOMALY_INFERENCE_STATUS",
               "type": {
                 "attribute": {
                   "defaultValue": "{}"
                 }
               }
             }
      ]
   }
   ```

1. Cree el modelo de activos o actualice el modelo de activos existente. Realice una de las siguientes acciones:
   + Ejecute el siguiente comando para crear el modelo de activos:

     ```
     aws iotsitewise create-asset-model --cli-input-json file://asset-model-payload.json
     ```
   + Ejecute el siguiente comando para actualizar el modelo de activos existente. Reemplace `asset-model-id` por el ID del modelo de activos que desea actualizar.

     ```
     aws iotsitewise update-asset-model \
       --asset-model-id asset-model-id \
       --cli-input-json file://asset-model-payload.json
     ```

 Después de ejecutar el comando, anote `assetModelId` en la respuesta. 

## Entrenamiento de una predicción e inicio de la inferencia (CLI)
<a name="ad-train-inference-prediction-cli"></a>

Ahora que la definición de predicción está establecida, puede entrenar activos en función de ella e iniciar la inferencia. Si desea entrenar su predicción pero no iniciar la inferencia, pase a [Entrenamiento de una predicción (CLI)](#ad-train-prediction-cli). Para entrenar la predicción e iniciar la inferencia sobre el activo, necesitará el `assetId` del recurso de destino.

**Entrenamiento e inicio de la inferencia de la predicción**

1. Ejecute el comando siguiente para buscar el `assetModelCompositeModelId` en `assetModelCompositeModelSummaries`. Sustituya *`asset-model-id`* por el ID del modelo de activos que ha creado en [Actualice un modelo de activo, un modelo de componentes o una interfaz (AWS CLI)](update-asset-models.md#update-asset-model-cli).

   ```
   aws iotsitewise describe-asset-model \
     --asset-model-id asset-model-id \
   ```

1. Ejecute el siguiente comando para buscar el `actionDefinitionId` de la acción `TrainingWithInference`. Sustituya *`asset-model-id`* por el ID utilizado en el paso anterior y sustituya *`asset-model-composite-model-id`* por el ID devuelto en el paso anterior.

   ```
   aws iotsitewise describe-asset-model-composite-model \
     --asset-model-id asset-model-id \
     --asset-model-composite-model-id asset-model-composite-model-id \
   ```

1. Cree un archivo con el nombre `train-start-inference-prediction.json` y agregue el siguiente código, sustituyendo lo siguiente:
   + `asset-id` por el ID del activo de destino
   + `action-definition-id`con el ID de la acción TrainingWithInference 
   + `StartTime` por el inicio de los datos de entrenamiento, proporcionados en segundos epoch
   + `EndTime` por el fin de los datos de entrenamiento, proporcionados en segundos epoch
   + `TargetSamplingRate` por la frecuencia de muestreo de los datos tras el procesamiento posterior por parte de Lookout for Equipment. Los valores permitidos son: `PT1S | PT5S | PT10S | PT15S | PT30S | PT1M | PT5M | PT10M | PT15M | PT30M | PT1H`.

   ```
   {
     "targetResource": {
       "assetId": "asset-id"
     },
     "actionDefinitionId": "action-definition-Id",
     "actionPayload":{
       "stringValue": "{\"l4ETrainingWithInference\":{\"trainingWithInferenceMode\":\"START\",\"trainingPayload\":{\"exportDataStartTime\":StartTime,\"exportDataEndTime\":EndTime},\"targetSamplingRate\":\"TargetSamplingRate\"},\"inferencePayload\":{\"dataDelayOffsetInMinutes\":0,\"dataUploadFrequency\":\"PT5M\"}}}"
     }
   }
   ```

1. Ejecute el siguiente comando para iniciar el entrenamiento y la inferencia:

   ```
   aws iotsitewise execute-action --cli-input-json file://train-start-inference-prediction.json
   ```

## Entrenamiento de una predicción (CLI)
<a name="ad-train-prediction-cli"></a>

Ahora que la definición de predicción está establecida, puede entrenar activos en función de ella. Para entrenar la predicción sobre el activo, necesitará el `assetId` del recurso de destino.

**Entrenamiento de la predicción**

1. Ejecute el comando siguiente para buscar el `assetModelCompositeModelId` en `assetModelCompositeModelSummaries`. Sustituya *`asset-model-id`* por el ID del modelo de activos que ha creado en [Actualice un modelo de activo, un modelo de componentes o una interfaz (AWS CLI)](update-asset-models.md#update-asset-model-cli).

   ```
   aws iotsitewise describe-asset-model \
     --asset-model-id asset-model-id \
   ```

1. Ejecute el siguiente comando para buscar el `actionDefinitionId` de la acción `Training`. Sustituya *`asset-model-id`* por el ID utilizado en el paso anterior y sustituya *`asset-model-composite-model-id`* por el ID devuelto en el paso anterior.

   ```
   aws iotsitewise describe-asset-model-composite-model \
     --asset-model-id asset-model-id \
     --asset-model-composite-model-id asset-model-composite-model-id \
   ```

1. Cree un archivo con el nombre `train-prediction.json` y agregue el siguiente código, sustituyendo lo siguiente:
   + `asset-id` por el ID del activo de destino
   + `action-definition-id` por el ID de la acción de entrenamiento
   + `StartTime` por el inicio de los datos de entrenamiento, proporcionados en segundos epoch
   + `EndTime` por el fin de los datos de entrenamiento, proporcionados en segundos epoch
   + (Opcional) `BucketName` por el nombre del bucket de Amazon S3 que contiene los datos de su etiqueta
   + (Opcional) `Prefix` por el prefijo asociado con el bucket de Amazon S3.
   + `TargetSamplingRate` por la frecuencia de muestreo de los datos tras el procesamiento posterior por parte de Lookout for Equipment. Los valores permitidos son: `PT1S | PT5S | PT10S | PT15S | PT30S | PT1M | PT5M | PT10M | PT15M | PT30M | PT1H`.
**nota**  
Incluya el nombre y el prefijo del bucket o ninguno de ellos.

   ```
   {
     "targetResource": {
       "assetId": "asset-id"
     },
     "actionDefinitionId": "action-definition-Id",
     "actionPayload":{ "stringValue": "{\"l4ETraining\": {\"trainingMode\":\"START\",\"exportDataStartTime\": StartTime, \"exportDataEndTime\": EndTime, \"targetSamplingRate\":\"TargetSamplingRate\"}, \"labelInputConfiguration\": {\"bucketName\": \"BucketName\", \"prefix\": \"Prefix\"}}}"
   }
   }
   ```

1. Ejecute el siguiente comando para iniciar el entrenamiento:

   ```
   aws iotsitewise execute-action --cli-input-json file://train-prediction.json
   ```

Antes de poder iniciar la inferencia se debe completar el entrenamiento. Para comprobar el estado del entrenamiento, realice una de las siguientes acciones:
+ Desde la consola, navegue hasta el activo en el que se encuentra la predicción.
+ Desde el AWS CLI, llama `BatchGetAssetPropertyValue` usando el `propertyId` de la `trainingStatus` propiedad.

## Inicie o detenga la inferencia sobre una predicción (CLI)
<a name="ad-start-stop-inference-cli"></a>

Una vez entrenada la predicción, puede iniciar la inferencia para indicar a Lookout for Equipment que comience a supervisar sus activos. Para iniciar o detener la inferencia, necesitará el `assetId` del recurso de destino.

**Inicio de la inferencia**

1. Ejecute el comando siguiente para buscar el `assetModelCompositeModelId` en `assetModelCompositeModelSummaries`. Sustituya *`asset-model-id`* por el ID del modelo de activos que ha creado en [Actualice un modelo de activo, un modelo de componentes o una interfaz (AWS CLI)](update-asset-models.md#update-asset-model-cli).

   ```
   aws iotsitewise describe-asset-model \
     --asset-model-id asset-model-id \
   ```

1. Ejecute el siguiente comando para buscar el `actionDefinitionId` de la acción `Inference`. Sustituya *`asset-model-id`* por el ID utilizado en el paso anterior y sustituya *`asset-model-composite-model-id`* por el ID devuelto en el paso anterior.

   ```
   aws iotsitewise describe-asset-model-composite-model \
     --asset-model-id asset-model-id \
     --asset-model-composite-model-id asset-model-composite-model-id \
   ```

1. Cree un archivo con el nombre `start-inference.json` y agregue el siguiente código, sustituyendo lo siguiente:
   + `asset-id` por el ID del activo de destino
   + `action-definition-id` por el ID de la acción de inferencia inicial
   + `Offset` por la cantidad de búfer que desea utilizar
   + `Frequency` por la frecuencia con la que se cargan los datos

   ```
   {
     "targetResource": {
       "assetId": "asset-id"
     },
     "actionDefinitionId": "action-definition-Id",
     "actionPayload":{ "stringValue": "{\"l4EInference\": {\"inferenceMode\":\"START\",\"dataDelayOffsetInMinutes\": Offset, \"dataUploadFrequency\": \"Frequency\"}}"
   }}
   ```

1. Ejecute el siguiente comando para iniciar la inferencia.

   ```
   aws iotsitewise execute-action --cli-input-json file://start-inference.json 
   ```

**Detención de la inferencia**

1. Ejecute el comando siguiente para buscar el `assetModelCompositeModelId` en `assetModelCompositeModelSummaries`. Sustituya *`asset-model-id`* por el ID del modelo de activos que ha creado en [Actualice un modelo de activo, un modelo de componentes o una interfaz (AWS CLI)](update-asset-models.md#update-asset-model-cli).

   ```
   aws iotsitewise describe-asset-model \
     --asset-model-id asset-model-id \
   ```

1. Ejecute el siguiente comando para buscar el `actionDefinitionId` de la acción `Inference`. Sustituya *`asset-model-id`* por el ID utilizado en el paso anterior y sustituya *`asset-model-composite-model-id`* por el ID devuelto en el paso anterior.

   ```
   aws iotsitewise describe-asset-model-composite-model \
     --asset-model-id asset-model-id \
     --asset-model-composite-model-id asset-model-composite-model-id \
   ```

1. Cree un archivo con el nombre `stop-inference.json` y agregue el siguiente código, sustituyendo lo siguiente:
   + `asset-id` por el ID del activo de destino
   + `action-definition-id` por el ID de la acción de inferencia inicial

   ```
   {
     "targetResource": {
       "assetId": "asset-id"
     },
     "actionDefinitionId": "action-definition-Id",
     "actionPayload":{ "stringValue": "{\"l4EInference\":{\"inferenceMode\":\"STOP\"}}"
   }}
   ```

1. Ejecute el siguiente comando para detener la inferencia:

   ```
   aws iotsitewise execute-action --cli-input-json file://stop-inference.json 
   ```