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.
AWS IoT TwinMaker exemple de connecteur de série chronologique Cookie Factory
Le code complet de la fonction
Exemples de types de composants d'usine à cookies
Dans un type de composant, nous définissons des propriétés communes qui sont partagées entre les composants. Dans l'exemple de l'usine à cookies, les composants physiques du même type partagent les mêmes mesures. Nous pouvons donc définir le schéma de mesures dans le type de composant. À titre d'exemple, le type de mélangeur est défini dans l'exemple suivant.
{ "componentTypeId": "com.example.cookiefactory.mixer" "propertyDefinitions": { "RPM": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "Temperature": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true } } }
Par exemple, un composant physique peut avoir des mesures dans une base de données Timestream, des enregistrements de maintenance dans une base de données SQL ou des données d'alarme dans des systèmes d'alarme. La création de plusieurs composants et leur association à une entité relient différentes sources de données à l'entité et renseignent le graphique entité-composant. Dans ce contexte, chaque composant a besoin d'une telemetryId propriété pour identifier sa clé unique dans la source de données correspondante. La spécification de la telemetryId propriété présente deux avantages : la propriété peut être utilisée dans le connecteur de données comme condition de filtre pour interroger uniquement les valeurs du composant donné et, si vous incluez la valeur de la telemetryId propriété dans la réponse de l'API du plan de données, le côté client prend l'ID et peut effectuer une recherche inversée si nécessaire.
Si vous ajoutez le TelemetryId au type de composant en tant qu'identifiant externe, le composant est identifié dans le TimeStream tableau.
{ "componentTypeId": "com.example.cookiefactory.mixer" "propertyDefinitions": { "telemetryId": { "dataType": { "type": "STRING" }, "isTimeSeries": false, "isRequiredInEntity": true, "isExternalId": true, "isStoredExternally": false }, "RPM": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "Temperature": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true } } }
De même, nous avons le type de composant pour leWaterTank, comme indiqué dans l'exemple JSON suivant.
{ "componentTypeId": "com.example.cookiefactory.watertank", "propertyDefinitions": { "flowRate1": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "flowrate2": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "tankVolume1": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "tankVolume2": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "telemetryId": { "dataType": { "type": "STRING" }, "isTimeSeries": false, "isRequiredInEntity": true, "isExternalId": true, "isStoredExternally": false } } }
TelemetryTypeIl s'agit d'une propriété facultative dans le type de composant si elle vise à interroger des valeurs de propriété dans l'étendue de l'entité. Pour un exemple, consultez les types de composants définis dans le GitHub référentiel AWS IoT TwinMaker d'exemplesTelemetryType définir et extraire des propriétés communes, telles que le type de composant TelemetryId et TelemetryType vers un type de composant parent, pour que d'autres types d'enfants puissent les partager.
Exemple Lambda
Le connecteur Lambda doit accéder à la source de données, générer l'instruction de requête en fonction de l'entrée et la transmettre à la source de données. Un exemple de requête envoyée au Lambda est illustré dans l'exemple JSON suivant.
{ 'workspaceId': 'CookieFactory', 'selectedProperties': ['Temperature'], 'startDateTime': 1648796400, 'startTime': '2022-04-01T07:00:00.000Z', 'endDateTime': 1650610799, 'endTime': '2022-04-22T06:59:59.000Z', 'properties': { 'telemetryId': { 'definition': { 'dataType': { 'type': 'STRING' }, 'isTimeSeries': False, 'isRequiredInEntity': True, 'isExternalId': True, 'isStoredExternally': False, 'isImported': False, 'isFinal': False, 'isInherited': True, }, 'value': { 'stringValue': 'Mixer_22_680b5b8e-1afe-4a77-87ab-834fbe5ba01e' } } 'Temperature': { 'definition': { 'dataType': { 'type': 'DOUBLE' }, 'isTimeSeries': True, 'isRequiredInEntity': False, 'isExternalId': False, 'isStoredExternally': True, 'isImported': False, 'isFinal': False, 'isInherited': False } } 'RPM': { 'definition': { 'dataType': { 'type': 'DOUBLE' }, 'isTimeSeries': True, 'isRequiredInEntity': False, 'isExternalId': False, 'isStoredExternally': True, 'isImported': False, 'isFinal':False, 'isInherited': False } }, 'entityId': 'Mixer_22_d133c9d0-472c-48bb-8f14-54f3890bc0fe', 'componentName': 'MixerComponent', 'maxResults': 100, 'orderByTime': 'ASCENDING' }
L'objectif de la fonction Lambda est d'interroger les données de mesure historiques pour une entité donnée. AWS IoT TwinMaker fournit une carte des propriétés des composants et vous devez spécifier une valeur instanciée pour l'ID du composant. Par exemple, pour gérer la requête au niveau du type de composant (qui est courante pour les cas d'utilisation d'alarmes) et renvoyer l'état d'alarme de tous les composants de l'espace de travail, la carte des propriétés contient des définitions des propriétés des types de composants.
Dans le cas le plus simple, comme dans la demande précédente, nous voulons une série d'échantillons de température pendant la fenêtre de temps donnée pour le composant donné, par ordre temporel croissant. L'instruction de requête peut être résumée comme suit :
... SELECT measure_name, time, measure_value::double FROM {database_name}.{table_name} WHERE time < from_iso8601_timestamp('{request.start_time}') AND time >= from_iso8601_timestamp('{request.end_time}') AND TelemetryId = '{telemetry_id}' AND measure_name = '{selected_property}' ORDER BY time {request.orderByTime} ...