

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Passerelles V3 compatibles MQTT pour Edge AWS IoT SiteWise
<a name="mqtt-enabled-v3-gateway"></a>

AWS IoT SiteWise peut utiliser des passerelles V3 compatibles MQTT, ce qui représente une avancée significative dans l'architecture des passerelles Edge. SiteWise Ce type de passerelle utilise le protocole MQTT (Message Queuing Telemetry Transport) pour la communication de données, offrant ainsi une flexibilité et une efficacité accrues dans les déploiements industriels de l'IoT.

La passerelle V3 compatible MQTT utilise MQTT pour le transfert de données, permettant ainsi un protocole réseau léger de publication et d'abonnement qui transporte efficacement les messages entre les appareils et le cloud. Vous pouvez configurer différentes destinations de données, notamment l'ingestion de données en temps réel directement dans Amazon S3 AWS IoT SiteWise et l'ingestion de données mise en mémoire tampon. Pour permettre une collecte de données précise, vous pouvez implémenter des filtres de chemin pour vous abonner à des sujets MQTT spécifiques.

Les passerelles V3 compatibles MQTT sont fournies avec une destination en temps réel préconfigurée avec des filtres définis sur « \$1 » (tous les sujets), que vous pouvez personnaliser ou supprimer selon vos besoins. Pour rationaliser la gestion des données, une seule destination en temps réel peut exister dans chaque passerelle.

L'architecture compatible MQTT est très différente de la passerelle Classic Streams, V2. Alors que la V2 utilise une approche basée sur les flux, la V3 utilise MQTT, offrant des destinations de données et des options de filtrage plus configurables. Notez toutefois que la V3 ne prend pas en charge le pack de traitement de données, qui est disponible dans la version 2.

La passerelle V3 compatible MQTT offre plusieurs avantages : 
+ Évolutivité améliorée, grâce à la légèreté du MQTT, permettant une meilleure gestion de nombreux appareils et une meilleure transmission de données à haute fréquence.
+ Contrôle des données amélioré grâce à des filtres de chemin, permettant une gestion granulaire de la collecte de données et réduisant le transfert et le traitement inutiles des données.
+ Gestion flexible des données, permettant la configuration entre le traitement en temps réel et le stockage en mémoire tampon en fonction des besoins spécifiques.
+ Harmonisation avec les normes de communication IoT modernes, ouvrant la voie à de futures améliorations et intégrations.

Envisagez d'adopter la passerelle V3 compatible MQTT pour les nouveaux déploiements, en particulier lorsque vous avez besoin d'options d'ingestion de données flexibles et d'un contrôle précis de la collecte de données.

**Note**  
Pour les déploiements existants ou les scénarios nécessitant le pack de traitement des données, la passerelle Classic Streams, V2 reste une option viable.

En proposant les deux types de passerelles AWS IoT SiteWise , vous pouvez choisir la solution qui répond le mieux à vos besoins spécifiques en matière d'IoT industriel, que vous privilégiiez les fonctionnalités MQTT avancées ou la compatibilité avec les systèmes existants.

## Filtres de destinations et de chemins
<a name="create-destination-summary"></a>

Consultez les rubriques suivantes pour en savoir plus sur les destinations et les filtres de chemin dans les passerelles compatibles MQTT :
+ [Comprendre les destinations AWS IoT SiteWise Edge](gw-destinations.md#source-destination)
+ [Ajouter une destination AWS IoT SiteWise Edge en temps réel](destinations-real-time.md)
+ [Ajouter une destination AWS IoT SiteWise mise en mémoire tampon à l'aide d'Amazon S3](destinations-buffered.md)
+ [Comprendre les filtres de chemin pour les destinations AWS IoT SiteWise EdgeComprendre les filtres de chemin](gw-destinations.md#destinations-path-filters)
+ [Ajouter des filtres de chemin aux destinations AWS IoT SiteWise Edge](destinations-add-path-filters.md)
+ [Gérer les destinations AWS IoT SiteWise Edge](destinations-manage.md)

# Connectez des applications externes au broker EMQX
<a name="connect-external-applications-emqx"></a>

Ce guide explique comment connecter des applications externes à votre passerelle AWS IoT SiteWise Edge via un courtier EMQX sur votre passerelle V3 compatible MQTT déployée. Les applications externes peuvent inclure des outils de surveillance personnalisés, des logiciels de visualisation tiers ou des systèmes existants qui doivent interagir avec vos données industrielles à la périphérie.

Nous aborderons les étapes de configuration pour Linux et les Microsoft Windows environnements, notamment la configuration du déploiement d'EMQX, la configuration TLS pour des connexions sécurisées et les règles d'autorisation pour contrôler l'accès à des sujets spécifiques.

**Note**  
EMQX n'est ni un fournisseur ni un fournisseur d' AWS IoT SiteWise Edge.

**Important**  
Pour sécuriser les connexions à votre passerelle, nous vous recommandons vivement d'utiliser l'authentification par certificat via la fonction d'authentification de l'appareil AWS IoT Greengrass client. Cette méthode fournit une sécurité robuste grâce à l'authentification TLS mutuelle (mTLS). Pour plus d'informations, consultez la section [Connecter les appareils clients aux appareils principaux](https://docs.aws.amazon.com/greengrass/v2/developerguide/connect-client-devices.html) dans le *Guide du AWS IoT Greengrass Version 2 développeur*.

Si vous n'êtes pas en mesure d'utiliser l'authentification basée sur des certificats, suivez ce guide pour configurer l'authentification à l'aide de noms d'utilisateur et de mots de passe.

## Conditions préalables
<a name="emqx-broker-prerequisites"></a>
+ Une passerelle V3 compatible SiteWise Edge MQTT qui a été déployée et est en ligne
+ Accès à l'hôte de la passerelle
+ Accès aux AWS IoT Greengrass consoles AWS IoT SiteWise et

**Topics**
+ [Conditions préalables](#emqx-broker-prerequisites)
+ [Format de charge utile des messages pour le courtier EMQX sur Edge AWS IoT SiteWise](connect-broker-payload-format.md)
+ [Configuration du broker EMQX](configure-emqx-broker.md)
+ [Connecter une application au broker EMQX sur Edge AWS IoT SiteWise](connect-app-to-broker.md)
+ [Configurer des règles d'autorisation pour AWS IoT SiteWise Edge dans EMQX](authorization-rules-emqx-broker.md)

# Format de charge utile des messages pour le courtier EMQX sur Edge AWS IoT SiteWise
<a name="connect-broker-payload-format"></a>

Pour que le composant SiteWise éditeur IoT puisse consommer les données de votre application externe et les publier AWS IoT SiteWise dans le cloud, la charge utile envoyée au courtier doit répondre à des exigences spécifiques.

Comprendre le format de charge utile est essentiel pour une communication MQTT réussie avec AWS IoT SiteWise Edge. Bien que le processus de configuration de la connexion soit abordé dans les sections suivantes, nous présentons d'abord les exigences en matière de charge utile pour vous aider à planifier votre mise en œuvre.

## Exigences relatives aux rubriques MQTT
<a name="connect-broker-mqtt-requirements"></a>

Il n'y a aucune restriction quant à la structure des rubriques MQTT, y compris le nombre de niveaux ou de caractères utilisés. Cependant, nous recommandons que le sujet corresponde au `propertyAlias` champ de la charge utile.

**Example Exemple d'alias de propriété**  
Si le sujet du MQTT l'est`site1/line1/compressor1/temperature`, assurez-vous que les `propertyAlias` correspondances sont correctes.  

```
{
  "assetId": "compressor_asset_01",
  "propertyAlias": "site1/line1/compressor1/temperature",
  "propertyId": "temperature_sensor_01",
  "propertyValues": [
    {
      "quality": "GOOD",
      "timestamp": {
        "offsetInNanos": 0,
        "timeInSeconds": 1683000000
      },
      "value": {
        "doubleValue": 23.5
      }
    }
  ]
}
```

## Structure de charge utile JSON
<a name="connect-broker-json-payload"></a>

La charge utile des messages MQTT est écrite en JSON et suit le format de `PutAssetPropertyValueEntry` message défini dans la référence d'[AWS IoT SiteWise API](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/API_PutAssetPropertyValueEntry.html).

```
{
   "assetId": "string",
   "propertyAlias": "string",
   "propertyId": "string",
   "propertyValues": [
      {
         "quality": "string",
         "timestamp": {
            "offsetInNanos": number,
            "timeInSeconds": number
         },
         "value": {
            "booleanValue": boolean,
            "doubleValue": number,
            "integerValue": number,
            "stringValue": "string"
         }
      }
   ]
}
```

**Note**  
Pour qu'un message soit considéré comme valide, seule l'une des conditions suivantes peut être vraie :  
Le `propertyAlias` est défini, ou
Les deux `assetId` et `propertyId` sont définis
`PutAssetPropertyValueEntry`Il contient un `entryId` champ qui n'est pas obligatoire dans ce contexte.

# Configuration du broker EMQX
<a name="configure-emqx-broker"></a>

Cette section explique comment ajouter des noms d'utilisateur et des mots de passe. Il explique également comment établir une connexion TLS à partir d'une source externe à l'aide du nom d'utilisateur et du mot de passe ajoutés. Vous pouvez configurer le broker EMQX à l'aide de Linux ou. Microsoft Windows

**Note**  
Pour configurer le broker, vous avez besoin d'un périphérique principal configuré avec la configuration EMQX par défaut dans votre passerelle V3 compatible MQTT.

**Important**  
Une fois cette procédure terminée, nous vous recommandons vivement de configurer les règles d'autorisation. Pour de plus amples informations, veuillez consulter [Configurer des règles d'autorisation pour AWS IoT SiteWise Edge dans EMQX](authorization-rules-emqx-broker.md). Les règles d'autorisation pour les utilisateurs ajoutés renforcent la sécurité. 

## Mettre à jour la configuration de déploiement d'EMQX pour l'authentification
<a name="update-emqx-broker-authentication"></a>

**Pour mettre à jour la configuration de déploiement d'EMQX pour l'authentification**

1. <a name="sitewise-open-console"></a>Accédez à la [console AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/).

1. Dans le volet de navigation de gauche, choisissez **Edge gateway** dans la section **Edge**.

1. Choisissez la passerelle à configurer.

1. Dans la section **Configuration de la passerelle Edge**, copiez la valeur **principale de votre appareil Greengrass**. Conservez-le pour une utilisation ultérieure.

1. Ouvrez la [AWS IoT console](https://console.aws.amazon.com/iot/).

1. **Dans le menu de navigation de gauche, dans la section **Gérer**, choisissez **Greengrass devices**, puis Deployments.**

1. Recherchez la valeur principale de l'appareil que vous avez enregistrée précédemment et cliquez sur ce lien pour ouvrir le déploiement.

1. Cliquez sur le bouton déroulant **Actions**, puis sur **Réviser**.

1. Lisez le message qui s'affiche, puis choisissez **Revise le déploiement**. La page **Spécifier la cible** apparaît.

1. Choisissez **Next** jusqu'à ce que vous atteigniez l'étape **Configurer les composants**.

1. Sélectionnez le bouton `aws.greengrass.clientdevices.mqtt.EMQX` radio.

1. Cliquez sur le bouton **Configurer le composant**. Une page de configuration s'affiche pour le composant.

1. Sous **Mise à jour de la configuration**, choisissez **Rétablir la configuration par défaut pour la version du composant : 2.\$1. **\$1.

1. Entrez la configuration suivante dans la section **Configuration à fusionner** en fonction de votre système d'exploitation.

------
#### [ Linux ]

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "allow"
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               },
               "ssl": {
                   "default": {
                       "enabled": true,
                       "enable_authn": true,
                       "ssl_options": {
                           "verify": "verify_none",
                           "fail_if_no_peer_cert": false
                       }
                   }
               }
           },
           "authentication": {
               "enable": true,
               "backend": "built_in_database",
               "mechanism": "password_based",
               "password_hash_algorithm": {
                   "iterations": 210000,
                   "mac_fun": "sha512",
                   "name": "pbkdf2"
               },
               "user_id_type": "username"
           },
           "dashboard": {
               "listeners": {
                   "http": {
                       "bind": 18083
                   }
               }
           }
       },
       "authMode": "bypass",
       "dockerOptions": "-p 8883:8883 -p 127.0.0.1:1883:1883 -p 127.0.0.1:18083:18083 -v emqx-data:/opt/emqx/data -e EMQX_NODE__NAME=emqx@local",
       "requiresPrivilege": "true"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "allow"
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               },
               "ssl": {
                   "default": {
                       "enabled": true,
                       "enable_authn": true,
                       "ssl_options": {
                           "verify": "verify_none",
                           "fail_if_no_peer_cert": false
                       }
                   }
               }
           },
           "authentication": {
               "enable": true,
               "backend": "built_in_database",
               "mechanism": "password_based",
               "password_hash_algorithm": {
                   "iterations": 210000,
                   "mac_fun": "sha512",
                   "name": "pbkdf2"
               },
               "user_id_type": "username"
           },
           "dashboard": {
               "listeners": {
                   "http": {
                       "bind": 18083
                   }
               }
           }
       },
       "authMode": "bypass",
       "requiresPrivilege": "true"
   }
   ```

   Le `dockerOptions` champ concerne uniquement les passerelles Linux.

------

1. Choisissez **Confirmer**.

1. Choisissez **Next** jusqu'à ce que vous atteigniez l'étape de **révision**.

1. Choisissez **Déployer**.

1. Une fois le déploiement réussi, passez à l'étape suivante.

## Activer l'authentification par nom d'utilisateur et mot de passe
<a name="emqx-broker-username-password-auth"></a>

Cette section explique comment ajouter des noms d'utilisateur et des mots de passe via l'interface graphique du tableau de bord EMQX.

**Note**  
Les instructions relatives à EMQX fournies sont fournies à titre de référence uniquement. Étant donné que la documentation et les fonctionnalités d'EMQX peuvent changer au fil du temps et que nous ne conservons pas leur documentation, nous vous recommandons de consulter la [documentation officielle d'EMQX](https://docs.emqx.com/en/emqx/latest/) pour obtenir les informations les plus récentes.

------
#### [ EMQX Dashboard ]

**Pour activer l'authentification par nom d'utilisateur et mot de passe via le tableau de bord EMQX**

1. Assurez-vous que vous vous trouvez dans l'hôte de la passerelle.

1. Ouvrez une fenêtre de navigateur et rendez-vous sur [http://localhost:18083/](http://localhost:18083/).

1. Entrez le nom d'utilisateur **admin** et le mot de passe par défaut de**public**. Pour plus d'informations, consultez le tableau de [bord EMQX](https://docs.emqx.com/en/emqx/latest/dashboard/introduction.html#first-login) dans la documentation *EMQX*.

1. Une fois connecté, vous êtes invité à modifier votre mot de passe. Mettez à jour votre mot de passe pour accéder au tableau de bord EMQX.

1. Dans le volet de navigation de gauche, choisissez l'icône en forme de bouclier, puis **Authentification**.

1. Dans la ligne **Base de données intégrée**, cliquez sur le bouton **Utilisateurs**.

1. Cliquez sur le bouton représentant le signe plus pour ajouter des utilisateurs. Un écran d'**ajout** apparaît.

1. Entrez un nom d'utilisateur et un mot de passe pour l'utilisateur de l'application externe.

1. Choisissez **Enregistrer**. Le nom d'utilisateur que vous avez choisi apparaît dans le tableau de la page **d'authentification**.

**Note**  
Les règles d'autorisation existantes ou par défaut s'appliquent au nouvel utilisateur. Il est recommandé de les examiner et de les adapter aux besoins de votre application externe.

------
#### [ EMQX Management with Linux ]

Utilisez l'outil AWS IoT SiteWise CLI EMQX à l'adresse. `/greengrass/v2/bin/swe-emqx-cli`

**Pour activer l'authentification par nom d'utilisateur et mot de passe via EMQX Management sous Linux**

1. Modifiez le mot de passe administrateur en exécutant la commande suivante :

   ```
   /greengrass/v2/bin/swe-emqx-cli admin change-pwd
   ```

1. Lorsque vous y êtes invité, procédez comme suit :

   1. Entrez votre nom d'utilisateur administrateur (par défaut`admin`) et votre mot de passe (par défaut`public`).

   1. Entrez et confirmez votre nouveau mot de passe.

   En cas de réussite, le message suivant s'affiche :

   ```
   admin password changed successfully
   ```

1. Ajoutez des utilisateurs pour les applications externes en exécutant la commande suivante :

   ```
   /greengrass/v2/bin/swe-emqx-cli users add
   ```

1. Lorsque vous y êtes invité, procédez comme suit :

   1. Entrez le nom d'utilisateur du nouvel utilisateur.

   1. Entrez et confirmez le mot de passe du nouvel utilisateur.

   En cas de réussite, le message suivant s'affiche :

   ```
   User '[username]' created successfully
   ```

1. Vérifiez la configuration utilisateur en exécutant la commande suivante :

   ```
   /greengrass/v2/bin/swe-emqx-cli users list
   ```

   Le résultat montre tous les utilisateurs configurés :

   ```
   Users:
   - [your-added-username]
   
   Total users: 1
   ```

------
#### [ EMQX Management with Windows ]

Utilisez l'outil AWS IoT SiteWise CLI EMQX à l'un des emplacements suivants :
+ PowerShell: `C:\greengrass\v2\bin\swe-emqx-cli.ps1`
+ Invite de commande : `C:\greengrass\v2\bin\swe-emqx-cli.bat`

**Pour activer l'authentification par nom d'utilisateur et mot de passe via EMQX Management à l'aide de Windows**

1. Modifiez le mot de passe administrateur en exécutant la commande suivante :

   ```
   C:\greengrass\v2\bin\swe-emqx-cli.ps1 admin change-pwd
   ```

1. Lorsque vous y êtes invité, procédez comme suit :

   1. Entrez votre nom d'utilisateur administrateur (par défaut`admin`) et votre mot de passe (par défaut`public`).

   1. Entrez et confirmez votre nouveau mot de passe.

   En cas de réussite, le message suivant s'affiche :

   ```
   admin password changed successfully
   ```

1. Ajoutez des utilisateurs pour les applications externes en exécutant la commande suivante :

   ```
   C:\greengrass\v2\bin\swe-emqx-cli.ps1 users add
   ```

1. Lorsque vous y êtes invité, procédez comme suit :

   1. Entrez le nom d'utilisateur du nouvel utilisateur.

   1. Entrez et confirmez le mot de passe du nouvel utilisateur.

   En cas de réussite, le message suivant s'affiche :

   ```
   User '[username]' created successfully
   ```

1. Vérifiez la configuration utilisateur en exécutant la commande suivante :

   ```
   C:\greengrass\v2\bin\swe-emqx-cli.ps1 users list
   ```

   Le résultat montre tous les utilisateurs configurés :

   ```
   Users:
   - [your-added-username]
   
   Total users: 1
   ```

------

# Connecter une application au broker EMQX sur Edge AWS IoT SiteWise
<a name="connect-app-to-broker"></a>

Le broker EMQX utilise le protocole TLS (Transport Layer Security) sur le port 8883 pour chiffrer toutes les communications, garantissant ainsi la protection de vos données pendant la transmission. Cette section explique les étapes à suivre pour établir des connexions entre vos applications et le broker EMQX. Le respect de ces étapes permet de préserver l'intégrité et la confidentialité de vos données industrielles. Le processus de connexion implique deux approches principales : l'utilisation de la découverte automatique des adresses IP par le biais de composants ou la configuration manuelle des noms DNS et des adresses IP en tant que noms alternatifs de sujet (SANs) dans vos certificats TLS. Chaque méthode présente ses propres avantages en fonction de la configuration de votre réseau et de vos exigences en matière de sécurité. Cette documentation vous guidera à travers les deux options.

**Topics**
+ [Configuration du protocole TLS pour des connexions sécurisées au courtier EMQX sur Edge AWS IoT SiteWise](#configure-tls-emqx-broker)
+ [Testez la connexion du broker EMQX sur Edge AWS IoT SiteWise](#test-emqx-connection)
+ [Utilisez votre propre CA](#configure-tls-custom-ca)
+ [Ouvrez le port 8883 pour les connexions de pare-feu externes](#emqx-firewall)

## Configuration du protocole TLS pour des connexions sécurisées au courtier EMQX sur Edge AWS IoT SiteWise
<a name="configure-tls-emqx-broker"></a>

 AWS IoT Greengrass Génère par défaut un certificat de serveur TLS pour le courtier EMQX qui est signé par l'autorité de certification (CA) du périphérique principal. Pour plus d'informations, consultez [Connecter des appareils clients à un périphérique AWS IoT Greengrass Core avec un courtier MQTT](https://docs.aws.amazon.com/greengrass/v2/developerguide/connecting-to-mqtt.html).

### Récupérez le certificat TLS
<a name="configure-tls-retrieve-certificate"></a>

Pour obtenir le certificat CA, exécutez la commande suivante sur l'hôte de la passerelle :

------
#### [ Linux ]

Exécutez la commande suivante dans une session shell sur l'hôte de passerelle :

```
/greengrass/v2/bin/swe-emqx-cli cert
```

Cette commande affiche l'emplacement du certificat et imprime le contenu du certificat.

Vous pouvez également enregistrer le certificat dans un fichier à l'aide de cette commande :

```
/greengrass/v2/bin/swe-emqx-cli cert --output /path/to/certificate.pem
```

------
#### [ Windows ]

Exécutez la commande suivante dans une PowerShell session sur l'hôte de la passerelle :

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 cert
```

Cette commande affiche l'emplacement du certificat et imprime le contenu du certificat.

Vous pouvez également enregistrer le certificat dans un fichier à l'aide de cette commande :

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 cert --output C:\path\to\certificate.pem
```

La CLI localise automatiquement le certificat quel que soit le chemin exact sur votre système.

------

Copiez le contenu du fichier ca.pem dans l'application externe que vous connectez au broker. Enregistrez-le sous `BrokerCoreDeviceCA.pem`.

### Ajouter des names/IP adresses DNS personnalisées au certificat du serveur TLS
<a name="configure-tls-custom-dns-ip"></a>

Le nom alternatif du sujet (SAN) sur le certificat généré par AWS IoT Greengrass est`localhost`. Lors de l'établissement d'une connexion TLS depuis l'extérieur de l'hôte de la passerelle, l'étape de vérification TLS échoue car le nom d'hôte du courtier ne correspond pas au nom d'hôte figurant `localhost` sur le certificat du serveur.

Pour résoudre le problème de non-concordance des noms d'hôte, AWS IoT Greengrass propose deux méthodes de gestion des points de terminaison des appareils principaux. Cette section couvre les deux options. Pour des informations plus détaillées, consultez la section [Gérer les principaux points de terminaison des appareils](https://docs.aws.amazon.com/greengrass/v2/developerguide/manage-core-device-endpoints.html) dans le *Guide du AWS IoT Greengrass Version 2 développeur*.
+ Pour vous connecter au broker EMQX à l'aide de l'adresse IP de l'appareil principal, utilisez la section Découverte automatique des adresses IP.
+ Pour vous connecter au broker EMQX à l'aide d'un nom DNS au lieu d'une adresse IP, utilisez la section Gestion manuelle.

------
#### [ Automated IP discovery ]

Cette option permet à votre appareil principal de découvrir automatiquement son adresse IP et de l'ajouter en tant que nom alternatif du sujet (SAN) au certificat du courtier.

1. Ajoutez le `aws.greengrass.clientdevices.IPDetector` composant au déploiement de votre appareil principal.

1. Déployez les modifications sur votre appareil

1. Attendez que le déploiement soit terminé.

   Une fois le déploiement terminé, vous pouvez établir une connexion TLS sécurisée à l'aide de l'adresse IP du courtier.

   L'adresse IP est automatiquement ajoutée en tant que SAN au certificat du courtier.

------
#### [ Manual DNS and IP Configuration ]

Vous pouvez ajouter manuellement des noms DNS et des adresses IP en tant que noms alternatifs de sujet (SANs) à votre certificat TLS. Cette méthode est utile lorsque vous avez configuré un nom DNS pour l'hôte de votre passerelle.

**Important**  
Si vous utilisez le IPDetector composant, supprimez-le de votre déploiement avant de continuer. Le IPDetector composant remplace les configurations manuelles des points de terminaison.

**Pour configurer manuellement les points de terminaison**

1. <a name="sitewise-open-console"></a>Accédez à la [console AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/).

1. Dans le volet de navigation de gauche, choisissez **Edge gateway** dans la section **Edge**.

1. Choisissez la passerelle à configurer.

1. Dans la section de **configuration de la passerelle Edge**, choisissez l'URL de votre **appareil principal Greengrass**. La page de l'appareil principal s'affiche.

1. Choisissez l'onglet **Appareils clients**.

1. Choisissez **Gérer les points de terminaison.**

1. Dans la boîte de dialogue Gérer les points de terminaison, entrez le ou les noms DNS et les adresses IP que vous souhaitez ajouter. SANs Utilisez le port 8883.

1. Choisissez **Mettre à jour**.

Le certificat de serveur TLS du courtier est automatiquement mis à jour pour inclure vos nouveaux points de terminaison.

**Pour vérifier la mise à jour du certificat du serveur TLS sous Linux**

1. Démarrez une session shell sur votre hôte de passerelle.

   ```
   docker exec emqx openssl x509 -in ./data/cert.pem -text -noout | grep -A1 "Subject Alternative Name"
   ```

1. La commande renvoie un résultat similaire à ce qui suit :

   ```
   X509v3 Subject Alternative Name: 
   DNS:endpoint_you_added, DNS:localhost
   ```

1. Vérifiez que votre point de terminaison apparaît dans la liste des SANs.

**Pour vérifier la mise à jour du certificat du serveur TLS à l'aide de Windows**

1. Démarrez une session shell sur votre hôte de passerelle.

   ```
   (Get-PfxCertificate -FilePath "C:\greengrass\v2\work\aws.greengrass.clientdevices.mqtt.EMQX\v2\data\cert.pem").Extensions | Where-Object { $_.Oid.FriendlyName -eq "Subject Alternative Name" } | ForEach-Object { "Subject Alternative Name:", ($_.Format($true) -split "`n")[0..1] }
   ```

1. La commande renvoie un résultat similaire à ce qui suit :

   ```
   Subject Alternative Name:
   DNS Name=your-endpoint
   DNS Name=localhost
   ```

1. Vérifiez que le point de terminaison que vous avez ajouté figure dans la liste des SANs.

------

## Testez la connexion du broker EMQX sur Edge AWS IoT SiteWise
<a name="test-emqx-connection"></a>

Après avoir configuré votre broker EMQX avec des certificats TLS et des informations d'authentification, il est important de vérifier que votre configuration fonctionne correctement. Le test de la connexion permet de s'assurer que vos configurations de sécurité sont correctement mises en œuvre et que les clients peuvent établir avec succès des connexions chiffrées avec le courtier. Cette section explique comment tester votre connexion au courtier à l'aide du client d'interface de ligne de commande (CLI) Mosquitto, un outil client MQTT largement utilisé qui prend en charge le chiffrement et l'authentification TLS.

### Utiliser le client Mosquitto CLI pour tester la connexion du broker EMQX
<a name="test-emqx-connection-mosquitto"></a>

Au cours de cette étape, nous utiliserons le client CLI Mosquitto pour tester notre configuration et nous assurer que nous pouvons nous connecter avec succès au courtier en utilisant le nom d'utilisateur et le mot de passe que nous avons créés précédemment. Pour `BrokerCoreDeviceCA.pem` suivre les étapes décrites à l'étape 3 : Configuration du protocole TLS.

```
mosquitto_sub -h hostname|ip address \
    -p 8883 \
    -t "#" \
    -q 1 \
    -u username -P password \
    --cafile BrokerCoreDeviceCA.pem
```

**Note**  
Une erreur SSL:Verify peut s'afficher si l' hostname/IP adresse à laquelle vous vous connectez ne correspond pas au nom alternatif du sujet (SAN) figurant sur le certificat CA que vous transmettez au client. Reportez-vous à la section « Ajout d' names/IP adresses DNS personnalisées au certificat du serveur TLS » à l'étape 3 : Configuration du protocole TLS pour savoir comment obtenir un certificat avec le SAN approprié.

À ce stade, tous les utilisateurs peuvent publier et s'abonner à tous les sujets du courtier. Passez à [Configurer des règles d'autorisation pour AWS IoT SiteWise Edge dans EMQX](authorization-rules-emqx-broker.md).

## Utilisez votre propre CA
<a name="configure-tls-custom-ca"></a>

AWS IoT Greengrass explique comment configurer le composant d'authentification de votre appareil client pour utiliser votre propre autorité de certification (CA). Le composant d'authentification du dispositif client (`aws.greengrass.clientdevices.Auth`) authentifie les dispositifs clients et autorise les actions du dispositif client. Pour plus d'informations, consultez la section [Utilisation de votre propre autorité de certification](https://docs.aws.amazon.com/greengrass/v2/developerguide/connecting-to-mqtt.html#use-your-own-CA) dans le *Guide du AWS IoT Greengrass Version 2 développeur*.

Pour utiliser votre propre autorité de certification, ajoutez le `aws.greengrass.clientdevices.Auth` composant à votre déploiement afin de pouvoir spécifier une configuration personnalisée.

## Ouvrez le port 8883 pour les connexions de pare-feu externes
<a name="emqx-firewall"></a>

------
#### [ Linux ]

Dans la règle de pare-feu de votre hôte Linux, ajoutez une règle entrante pour le port 8883 afin d'autoriser les connexions entrantes provenant de l'extérieur de l'hôte de passerelle. Si des pare-feux sont en place, assurez-vous que les connexions TLS entrantes sur le port 8883 sont autorisées.

------
#### [ Windows ]

Dans la règle de pare-feu de votre Microsoft Windows hôte, ajoutez une règle entrante pour le port 8883 afin d'autoriser les connexions entrantes provenant de l'extérieur de l'hôte de la passerelle. Assurez-vous que la règle est une règle d'autorisation, de type port, spécifiant le port 8883. Vous pouvez le configurer en fonction de la configuration de votre réseau pour autoriser les connexions entre vos applications externes et le broker.

------

# Configurer des règles d'autorisation pour AWS IoT SiteWise Edge dans EMQX
<a name="authorization-rules-emqx-broker"></a>

EMQX prend en charge l'ajout de règles d'autorisation basées sur des identifiants tels que le nom d'utilisateur, l'adresse IP ou l'identifiant client. Cela est utile si vous souhaitez limiter le nombre d'applications externes se connectant à différentes opérations ou sujets.

**Topics**
+ [Configuration de l'autorisation à l'aide de la base de données intégrée sous Linux](add-auth-rules-database-emqx-broker-linux.md)
+ [Configuration de l'autorisation à l'aide de la base de données intégrée avec Windows](add-auth-rules-database-emqx-broker-windows.md)
+ [Mettre à jour la configuration de déploiement d'EMQX pour obtenir une autorisation](update-emqx-broker-authorization.md)
+ [Ajoutez des règles d'autorisation via le tableau de bord EMQX pour les utilisateurs](add-rules-emqx-broker.md)

# Configuration de l'autorisation à l'aide de la base de données intégrée sous Linux
<a name="add-auth-rules-database-emqx-broker-linux"></a>

Lorsque vous configurez des règles d'autorisation, il existe deux choix de configuration qui dépendent de la configuration de votre déploiement.
+ **Docker**— Si vous exécutez une Docker installation standard sansLitmus Edge, utilisez la configuration de la **passerelle Docker Bridge**. C'est généralement le cas lorsque vous n'avez déployé que AWS IoT SiteWise des composants.
+ **Litmus Edge**— Si vous l'avez Litmus Edge installé sur votre passerelle, utilisez la configuration du **Litmus Edgesous-réseau**.

**Note**  
Si vous configurez initialement la passerelle de Docker pont et que vous l'installez ultérieurementLitmus Edge, reconfigurez les règles d'autorisation à l'aide de l'option de Litmus Edge sous-réseau pour garantir une communication correcte entre tous les composants.

**Pour ajouter des règles d'autorisation de base**

1. Vérifiez que le broker EMQX est déployé et en cours d'exécution.

1. Démarrez une session shell sur votre hôte de passerelle.

------
#### [ Docker without Litmus Edge ]

   Pour une Docker installation standard sansLitmus Edge, exécutez :

   ```
   /greengrass/v2/bin/swe-emqx-cli acl init
   ```

------
#### [ Litmus Edge network subnet ]

   Si vous utilisezLitmus Edge, déterminez l'adresse IP du sous-réseau Litmus Edge :

   ```
   docker network inspect LitmusNetwork | grep IPAM -A9
   ```

   Notez la valeur du sous-réseau à partir de la sortie et exécutez la commande suivante. Remplacez `litmus_subnet_ip` par la valeur du sous-réseau de l'étape précédente.

   ```
   /greengrass/v2/bin/swe-emqx-cli acl init litmus_subnet_ip
   ```

------

   L'outil crée et applique automatiquement des règles d'autorisation pour autoriser les connexions entre l'adresse IP fournie et le courtier. Il permet d'accéder à tous les sujets. Cela inclut le collecteur IoT SiteWise OPC UA et l' SiteWise éditeur IoT.

1. Passez à [Mettre à jour la configuration de déploiement d'EMQX pour obtenir une autorisation](update-emqx-broker-authorization.md).

# Configuration de l'autorisation à l'aide de la base de données intégrée avec Windows
<a name="add-auth-rules-database-emqx-broker-windows"></a>

Cette section décrit la configuration des règles d'autorisation à l'aide de la base de données intégrée pour les déploiements Windows.

**Pour ajouter des règles d'autorisation de base**

1. Vérifiez que le broker EMQX est déployé et en cours d'exécution.

1. Exécutez l'outil AWS IoT SiteWise CLI EMQX : 

   ```
   C:\greengrass\v2\bin\swe-emqx-cli.ps1 acl init
   ```

   L'outil crée et applique automatiquement des règles ACL autorisant les connexions entre localhost (127.0.0.1) et le broker. Il permet d'accéder à tous les sujets. Cela inclut le collecteur IoT SiteWise OPC UA et l' SiteWise éditeur IoT.

1. Passez à [Mettre à jour la configuration de déploiement d'EMQX pour obtenir une autorisation](update-emqx-broker-authorization.md).

# Mettre à jour la configuration de déploiement d'EMQX pour obtenir une autorisation
<a name="update-emqx-broker-authorization"></a>

**Pour mettre à jour la configuration de déploiement d'EMQX à des fins d'autorisation**

1. <a name="sitewise-open-console"></a>Accédez à la [console AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/).

1. Dans le volet de navigation de gauche, choisissez **Edge gateway** dans la section **Edge**.

1. Choisissez la passerelle à configurer.

1. Dans la section **Configuration de la passerelle Edge**, copiez la valeur **principale de votre appareil Greengrass**. Conservez-le pour une utilisation ultérieure.

1. Ouvrez la [AWS IoT console](https://console.aws.amazon.com/iot/).

1. **Dans le menu de navigation de gauche, dans la section **Gérer**, choisissez **Greengrass devices**, puis Deployments.**

1. Recherchez la valeur principale de l'appareil que vous avez enregistrée précédemment et cliquez sur ce lien pour ouvrir le déploiement.

1. Cliquez sur le bouton déroulant **Actions**, puis sur **Réviser**.

1. Lisez le message qui s'affiche, puis choisissez **Revise le déploiement**. La page **Spécifier la cible** apparaît.

1. Choisissez **Next** jusqu'à ce que vous atteigniez l'étape **Configurer les composants**.

1. Sélectionnez le bouton `aws.greengrass.clientdevices.mqtt.EMQX` radio.

1. Cliquez sur le bouton **Configurer le composant**. Une page de configuration s'affiche pour le composant.

1. Sous **Mise à jour de la configuration**, choisissez **Rétablir la configuration par défaut pour la version du composant : 2.\$1. **\$1.

1. Collez le contenu suivant dans la section **Configuration pour fusionner** en fonction de votre système d'exploitation.

------
#### [ Linux ]

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "deny",
               "sources": [
                   {
                       "type": "built_in_database"
                   },
                   {
                       "type": "file",
                       "path": "data/authz/acl.conf"
                   }
               ]
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               },
               "ssl": {
                   "default": {
                       "enabled": true,
                       "enable_authn": true,
                       "ssl_options": {
                           "verify": "verify_none",
                           "fail_if_no_peer_cert": false
                       }
                   }
               }
           },
           "authentication": {
               "enable": true,
               "backend": "built_in_database",
               "mechanism": "password_based",
               "password_hash_algorithm": {
                   "iterations": 210000,
                   "mac_fun": "sha512",
                   "name": "pbkdf2"
               },
               "user_id_type": "username"
           },
           "dashboard": {
               "listeners": {
                   "http": {
                       "bind": 18083
                   }
               }
           }
       },
       "authMode": "bypass",
       "dockerOptions": "-p 8883:8883 -p 127.0.0.1:1883:1883 -p 127.0.0.1:18083:18083 -v emqx-data:/opt/emqx/data -e EMQX_NODE__NAME=emqx@local",
       "requiresPrivilege": "true"
   }
   ```

------
#### [ Windows ]

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "deny",
               "sources": [
                   {
                       "type": "built_in_database"
                   },
                   {
                       "type": "file",
                       "path": "C:\\greengrass\\v2\\work\\aws.greengrass.clientdevices.mqtt.EMQX\\v2\\data\\authz\\acl.conf"
                   }
               ]
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               },
               "ssl": {
                   "default": {
                       "enabled": true,
                       "enable_authn": true,
                       "ssl_options": {
                           "verify": "verify_none",
                           "fail_if_no_peer_cert": false
                       }
                   }
               }
           },
           "authentication": {
               "enable": true,
               "backend": "built_in_database",
               "mechanism": "password_based",
               "password_hash_algorithm": {
                   "iterations": 210000,
                   "mac_fun": "sha512",
                   "name": "pbkdf2"
               },
               "user_id_type": "username"
           },
           "dashboard": {
               "listeners": {
                   "http": {
                       "bind": 18083
                   }
               }
           }
       },
       "authMode": "bypass",
       "requiresPrivilege": "true"
   }
   ```

------

1. Choisissez **Confirmer**.

1. Choisissez **Next** jusqu'à ce que vous atteigniez l'étape de **révision**.

1. Choisissez **Déployer**.

**Note**  
À partir de ce moment, vous ne pouvez pas modifier le fichier ACL pour mettre à jour les règles d'autorisation. Vous pouvez également procéder [Ajoutez des règles d'autorisation via le tableau de bord EMQX pour les utilisateurs](add-rules-emqx-broker.md) après un déploiement réussi.

# Ajoutez des règles d'autorisation via le tableau de bord EMQX pour les utilisateurs
<a name="add-rules-emqx-broker"></a>

Vous pouvez ajouter ou mettre à jour des règles d'autorisation à l'aide du tableau de bord EMQX ou de l'outil AWS IoT SiteWise EMQX CLI. L'outil AWS IoT SiteWise EMQX CLI gère les autorisations à l'aide de la base de données intégrée d'EMQX.

**Note**  
L'ajout de règles d'autorisation est une étape de configuration avancée qui nécessite de comprendre les modèles de sujets MQTT et le contrôle d'accès. Pour plus d'informations sur la création de règles d'autorisation à l'aide de la base de données intégrée d'EMQX, consultez la section [Utiliser une base de données intégrée](https://docs.emqx.com/en/emqx/latest/access-control/authz/mnesia.html) dans la documentation *EMQX*.

**Note**  
Les instructions relatives à EMQX fournies sont fournies à titre de référence uniquement. Étant donné que la documentation et les fonctionnalités d'EMQX peuvent changer au fil du temps et que nous ne conservons pas leur documentation, nous vous recommandons de consulter la [documentation officielle d'EMQX](https://docs.emqx.com/en/emqx/latest/) pour obtenir les informations les plus récentes.

------
#### [ EMQX dashboard ]

Cette procédure montre comment ajouter des règles d'autorisation sur le tableau de bord EMQX.

Le tableau de bord EMQX n'est accessible que depuis l'hôte de la passerelle. Si vous essayez de vous connecter depuis l'extérieur de l'hôte de la passerelle, vous ne pouvez pas accéder au tableau de bord.

**Pour ajouter des règles d'autorisation à l'aide du tableau de bord EMQX**

1. Assurez-vous que vous vous trouvez dans l'hôte de la passerelle.

1. Ouvrez une fenêtre de navigateur et rendez-vous sur [http://localhost:18083/](http://localhost:18083/).

1. Connectez-vous au tableau de bord EMQX. Cette procédure suppose que vous avez remplacé vos informations de connexion par défaut par celles de votre choix. Pour plus d'informations sur la configuration initiale, consultez[Activer l'authentification par nom d'utilisateur et mot de passe](configure-emqx-broker.md#emqx-broker-username-password-auth).

1. Choisissez l'icône en forme de bouclier, puis **Autorisation** dans le menu déroulant.

1. Cliquez sur le bouton **Autorisations** sur la ligne de **base de données intégrée**. 

1. Dans la section Autorisation de base de données intégrée, ajoutez ou mettez à jour les règles d'autorisation utilisateur en fonction des besoins de votre entreprise. Pour plus d'informations sur la création de règles, consultez la section [Utiliser une base de données intégrée](https://docs.emqx.com/en/emqx/latest/access-control/authz/mnesia.html) dans la documentation *EMQX*.

------
#### [ AWS IoT SiteWise CLI tool using Linux ]

**Pour gérer les règles d'autorisation à l'aide de l'outil AWS IoT SiteWise CLI EMQX sous Linux :**
+ Ajoutez des règles d'autorisation pour un utilisateur en utilisant le format suivant :

  ```
  /greengrass/v2/bin/swe-emqx-cli auth add your-username your-action your-permission your-topic [your-action-permission-topic]
  ```

**Example Ajouter des règles d'autorisation pour un utilisateur**  
Cet exemple montre comment ajouter des règles pour un utilisateur nommé `system1` :  

```
/greengrass/v2/bin/swe-emqx-cli auth add system1 \
    publish allow "sensors/#" \
    subscribe allow "control/#" \
    all deny "#"
```

**Example : Afficher les règles d'autorisation d'un utilisateur**  
Pour consulter les règles d'autorisation des `system1` utilisateurs, exécutez la commande suivante :  

```
/greengrass/v2/bin/swe-emqx-cli auth list system1
```

**Example : Afficher toutes les règles d'autorisation existantes**  
Pour afficher toutes les règles d'autorisation dont vous disposez actuellement, exécutez la commande suivante :  

```
/greengrass/v2/bin/swe-emqx-cli auth list
```

**Example : Supprimer toutes les règles d'autorisation pour un utilisateur**  
Pour supprimer toutes les règles d'autorisation appliquées à un utilisateur en particulier, exécutez la commande suivante :  

```
/greengrass/v2/bin/swe-emqx-cli auth delete system1
```
Vous êtes invité à confirmer la suppression.

------
#### [ AWS IoT SiteWise CLI tool using Windows ]

**Pour gérer les règles d'autorisation à l'aide de l'outil AWS IoT SiteWise CLI EMQX dans : Windows PowerShell**
+ Ajoutez des règles d'autorisation pour un utilisateur en utilisant le format suivant :

  ```
  C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth add your-username your-action your-permission your-topic [your-action-permission-topic]
  ```

**Example : Ajouter des règles d'autorisation pour un utilisateur**  
Cet exemple montre comment ajouter des règles pour un utilisateur nommé `system1` :  

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth add system1 `
    publish allow "sensors/#" `
    subscribe allow "control/#" `
    all deny "#"
```

**Example : Afficher les règles d'autorisation d'un utilisateur**  
Pour consulter les règles d'autorisation des `system1` utilisateurs, exécutez la commande suivante :  

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth list system1
```

**Example : Afficher toutes les règles d'autorisation existantes**  
Pour afficher toutes les règles d'autorisation dont vous disposez actuellement, exécutez la commande suivante :  

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth list
```

**Example : Supprimer toutes les règles d'autorisation pour un utilisateur**  
Pour supprimer toutes les règles d'autorisation appliquées à un utilisateur en particulier, exécutez la commande suivante :  

```
C:\greengrass\v2\bin\swe-emqx-cli.ps1 auth delete system1
```
Vous êtes invité à confirmer la suppression.

------

# Traitez et visualisez les données avec SiteWise Edge et les outils open source
<a name="open-source-edge-integrations"></a>

Configurez les passerelles AWS IoT SiteWise Edge compatibles MQTT avec des outils open source pour le traitement et la visualisation locaux afin d'améliorer vos capacités de gestion des données industrielles.

Avec SiteWise Edge, vous pouvez créer un pipeline de traitement de données local à l'aide d'outils open source externes. [Utilisez [Node-RED®](https://nodered.org/) pour stocker des données de séries chronologiques avec [InfluxDB® et surveiller les opérations via les tableaux de bord Grafana®](https://www.influxdata.com/lp/influxdb-database/).](https://grafana.com/)

Node-RED traite et transforme vos flux de données, tandis qu'InfluxDB fournit un stockage de données chronologiques. Grafana affiche vos données opérationnelles en temps réel. Utilisez ces outils avec SiteWise Edge pour synchroniser les données entre votre environnement local et le AWS Cloud, en vous fournissant à la fois des informations locales immédiates et des capacités d'analyse basées sur le cloud à long terme.

**Note**  
Node-RED®, InfluxDB® et Grafana® ne sont ni des fournisseurs ni des fournisseurs d'Edge. SiteWise 

![\[Schéma illustrant quelques sources de données et le simulateur de turbine se connectant à l'EMQX Broker à publier. Ensuite, le broker EMQX s'abonne à la AWS IoT SiteWise passerelle et à Node-RED. Node-RED alimente InfluxDB, puis Influx DB alimente le tableau de bord Grafana.\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/images/gateway-open-source-overview.png)


**Note**  
Dans ce guide, nous utilisons la version open source de [Grafana](https://grafana.com/) SiteWise for Edge par opposition au service [Amazon Managed Grafana](https://docs.aws.amazon.com/grafana/latest/userguide/what-is-Amazon-Managed-Service-Grafana.html).

## Options de déploiement
<a name="deployment-options"></a>

Vous pouvez déployer cette solution en utilisant l'une des deux approches suivantes. Avec une configuration Microsoft Windows manuelle, vous contrôlez la configuration des composants et leur intégration à votre infrastructure. AvecLinux, vous pouvez utiliser Docker pour déployer des composants préconfigurés dans des conteneurs.

Choisissez la méthode qui répond à vos exigences opérationnelles.
+ [Configuration manuelle des intégrations open source (Windows)](windows-manual-setup.md)— Pour les configurations personnalisées ou l'infrastructure existante
+ [Configurer des intégrations open source avec Docker (Linux)](linux-docker-setup.md)— Pour un déploiement rapide avec des composants préconfigurés

## Aperçu d'un exemple de parc éolien
<a name="open-source-example-overview"></a>

Ce guide utilise un exemple de parc éolien pour montrer comment surveiller la vitesse du vent pour une éolienne installée sur un parc éolien. Ce scénario pratique illustre les besoins courants de surveillance industrielle pour lesquels la visibilité locale et basée sur le cloud est précieuse pour l'efficacité opérationnelle.

Grâce à cette intégration, vous pouvez :
+ Collectez des données provenant d'équipements industriels à l'aide d'une passerelle AWS IoT SiteWise Edge
+ Traitez les données localement avec Node-RED, InfluxDB et Grafana
+ Stockez les données localement à l'aide d'InfluxDB
+ Surveillez les données en temps réel à l'aide des tableaux de bord Grafana

Tout au long de ce guide, nous prenons l'exemple d'un parc éolien. Nous utilisons Node-RED pour simuler une turbine qui génère des données sur la vitesse du vent. Node-RED traduit la charge utile des données, publie les données sur le broker SiteWise Edge MQTT, s'abonne pour recevoir des données du courtier et stocke les données localement dans InfluxDB. Cette approche garantit que toutes les données opérationnelles sont disponibles à la fois localement pour un accès immédiat et dans le cloud pour des analyses supplémentaires. En mettant en œuvre ce modèle, vous gagnez en résilience face aux perturbations du réseau tout en conservant la capacité d'effectuer des analyses avancées dans le AWS Cloud. Grafana se connecte à InfluxDB pour une surveillance locale, offrant aux opérateurs une visibilité en temps réel sur les métriques sans dépendance au cloud. Une passerelle SiteWise Edge compatible MQTT se connecte au même courtier MQTT auquel envoyer des données AWS IoT SiteWise, créant ainsi un pont entre vos opérations de périphérie et les services basés sur le cloud.

Vous pouvez utiliser vos propres données et configurations pour créer un flux de travail similaire adapté à vos exigences industrielles spécifiques, que vous surveilliez des équipements de fabrication, des infrastructures utilitaires ou d'autres actifs industriels.

## Exigences relatives aux intégrations open source
<a name="open-source-requirements"></a>

Avant de mettre en œuvre des intégrations open source avec SiteWise Edge, assurez-vous que votre environnement répond aux exigences requises.
+ **Configuration matérielle requise** : le matériel de votre passerelle doit répondre aux exigences des passerelles SiteWise Edge. Pour plus d'informations, voir [AWS IoT SiteWise Exigences relatives à la passerelle auto-hébergée Edge](configure-gateway-ggv2.md) pour les passerelles MQTT compatibles avec MQTT, les passerelles V3 et. [Exigences relatives à l'application AWS IoT SiteWise Edge](siemens-app-gateway-requirements.md)
**Important**  
[Lorsque vous déployez des composants open source supplémentaires, assurez-vous que votre matériel répond aux exigences d'[InfluxDB](https://docs.influxdata.com/influxdb/v2/install/), [Node-RED](https://nodered.org/docs/getting-started/) et Grafana.](https://grafana.com/docs/grafana/latest/setup-grafana/installation/)
+ La configuration de votre réseau doit prendre en charge à la fois la communication locale entre les composants et la connectivité cloud pour SiteWise Edge.
+ Tous les services doivent être exécutés sur le même hôte.

## Considérations sur la sécurité
<a name="open-source-security-considerations"></a>

Nous vous recommandons de chiffrer toutes les communications entre les composants, en particulier lorsque vous accédez à des interfaces depuis des réseaux non locaux. Mettez en œuvre des contrôles d'accès appropriés pour chaque composant et suivez les AWS meilleures pratiques en matière de configuration de la passerelle AWS IoT SiteWise Edge et de sécurité des AWS comptes.

**Environnement de développement**  
Ce guide montre que Node-RED, InfluxDB et Grafana s'exécutent et sont accessibles localement sur un hôte de passerelle. Pour les déploiements de production nécessitant un accès externe, mettez en œuvre des mesures de sécurité, notamment le chiffrement, l'authentification et l'autorisation TLS. Respectez les meilleures pratiques de sécurité de chaque application.

**Logiciels tiers**  
Cette solution utilise des logiciels tiers non gérés par AWS, notamment InfluxDB, Node-RED, Grafana et le plugin. `node-red-contrib-influxdb` Avant le déploiement, assurez-vous que ces composants sont conformes aux exigences de sécurité, aux normes de conformité et aux politiques de gouvernance de votre entreprise.

**Important**  
Ce guide fait référence à des logiciels tiers qui ne sont ni détenus ni gérés par AWS. Avant la mise en œuvre, assurez-vous que tous les composants répondent à vos exigences en matière de sécurité, de conformité et de gouvernance. Maintenez tous les logiciels à jour avec les derniers correctifs de sécurité et suivez les meilleures pratiques pour sécuriser votre déploiement en périphérie.  
 InfluxDB, Node-red, Grafana ne sont ni des fournisseurs ni des fournisseurs d'Edge. SiteWise 

## Autres considérations
<a name="open-source-other-considerations"></a>

Tenez compte de ces facteurs supplémentaires lors de la mise en œuvre d'intégrations open source avec SiteWise Edge.
+ Utilisez les dernières versions de tous les services, outils et composants.
+ Filtrez et agrégez les données localement avant leur transmission dans le cloud afin de réduire les coûts d'ingestion de AWS IoT SiteWise données. Configurez les périodes de conservation des données appropriées dans InfluxDB et dimensionnez correctement votre matériel de passerelle. Pour en savoir plus, consultez [Pricing AWS IoT SiteWise](https://aws.amazon.com/iot-sitewise/pricing/) (Tarification).
+ Mettez en œuvre des procédures de sauvegarde régulières pour toutes les données.
+ Surveillez l'utilisation des ressources sur votre passerelle et configurez les limites de ressources appropriées pour chaque composant. Mettez en œuvre des politiques de conservation des données dans InfluxDB pour gérer l'utilisation du disque.

# Configuration manuelle des intégrations open source (Windows)
<a name="windows-manual-setup"></a>

Utilisez ce guide pour créer manuellement un seau de séries chronologiques pour les données de vitesse du vent qui se connecte à Grafana® et à Node-RED®.

 Installez et configurez manuellement Node-RED, InfluxDB® et Grafana pour contrôler la configuration de votre déploiement. Microsoft Windows Vous pouvez stocker et gérer les données de séries chronologiques de vos appareils à l'aide d'InfluxDB.

## Prérequis de configuration manuelle
<a name="windows-open-source-prerequisites"></a>

Avant de commencer, remplissez les conditions suivantes :

**Note**  
Exécutez tous les services (SiteWise Edge, InfluxDB, Node-red et Grafana) sur le même hôte.
+ Installez une passerelle V3 compatible MQTT. Pour de plus amples informations, veuillez consulter [Passerelles V3 compatibles MQTT pour Edge AWS IoT SiteWise](mqtt-enabled-v3-gateway.md).
+ Installez et exécutez ces services localement :
  + InfluxDB OSS v2. Pour les étapes d'installation, voir [Installer InfluxDB](https://docs.influxdata.com/influxdb/v2/install/).
  + Nœud rouge. Pour les étapes d'installation, voir [Installer Node-RED localement.](https://nodered.org/docs/getting-started/local)
  + Grafana. Pour les étapes d'installation, voir [Installer Grafana](https://grafana.com/docs/grafana/latest/setup-grafana/installation/).

# Configurer le stockage local avec InfluxDB
<a name="windows-influxdb-setup"></a>

Avec InfluxDB®, vous pouvez stocker des données de séries chronologiques à partir de vos appareils localement. L'objectif de la capacité de stockage local est de maintenir la visibilité opérationnelle en cas de perturbation du réseau et de réduire le temps de latence pour les applications critiques. Vous pouvez effectuer des analyses et des visualisations à la périphérie tout en ayant la possibilité de transférer les données de manière sélective vers le cloud.

Dans cette section, vous allez créer un bucket de séries chronologiques pour les données de vitesse du vent des éoliennes et générer un jeton d'API pour la connectivité Grafana® et Node-RED®. Le bucket InfluxDB sert de conteneur de stockage dédié pour vos données de séries chronologiques, comme une base de données dans les systèmes traditionnels. Le jeton API permet un accès programmatique sécurisé à vos données.

**Pour configurer InfluxDB**

1. Après avoir effectué les étapes préalables et vérifié que tous les outils s'exécutent sur le même hôte, ouvrez votre navigateur Web et accédez à [http://127.0.0.1:8086](http://127.0.0.1:8086).

1. (Facultatif) Activez le chiffrement TLS pour améliorer la sécurité. Pour plus d'informations, voir [Activer le chiffrement TLS](https://docs.influxdata.com/influxdb/v2/admin/security/enable-tls/) dans le *InfluxData Documentation*.

1. Créez un bucket InfluxDB de série chronologique pour stocker les données de Node-RED. Le bucket servira de conteneur dédié aux données de votre parc éolien, ce qui vous permettra d'organiser et de gérer les politiques de rétention spécifiques à cet ensemble de données. Pour plus d'informations, consultez la section [Gérer les compartiments](https://docs.influxdata.com/influxdb/v2/admin/buckets/) dans le *InfluxData Documentation*.

1. (Facultatif) Configurez la période de conservation des données pour votre emplacement périphérique. La définition de périodes de conservation appropriées permet de gérer efficacement les ressources de stockage en supprimant automatiquement les anciennes données qui ne sont plus nécessaires aux opérations locales.

   Pour plus d'informations sur la conservation des données, voir [Conservation des données dans InfluxDB](https://docs.influxdata.com/influxdb/v2/reference/internals/data-retention/) dans le. *InfluxData Documentation*

1. Générez un jeton d'API pour le bucket. Ce jeton permettra une communication sécurisée entre InfluxDB et d'autres composants tels que Node-RED et Grafana. Ainsi, seuls les services autorisés peuvent lire ou écrire dans votre magasin de données. Pour plus d'informations, consultez la section [Créer un jeton](https://docs.influxdata.com/influxdb/cloud/admin/tokens/create-token/) dans le *InfluxData Documentation*.

Une fois ces étapes terminées, vous pouvez stocker les données de séries chronologiques dans votre instance InfluxDB, fournissant ainsi une base pour la persistance et l'analyse des données locales dans votre environnement périphérique.

# Configurer les flux Node-RED pour AWS IoT SiteWise l'intégration des données
<a name="windows-nodered-config"></a>

Avec Node-RED®, vous pouvez implémenter deux flux pour gérer les données entre vos appareils et. AWS IoT SiteWise Ces flux fonctionnent ensemble pour créer une solution complète de gestion des données qui gère à la fois les flux de données locaux et cloud.
+ **Flux de publication des données** : publie dans le cloud. Le flux de publication des données envoie des données à AWS IoT SiteWise. Ce flux simule un dispositif de turbine en générant des données de capteur, en les traduisant au AWS IoT SiteWise format et en les publiant sur le broker SiteWise Edge MQTT. Cela vous permet de tirer parti des capacités AWS IoT SiteWise du cloud pour le stockage, l'analyse et l'intégration avec d'autres AWS services.

  Pour de plus amples informations, veuillez consulter [Configuration du flux de publication des données](windows-nodered-data-publish-flow.md).
+ **Flux de rétention des données** — Stocke les données à la périphérie. Le flux de rétention des données s'abonne au broker SiteWise Edge MQTT pour recevoir les données, les traduire au format InfluxDB® et les stocker localement à des fins de surveillance. Ce stockage local fournit un accès immédiat aux données opérationnelles, réduit le temps de latence pour les applications critiques et garantit la continuité en cas de perturbation du réseau.

  Pour de plus amples informations, veuillez consulter [Configuration du flux de conservation des données](windows-nodered-data-retention-flow.md).

Ces deux flux fonctionnent ensemble pour garantir que les données sont à la fois envoyées AWS IoT SiteWise et stockées localement pour un accès immédiat.

[Pour accéder à votre console Node-RED, rendez-vous sur http://127.0.0.1:1880.](http://127.0.0.1:1880) Pour plus d'informations sur l'activation du protocole TLS, consultez la section [Activer le chiffrement TLS.](https://docs.influxdata.com/influxdb/v2/admin/security/enable-tls/)

# Configuration du flux de publication des données
<a name="windows-nodered-data-publish-flow"></a>

Le flux de publication des données utilise trois nœuds pour créer un pipeline qui envoie vos données industrielles vers le cloud. Ce flux est essentiel pour permettre l'analyse basée sur le cloud, le stockage à long terme et l'intégration avec d'autres AWS services. Tout d'abord, les données de l'appareil simulé sont envoyées au broker SiteWise Edge MQTT. La passerelle récupère les données auprès du courtier, ce qui permet de les transmettre au AWS IoT SiteWise cloud, où vous pouvez tirer parti de puissantes fonctionnalités d'analyse et de visualisation.
+ **Entrée de données** - Reçoit les données de l'appareil à partir de votre équipement industriel ou de vos simulateurs
+ **Traducteur de données pour AWS IoT SiteWise** : traduit les données au AWS IoT SiteWise format pour garantir la compatibilité avec la passerelle SiteWise Edge
+ **Éditeur MQTT** : publie les données sur le courtier SiteWise Edge MQTT, les mettant à la disposition des consommateurs locaux et du cloud

![\[Schéma illustrant le flux de publication de données Node-RED. Il envoie les données de l'appareil simulées au courtier SiteWise Edge MQTT pour qu'elles soient récupérées par SiteWise Edge Gateway, puis sur le AWS IoT SiteWise cloud.\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-publish-flow.png)


## Configuration du nœud de saisie de données
<a name="windows-nodered-data-input-config"></a>

Dans cet exemple, le nœud de saisie de données utilise un dispositif d'éolienne simulé qui génère des données sur la vitesse du vent. Ce nœud sert de point d'entrée pour vos données industrielles, qu'elles proviennent de sources simulées (comme dans notre exemple) ou d'équipements industriels réels dans des environnements de production.

Nous utilisons un format JSON personnalisé pour la charge utile des données afin de fournir une structure standardisée qui fonctionne efficacement avec les outils de traitement locaux et le service AWS IoT SiteWise cloud. Ce format inclut des métadonnées essentielles telles que les horodatages et les indicateurs de qualité, ainsi que les valeurs de mesure réelles, permettant une gestion complète des données et un suivi de la qualité tout au long de votre pipeline. Importez le nœud d'injection pour recevoir des données simulées dans ce format JSON standardisé avec des horodatages, des indicateurs de qualité et des valeurs.

*Pour plus d'informations sur le nœud d'injection Node-RED, consultez la section [Inject](https://nodered.org/docs/user-guide/nodes#inject) de la Node-RED documentation.*

Le simulateur de turbine génère des données sur la vitesse du vent chaque seconde dans ce format JSON standardisé :

**Example : Charge utile de données sur les turbines**  

```
{
    name: string,         // Property name/identifier
    timestamp: number,    // Epoch time in nanoseconds
    quality: "GOOD" | "UNCERTAIN" | "BAD",
    value: number | string | boolean
}
```

Ce format présente plusieurs avantages :
+ Le `name` champ identifie la propriété ou la mesure spécifique, ce qui vous permet de suivre plusieurs points de données à partir du même appareil
+ La valeur `timestamp` en nanosecondes garantit un suivi précis du temps pour une analyse historique précise
+ L'`quality`indicateur vous aide à filtrer et à gérer les données en fonction de leur fiabilité
+ Le `value` champ flexible prend en charge différents types de données pour s'adapter aux différentes sorties de capteurs

**Example : Nœud d'injection d'un simulateur de turbine**  

```
[
    {
        "id": "string",
        "type": "inject",
        "z": "string",
        "name": "Turbine Simulator",
        "props": [
            {
                "p": "payload.timestamp",
                "v": "",
                "vt": "date"
            },
            {
                "p": "payload.quality",
                "v": "GOOD",
                "vt": "str"
            },
            {
                "p": "payload.value",
                "v": "$random()",
                "vt": "jsonata"
            },
            {
                "p": "payload.name",
                "v": "/Renton/WindFarm/Turbine/WindSpeed",
                "vt": "str"
            }
        ],
        "repeat": "1",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "x": 270,
        "y": 200,
        "wires": [
            [
                "string"
            ]
        ]
    }
]
```

## Configuration d'un nœud pour la traduction des données
<a name="windows-nodered-sitewiseise-translator-config"></a>

La passerelle SiteWise Edge nécessite des données dans un format spécifique pour garantir la compatibilité avec AWS IoT SiteWise le cloud. Le nœud de traduction est un composant important qui convertit vos données d'entrée au format de AWS IoT SiteWise charge utile requis. Cette étape de traduction garantit que vos données industrielles peuvent être correctement traitées, stockées et analysées ultérieurement dans l'environnement AWS IoT SiteWise cloud.

En normalisant le format des données à ce stade, vous permettez l'intégration entre vos appareils périphériques et le service cloud, où vous pouvez utiliser les fonctionnalités de modélisation, d'analyse et de visualisation des actifs. Utilisez cette structure :

**Example : Structure de charge utile pour l'analyse des données SiteWise Edge**  

```
{
  "propertyAlias": "string",  
  "propertyValues": [
    {
      "value": { 
          "booleanValue": boolean, 
          "doubleValue": number, 
          "integerValue": number,
          "stringValue": "string" 
     },
      "timestamp": {
          "timeInSeconds": number,
          "offsetInNanos": number
      },
      "quality": "GOOD" | "UNCERTAIN" | "BAD",
  }]
}
```

**Note**  
Faites correspondre le `propertyAlias` à votre hiérarchie de sujets MQTT (par exemple,`/Renton/WindFarm/Turbine/WindSpeed`). Cela garantit que vos données sont correctement associées à la propriété d'actif appropriée dans AWS IoT SiteWise. Pour plus d'informations, consultez le concept « Alias de flux de données » dans[AWS IoT SiteWise concepts](concept-overview.md). 

1. Importez le nœud de fonction d'exemple pour la traduction de AWS IoT SiteWise la charge utile. Cette fonction gère la conversion de votre format d'entrée standardisé vers un format AWS IoT SiteWise compatible, garantissant ainsi un formatage d'horodatage, des indicateurs de qualité et une saisie de valeur appropriés.

   ```
   [
       {
           "id": "string",
           "type": "function",
           "z": "string",
           "name": "Translate to SiteWise payload",
           "func": "let input = msg.payload;\nlet output = {};\n\noutput[\"propertyAlias\"] = input.name;\n\nlet propertyVal = {}\n\nlet timeInSeconds = Math.floor(input.timestamp / 1000);\nlet offsetInNanos = (input.timestamp % 1000) * 1000000;\n\npropertyVal[\"timestamp\"] = {\n    \"timeInSeconds\": timeInSeconds,\n    \"offsetInNanos\": offsetInNanos,\n};\n\npropertyVal[\"quality\"] = input.quality\n\nlet typeNameConverter = {\n    \"number\": (x) => Number.isInteger(x) ? \"integerValue\" : \"doubleValue\",\n    \"boolean\": (x) => \"booleanValue\",\n    \"string\": (x) => \"stringValue\", \n}\nlet typeName = typeNameConverter[typeof input.value](input.value)\npropertyVal[\"value\"] = {}\npropertyVal[\"value\"][typeName] = input.value;\n\noutput[\"propertyValues\"] = [propertyVal]\n\nreturn {\n    payload: JSON.stringify(output)\n};",
           "outputs": 1,
           "timeout": "",
           "noerr": 0,
           "initialize": "",
           "finalize": "",
           "libs": [],
           "x": 530,
           "y": 200,
           "wires": [
               [
                   "string"
               ]
           ]
       }
   ]
   ```

1. Vérifiez que le JavaScript code traduit correctement les données de vitesse du vent. La fonction exécute plusieurs tâches importantes :
   + Extrait le nom de la propriété de l'entrée et le définit comme PropertyAlias
   + Convertit l'horodatage en millisecondes au format requis en secondes et nanosecondes
   + Préserve l'indicateur de qualité pour le suivi de la fiabilité des données
   + Détecte automatiquement le type de valeur et le formate en fonction des AWS IoT SiteWise besoins

1. Connectez le nœud à votre flux, en le liant entre le nœud d'entrée de données et l'éditeur MQTT.

Pour obtenir des conseils sur la rédaction d'une fonction spécifique aux besoins de votre entreprise, consultez la section [Fonctions d'écriture](https://nodered.org/docs/user-guide/writing-functions) dans la *Node-REDdocumentation*

## Configuration de l'éditeur MQTT
<a name="windows-nodered-mqtt-publisher-config"></a>

Après la traduction, les données sont prêtes à être publiées sur le broker SiteWise Edge MQTT.

Configurez l'éditeur MQTT avec les paramètres suivants pour envoyer des données au courtier SiteWise Edge MQTT :

**Pour importer le nœud MQTT sortant**

1. Importez un nœud de configuration MQTT en utilisant`"type": "mqtt out"`. Les nœuds de sortie MQTT vous permettent de partager la configuration d'un broker.

1. Entrez des paires clé-valeur pour les informations relatives à la connexion au courtier MQTT et au routage des messages.

Importez le `mqtt out` nœud d'exemple.

**Example**  

```
[
    {
        "id": "string",
        "type": "mqtt out",
        "z": "string",
        "name": "Publish to MQTT broker",
        "topic": "/Renton/WindFarm/Turbine/WindSpeed",
        "qos": "1",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "string",
        "x": 830,
        "y": 200,
        "wires": []
    },
    {
        "id": "string",
        "type": "mqtt-broker",
        "name": "emqx",
        "broker": "127.0.0.1",
        "port": "1883",
        "clientid": "",
        "autoConnect": true,
        "usetls": false,
        "protocolVersion": "5",
        "keepalive": 15,
        "cleansession": true,
        "autoUnsubscribe": true,
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": "",
        "birthMsg": {},
        "closeTopic": "",
        "closePayload": "",
        "closeMsg": {},
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "willMsg": {},
        "userProps": "",
        "sessionExpiry": ""
    }
]
```

L'exemple de nœud de sortie MQTT crée la connexion MQTT avec les informations suivantes :
+ Serveur : `127.0.0.1`
+ Port : `1883`
+ Protocole : `MQTT V5`

Le nœud de sortie MQTT configure ensuite le routage des messages avec les informations suivantes :
+ Sujet: `/Renton/WindFarm/Turbine/WindSpeed`
+ QoS : `1`

## Déployer et vérifier les nœuds
<a name="windows-verify-deployment"></a>

Après avoir configuré les trois nœuds du flux de publication des données, procédez comme suit pour déployer le flux et vérifier que les données sont correctement transmises à AWS IoT SiteWise

**Pour déployer et vérifier les connexions**

1. Connectez les trois nœuds comme indiqué dans le flux de publication des données.  
![\[Data publish flow diagram showing input from turbine simulator to AWS IoT SiteWise to MQTT broker.\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-publish-flow.png)

1. Choisissez **Déployer** pour appliquer toutes les modifications de connexion aux nœuds.

1. Accédez à la [AWS IoT SiteWise console](https://console.aws.amazon.com/iotsitewise/) et choisissez **Data streams**.

1. Assurez-vous que le **préfixe Alias** est sélectionné dans le menu déroulant. Recherchez ensuite l'`/Renton/WindFarm/Turbine/WindSpeed`alias.

Si vous voyez le bon alias dans votre recherche, cela signifie que vous avez déployé le flux et vérifié la transmission des données.

# Configuration du flux de conservation des données
<a name="windows-nodered-data-retention-flow"></a>

Le flux de rétention des données peut être utilisé pour maintenir la visibilité opérationnelle à la périphérie. Cela est utile lors de perturbations du réseau ou lorsque vous avez besoin d'un accès immédiat à vos données. Ce flux s'abonne au broker MQTT pour recevoir les données de l'appareil, les convertit au format InfluxDB® et les stocke localement. En mettant en œuvre ce flux, vous créez un magasin de données local résilient auquel les opérateurs peuvent accéder sans dépendre du cloud, ce qui permet une surveillance en temps réel et une prise de décision à la périphérie.

Le flux se compose de trois éléments clés qui fonctionnent ensemble pour garantir que vos données sont correctement capturées et stockées :
+ **Client d'abonnement MQTT** - Reçoit les données du courtier, ce qui vous permet de capturer toutes les données industrielles pertinentes
+ **Translateur InfluxDB** - Convertit la AWS IoT SiteWise charge utile au format InfluxDB, préparant les données pour un stockage efficace des séries chronologiques
+ **Rédacteur InfluxDB** - Gère le stockage local, garantissant la persistance et la disponibilité des données pour les applications locales

![\[Flux de conservation des données Node-Red\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-data-retention.png)


## Configuration du client d'abonnement MQTT
<a name="windows-nodered-mqtt-subscriber"></a>
+ Configurez le client d'abonnement MQTT dans Node-RED pour recevoir les données du courtier MQTT EMQX en AWS IoT SiteWise important l'exemple ci-dessous.  
**Example : MQTT dans le nœud**  

  ```
  [
      {
          "id": "string",
          "type": "mqtt in",
          "z": "string",
          "name": "Subscribe to MQTT broker",
          "topic": "/Renton/WindFarm/Turbine/WindSpeed",
          "qos": "1",
          "datatype": "auto-detect",
          "broker": "string",
          "nl": false,
          "rap": true,
          "rh": 0,
          "inputs": 0,
          "x": 290,
          "y": 340,
          "wires": [
              [
                  "string"
              ]
          ]
      },
      {
          "id": "string",
          "type": "mqtt-broker",
          "name": "emqx",
          "broker": "127.0.0.1",
          "port": "1883",
          "clientid": "",
          "autoConnect": true,
          "usetls": false,
          "protocolVersion": "5",
          "keepalive": 15,
          "cleansession": true,
          "autoUnsubscribe": true,
          "birthTopic": "",
          "birthQos": "0",
          "birthPayload": "",
          "birthMsg": {},
          "closeTopic": "",
          "closePayload": "",
          "closeMsg": {},
          "willTopic": "",
          "willQos": "0",
          "willPayload": "",
          "willMsg": {},
          "userProps": "",
          "sessionExpiry": ""
      }
  ]
  ```

Cet abonnement garantit que toutes les données pertinentes publiées auprès du courtier sont capturées pour un stockage local, fournissant ainsi un enregistrement complet de vos opérations industrielles. Le nœud utilise les mêmes paramètres de connexion MQTT que la [Configuration de l'éditeur MQTT](windows-nodered-data-publish-flow.md#windows-nodered-mqtt-publisher-config) section, avec les paramètres d'abonnement suivants :
+ Sujet — `/Renton/WindFarm/Turbine/WindSpeed`
+ QoS — `1`

Pour plus d'informations, consultez la section [Connect to an MQTT Broker](https://cookbook.nodered.org/mqtt/connect-to-broker) dans la *Node-REDdocumentation*.

## Configurer le traducteur InfluxDB
<a name="windows-nodered-influxdb-translator"></a>

InfluxDB organise les données à l'aide de [balises](https://docs.influxdata.com/influxdb/v1/concepts/glossary/#tag) pour l'indexation et de [champs](https://docs.influxdata.com/influxdb/v1/concepts/glossary/#field) pour les valeurs. Cette organisation optimise les performances des requêtes et l'efficacité du stockage des données chronologiques. Importez l'exemple de nœud de fonction qui contient le JavaScript code pour convertir la AWS IoT SiteWise charge utile au format InfluxDB. Le traducteur divise les propriétés en deux groupes :
+ Tags — Propriétés de qualité et de nom pour une indexation efficace
+ Champs — Horodatage (en millisecondes depuis l'époque) et valeur

**Example : Nœud de fonction permettant de traduire en une charge utile InfluxDB**  

```
[
    {
        "id": "string",
        "type": "function",
        "z": "string",
        "name": "Translate to InfluxDB payload",
        "func": "let data = msg.payload;\n\nlet timeInSeconds = data.propertyValues[0].timestamp.timeInSeconds;\nlet offsetInNanos = data.propertyValues[0].timestamp.offsetInNanos;\nlet timestampInMilliseconds = (timeInSeconds * 1000) + (offsetInNanos / 1000000);\n\nmsg.payload = [\n    {\n        \"timestamp(milliseconds_since_epoch)\": timestampInMilliseconds,\n        \"value\": data.propertyValues[0].value.doubleValue\n    },\n    {\n        \"name\": data.propertyAlias,\n        \"quality\": data.propertyValues[0].quality\n    }\n]\n\nreturn msg",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 560,
        "y": 340,
        "wires": [
            [
                "string"
            ]
        ]
    }
]
```

Pour des options de configuration supplémentaires, consultez [node-red-contrib-influxdb](https://github.com/mblackstock/node-red-contrib-influxdb)le référentiel Node-RED. GitHub 

## Configurer le rédacteur InfluxDB
<a name="windows-nodered-influxdb-writer"></a>

Le nœud d'écriture InfluxDB est le dernier composant de votre flux de rétention de données, chargé de stocker vos données industrielles dans la base de données InfluxDB locale. Ce stockage local est important pour maintenir la visibilité opérationnelle en cas de perturbation du réseau et pour fournir un accès immédiat aux données pour les applications critiques.

1. Installez le node-red-contrib-influxdb package via l'option Gérer la palette. Ce paquet fournit les nœuds nécessaires pour connecter Node-RED à InfluxDB.

1. Ajoutez un nœud de sortie InfluxDB à votre flux. Ce nœud gérera l'écriture réelle des données dans votre base de données InfluxDB.

1. Configurez les propriétés du serveur pour établir une connexion sécurisée à votre instance InfluxDB :

   1. Définir la version sur 2.0 - Cela indique que vous vous connectez à InfluxDB v2.x, qui utilise une API différente de celle des versions précédentes

   1. Définissez l'URL sur `http://127.0.0.1:8086` - Cela pointe vers votre instance InfluxDB locale

   1. Entrez votre jeton d'authentification InfluxDB. Ce jeton sécurisé autorise la connexion à votre base de données. Vous avez généré le jeton au cours de la [Configurer le stockage local avec InfluxDB](windows-influxdb-setup.md) procédure.

1. Spécifiez les paramètres de l'emplacement de stockage pour définir où et comment vos données seront stockées :

   1. Entrez le nom de votre organisation InfluxDB — L'organisation est un espace de travail pour un groupe d'utilisateurs, auquel appartiennent vos buckets et tableaux de bord. Pour plus d'informations, voir [Gérer les organisations](https://docs.influxdata.com/influxdb/v2/admin/organizations/) dans le *InfluxData Documentation*.

   1. Spécifiez le bucket InfluxDB (par exemple,`WindFarmData`) — Le bucket est équivalent à une base de données dans les systèmes traditionnels, servant de conteneur pour vos données de séries chronologiques

   1. Définir la mesure InfluxDB (par exemple,`TurbineData`) — La mesure est similaire à une table dans les bases de données relationnelles, organisant les points de données associés

**Note**  
Trouvez le nom de votre organisation dans la barre latérale gauche de l'instance InfluxDB. Les concepts d'organisation, de compartiment et de mesure sont fondamentaux pour le modèle d'organisation des données d'InfluxDB. Pour plus d'informations, consultez la documentation [InfluxDB.](https://docs.influxdata.com/influxdb/v2/admin/organizations/)

## Déployer et vérifier le flux de rétention
<a name="windows-nodered-retention-deploy"></a>

Après avoir configuré tous les composants du flux de rétention des données, vous devez déployer le système et vérifier qu'il fonctionne correctement. Cette vérification garantit que vos données industrielles sont correctement stockées localement pour un accès et une analyse immédiats.

1. Connectez les trois nœuds comme indiqué dans le diagramme du flux de conservation des données. Cela crée un pipeline complet allant de l'abonnement aux données au stockage local.  
![\[Flux de conservation des données Node-Red\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/images/gateway-open-source-nodered-data-retention.png)

1. Choisissez **Déployer** pour appliquer vos modifications et activer le flux. Cela lance le processus de collecte et de stockage des données.

1. Utilisez l'explorateur de données InfluxDB pour interroger et visualiser vos données. Cet outil vous permet de vérifier que les données sont correctement stockées et de créer des visualisations initiales de vos séries chronologiques.

   Dans l'explorateur de données, vous devriez être en mesure de voir les mesures de la vitesse du vent enregistrées au fil du temps, afin de confirmer que l'ensemble du pipeline, de la génération des données au stockage local, fonctionne correctement. 

   Pour plus d'informations, consultez la section [Requête dans l'explorateur de données](https://docs.influxdata.com/influxdb/v2/query-data/execute-queries/data-explorer/) dans le *InfluxData Documentation*.

Avec le flux de publication et le flux de rétention des données déployés, vous disposez désormais d'un système complet qui envoie les données vers le AWS IoT SiteWise cloud tout en conservant une copie locale pour un accès et une résilience immédiats. Cette approche à double voie vous permet de bénéficier des avantages de l'analyse et du stockage basés sur le cloud tout en maintenant une visibilité opérationnelle à la périphérie.

# Configurer Grafana pour Edge SiteWise
<a name="windows-grafana"></a>

 Grafana® vous permet de créer des tableaux de bord de surveillance locaux en temps réel pour vos données industrielles. En visualisant les données stockées dans InfluxDB®, vous pouvez fournir aux opérateurs des informations immédiates sur les performances des équipements, l'efficacité des processus et les problèmes potentiels. Cette visibilité à la périphérie est importante pour les opérations urgentes et pour assurer la continuité en cas de perturbations du réseau.

## Configuration de la source de données
<a name="windows-grafana-data-source-config"></a>

La connexion de Grafana à votre base de données InfluxDB crée une puissante couche de visualisation pour vos données industrielles. Cette connexion permet de créer des tableaux de bord de surveillance en temps réel que les opérateurs peuvent utiliser pour prendre des décisions éclairées sans dépendre du cloud.

1. Accédez à votre instance Grafana localement en accédant à [http://127.0.0.1:3000](http://127.0.0.1:3000) dans votre navigateur. *Si l'activation du protocole TLS est requise, vous pouvez consulter la section [Configurer Grafana HTTPS pour un trafic Web sécurisé](https://grafana.com/docs/grafana/latest/setup-grafana/set-up-https/) dans Grafana Labs la documentation.*

1. Ajoutez une source de données InfluxDB pointant vers le bucket de séries chronologiques InfluxDB dans lequel Node-RED écrit les données. Par exemple, `WindFarmData`. Cette connexion établit le lien entre vos données stockées et la plateforme de visualisation.

1. *Pour des instructions détaillées, voir [Configurer la source de données InfluxDB](https://grafana.com/docs/grafana/latest/datasources/influxdb/configure-influxdb-data-source/) dans la Grafana Labs documentation.*

### Création d'un tableau de bord Grafana pour les données Edge SiteWise
<a name="windows-grafana-create-dashboard"></a>

La création d'un tableau de bord est la dernière étape de la création de votre solution de surveillance locale. Les tableaux de bord fournissent des représentations visuelles de vos données industrielles, ce qui permet d'identifier plus facilement les tendances, les anomalies et les problèmes potentiels en un coup d'œil.
+ Suivez le guide pour créer un tableau de bord. Pour plus d'informations, consultez la section [Création de votre premier tableau de bord](https://grafana.com/docs/grafana/latest/getting-started/build-first-dashboard/) dans la *Grafana Labsdocumentation*. Ce modèle suppose que votre compartiment porte un nom `WindFarmData` et que la mesure l'est`TurbineData`.

  Vous pouvez également utiliser le guide de démarrage rapide en important l'exemple de modèle de tableau de bord fourni pour créer rapidement un tableau de bord avec un diagramme chronologique pour les données générées par Node-RED dans la section précédente. Ce modèle fournit un point de départ que vous pouvez personnaliser pour répondre à vos besoins de surveillance spécifiques.

  ```
  {
    "__inputs": [
      {
        "name": "DS_WINDFARM-DEMO",
        "label": "windfarm-demo",
        "description": "",
        "type": "datasource",
        "pluginId": "influxdb",
        "pluginName": "InfluxDB"
      }
    ],
    "__elements": {},
    "__requires": [
      {
        "type": "grafana",
        "id": "grafana",
        "name": "Grafana",
        "version": "11.6.0-pre"
      },
      {
        "type": "datasource",
        "id": "influxdb",
        "name": "InfluxDB",
        "version": "1.0.0"
      },
      {
        "type": "panel",
        "id": "timeseries",
        "name": "Time series",
        "version": ""
      }
    ],
    "annotations": {
      "list": [
        {
          "builtIn": 1,
          "datasource": {
            "type": "grafana",
            "uid": "-- Grafana --"
          },
          "enable": true,
          "hide": true,
          "iconColor": "rgba(0, 211, 255, 1)",
          "name": "Annotations & Alerts",
          "type": "dashboard"
        }
      ]
    },
    "editable": true,
    "fiscalYearStartMonth": 0,
    "graphTooltip": 0,
    "id": null,
    "links": [],
    "panels": [
      {
        "datasource": {
          "type": "influxdb",
          "uid": "${DS_WINDFARM-DEMO}"
        },
        "fieldConfig": {
          "defaults": {
            "color": {
              "mode": "palette-classic"
            },
            "custom": {
              "axisBorderShow": false,
              "axisCenteredZero": false,
              "axisColorMode": "text",
              "axisLabel": "",
              "axisPlacement": "auto",
              "barAlignment": 0,
              "barWidthFactor": 0.6,
              "drawStyle": "line",
              "fillOpacity": 0,
              "gradientMode": "none",
              "hideFrom": {
                "legend": false,
                "tooltip": false,
                "viz": false
              },
              "insertNulls": false,
              "lineInterpolation": "linear",
              "lineWidth": 1,
              "pointSize": 5,
              "scaleDistribution": {
                "type": "linear"
              },
              "showPoints": "auto",
              "spanNulls": false,
              "stacking": {
                "group": "A",
                "mode": "none"
              },
              "thresholdsStyle": {
                "mode": "off"
              }
            },
            "mappings": [],
            "thresholds": {
              "mode": "absolute",
              "steps": [
                {
                  "color": "green"
                },
                {
                  "color": "red",
                  "value": 80
                }
              ]
            }
          },
          "overrides": []
        },
        "gridPos": {
          "h": 8,
          "w": 12,
          "x": 0,
          "y": 0
        },
        "id": 1,
        "options": {
          "legend": {
            "calcs": [],
            "displayMode": "list",
            "placement": "bottom",
            "showLegend": true
          },
          "tooltip": {
            "hideZeros": false,
            "mode": "single",
            "sort": "none"
          }
        },
        "pluginVersion": "11.6.0-pre",
        "targets": [
          {
            "datasource": {
              "type": "influxdb",
              "uid": "${DS_WINDFARM-DEMO}"
            },
            "query": "from(bucket: \"WindFarmData\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"TurbineData\")\n  |> filter(fn: (r) => r[\"_field\"] == \"value\")\n  |> filter(fn: (r) => r[\"name\"] == \"/Renton/WindFarm/Turbine/WindSpeed\")\n  |> filter(fn: (r) => r[\"quality\"] == \"GOOD\")\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n  |> yield(name: \"mean\")",
            "refId": "A"
          }
        ],
        "title": "Panel Title",
        "type": "timeseries"
      }
    ],
    "schemaVersion": 41,
    "tags": [],
    "templating": {
      "list": []
    },
    "time": {
      "from": "now-6h",
      "to": "now"
    },
    "timepicker": {},
    "timezone": "browser",
    "title": "demo dashboard",
    "uid": "fejc0t08o6d4wb",
    "version": 1,
    "weekStart": ""
  }
  ```

# Configurer des intégrations open source avec Docker (Linux)
<a name="linux-docker-setup"></a>

Pour un processus de déploiement rationalisé, vous pouvez utiliser Docker pour configurer Node-RED®, InfluxDB® et Grafana® dans un environnement Linux. Cette méthode utilise des conteneurs préconfigurés, ce qui permet un déploiement rapide et une gestion simplifiée des composants.

## Conditions préalables à la configuration de Docker
<a name="linux-docker-prerequisites"></a>

Avant de commencer, vérifiez que vous disposez des éléments suivants :
+ Une passerelle V3 compatible MQTT. Pour de plus amples informations, veuillez consulter [Passerelles V3 compatibles MQTT pour Edge AWS IoT SiteWise](mqtt-enabled-v3-gateway.md).
+ Le plugin Docker Compose. Pour connaître les étapes d'installation, consultez la section [Installer le Docker Compose plug-in](https://docs.docker.com/compose/install/linux/) dans la documentation des manuels *Docker*.

## Déployez les services
<a name="linux-docker-deployment"></a>

Ce déploiement exécute SiteWise Edge, InfluxDB, Node-RED et Grafana sur le même hôte.

### Configuration de l'environnement
<a name="linux-docker-env-setup"></a>

1. Obtenez un accès root :

   ```
   sudo -i
   ```

1. Créez un fichier .env ou exportez les variables d'environnement suivantes :

   ```
   export INFLUXDB_PASSWORD=your-secure-influxdb-password
   export INFLUXDB_TOKEN=your-secure-influxdb-token
   export GRAFANA_PASSWORD=your-secure-grafana-password
   ```

### Configuration du réseau Docker
<a name="linux-docker-network-config"></a>
+ Créez un réseau de ponts en utilisant le nom`SiteWiseEdgeNodeRedDemoNetwork`.

  ```
  docker network create --driver=bridge SiteWiseEdgeNodeRedDemoNetwork
  ```

### Préparez le Docker Compose fichier
<a name="linux-docker-compose-file"></a>

Copiez le contenu du fichier YAML suivant sur votre périphérique de passerelle SiteWise Edge.

#### Agrandir pour afficher l'exemple de fichier Docker Compose YAML
<a name="collapsible-section-docker-compose-file"></a>

```
services:
  influxdb:
    image: influxdb:latest
    container_name: influxdb
    ports:
      - "127.0.0.1:8086:8086"
    volumes:
      - influxdb-storage:/.influxdbv2
    environment:
      - DOCKER_INFLUXDB_INIT_MODE=setup
      - DOCKER_INFLUXDB_INIT_USERNAME=admin
      - DOCKER_INFLUXDB_INIT_PASSWORD=${INFLUXDB_PASSWORD}
      - DOCKER_INFLUXDB_INIT_ORG=iot-sitewise-edge
      - DOCKER_INFLUXDB_INIT_BUCKET=WindFarmData
      - DOCKER_INFLUXDB_INIT_RETENTION=0
      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=${INFLUXDB_TOKEN}
    networks:
      - SiteWiseEdgeNodeRedDemoNetwork
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - grafana-storage:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
      - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
      - GF_PATHS_PROVISIONING=/etc/grafana/provisioning
      - GF_PATHS_CONFIG=/etc/grafana/grafana.ini
      - GF_LOG_LEVEL=info
    configs:
      - source: grafana_datasource
        target: /etc/grafana/provisioning/datasources/influxdb.yaml
      - source: grafana_preload_dashboard_config
        target: /etc/grafana/provisioning/dashboards/dashboard.yml
      - source: grafana_preload_dashboard
        target: /etc/grafana/provisioning/dashboards/demo_dashboard.json
    depends_on:
      - influxdb
    networks:
      - SiteWiseEdgeNodeRedDemoNetwork
    restart: unless-stopped

  nodered:
    build:
      context: .
      dockerfile_inline: |
        FROM nodered/node-red:latest
        RUN npm install node-red-contrib-influxdb
    container_name: nodered
    ports:
      - "127.0.0.1:1880:1880"
    volumes:
      - node_red_data:/data
    environment:
      - NODE_RED_ENABLE_SAFE_MODE=false
      - NODE_RED_ENABLE_PALETTE_EDIT=true
      - NODE_RED_AUTO_INSTALL_MODULES=true
    configs:
      - source: nodered_flows
        target: /data/flows.json
      - source: nodered_settings
        target: /data/settings.js
      - source: nodered_flows_cred
        target: /data/flows_cred.json
    depends_on:
      - influxdb
    networks:
      - SiteWiseEdgeNodeRedDemoNetwork
    restart: unless-stopped

volumes:
  influxdb-storage:
  grafana-storage:
  node_red_data:

networks:
  SiteWiseEdgeNodeRedDemoNetwork:
    external: true

configs:
  grafana_datasource:
    content: |
      apiVersion: 1
      datasources:
        - name: windfarm-demo
          type: influxdb
          access: proxy
          url: http://influxdb:8086
          jsonData:
            version: Flux
            organization: iot-sitewise-edge
            defaultBucket: WindFarmData
            tlsSkipVerify: true
          secureJsonData:
            token: ${INFLUXDB_TOKEN}
          editable: false

  grafana_preload_dashboard_config:
    content: |
      apiVersion: 1
      providers:
        - name: "Dashboard provider"
          orgId: 1
          type: file
          options: 
            path: /etc/grafana/provisioning/dashboards

  grafana_preload_dashboard:
    content: |
      {
        "annotations": {
          "list": [
            {
              "builtIn": 1,
              "datasource": {
                "type": "grafana",
                "uid": "-- Grafana --"
              },
              "enable": true,
              "hide": true,
              "iconColor": "rgba(0, 211, 255, 1)",
              "name": "Annotations & Alerts",
              "type": "dashboard"
            }
          ]
        },
        "editable": true,
        "fiscalYearStartMonth": 0,
        "graphTooltip": 0,
        "id": 1,
        "links": [],
        "panels": [
          {
            "datasource": {
              "type": "influxdb",
              "uid": "PEB0DCBF338B3CEB2"
            },
            "fieldConfig": {
              "defaults": {
                "color": {
                  "mode": "palette-classic"
                },
                "custom": {
                  "axisBorderShow": false,
                  "axisCenteredZero": false,
                  "axisColorMode": "text",
                  "axisLabel": "",
                  "axisPlacement": "auto",
                  "barAlignment": 0,
                  "barWidthFactor": 0.6,
                  "drawStyle": "line",
                  "fillOpacity": 0,
                  "gradientMode": "none",
                  "hideFrom": {
                    "legend": false,
                    "tooltip": false,
                    "viz": false
                  },
                  "insertNulls": false,
                  "lineInterpolation": "linear",
                  "lineWidth": 1,
                  "pointSize": 5,
                  "scaleDistribution": {
                    "type": "linear"
                  },
                  "showPoints": "auto",
                  "spanNulls": false,
                  "stacking": {
                    "group": "A",
                    "mode": "none"
                  },
                  "thresholdsStyle": {
                    "mode": "off"
                  }
                },
                "mappings": [],
                "thresholds": {
                  "mode": "absolute",
                  "steps": [
                    {
                      "color": "green"
                    },
                    {
                      "color": "red",
                      "value": 80
                    }
                  ]
                }
              },
              "overrides": []
            },
            "gridPos": {
              "h": 8,
              "w": 12,
              "x": 0,
              "y": 0
            },
            "id": 1,
            "options": {
              "legend": {
                "calcs": [],
                "displayMode": "list",
                "placement": "bottom",
                "showLegend": true
              },
              "tooltip": {
                "hideZeros": false,
                "mode": "single",
                "sort": "none"
              }
            },
            "pluginVersion": "11.6.0",
            "targets": [
              {
                "datasource": {
                  "type": "influxdb",
                  "uid": "PEB0DCBF338B3CEB2"
                },
                "query": "from(bucket: \"WindFarmData\")\n  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n  |> filter(fn: (r) => r[\"_measurement\"] == \"TurbineData\")\n  |> filter(fn: (r) => r[\"_field\"] == \"value\")\n  |> filter(fn: (r) => r[\"name\"] == \"/Renton/WindFarm/Turbine/WindSpeed\")\n  |> filter(fn: (r) => r[\"quality\"] == \"GOOD\")\n  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n  |> yield(name: \"mean\")",
                "refId": "A"
              }
            ],
            "title": "Wind Speed",
            "type": "timeseries"
          }
        ],
        "preload": false,
        "schemaVersion": 41,
        "tags": [],
        "templating": {
          "list": []
        },
        "time": {
          "from": "now-6h",
          "to": "now"
        },
        "timepicker": {},
        "timezone": "browser",
        "title": "Demo Dashboard",
        "uid": "eejtureqjo9a8c",
        "version": 2
      }

  nodered_flows:
    content: |
      [
        {
          "id": "95fce448fdd43b47",
          "type": "tab",
          "label": "Demo Flow",
          "disabled": false,
          "info": ""
        },
        {
          "id": "5f63740b66af3386",
          "type": "mqtt out",
          "z": "95fce448fdd43b47",
          "name": "Publish to MQTT broker",
          "topic": "/Renton/WindFarm/Turbine/WindSpeed",
          "qos": "1",
          "retain": "",
          "respTopic": "",
          "contentType": "",
          "userProps": "",
          "correl": "",
          "expiry": "",
          "broker": "5744207557fa19be",
          "x": 830,
          "y": 200,
          "wires": []
        },
        {
          "id": "8f2eb590d596679b",
          "type": "function",
          "z": "95fce448fdd43b47",
          "name": "Translate to SiteWise payload",
          "func": "let input = msg.payload;\nlet output = {};\n\noutput[\"propertyAlias\"] = input.name;\n\nlet propertyVal = {}\n\nlet timeInSeconds = Math.floor(input.timestamp / 1000);\nlet offsetInNanos = (input.timestamp % 1000) * 1000000;\n\npropertyVal[\"timestamp\"] = {\n    \"timeInSeconds\": timeInSeconds,\n    \"offsetInNanos\": offsetInNanos,\n};\n\npropertyVal[\"quality\"] = input.quality\n\nlet typeNameConverter = {\n    \"number\": (x) => Number.isInteger(x) ? \"integerValue\" : \"doubleValue\",\n    \"boolean\": (x) => \"booleanValue\",\n    \"string\": (x) => \"stringValue\", \n}\nlet typeName = typeNameConverter[typeof input.value](input.value)\npropertyVal[\"value\"] = {}\npropertyVal[\"value\"][typeName] = input.value;\n\noutput[\"propertyValues\"] = [propertyVal]\n\nreturn {\n    payload: JSON.stringify(output)\n};",
          "outputs": 1,
          "timeout": "",
          "noerr": 0,
          "initialize": "",
          "finalize": "",
          "libs": [],
          "x": 530,
          "y": 200,
          "wires": [
            [
              "5f63740b66af3386"
            ]
          ]
        },
        {
          "id": "4b78cbdea5e3258c",
          "type": "inject",
          "z": "95fce448fdd43b47",
          "name": "Turbine Simulator",
          "props": [
            {
              "p": "payload.timestamp",
              "v": "",
              "vt": "date"
            },
            {
              "p": "payload.quality",
              "v": "GOOD",
              "vt": "str"
            },
            {
              "p": "payload.value",
              "v": "$$random()",
              "vt": "jsonata"
            },
            {
              "p": "payload.name",
              "v": "/Renton/WindFarm/Turbine/WindSpeed",
              "vt": "str"
            }
          ],
          "repeat": "1",
          "crontab": "",
          "once": false,
          "onceDelay": "",
          "topic": "",
          "x": 270,
          "y": 200,
          "wires": [
            [
              "8f2eb590d596679b"
            ]
          ]
        },
        {
          "id": "b658bf337ea2e316",
          "type": "influxdb out",
          "z": "95fce448fdd43b47",
          "influxdb": "2f1c38495035d2e4",
          "name": "Store data in InfluxDB",
          "measurement": "TurbineData",
          "precision": "",
          "retentionPolicy": "",
          "database": "",
          "retentionPolicyV18Flux": "",
          "org": "iot-sitewise-edge",
          "bucket": "WindFarmData",
          "x": 840,
          "y": 340,
          "wires": []
        },
        {
          "id": "9432d39af35b202f",
          "type": "function",
          "z": "95fce448fdd43b47",
          "name": "Translate to InfluxDB payload",
          "func": "let data = msg.payload;\n\nlet timeInSeconds = data.propertyValues[0].timestamp.timeInSeconds;\nlet offsetInNanos = data.propertyValues[0].timestamp.offsetInNanos;\nlet timestampInMilliseconds = (timeInSeconds * 1000) + (offsetInNanos / 1000000);\n\nmsg.payload = [\n    {\n        \"timestamp(milliseconds_since_epoch)\": timestampInMilliseconds,\n        \"value\": data.propertyValues[0].value.doubleValue\n    },\n    {\n        \"name\": data.propertyAlias,\n        \"quality\": data.propertyValues[0].quality\n    }\n]\n\nreturn msg",
          "outputs": 1,
          "timeout": "",
          "noerr": 0,
          "initialize": "",
          "finalize": "",
          "libs": [],
          "x": 560,
          "y": 340,
          "wires": [
            [
              "b658bf337ea2e316"
            ]
          ]
        },
        {
          "id": "b689403d2c80816b",
          "type": "mqtt in",
          "z": "95fce448fdd43b47",
          "name": "Subscribe to MQTT broker",
          "topic": "/Renton/WindFarm/Turbine/WindSpeed",
          "qos": "1",
          "datatype": "auto-detect",
          "broker": "5744207557fa19be",
          "nl": false,
          "rap": true,
          "rh": 0,
          "inputs": 0,
          "x": 290,
          "y": 340,
          "wires": [
            [
              "9432d39af35b202f"
            ]
          ]
        },
        {
          "id": "4f59bed8e829fc35",
          "type": "comment",
          "z": "95fce448fdd43b47",
          "name": "Data Publish Flow",
          "info": "dfgh",
          "x": 270,
          "y": 160,
          "wires": []
        },
        {
          "id": "b218c7fc58c8b6e7",
          "type": "comment",
          "z": "95fce448fdd43b47",
          "name": "Data Retention flow",
          "info": "",
          "x": 270,
          "y": 300,
          "wires": []
        },
        {
          "id": "5744207557fa19be",
          "type": "mqtt-broker",
          "name": "emqx",
          "broker": "emqx",
          "port": "1883",
          "clientid": "",
          "autoConnect": true,
          "usetls": false,
          "protocolVersion": "5",
          "keepalive": 15,
          "cleansession": true,
          "autoUnsubscribe": true,
          "birthTopic": "",
          "birthQos": "0",
          "birthPayload": "",
          "birthMsg": {},
          "closeTopic": "",
          "closePayload": "",
          "closeMsg": {},
          "willTopic": "",
          "willQos": "0",
          "willPayload": "",
          "willMsg": {},
          "userProps": "",
          "sessionExpiry": ""
        },
        {
          "id": "2f1c38495035d2e4",
          "type": "influxdb",
          "hostname": "influxdb",
          "port": 8086,
          "protocol": "http",
          "database": "",
          "name": "InfluxDB",
          "usetls": false,
          "tls": "",
          "influxdbVersion": "2.0",
          "url": "http://influxdb:8086",
          "timeout": "",
          "rejectUnauthorized": false
        }
      ]

  nodered_flows_cred:
    content: |
      {
        "2f1c38495035d2e4": {
          "token": "${INFLUXDB_TOKEN}"
        }
      }

  nodered_settings:
    content: |
      module.exports = {
        flowFile: 'flows.json',
        credentialSecret: false,
        adminAuth: null,
        editorTheme: {
          projects: {
            enabled: false
          }
        }
      }
```

### Mettre à jour le déploiement d' SiteWise Edge
<a name="w2aac17c19c19c26c27b7c11"></a>

1. Accédez à la [AWS IoT console](https://console.aws.amazon.com/iot/)

1. Choisissez **Appareils Greengrass** dans le menu de navigation de gauche sous la section **Gérer**, puis Appareils **Core**.

1. Sélectionnez le périphérique principal connecté à votre SiteWise Edge Gateway.

1. Choisissez l'onglet **Déploiements**, puis sélectionnez la valeur de l'**ID de déploiement**.

1. Choisissez **Actions**, puis sélectionnez **Réviser**. 

1. Lisez le message contextuel, puis choisissez **Revise le déploiement**.

1. À **l'étape 2 - Sélection des composants**, sélectionnez les composants suivants, puis cliquez sur **Suivant**.
   + `aws.greengrass.clientdevices.mqtt.EMQX`
   + `aws.iot.SiteWiseEdgePublisher`

1. À **l'étape 3 - Configuration des composants**, sélectionnez la valeur du `aws.greengrass.clientdevices.mqtt.EMQX` composant et ajoutez la configuration réseau suivante :

   ```
   {
       "emqxConfig": {
           "authorization": {
               "no_match": "allow"
           },
           "listeners": {
               "tcp": {
                   "default": {
                       "enabled": true,
                       "enable_authn": false
                   }
               }
           }
       },
       "authMode": "bypass",
       "dockerOptions": "-p 127.0.0.1:1883:1883 --network=SiteWiseEdgeNodeRedDemoNetwork",
       "requiresPrivilege": "true"
   }
   ```

1. Choisissez **Suivant**.

1. À **l'étape 4 - Configurer les paramètres avancés**, choisissez **Next**.

1. Choisissez **Deploy**

### Lancez les services
<a name="linux-docker-launch"></a>

1. Démarrez les services à l'aide du fichier Docker Compose. Exécutez la commande suivante dans le répertoire contenant le `compose.yaml` fichier.

   ```
   docker compose up -d
   ```

1. Créez un tunnel SSH pour accéder aux services :

   ```
   ssh -i path_to_your_ssh_key -L 1880:127.0.0.1:1880 -L 3000:127.0.0.1:3000 -L 8086:127.0.0.1:8086 username@gateway_ip_address
   ```

Ce déploiement crée les services suivants dans `SiteWiseEdgeNodeRedDemoNetwork network` :

**InfluxDB v2 (port 8086)**  
Inclut une organisation (iot-sitewise-edge) préconfigurée, un bucket WindFarmData InfluxDB et des informations d'identification d'administrateur

**Node-rouge (port 1880)**  
Inclut des nœuds InfluxDB et des flux préconfigurés pour l'intégration AWS IoT SiteWise 

**Grafana (port 3000)**  
Comprend un utilisateur administrateur, une source de données InfluxDB et un tableau de bord de surveillance

### Accédez aux services
<a name="linux-docker-access-services"></a>

Après le déploiement, accédez aux services à l'aide des informations suivantes URLs et des informations d'identification :

**Note**  
Vous pouvez accéder à chaque service depuis votre hôte ou depuis la machine passerelle.


**Détails d'accès au service**  

| Service | URL | Informations d’identification | 
| --- | --- | --- | 
| Nœud rouge | [http://127.0.0.1:1880](http://127.0.0.1:1880) | Aucune information d'identification requise | 
| InfluxDB | [http://127.0.0.1:8086](http://127.0.0.1:8086) |  Nom d'utilisateur : admin Mot de passe : \$1INFLUXDB\$1PASSWORD  | 
| Grafana | [http://127.0.0.1:3000](http://127.0.0.1:3000) |  Nom d'utilisateur : admin Mot de passe : \$1GRAFANA\$1PASSWORD  | 

## Vérification du déploiement
<a name="linux-docker-verify-deployment"></a>

Pour garantir le succès de votre déploiement, effectuez les vérifications suivantes :

1. Pour Node-RED, vérifiez la présence de deux flux préchargés :
   + Flux de publication des données
   + Flux de conservation des données

1. Car AWS IoT SiteWise, dans la AWS IoT SiteWise console, confirmez la présence d'un flux de données avec l'alias`/Renton/WindFarm/Turbine/WindSpeed`.

1. Pour InfluxDB, utilisez l'explorateur de données pour vérifier le stockage des données dans la `TurbineData` mesure au sein du `WindFarmData` bucket.

1. Pour Grafana, consultez le tableau de bord pour confirmer l'affichage des données de séries chronologiques générées par Node-RED.

# Traitez les données pour les intégrations open source
<a name="open-source-data-processing-open-source"></a>

Les données peuvent être traitées (telles que la transformation ou l'agrégation) à différentes étapes à l'aide de divers outils, chacun répondant à des exigences de surveillance différentes.

## Traitez les données avec les nœuds Node-RED
<a name="open-source-nodered-nodes"></a>

Transformez vos données en temps réel à l'aide des nœuds de traitement intégrés de Node-RED®. Configurez ces nœuds via la console Node-RED pour créer votre pipeline de données.

### Nœuds de transformation de données
<a name="open-source-data-transformation-nodes"></a>

Transformez des points de données individuels, de la même manière que Transforms in AWS IoT SiteWise, à l'aide des nœuds suivants :
+ **change de nœud** - Effectue de simples modifications de valeur sur vos données.
+ **function node** - Permet des JavaScript transformations personnalisées pour le traitement de données complexes.

### Nœuds de calcul des métriques
<a name="open-source-metrics-calculation-nodes"></a>

Combinez plusieurs points de données en une seule sortie, comme Metrics in AWS IoT SiteWise, à l'aide des nœuds suivants :
+ **nœud batch** : regroupe plusieurs messages pour le traitement par lots.
+ **join node** - Combine plusieurs flux de données en une seule sortie.
+ **nœud d'agrégation** - Calcule les métriques agrégées à partir de plusieurs points de données.

Pour des options de nœud supplémentaires, consultez la bibliothèque [Node-RED.](https://flows.nodered.org/)

## Création de tâches InfluxDB
<a name="open-source-influxdb-tasks"></a>

Bien que Node-RED excelle dans le traitement de base des données grâce à une configuration rapide, les calculs métriques complexes peuvent s'avérer difficiles dans le cadre de la programmation basée sur les flux. Les tâches InfluxDB® offrent une alternative via des scripts Flux planifiés pour les besoins de traitement avancés.

Utilisez les tâches InfluxDB pour :
+ Agrégations statistiques sur de grands ensembles de données
+ Opérations mathématiques sur plusieurs propriétés
+ Mesures dérivées à partir de sources multiples

### Caractéristiques des tâches
<a name="open-source-task-features"></a>
+ **Exécution planifiée** - Exécute des tâches en fonction d'expressions cron
+ **Traitement par lots** - Optimisation des opérations pour les données de séries chronologiques
+ **Récupération des erreurs** - Réessayez automatiquement les opérations ayant échoué
+ **Surveillance** - Suivez l'exécution grâce à des journaux détaillés

Gérez les tâches via l'interface utilisateur, l'API ou la CLI d'InfluxDB. Pour plus d'informations, voir [Traiter les données avec les tâches InfluxDB.](https://docs.influxdata.com/influxdb/cloud/process-data/)

## Utiliser les transformations Grafana
<a name="open-source-grafana-transformations"></a>

Transformez la visualisation des données dans Grafana® sans modifier les données sources dans InfluxDB. Les transformations Grafana s'appliquent uniquement à la couche de visualisation.
+ **Visual Builder** - Créez des transformations sans écrire de code
+ **Aperçu en direct : visualisez** les résultats de transformation en temps réel
+ **Multi-Source** : traitez les données provenant de plusieurs sources de base de données
+ **Stockage efficace** : transformez les données au moment de la visualisation sans stocker de résultats intermédiaires

Pour plus d'informations, consultez la section [Transformation des données](https://grafana.com/docs/grafana/latest/panels/transform-data/).

## Résolution des problèmes liés aux intégrations open source
<a name="open-source-troubleshoot"></a>

Pour plus d'informations sur les sujets de résolution des problèmes liés aux intégrations open source pour les passerelles SiteWise Edge, consultez. [Résolution des problèmes liés aux intégrations open source à la périphérie](troubleshooting-gateway.md#open-source-troubleshooting)