Sources : Configurer des variables calculées

Présentation des variables calculées :

Dans l'onglet "Config", vous pouvez identifier facilement quelles sont les variables dont les données sont communiquées de façon brutes par un système tierce à Opisense (hardware) et quelles sont les variables dont les données sont calculées sur base d'autres variables présentes dans Opisense (calcul software).

En effet, les variables calculées présentent une icône "calculatrice". Tandis que les variables brutes sont démunies de ce symbole.

 

 

Prenons pour exemple, dans ce cas-ci, la variable "Phase A comsumption", qui est en fait une variable de consommation calculée à partir de la variable d'index "Phase A Index".

En cliquant sur la calculatrice, nous pouvons voir comment cette variable calculée a été configurée.

 

 

L'écran de configuration se divise en deux parties :

- A gauche, le panneau de configuration des variables d'entrées. Il s'agit, dans ce panneau, de définir les variables d'entrées pour le calcul. Comme entrée du calcul, nous pouvons également accéder à un Formulaire ou bien définir une Constante. Nous reparlerons de ce panneau un peu plus tard.

- A droite, le code qui permet de calculer la variable calculée sur base des variables d'entrée. Dans ce cas-ci, nous considérons du code en langage R.

 

Le code en présence ici est un code relativement standard dans Opisense : il s'agit de calculer une consommation sur base d'un index.

Le coeur de l'opération est stipulé dans la section "Formula" du code :

Nous pouvons voir que le résultat de la variable calculée provient de la différence successive des différents Index.

 

Le reste du code sert uniquement à :

- Répartir les différentes variables d'entrées sur un axe de temps commun (t$t), qui sera utitilisé pour la variable calculée (fonctions GetInputAxis, GetRegularAxis, SetDataOnCommonAxis)

- Filtrer le résultat de la variable calculée afin d'ignorer les points qui sont exactement identiques à ce qui existe déjà dans Opisense (fonctions FilterNaOutput et FilterDuplicateOutput)

Pour des explications plus détaillées sur ces fonctions et, sur le fonctionnement des variables calculées en général, vous pouvez vous référer au Webinar sur ce sujet : 

https://www.bigmarker.com/opinum-s-a/Webinar-Variables-calcul-es?bmid=b65631536712

 

Néanmoins, une conclusion importante est à tirer de l'usage de ces fonctions. Il s'agit de la façon d'accéder aux variables d'inputs :

Si 'x' est l'alias donné à la variable d'entrée dans le panneau de gauche :

- inputVariables$x$TimeSeries$Dates
permet d'accéder à l'axe de temps de la variables d'entrée

- inputVariables$x$TimeSeries$Values
permet d'accéder aux valeurs de la variables d'entrée

- inputVariables$x$TimeSeries
permet d'accéder au tableau des deux vecteurs cités plus haut : à chaque timestamp, sa valeur.

 

Afin de découvrir ensemble les autres fonctionnalités de cet écran, imaginons que nous désirions créer notre propre variable de consommation à partir d'un index...

 Création et utilisation de variables calculées :

Introduction :

Imaginons que nous désirions créer notre propre variable de consommation (que nous nommerons "Total Consumption") à partir d'un index (nommé "Energie active" pour cet exemple)

Pour cela, nous devons cliquer sur "Add a new calculated variable", dans le bas de l'onglet Config.

 

L'écran suivant nous demande de définir notre nouvelle variable calculée :

 

I. Type of Calculation: Actuellement, seul le langage R est supporté. L'implémentation d'autres langages est prévue.

II. Nom: Nom de la nouvelle variable calculée

III. Unité: Unité des valeurs de la variable calculée après calcul. Il s'agit de bien faire correspondre cette unité aux grandeurs que le code renverra comme résultat.

IV. Granularité : La granularité de la variable exprime le temps caractéristique entre les différents points de donnée de cette variable.

V. Quantity Type:

     - Instantaneous : caractérise une variable instantanée, ayant une certaine valeur à un moment donnée (typiquement : courant, fréquence, voltage, puissance, débit, ...)

     - Integré: caractérise une variable dont la grandeur découle d'une intégration dans le temps (typiquement : consommation d'énergie)

                  - Cumulative : caractérise une variable qui ne cesse de s'accumuler dans le temps ( typiquement : un index de consommation).

                  - Minimum : caractérise une variable dont la valeur est un minimum sur un intervalle de temps (typiquement : courant minimum, fréquence minimum, voltage minimum, puissance minimum, débit minimum, ...)

                  - Maximum : caractérise une variable dont la valeur est un maximum sur un intervalle de temps (typiquement : courant maximum, fréquence maximum, voltage maximum, puissance maximum, débit maximum, ... )

                  - Averaged :caractérise une variable dont la valeur est une moyenne sur un intervalle de temps (typiquement : courant moyen, fréquence moyenne, voltage moyen, puissance moyenne, débit moyen, ...)

 

En cliquant sur "Sauver", nous accédons maintenant à l'écran de configuration de notre variable calculée. 

 

Définition des variables d'entrées :

Une première étape consiste à définir les variables d'entrées.

 

I. Alias: Il s'agit du nom qui sera donné à cette variable d'entrée pour le calcul. Utilisé dans la synthaxe inputVariables$x$TimeSeries.

II. Site: Site lié à la variable d'entrée

III. Source: Source liée à la variable d'entrée

IV. Variable : La variable d'entrée

V. Granularity: En choisissant "Raw", vous choisissez de ne pas aggréger les données d'entrées. Par contre, si vous ne choisissez pas "Raw", les données d'entrées seront d'abord aggrégées par minute, heure, jour, semaine, mois ou année avant d'être envoyées dans le moteur de calcul.

VI. Aggregation: Si la granularité n'est pas "Raw", vous devez alors stipuler la méthode d'aggrégation : par somme, moyenne, minimum, maximum, compte d'occurence, variance ou déviation standard.

VII. Période: La période vous permet de définir la quantité de donnée d'entrée qui sera envoyée dans le moteur de calcul, à chaque nouveau calcul. Cette période peut être définie façon relative (2 jours en arrière, les 10 points de données précédents, ...) ou de façon fixe en sélectionnant des dates dans un calendrier.

VIII. Unité: Les valeurs des données d'entrées seront d'abord converties dans l'unité demandée avant d'être envoyées dans le moteur de calcul.

IX As trigger: En activant ce champs, vous vous assurez qu'un nouveau calcul sera lancé à chaque nouvelle donnée arrivant dans cette variable d'entrée. Il est conseillé de toujours avoir au moins une variable d'entrée dont ce champs sera activé, afin d'assuré le lancement automatique du moteur de calcul.

 

De la même façon, vous pouvez utiliser vos formulaires ou définir une constante comme variable d'entrée. Pour cela, définissez toujours un alias et sélectionnez votre formulaire ou définissez la valeur de la constante.

 

Les deux icônes également présents vous permettent respectivement de supprimer une variable d'entrée et dupliquer les valeurs de champs dans une autre variable d'entrée.

 

Implémentation du code de calcul :

La deuxième étape consiste à implémenter le code R qu'exécutera le moteur de calcul. 

La sortie du calcul devra être décrite sous la forme suivante :

list(Timeseries = data.frame(Dates = myDates, Values = myValues))

Dans notre cas, puisque nous avons utilisé le même alias pour la variable d'index (seule variable d'entrée), à savoir 'vIndex', nous pouvons copier intégralement le code de l'exemple précédent afin de réaliser notre calcul de consommation. 

Dans tous les cas, il est important de noter que le code de calcul devra renvoyer des valeurs qui sont cohérentes avec les unités qui ont été choisies pour la variable calculée.

Outils de vérification :

 

Le bouton "Check" vous permet de vérifier la synthaxe votre code R

Le bouton Prévisualiser vous permet d'afficher en graphique le résultat retourné par votre code, suite à cette instance de calcul.

Si vous observez un comportement qui ne correspond pas à vos attentes, deux outils sont particulièrement utiles :

- Une fois que vous avez défini toutes vos variables d'entrées, vous pouvez cliquer sur "Download sample data" afin de télécharger le set de données que vous avez défini. Ce set de donnée est alors utilisable dans un environnement R, comme RStudio par exemple. Le set de donnée correspond aux données qui sont envoyées au moteur de calcul à chaque instance de nouveau calcul. Les paramètres d'aggrégation, de période et de conversion d'unité sont donc déjà appliqués à ce set de données.

- Vous pouvez également directement exporter votre code R en cliquer sur "Ajouter". Votre code sera donc directement exploitable dans un environnement R, comme RStudio par exemple.

 

Ces deux outils vous permettront donc de faire tourner vos instances de calculs dans un environnement R, dans le but, par exemple, d'utiliser un outil de debug.

 

3.      Packages installés :

 

Pour information, voici la liste des packages installés sur le serveur R Opisense. D'autres packages peuvent être ajoutés sur demande.

 

RUN R -e "install.packages('Rserve', repos='http://cran.r-project.org')"

RUN R -e "install.packages('ggplot2', repos='http://cran.r-project.org')"

RUN R -e "install.packages('RJSONIO', repos='http://cran.r-project.org')"

RUN R -e "install.packages('rjson', repos='http://cran.r-project.org')"

RUN R -e "install.packages('Rmisc', repos='http://cran.r-project.org')"

RUN R -e "install.packages('signal', repos='http://cran.r-project.org')"

RUN R -e "install.packages('foreach', repos='http://cran.r-project.org')"

RUN R -e "install.packages('doParallel', repos='http://cran.r-project.org')"

 RUN R -e "install.packages('jsonlite', repos='http://cran.r-project.org')"

RUN R -e "install.packages('httr', repos='http://cran.r-project.org')"

RUN R -e "install.packages('chron', repos='http://cran.r-project.org')"

RUN R -e "install.packages('data.table', repos='http://cran.r-project.org')"

RUN R -e "install.packages('quantmod', repos='http://cran.r-project.org')"

RUN R -e "install.packages('oce', repos='http://cran.r-project.org')"

RUN R -e "install.packages('RODBC', repos='http://cran.r-project.org')"

RUN R -e "install.packages('base64enc', repos='http://cran.r-project.org')"

RUN R -e "install.packages('lubridate', repos='http://cran.r-project.org')"

RUN R -e "install.packages('dplyr', repos='http://cran.r-project.org')"

RUN R -e "install.packages('forecast', repos='http://cran.r-project.org')" 

 

Was this article helpful?
0 out of 0 found this helpful

0 Comments

Please sign in to leave a comment.