1. Fichiers modèles
Pour cette documentation, nous reprenons le modèle du guide Modéliser pour Ladybug, ainsi qu’un fichier Grasshopper qui reprend l’implémentation de ce modèle dans Grasshopper :
Le fichier Grasshopper d'exemple contient les dépendances suivantes, il convient de les installer :
- Ladybug Tools 1.8.0 (Guide d’installation) ;
- Bifocals 0.5.0.0 (optionnel, pour l’affichage des noms de composants) ;
- Moonlight 1.0.0.0 (optionnel, pour l’affichage en mode sombre).
2. Décomposition du script
Le script est divisé en groupes (visibles sous la forme de blobs de couleur et portant chacun un titre). La suite de ce guide indique l’usage de chacun de ces groupe et sa fonction dans la définition.
2.1. Définition du modèle de base
Les groupes 1
(Rooms), 2
(Apertures), 3
(Shades) et 4
(Modèle) sont tous définis dans le guide Modéliser pour Ladybug. Ces 4 groupes de composants permettent de créer le modèle Honeybee à partir de la géométrie définie dans Rhino.
Ce guide se concentre uniquement sur le paramétrage de la ventilation naturelle, qui est situé entre le composant HB Add Subface
et le composant HB Model
, soit le groupe 5 (Ventilation naturelle).
Il est indispensable de définir l'entrée
operable_
sur le composantHB Aperture
enTrue
, pour bien signifier que la fenêtre défini dans la pièce peut être ouverte. Si cette action n'est pas faite, le composant HB Window Opening présentera une erreur.
2.2. Ventilation naturelle
2.2.1. Le composant HB Window Opening
C’est le principal composant, qui vient se placer entre la définition de Rooms
ayant des Apertures
, et le HB Model
. Ce composant comporte 6 entrées :
Nom de l’entrée | Information attendue | Présence |
---|---|---|
_rooms_ | Pièces Honeybee | Obligatoire |
_vent_cntrl | Objet Ventilation Control (cf. partie suivante) | Obligatoire |
_fract_area_oper | Un nombre entre 0.0 et 1.0 pour la fraction de la surface de la fenêtre qui est ouvrable. Valeur par défaut : 0.5 (typique des fenêtres coulissantes). | Optionnel |
_fract_height_oper_ | Un nombre compris entre 0.0 et 1.0 pour la fraction de la distance entre le bas et le haut de la fenêtre qui est ouvrable. Valeur par défaut : 1.0 (typique des fenêtres qui glissent horizontalement). | Optionnel |
_discharge_coeff_ | Nombre compris entre 0.0 et 1.0 qui sera multiplié par la surface de la fenêtre dans la partie de l’équation relative à la poussée aérostatique, afin de tenir compte du frottement supplémentaire dû à la géométrie de la fenêtre, aux moustiquaires, etc. Cette valeur doit être réduite si les fenêtres sont de type auvent ou battant et ne peuvent pas s’ouvrir complètement. Voici quelques valeurs courantes pour ce coefficient : 0.0 : La ventilation n’est pas prise en compte dans le calcul. 0.45 : Pour des fenêtres non obstruées avec une moustiquaire. 0.65 : Pour les fenêtres non obstruées sans moustiquaire. | Optionnel |
_wind_cross_vent_ | Booléen indiquant s’il existe une ouverture de surface à peu près égale sur le côté opposé de la pièce, de sorte à créer une ventilation traversante. Si False, la pièce est considérée comme mono-orientée. Si rien n’est renseigné, les normales des ouvertures utilisables seront analysés : si les normales des fenêtres d’une pièce donnée présentent une différence d’angle supérieure à 90 degrés, la ventilation transversale sera réglée sur True. Dans le cas contraire, la valeur sera False. | Optionnel |
Il est important de renseigner ces valeurs en conformité avec le projet ou le bâtiment existant représenté, et selon les ordres de grandeurs indiqués par Honeybee dans le tableau ci-dessus.
Par exemple, un ouvrant à la française aura les caractéristiques suivantes sur le modèle d’exemple :
_fract_area_oper
: 1.0_fract_height_oper_
: 1.0_discharge_coeff_
: 0.65_wind_cross_vent_
: False (car les pièces sont ici toutes mono-orientées)
2.2.2. Le composant HB Ventilation Control
Ce composant permet de gérer des conditions pour autoriser ou non l’ouverture d’une fenêtre. Il est principalement orienté sur la détection de températures, et peut recevoir un calendrier d’ouverture. Ses entrées sont :
Nom de l’entrée | Information attendue | Présence |
---|---|---|
min_in_temp_ | Un nombre entre -100 et 100 pour la température intérieure minimale à laquelle ventiler (en degrés Celsius). En général, cette variable est utilisée pour déclencher la ventilation avec des valeurs proches de la température ambiante au-delà desquelles les fenêtres s’ouvrent (par exemple, 22 °C). (Valeur par défaut : -100 °C). | Optionnel |
max_in_temp_ | Un nombre entre -100 et 100 pour la température intérieure maximale à laquelle ventiler (en degrés Celsius). Cette valeur peut être utilisée pour définir une température maximale à partir de laquelle la ventilation naturelle est arrêtée et un système de climatisation est mis en marche. (Valeur par défaut : 100 °C). | Optionnel |
min_out_temp_ | Un nombre entre -100 et 100 pour la température extérieure minimale à laquelle ventiler (en degrés Celsius). Cette valeur peut être utilisée pour s’assurer que le refroidissement par ventilation naturelle n’a pas lieu en hiver, même si la pièce est au-dessus de la température min_in_temp (valeur par défaut : -100 °C). | Optionnel |
max_out_temp_ | Un nombre entre -100 et 100 pour la température extérieure maximale à laquelle ventiler (en degrés Celsius). Cette valeur peut être utilisée pour fixer une limite lorsqu’il fait trop chaud à l’extérieur pour un refroidissement par ventilation. (Valeur par défaut : 100 °C). | Optionnel |
delta_temp_ | Un nombre entre -100 et 100 pour le delta de température (en degrés Celsius) entre l’intérieur et l’extérieur en dessous duquel la ventilation est arrêtée. Il s’agit généralement d’un nombre positif, de sorte que la ventilation n’a lieu que lorsque l’extérieur est plus froid que l’intérieur. Les nombres négatifs indiquent à quel point l’extérieur peut être plus chaud que l’intérieur avant que la ventilation ne soit arrêtée. (Valeur par défaut : -100). | Optionnel |
_schedule_ | Un calendrier facultatif pour la ventilation au cours de l’année. Il peut également s’agir du nom d’un programme à rechercher dans la bibliothèque des normes. Notez que ce programme est appliqué en plus des points de consigne. Le type de ce programme doit être On/Off et les valeurs doivent être soit 0 (pas de possibilité de ventilation), soit 1 (ventilation possible). (Valeur par défaut : Toujours ouvert). | Optionnel |
Ce composant peut être utilisé de différentes manières, selon la meilleure représentation de l’usage réel de la fenêtre. Une seule valeur peut par exemple être entrée dans min_in_temp_
(par exemple 22 °C), et indiquera une ouverture de fenêtre uniquement lorsqu’il fait plus de 22 °C à l’intérieur de la pièce, donc à priori uniquement en été.
Dans le cas du fichier d’exemple, une série de composants a été spécialement développée pour gérer l’ouverture des fenêtres arbitrairement quelques minutes par heure :
- Pour cela, nous utilisons un
HB Fixed Interval Schedule
, relié à l’entrée_schedule_
. Ce composant doit être alimenté par une série de valeurs, qui varie selon le pas de temps (par défaut, une valeur par heure, soit 8760 valeurs pour une année complète). - Dans le cas présent, nous souhaitons avoir un contrôle sur un pas de temps de 5 minutes. C’est la raison pour laquelle l’entrée
_timestep_
du composant est renseignée avec la valeur12
(1h divisée par 12 = 5 minutes). - Nous devons donc produire un calendrier d’une année, avec une valeur toute les 5 minutes, soit 8760 x 12 = 105 120 valeurs.
- Le composant
GhPython Script
a été spécifiquement développé pour géré ce paramétrage facilement (son code source est disponible ci-après). En entrée, il reçoit unGene Pool
, qui permet de choisir à quelles heures la fenêtre est ouverte (les heures d’occupation), et le temps d’ouverture à chacune de ces heures (window_open_time
). - Enfin, le paramétrage de cette journée type est répétée avec le composant
Repeat Data
, qui permet de répéter ce calendrier sur toute l’année.
Avec les paramètres renseignés sur l'exemple ci-dessous, on a indiqué que tous les jours, les fenêtres seraient ouvertes 5 minutes par heure entre 8h et 12h, puis entre 14h et 19h.
L'usage de ce calendrier permet d'ouvrir les fenêtres 5 minutes par heure, même en hiver, et de quantifier les déperditions dues à une ventilation naturelle sur toute l'année.
Par défaut, le pas de temps de la simulation est d'une heure. L'entrée
_timestep_
du composantHB Simulation Parameter
doit être modulée en fonction du calendrier de ventilation naturelle, sans quoi la simulation n'intègrera pas des évènements se déroulant en dessous du pas de temps paramétré.
2.2.3. Code source du composant GhPython
Pour fonctionner correctement, l’entrée gene_pool
du composant doit être paramétrée sur ‘Tree Access’. Pour cela, cliquer-droit sur gene_pool
et choisir dans le menu qui s’ouvre ‘Tree Access’ (au lieu de la valeur par défaut, ‘Item Access).
Le code source contenu dans le composant GhPython Script
est le suivant :
import rhinoscriptsyntax as rs
import math
def extract_from_datatree(tree):
"""Extracts values from a Grasshopper DataTree."""
if hasattr(tree, 'Branches'):
if tree.BranchCount > 0:
return [float(x) for x in tree.Branch(0)]
elif isinstance(tree, list):
return tree
return [0] * 24
def validate_gene_pool(gene_pool):
"""Validates the gene pool input and returns a valid 24-hour schedule."""
values = extract_from_datatree(gene_pool)
if len(values) != 24:
return [0] * 24
return [1 if abs(float(x) - 1) < 0.01 else 0 for x in values]
def process_window_time(window_time):
"""Processes and validates the window open time input."""
try:
window_time = float(window_time)
window_time = round(window_time / 5) * 5
return max(0, min(60, window_time))
except (ValueError, TypeError):
return 0
def create_ventilation_schedule(gene_pool, window_open_time):
"""Creates a 288-element ventilation schedule based on inputs."""
valid_gene_pool = validate_gene_pool(gene_pool)
valid_window_time = process_window_time(window_open_time)
num_intervals_open = int(valid_window_time // 5)
output = [0] * 288
# Populate output based on gene pool
for hour in range(24):
if valid_gene_pool[hour] == 1:
start_index = hour * 12
# Set the first num_intervals_open intervals to 1
output[start_index:start_index + num_intervals_open] = [1] * num_intervals_open
return output
# Debug prints
print("Input gene_pool type:", type(gene_pool))
print("Input gene_pool:", gene_pool)
print("Input window_open_time type:", type(window_open_time))
print("Input window_open_time:", window_open_time)
try:
# Extract values from DataTree and validate
valid_gene_pool = validate_gene_pool(gene_pool)
print("Validated gene_pool:", valid_gene_pool)
valid_window_time = process_window_time(window_open_time)
print("Validated window_time:", valid_window_time)
a = create_ventilation_schedule(gene_pool, window_open_time)
print("First 24 elements of output:", a[:24])
except Exception as e:
print("Error occurred:", str(e))
a = [0] * 288