Formation Dybee – Calculs et Formules

Introduction

Dybee offre la possibilité d’écrire des formules de tout genre et met à votre disposition une page nommée « requête/ query » le tout accessible à partir du menu « Module d’analyse », afin de les écrire et valider leurs résultats.
La page requête est l’endroit pour écrire:

  • Virtuels
  • Virtuels globaux
  • Règles de détection de faute
  • Indicateurs clés de performance (KPI)

Pour réaliser l’écriture de formules Dybee , nous devons comprendre:

  • La structure de la formule
  • Les opérateurs et fonctions
  • La sauvegarde et l’exécution

Page requête

Page requête dans Dybee
Exemple de la page requête

Le format des données

Dybee permet le calcul à différents intervalles. À la base, le calcul des formules est fait à partir de données horaires. Pour chaque donnée horaire, nous avons accès à la moyenne, le minimum, maximum et la somme totale de celle-ci.
Par défaut Dybee utilise la moyenne.

Moyenne utilisée par défaut dans Dybee
  • Options ➡ retourne la valeur moyenne de l’heure, minimum, maximum ou totale de l’heure.
    • .avg (par défaut)
    • .max
    • .min
    • .tot

Structure de la formule – Choix des points

La formule Dybee s’apparente à une formule Excel, sauf qu’elle permet d’utiliser notre modèle. Une formule peut être ‘indépendante’ ou ‘ciblée’.

Une formule indépendante utilise exclusivement des points de contrôle. Pour accéder aux points de contrôle, vous n’avez qu’à écrire une accolade { et Dybee vous proposera la liste des points disponibles. Vous pouvez filtrer les points en écrivant du texte.

Une formule ciblée repose sur la structure du modèle du bâtiment et sur les relations entre les entités. Le choix de cette cible est important lorsqu’on utilise des éléments tels que tag, param, parent, child, source, load, car Dybee doit comprendre quelle est la source des relations. On peut sélectionner une cible via des crochets [ ] ou via un picker proposé dans la plateforme.

Assurez-vous de comprendre la modélisation de Dybee à l’aide des capsules vidéos à ce sujet.

Exemples :

Formule via des points de contrôles : {température_extérieur} – {température_local102}.max 

Formule via une cible : [local102].child.Ttag.T – [local102].child.Ttag.TSP

Vous aimeriez rester informé des nouveaux développements dans Dybee ?

Abonnez-vous à notre infolettre!

M’abonner →

Opérateurs et fonctions

Dans Dybee, notre argument « arg » peut être un nombre, un point ou une formule.

Opérateurs

Expression
DescriptionExemple
{}Sélection d’un point de contrôle{Point}
[]Sélection d’une entité[Entité]
Soustractionarg1-arg2
+Additionarg1+arg2
*Multiplicationarg1*arg2
/Divisionarg1/arg2
^Exposantarg1 ^ arg2
()Parenthèse(arg1 – arg2)/arg3
AND ou &&Donne 1 si les deux parties sont vraiesarg1 AND arg2
OR ou ||Donne 1 si une des deux parties ou les deux sont vraiesarg1 OR arg2
<Donne 1 si l’argument de gauche et inférieur à l’argument de droitearg1 < arg2
>Donne 1 si l’argument de gauche et supérieur à l’argument de droitearg1 > arg2
<=Donne 1 si l’argument de gauche et inférieur ou égal à l’argument de droitearg1 <= arg2
>=Donne 1 si l’argument de gauche et supérieur ou égal à l’argument de droitearg1 >= arg2
<>Donne 1 si les deux arguments sont différentsarg1 <> arg2
=Donne 1 si les deux arguments sont égauxarg 1 = arg 2

Fonctions de base

ExpressionDescriptionExemple
abs( )Retourne la valeur positive de la valeur entre parenthèses.abs(arg1)
sqrt ( )Retourne la racine carrée de la valeur entre parenthèsessqrt (arg1)
ln ( )Retourne le logarithme népérien de la valeur entre parenthèsesln (arg1)
log10 ( )Retourne le logarithme décimal de la valeur entre parenthèseslog10(arg1)
log2 ( )Retourne le logarithme binaire de la valeur entre parenthèseslog2(arg1)
sin ( )Retourne le sinus de la valeur entre parenthèsessin (arg1)
cos ( )Retourne le cosinus de la valeur entre parenthèsescos (arg1)
tan ( )Retourne la tangente de la valeur entre parenthèsestan (arg1)
arcsin ( )Retourne l’arc sinus de la valeur entre parenthèsesarcsin (arg1)
arccos ( )Retourne l’arc cosinus de la valeur entre parenthèsesarccos (arg1)
arctan ( )Retourne l’arc tangente de la valeur entre parenthèsesarctan (arg1)
sec ( )Retourne la sécante de la valeur entre parenthèsessec (arg1)
cosec ( )Retourne la cosécante de la valeur entre parenthèsescosec (arg1)
rad ( )Retourne le radiant de la valeur entre parenthèsesrad (arg1)
deg ( )Retourne le degré de la valeur entre parenthèsesdeg (arg1)

Fonctions avancées

Liste des fonctions avancées disponibles

Dans Dybee, des horaires peuvent être paramétrés dans le module ‘Horaire’ et retournent 1 quand l’horaire est actif et 0 sinon.

ExpressionDescriptionExemple
avg( ; )Moyenne d’une liste d’argumentavg(arg1 ; arg2 ; arg3…)
max( ; )Maximum d’une liste d’argumentmax(arg1 ; arg2 ; arg3…)
min( ; )Minimum d’une liste d’argumentmin(arg1 ; arg2 ; arg3…)
Schedule.horaire Accès aux horaires configurés dans notre projetExemple_Schedule
Count(cible ; option) Compte le nombre d’entités cibles répondant à une conditionExemple_Count
nb (cible)Compte le nombre d’entités ciblesExemple_nb
first (arg1 ; arg2 ; …)Retiens la première option calculableExemple_first
?Contourne l’élément s’il n’existe pasExemple ?
if (condition ; valeur si vraie ; valeur si fausse)Retourne la  »valeur si vraie » ou la  »valeur si fausse » dépendant de la conditionExemple_if
Curve (arg1; X1 ; Y1 ; X2 ; Y2 ; X3; Y3…)Permets de calculer l’image d’un point en fonction d’une courbe préétablieExemple_curve
.shift Retourne la valeur de l’argument au temps t +- X heuresarg1.shift(-Xh)

Exemple Schedule

Notre module horaire permet la création d’une cédule de la semaine et des heures pour l’occupation ou l’opération.

Les horaires sont créés via « Visualisation -> Mes données -> Horaires » ou « Modules d’analyse-> Horaires ». Ce sont des variables binaires :

  • 1: Horaire activée
  • 0: Hors horaire

Lors de sa création, on doit lui assigner un Alias. De cette façon, à l’écriture des formules, nous pouvons accéder à cette variable en tout temps via la formulation suivante :

Schedule.horaire1   Où « horaire1 » est notre alias.

Exemple Count

Count permet de retourner le nombre d’éléments ciblés répondant à une condition donnée.

count( load.ATD ; tag.F > 20 ) retourne le nombre de boites terminales connectées à notre système qui ont un débit de plus de 20 l/s

Exemple nb

nb permet de retourner le nombre d’éléments ciblés. La formule peut vous retourner le nombre d’éléments qui existent (nombre de pièce, nombre de boite terminale, etc.).
nb( load.ATD) retourne le nombre de boites terminales connectées à notre système.

nb( tag.MS ) retourne 1 si le tag MS de notre entité ciblé est bien mappé.

Exemple first

Le first permet de prendre en compte pour notre formule le 1er élément existant de la liste.

first( tag.MC ; tag.BC * 100; 0) – first( tag.MS ; tag.BS * 100; 0)

Dans ce cas, on veut regarder la différence entre la consigne et le statut de notre/nos cible(s).
Le 1er first renvoie la commande modulante (MC) si elle existe. Si elle n’existe pas, il renvoie la commande binaire (BC*100). Et si aucun des deux tags n’existe il renvoie 0. Idem pour le 2e first avec les statuts (MS, BS). Ainsi si aucun des tags n’existe notre formule renverra 0 mais si nous avons la commande modulante et le statut modulant par exemple, notre formule renverra : tag.MC – tag.MS

Exemple ?

Une formule ciblée pour une sonde de température telle que « tag.T > 5 » s’appliquera à l’ensemble de nos entités température.

Cependant, si une sonde de température n’a aucun point mappé au tag « T », la formule ne sera pas analysée par Dybee. Et si un seul élément de la formule n’existe pas, la formule globale ne sera pas analysée.

Dans certains cas, on souhaite tout de même en faire le calcul. Par exemple, si je veux calculer la moyenne de chauffage de mon système, donc de mes serpentins de chauffage (HC) et ceux de préchauffage (PHC) en tout temps, même si je n’ai pas de préchauffage, il me faut écrire :

avg( child.HC.tag.MC ; child.PHC.tag.MC? )

Le « ? » signifiant que la formule est valide même si l’élément en question n’existe pas. Dans notre cas s’il n’y a pas de préchauffage la formule nous retournera child.HC.tag.MC

Exemple if

La formule if permet de nous retourner une valeur en fonction d’une condition préalable

 if( expression ; valeur si vrai ; valeur si faux)

If ( 24 > 10 ; 0 ; 100)   retourne 0

if( child.HC.tag.MC > 0 AND child.CC.tag.MC > 0 ;1 ; 0 ) retourne 1 si le serpentin de chauffage et le serpentin de refroidissement d’une CTA fonctionnent en même temps et retourne 0 sinon. Cela permet de détecter un combat thermique par exemple.

Exemple curve

La fonction curve ( ) permet de créer des courbes d’interpolation à partir d’une valeur X et de couples de points :

Exemple : curve( arg1 ; 0 ; 0 ; 50 ; 70 ; 100 ; 100 ) Le résultat retourné pour arg1= 25 serait 35.

Avez-vous pensé à définir un objectif pour votre projet d’efficacité énergétique ?

Ciblez mon objectif!

Lire l’article →

Modèle

Alias

C’est l’acronyme propre à chaque famille d’équipements, de composants ou d’instruments, de tag, de paramètre ou de kpi. Ces alias sont utilisés pour pointer un ou des éléments précis dans les formules.

Exemples :

AHU = Centrale de traitement d’air (Air handling unit)

NN = Réseau thermique (Net node)

HC = Serpentin de chauffage (Heating coil)

T = Sonde de température (Temperature)

SA_T = Sonde de température d’alimentation (Supply air temperature)

Etc.

L’Alias X permet de référer à l’ensemble des familles présentes (Exemple AliasX)

All.Alias permet de référer à l’ensemble des entités de la famille dont l’alias est mentionné. Dybee fait alors la moyenne des valeurs retournées.

Élément

Chaque entité (équipement, composant et instrument) peut posséder des tags, des paramètres ou des kpi. Il est possible d’y faire appel dans les formules via la structure suivante :

  • [Entité].tag
  • [Entité].param
  • [Entité].kpi

Les éléments de l’entité bâtiment (tags, paramètres, kpi) sont constamment disponible dans les formules, quelque soit la cible de départ en utilisant le mot clef « global » comme alias (Exemple global).

Exemple Élément/Alias

Voici un exemple d’utilisation des éléments et des alias dans une formule :

Prenons l’exemple d’une zone comprenant un thermostat, on retrouve ici différents Alias.

Exemple d'une zone comprenant un thermostat
  • Z pour notre équipement Zone
  • T pour notre instrument Température (thermostat)

Pour notre instrument Température, on retrouve:

– Les alias de type tag:

  • T pour la lecture de température
  • TSP pour la consigne de température

– Les alias de type paramètre:

  • T_H pour la température limite haute
  • T_L pour la température limite basse

En ciblant l’instrument Température (alias T) qui représente un thermostat voici différentes formules permettant d’accéder et d’analyser les éléments de notre instrument

  • Formule d’accès à la donnée de température : tag.T
  • Vérifier si la température se trouve au-dessus de la limite haute : tag.T > param.T_H

À noter ici qu’on évaluera la moyenne de la température dans l’heure. Si l’on veut évaluer la limite haute par rapport à la température maximum de l’heure en cours, on écrira :  tag.T.max > param.T_H

Exemple Alias X

Lorsqu’on utilise load, source et tous les autres dérivés, on peut parfois vouloir cibler différentes familles pour être flexible ou cibler tout simplement plusieurs familles différentes.

Distribution d'air selon architecture du bâtiment

Si l’on souhaite savoir la température d’alimentation d’une zone, celle-ci peut être mesurée au niveau d’une CTA ou d’une distribution d’air selon l’architecture de notre bâtiment.

Si notre cible est la boite de volume#1, la formule : firstSource.X.child.SA_T.tag.T retourne la valeur de la première température d’alimentation de l’arborescence de notre boite de volume.

Cela nous permet de créer des règles ou des KPI très génériques qui peuvent s’adapter facilement à diverses architectures de modélisation.

Exemple Global

Exemple Tag d'un bâtiment utilisé dans Dybee

Notre bâtiment est une entité tout comme un équipement, un composant ou un instrument. Cela dit, il possède ses tags, paramètres, KPIs et règles.

Il est possible de créer nos tags ou paramètres et s’en servir dans nos formules à titre de variables globales.

Pour y accéder à partir de n’importe quelle formule, on écrit par exemple:

global.tag.OA_T : pour accéder à la température extérieure.

global.param.AREA : Pour accéder à la superficie de notre bâtiment.

Vous aimeriez rester informé des nouveaux développements dans Dybee ?

Abonnez-vous à notre infolettre!

M’abonner →

Relation

Il faut toujours évaluer les relations à partir de la cible qui est notre entité de référence (Exemple relation)

ExpressionDescriptionExemple
ParentVise l’équipement « contenant » la cibleExemple_Parent
ChildVise les éléments qui composent la cibleExemple_Child
SourceVise les éléments possédant un flux qui pointe vers la cibleExemple_Source
FirstSourceVise le 1er élément listé de l’arborescence de flux qui pointe vers la cibleExemple_FirstSource
AnySourceVise l’ensemble des éléments de l’arborescence de flux qui pointe vers la cibleExemple_AnySource
AnySourceSibVise l’ensemble des « frères et soeurs » des éléments de l’arborescence de flux qui pointe vers la cibleExemple_AnySourceSib
LoadVise les éléments pointés par des flux partant de la cibleExemple_Load
FirstLoadVise le 1er élément listé de l’arborescence de flux pointé par la cibleExemple_FirstLoad
AnyLoadVise l’ensemble des éléments de l’arborescence de flux pointés par la cibleExemple_AnyLoad
AnyLoadSibVise l’ensemble des « frères et soeurs » des éléments de l’arborescence de flux pointés par la cibleExemple_AnyLoadSib

Exemples relation

Il faut toujours évaluer les relations à partir de la cible.

Dans notre exemple, la cible est « Centrale de traitement d’air #1». Les flux sont représentés par des flèches noires.

En conséquence :

Exemple relation pour centrale de traitement d'air

Child vise les éléments qui la composent, soit le serpentin de chauffage et la sonde de température d’alimentation

Parent : dans ce cas-ci la CTA n’a pas de parent. Elle est le parent des childs HC et SA_T qui la compose.

Source vise les éléments possédant un flux qui pointe cers notre cible soit ici l’unité d’air neuf

Load vise les éléments pointés par un flux partant de notre cible. Ici les boites terminales (ATD) de chacune des zones

Exemple Child

La formule Child permet d’accéder aux sous-entités de notre équipement.

Lorsqu’on utilise child, on doit comme second paramètre, spécifier quelle famille d’enfant on regarde

Exemple 1

Ici, la cible est l’équipement Zone #1 (Alias Z)

Exemple Child avec équipement Zone #1

• Pour accéder à la donnée de température, on doit spécifier child et l’alias de l’enfant :

   child.T.tag.T

• Pour valider si la température de notre zone se trouve au-dessus de la limite haute on utilise la formule suivante :  

child.T.tag.T > child.T.param.T_H

Exemple 2

Ici la cible est l’équipement CTA #1

Exemple relation équipement CTA

Dans un premier temps, on souhaite évaluer si la température d’air alimenté dépasse sa limite supérieure. On utilise pour cela la formule suivante :

  child.SA_T.tag.T > child.SA_T.param.T_H

Si l’on souhaite vérifier si le serpentin chauffe pendant que le système est à l’arrêt.

On utilise la formule suivante :

  tag.BC = 0  AND child.HC.tag.MC > 0

Exemple Parent

La formule Parent permet d’accéder aux éléments de notre entité parents.

Ici la cible est notre sonde de température.

On veut vérifier si la température est plus élevée que la limite haute lorsque la CTA #1 est en marche .On veut alors accéder au tag commande binaire [BC] du parent (la centrale d’air CTA#1) de la sonde de température d’alimentation. On utilise donc cette formule :

  parent.tag.BC = 1  AND tag.T > param.T_H

Selon la cible de départ, utiliser tag.T (si la cible de départ est la SA_T) ou child.SA_T.tag.T (si la cible de départ est la CTA#1) nous renverrais la même valeur.

Puisqu’on travaille avec la donnée horaire, la CTA #1 doit fonctionner pendant l’heure entière pour que parent.tag.BC=1. Si on souhaite analyser l’heure où il a fonctionné, peu importe la durée, on doit écrire parent.tag.BC > 0

Exemple Source

La formule Source permet d’accéder aux entités sources basées sur les flux énergétiques (relations). On doit spécifier l’alias de la famille de la source souhaitée. Seulement la ou les sources directement reliées sont visées.

Exemple source avec serpentin de chauffage (HC)

Ici la cible est le serpentin de chauffage (HC)

Si l’on souhaite vérifier si le serpentin de chauffage est ouvert à 100% alors que la température d’alimentation du réseau de chaud rencontre sa consigne on peut utiliser la formule suivante :

tag.MC = 100  AND (Source.NN.child.SA_T.tag.TSP – Source.NN.child.SA_T.tag.T) < 5

Ici on tolère une différence entre la consigne et la valeur réelle de maximum 5 degrés)

Il est possible de définir préalablement des KPI (indices de performance) dans DYBEE. De base nous vous en mettons plusieurs à disposition. Il existe par exemple pour les réseaux thermiques (NN) un KPI appelé PI_LS_TSP qui nous indique la déviation (en %) entre la température d’alimentation et sa consigne.

Si l’on souhaite l’utiliser, la formule précédente pourrait s’écrire comme suit :

tag.MC = 100  AND kpi.PI_LS_TSP < 10%

Ici, on accepte que cette déviation se trouve à l’intérieur de 10%.`À titre informatif, 0% signifie que la lecture est égale à la consigne.

Exemple Load

Load permet d’accéder aux entités charge basée sur les flux énergétiques (relations). On doit spécifier l’alias de la famille de la charge souhaitée. Seulement les charges directement reliées sont vis

Ici notre cible est la CTA#1. Si l’on souhaite vérifier si les boites de volume connecté à la CTA #1 sont fermées lorsque le système de ventilation est en fonction, on peut le faire via la formule suivante :

tag.BC = 1  AND load.ATD.tag.D_MC = 0

Dybee fera la moyenne des ouvertures des volets des boites terminales visées.

On peut accéder au minimum ou maximum d’ouverture en faisant: load.ATD.tag.D_MC.min ou .max

Exemple FirstSource / FirstLoad

FirstSource permet de parcourir l’arborescence entière de flux à partir de la cible et de s’arrêter à la première entité trouvée de la famille ciblée.

Ici notre cible est la boite de volume #1

Exemple  FirstSource avec cible boite de volume #1

Si l’on souhaite accéder à la température de la sonde de température de [AHU] CTA#1, on ne peut pas utiliser la formule Source qui ne permet d’accéder qu’à ADN qui est la relation de premier niveau.

Or la Boite de volume #1 compte dans son arborescence plusieurs centrales de traitement d’air (CTA air neuf et CTA #1).

Ainsi la formule suivante nous permet d’accéder à la température de la sonde de température de la CTA#1 :

  firstSource.AHU.child.SA_T.tag.T

firstLoad fonctionne de la même façon, mais en arborescence descendante

Exemple AnySource

AnySource permet d’accéder aux éléments (kpi, tag, child, etc.) de nos sources, peu importe le niveau.

Exemple AnySource cible boite volume #1

Celles-ci se trouvent dans l’arborescence et retournent la moyenne des résultats trouvés.

Ici notre cible est la boite de volume #1. Elle compte dans son arborescence plusieurs centrales de traitement d’air (CTA air neuf et CTA #1).

Ainsi la formule :   anySource.AHU.child.SA_T.tag.T

Retourne la moyenne des températures des SA_T de CTA#1 et CTA Air neuf

Exemple AnyLoad

AnyLoad permet d’accéder aux éléments (kpi, tag, child, etc.) de nos charges, peu importe à quel niveau.

Celles-ci se trouvent dans l’arborescence, et retournent la moyenne des résultats trouvés.

Exemple AnyLoad avec cible CTA#1

Ici notre cible est la CTA#1. Si l’on souhaite connaitre la moyenne des ouvertures des volets des boites terminales on peut utiliser la formule suivante :

  anyLoad.ATD.tag.D_MC

Dybee fera la moyenne des ouvertures des volets des boites terminales se trouvant dans l’arborescence de la CTA#1

Exemple AnyLoadSib / AnySouceSib

AnyLoadSib permet d’accéder aux sous-entités qui ont un lien de parenté sans être connectées directement par un flux énergétique à notre cible. AnySourceSib fonctionne de la même façon.

Ici notre cible est la CTA#1

Exemple 1 :

On souhaite créer un kpi qui nous indiquera si les pièces connectées à notre CTA #1 sont en moyenne trop chaude ou trop froide. On doit accéder aux températures des zones [T] et ces sondes ne sont pas connectées à notre cible.

Exemple AnyLoadSib avec pièces connectées à CTA #1

On utilise alors AnyLoadSib :

( AnyLoadSib.T.tag.T – AnyLoadSib.T.tag.TSP ) / AnyLoadSib.T.tag.TSP

Le résultat sera un pourcentage de déviation entre les lectures de température des zones et leur consigne. Un % positif signifie que les pièces sont trop chaudes et à l’inverse, un % négatif signifie qu’elles sont trop froides.

Exemple 2 :

On souhaite déterminer si on a du chauffage dans les zones alimentées par la CTA#1.

Exemple AnyLoadSib avec chauffage zones alimentées par CTA #1

Les plinthes (HT) ne sont pas reliées directement au CTA#1, donc ne sont pas des charges (load). Par contre, elles ont un effet sur les zones.

La formule :   anyLoadSib.HT.tag.MC > 0 retourne 1 si la moyenne des commandes modulantes (MC) des plinthes (HT) de l’ensemble de nos locaux desservis par CTA#1 est supérieur à 0.

Exemple Chaine de relation

Exemple Chaine de relation

Il est évidemment possible de combiner des relations pour accéder à tout ce dont vous souhaitez.

Ainsi, si notre cible est la CTA#1, la formule suivante :

  load.ATD.parent.child.HT.tag.MC retourne la moyenne des commandes modulantes (MC) des plinthes (HT) de l’ensemble de nos locaux desservis par CTA#1.