Utiliser des fonctions temporelles dans les expressions de formules - AWS IoT SiteWise

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.

Utiliser des fonctions temporelles dans les expressions de formules

Utilisez des fonctions temporelles pour renvoyer des valeurs basées sur les horodatages des points de données.

Utiliser des fonctions temporelles dans les métriques

Dans les métriques uniquement, vous pouvez utiliser les fonctions suivantes qui renvoient des valeurs basées sur l'horodatage des points de données.

Les arguments des fonctions temporelles doivent être des propriétés du modèle d'actif local ou des expressions imbriquées. Cela signifie que vous ne pouvez pas utiliser les propriétés des modèles d'actifs enfants dans les fonctions temporelles.

Vous pouvez utiliser des expressions imbriquées dans les fonctions temporelles. Lorsque vous utilisez des expressions imbriquées, les règles suivantes s'appliquent :

  • Chaque argument ne peut comporter qu'une seule variable.

    Par exemple, latest( t*9/5 + 32 ) est pris en charge.

  • Les arguments ne peuvent pas être des fonctions d'agrégation.

    Par exemple, first( sum(x) ) n'est pas pris en charge.

Fonction Description

first(x)

Renvoie la valeur de la variable donnée avec l'horodatage le plus ancien sur l'intervalle de temps actuel.

last(x)

Renvoie la valeur de la variable donnée avec l'horodatage le plus récent sur l'intervalle de temps actuel.

earliest(x)

Renvoie la dernière valeur de la variable donnée avant le début de l'intervalle de temps actuel.

Cette fonction calcule un point de données pour chaque intervalle de temps, si la propriété d'entrée a au moins un point de données dans son historique. Consultez time-range-defintion pour plus de détails.

latest(x)

Renvoie la dernière valeur de la variable donnée avec le dernier horodatage avant la fin de l'intervalle de temps actuel.

Cette fonction calcule un point de données pour chaque intervalle de temps, si la propriété d'entrée a au moins un point de données dans son historique. Consultez time-range-defintion pour plus de détails.

statetime(x)

Renvoie la durée, en secondes, pendant laquelle les variables données sont positives sur l'intervalle de temps actuel. Vous pouvez utiliser les fonctions de comparaison pour créer une propriété de transformation pour la statetime fonction à utiliser.

Par exemple, si vous avez une propriété Idle qui est 0 ou 1, vous pouvez calculer le temps d'inactivité par intervalle de temps avec l'expression suivante : IdleTime = statetime(Idle). Pour plus d'informations, consultez l'exemple de scénario d'heure d'état.

Cette fonction ne prend pas en charge les propriétés de métriques en tant que variables d'entrée.

Cette fonction calcule un point de données pour chaque intervalle de temps, si la propriété d'entrée a au moins un point de données dans son historique.

TimeWeightedAvg(x, [interpolation])

Renvoie la moyenne des données d'entrée pondérées par les intervalles de temps entre les points.

Voir Paramètres des fonctions pondérées dans le temps pour plus de détails sur les calculs et les intervalles.

L'argument facultatif interpolaton doit être une constante de chaîne :

  • locf— Il s'agit de la valeur par défaut. Le calcul utilise l'algorithme de calcul du dernier report observé pour les intervalles entre les points de données. Dans cette approche, le point de données est calculé comme la dernière valeur observée jusqu'au prochain horodatage du point de données d'entrée.

    La valeur après un point de données valide est extrapolée sous forme de valeur jusqu'à l'horodatage du point de données suivant.

  • linear— Le calcul utilise l'algorithme d'interpolation linéaire pour les intervalles entre les points de données.

    La valeur entre deux bons points de données est extrapolée sous forme d'interpolation linéaire entre les valeurs de ces points de données.

    La valeur entre les bons et les mauvais points de données ou la valeur après le dernier bon point de données sera extrapolée en tant que bon point de données.

TimeWeightedStDev(x, [algo])

Renvoie l'écart type des données d'entrée pondéré avec les intervalles de temps entre les points.

Voir Paramètres des fonctions pondérées dans le temps pour plus de détails sur les calculs et les intervalles.

Le calcul utilise l'algorithme de calcul du dernier report observé pour les intervalles entre les points de données. Dans cette approche, le point de données est calculé comme la dernière valeur observée jusqu'au prochain horodatage du point de données d'entrée. Le poids est calculé sous la forme d'un intervalle de temps en secondes entre les points de données ou les limites des fenêtres.

L'argument facultatif algo doit être une constante de chaîne :

  • f— Il s'agit de la valeur par défaut. Il renvoie une variance d'échantillon pondérée non biaisée avec des poids de fréquence, TimeWeight calculée en secondes. Cet algorithme est généralement supposé en fonction de l'écart type et est connu sous le nom de correction de Bessel de l'écart type pour les échantillons pondérés.

  • p— Renvoie la variance d'échantillon pondérée biaisée, également connue sous le nom de variance de population.

Les formules suivantes sont utilisées pour le calcul où :

  • S p = écart type de la population

  • S f = écart type de fréquence

  • X i = données entrantes

  • ω i = poids égal à l'intervalle de temps en secondes

  • μ* = moyenne pondérée des données entrantes

Équation pour l'écart type de la population :

Équation pour l'écart type de la population.

Équation pour l'écart type de fréquence :

Équation pour l'écart type de fréquence.

Le schéma suivant montre comment AWS IoT SiteWise les fonctions temporellesfirst, last earliestlatest, et sont calculées par rapport à l'intervalle de temps actuel.

AWS IoT SiteWise les fonctions temporelles renvoient des points de données en fonction de leur horodatage.
Note
  • L'intervalle de temps pourfirst(x), last(x) est (début de la fenêtre actuelle, fin de la fenêtre actuelle].

  • L'intervalle de temps pour latest(x) est [début du temps, fin de la fenêtre actuelle].

  • La plage de temps pour earliest(x) est (début de l'heure, fin de la fenêtre précédente).

Paramètres des fonctions pondérés dans le temps

Les fonctions pondérées dans le temps calculées pour la fenêtre d'agrégation prennent en compte les éléments suivants :

  • Points de données à l'intérieur de la fenêtre

  • Intervalles de temps entre les points de données

  • Dernier point de données avant la fenêtre

  • Premier point de données après la fenêtre (pour certains algorithmes)

Termes :

  • Point de données incorrect : tout point de données dont la qualité n'est pas bonne ou dont la valeur n'est pas numérique. Ceci n'est pas pris en compte dans le calcul des résultats d'une fenêtre.

  • Intervalle incorrect — Intervalle après un point de données erroné. L'intervalle avant le premier point de données connu est également considéré comme un mauvais intervalle.

  • Bon point de données — Tout point de données de bonne qualité et de bonne valeur numérique.

Note
  • AWS IoT SiteWise ne consomme des données GOOD de qualité que lorsqu'il calcule les transformations et les métriques. Il ignore les points UNCERTAIN de BAD données.

  • L'intervalle avant le premier point de données connu est considéré comme un mauvais intervalle. Pour plus d’informations, consultez Tutoriels d'expression de formules.

L'intervalle après le dernier point de données connu se poursuit indéfiniment, affectant toutes les fenêtres suivantes. Lorsqu'un nouveau point de données arrive, la fonction recalcule l'intervalle.

Conformément aux règles ci-dessus, le résultat agrégé des fenêtres est calculé et limité aux limites des fenêtres. Par défaut, la fonction envoie le résultat de la fenêtre uniquement si l'ensemble de la fenêtre correspond à un bon intervalle.

Si l'intervalle de validité de la fenêtre est inférieur à la longueur de la fenêtre, la fonction n'envoie pas la fenêtre.

Lorsque les points de données affectant le résultat de la fenêtre changent, la fonction recalcule la fenêtre, même si les points de données se trouvent en dehors de la fenêtre.

Si la propriété d'entrée comporte au moins un point de données dans son historique et qu'un calcul a été lancé, la fonction calcule les fonctions d'agrégation pondérées dans le temps pour chaque intervalle de temps.

Exemple de scénario statetime

Prenons un exemple où vous avez une ressource avec les propriétés suivantes :

  • Idle— Une mesure qui est 0 ou1. Lorsque la valeur est 1, la machine est inactive.

  • Idle Time— Mesure qui utilise la formule statetime(Idle) pour calculer la durée en secondes pendant laquelle la machine est inactive, par intervalle d'une minute.

La propriété Idle possède les points de données suivants.

Horodatage 2:00:00 PM 2:00:30 PM 2:01:15 PM 2:02:45 PM 2:04:00 PM
Idle 0 1 1 0 0

AWS IoT SiteWise calcule la Idle Time propriété toutes les minutes à partir des valeurs deIdle. Une fois ce calcul terminé, la propriété Idle Time possède les points de données suivants.

Horodatage 2:00:00 PM 2:01:00 PM 2:02:00 PM 2:03:00 PM 2:04:00 PM
Idle Time N/A 30 60 45 0

AWS IoT SiteWise effectue les calculs suivants Idle Time à la fin de chaque minute.

  • À 2:00 PM (pour 1:59 PM à 2:00 PM)

    • Il n'y a pas de données pour Idle avant 2:00 PM, donc aucun point de données n'est calculé.

  • À 2:01 PM (pour 2:00 PM à 2:01 PM)

    • À 2:00:00 PM, la machine est active (Idle est égal à 0).

    • À 2:00:30 PM, la machine es inactive (Idle est égal à 1).

    • Idle ne change plus avant la fin de l'intervalle à 2:01:00 PM, Idle Timeest donc égal à 30 secondes.

  • À 2:02 PM (pour 2:01 PM à 2:02 PM)

    • À 2:01:00 PM, la machine est inactive (conformément au dernier point de données à 2:00:30 PM).

    • À 2:01:15 PM, la machine est toujours inactive.

    • Idle ne change plus non plus avant la fin de l'intervalle à 2:02:00 PM, Idle Time est donc égal à 60 secondes.

  • À 2:03 PM (pour 2:02 PM à 2:03 PM)

    • À 2:02:00 PM, la machine est inactive (conformément au dernier point de données à 2:01:15 PM).

    • À 2:02:45 PM, la machine est active.

    • Idle ne change plus non plus avant la fin de l'intervalle à 2:03:00 PM, Idle Time est donc égal à 45 secondes.

  • À 2:04 PM (pour 2:03 PM à 2:04 PM)

    • À 2:03:00 PM, la machine est active (conformément au dernier point de données à 2:02:45 PM).

    • Idle ne change plus non plus avant la fin de l'intervalle à 2:04:00 PM, Idle Time est donc égal à 0 seconde.

Exemple TimeWeightedAvg et TimeWeightedStDev scénario

Les tableaux suivants fournissent des exemples d'entrées et de sorties pour ces métriques de fenêtre d'une minute :Avg(x), TimeWeightedAvg(x), TimeWeightedAvg(x, "linear"), stDev(x), timeWeightedStDev(x), timeWeightedStDev(x, 'p').

Exemple de saisie pour une fenêtre agrégée d'une minute :

Note

Ces points de données sont tous GOOD de qualité.

03:00:00 4.0
03:01:00 2.0
03:01:10 8.0
03:01:50 20.0
03:02:00 14,0
03:02:05 10,0
03:02:10 3.0
03:02:30 20.0
03:03:30 0.0

Résultats agrégés en sortie :

Note

Aucun — Résultat non produit pour cette fenêtre.

Heure Avg(x) TimeWeightedAvg(x) TimeWeightedAvg(X, "linear") stDev(X) timeWeightedStDev(x) timeWeightedStDev(x, 'p')
3:00:00 4 Aucun Aucun 0 Aucun Aucun
3:01:00 2 4 3 0 0 0
3:02:00 14 9 13 6 5,430610041581775 5,385164807134504
3:03:00 11 13 12,875 8,54400374531753 7,724054437220943 7,659416862050705
3:04:00 0 USD 10 2,5 0 10,084389681792215 10
3:05:00 Aucun 0 0 Aucun 0 0

Utiliser des fonctions temporelles dans les transformations

Dans les transformations uniquement, vous pouvez utiliser la pretrigger() fonction pour récupérer la valeur de GOOD qualité d'une variable avant la mise à jour de propriété qui a lancé le calcul de transformation en cours.

Prenons l'exemple d'un fabricant AWS IoT SiteWise qui surveille l'état d'une machine. Le fabricant utilise les mesures et les transformations suivantes pour représenter le processus :

  • Une mesurecurrent_state, qui peut être 0 ou 1.

    • Si la machine est en état de nettoyage, current_state égal à 1.

    • Si la machine est en cours de fabrication, current_state est égal à 0.

  • Une transformationcleaning_state_duration, c'est égal à çaif(pretrigger(current_state) == 1, timestamp(current_state) - timestamp(pretrigger(current_state)), none). Cette transformation renvoie la durée pendant laquelle la machine est restée en état de nettoyage en secondes, au format Unix Epoch. Pour plus d'informations, consultez Utiliser des fonctions conditionnelles dans les expressions de formule et la fonction timestamp ().

Si la machine reste en état de nettoyage plus longtemps que prévu, le fabricant peut examiner la machine.

Vous pouvez également utiliser la pretrigger() fonction dans des transformations multivariées. Par exemple, vous avez deux mesures nommées x ety, et une transformationz, égale àx + y + pretrigger(y). Le tableau suivant indique les valeurs pour xy, et z entre 9 h 00 et 9 h 15.

Note
  • Cet exemple suppose que les valeurs des mesures arrivent par ordre chronologique. Par exemple, la valeur de x pour 9 h 00 arrive avant celle x de 9 h 05.

  • Si les points de données de 9 h 05 arrivent avant les points de données de 9 h 00, cela z n'est pas calculé à 9 h 05.

  • Si la valeur de x pour 9 h 05 arrive avant la valeur de x pour 9 h 00 et que les valeurs de y arrivent chronologiquement, z est égale 22 = 20 + 1 + 1 à 9 h 05.

9 H 00 9 H 05 9 H 10 9 H 15

x

10

20

30

y

1

2

3

z = x + y + pretrigger(y)

yne reçoit aucun point de données avant 9h00. Par conséquent, z n'est pas calculé à 9 h 00.

23 = 20 + 2 + 1

pretrigger(y)est égal à 1.

25 = 20 + 3 + 2

xne reçoit pas de nouveau point de données. pretrigger(y)est égal à 2.

36 = 30 + 3 + 3

yne reçoit pas de nouveau point de données. Par conséquent, pretrigger(y) est égal à 3 à 9 h 15.