Erreur code pour prévision remplissage cuve

Bonjour la communauté,

Mon problème

Avant d’installer un capteur de niveau dans la cuve, j’ai voulu faire une simulation de remplissage de la cuve sur 5 jours à partir de la prévision de Météo France (intégration de météo France installée)
J’ai créé un template sensor pour faire cela pour avoir en retour un état le volume de remplissage de la cuve de manière quotidienne, mais le résultat est toujours à 0.

J’ai testé le service weather.get_forecasts dans l’outil de développement / Service et j’ai obtenu le résultat suivant :

weather.mandrevillars:
  forecast:
    - datetime: "2025-06-08T00:00:00+00:00"
      condition: rainy
      temperature: 18
      templow: 13.4
      precipitation: 3.3
      humidity: 90
    - datetime: "2025-06-09T00:00:00+00:00"
      condition: clear-night
      temperature: 22.4
      templow: 7.4
      precipitation: 0
      humidity: 95
    - datetime: "2025-06-10T00:00:00+00:00"
      condition: partlycloudy
      temperature: 24.6
      templow: 9.1
      precipitation: 0
      humidity: 90
    - datetime: "2025-06-11T00:00:00+00:00"
      condition: clear-night
      temperature: 27.2
      templow: 11.9
      precipitation: 0
      humidity: 85
    - datetime: "2025-06-12T00:00:00+00:00"
      condition: partlycloudy
      temperature: 29.6
      templow: 14.6
      precipitation: 0
      humidity: 80
    - datetime: "2025-06-13T00:00:00+00:00"
      condition: sunny
      temperature: 30.6
      templow: 16.6
      precipitation: 0
      humidity: 80
    - datetime: "2025-06-14T00:00:00+00:00"
      condition: sunny
      temperature: 30.1
      templow: 18.6
      precipitation: 0.2
      humidity: 85
    - datetime: "2025-06-15T00:00:00+00:00"
      condition: rainy
      temperature: 25.9
      templow: 18.4
      precipitation: 3.2
      humidity: 90
    - datetime: "2025-06-16T00:00:00+00:00"
      condition: rainy
      temperature: 25
      templow: 15.5
      precipitation: 1.8
      humidity: 90
    - datetime: "2025-06-17T00:00:00+00:00"
      condition: sunny
      temperature: 25.6
      templow: 14.7
      precipitation: 0
      humidity: 80
    - datetime: "2025-06-18T00:00:00+00:00"
      condition: sunny
      temperature: 25
      templow: 14.5
      precipitation: 0
      humidity: 80
    - datetime: "2025-06-19T00:00:00+00:00"
      condition: sunny
      temperature: 24.5
      templow: 14.1
      precipitation: 0.2
      humidity: 75
    - datetime: "2025-06-20T00:00:00+00:00"
      condition: sunny
      temperature: 24.9
      templow: 13.6
      precipitation: 0
      humidity: 75
    - datetime: "2025-06-21T00:00:00+00:00"
      condition: sunny
      temperature: 26.6
      templow: 14.1
      precipitation: 0
      humidity: 70

Ainsi pour une surface de toit d’environ 90m², j’ai créer un template spécifique pour cette prévision à 5 jours du volume de remplissage de la cuve

# templates/prevision_cuve_eau.yaml

- trigger:
    - platform: time
      at: "06:00:00"
    - platform: homeassistant
      event: start
  action:
    - service: weather.get_forecasts
      data:
        type: daily
      target:
        entity_id: weather.mandrevillars
      response_variable: meteo_daily_forecast

  sensor:
    - name: "Prevision Cuve Eau Jours"
      unit_of_measurement: "L"
      state_class: "measurement"
      icon: "mdi:water-boiler"
      state: "0"

      attributes:
        previsions_detaillees: >
          {% set volume_actuel_litres = 0.0 %}
          {% set surface_toit_m2 = 90 %}
          {% set resultats = [] %}
          {% set volume_courant = volume_actuel_litres %}

          {# Accéder à la liste 'forecast' qui est imbriquée dans la réponse #}
          {% set meteo_forecast = meteo_daily_forecast['weather.mandrevillars'].forecast if 'weather.mandrevillars' in meteo_daily_forecast and meteo_daily_forecast['weather.mandrevillars'] is defined and 'forecast' in meteo_daily_forecast['weather.mandrevillars'] else [] %}

          {% if meteo_forecast is not none and meteo_forecast is iterable and meteo_forecast | length > 0 %}
            {% for i in range(5) %}
              {% if meteo_forecast[i] is defined %}
                {% set date_prevision = (now().date() + timedelta(days=i)).strftime('%Y-%m-%d') %}
                {% set precipitation_mm = meteo_forecast[i].precipitation | float(0) %}
                {% set volume_ajoute_jour = precipitation_mm * surface_toit_m2 %}
                {% set volume_courant = volume_courant + volume_ajoute_jour %}


                {% set resultats = resultats + [{
                  'date': date_prevision,
                  'precipitation_mm': precipitation_mm | round(2),
                  'volume_ajoute_jour_litres': volume_ajoute_jour | round(2),
                  'volume_cuve_estime': volume_courant | round(2)
                }] %}
              {% endif %}
            {% endfor %}
          {% endif %}
          {{ resultats }}

Sauriez vous me dire où le problème se trouve, S’il vous plait ?
Je vous remercie d’avance pour votre aide.

Ma configuration


System Information

version core-2025.5.3
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.13.3
os_name Linux
os_version 6.6.74-haos-raspi
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
HACS Data ok
GitHub API Calls Remaining 5000
Installed Version 2.0.5
Stage running
Available Repositories 2075
Downloaded Repositories 15
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 15.2
update_channel stable
supervisor_version supervisor-2025.05.3
agent_version 1.7.2
docker_version 28.0.4
disk_total 219.4 GB
disk_used 8.5 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization
board rpi4-64
supervisor_api ok
version_api ok
installed_addons File editor (5.8.0), Terminal & SSH (9.17.0), ZeroTier One (0.20.0), Mosquitto broker (6.5.1), Zigbee2MQTT (2.3.0-1), Matter Server (8.0.0), ESPHome Device Builder (2025.5.1)
Dashboards
dashboards 2
resources 9
views 4
mode storage
Network Configuration
adapters lo (disabled), end0 (enabled, default, auto), docker0 (disabled), hassio (disabled), zt6ntiz5fr (disabled), vethb0eb8ea (disabled), vethe724e14 (disabled), veth2f5bf1f (disabled), veth614745e (disabled), veth972b352 (disabled), veth15ec4d8 (disabled), vethcc72033 (disabled), vethb14ed25 (disabled), vethc15a0ef (disabled), veth7f7ae99 (disabled)
ipv4_addresses lo (127.0.0.1/8), end0 (192.168.1.100/24), docker0 (172.30.232.1/23), hassio (172.30.32.1/23), zt6ntiz5fr (192.168.192.224/24), vethb0eb8ea (), vethe724e14 (), veth2f5bf1f (), veth614745e (), veth972b352 (), veth15ec4d8 (), vethcc72033 (), vethb14ed25 (), vethc15a0ef (), veth7f7ae99 ()
ipv6_addresses lo (::1/128), end0 (2a01:e0a:ec1:6270:da00:481b:81f4:4228/64, fe80::1626:ab1e:3b3d:84ce/64), docker0 (fe80::c085:a1ff:fe42:2a16/64), hassio (fe80::f4b1:89ff:fe24:58d7/64), zt6ntiz5fr (fe80::e80a:a0ff:fe77:fef5/64), vethb0eb8ea (fe80::506e:64ff:fe97:697b/64), vethe724e14 (fe80::4e5:8bff:fe8b:7a22/64), veth2f5bf1f (fe80::d4a3:beff:fe01:23d5/64), veth614745e (fe80::5408:92ff:fe83:423d/64), veth972b352 (fe80::85e:32ff:fe0a:965d/64), veth15ec4d8 (fe80::24d3:b6ff:fe89:484f/64), vethcc72033 (fe80::386c:ecff:feb2:d747/64), vethb14ed25 (fe80::b45d:20ff:feac:d623/64), vethc15a0ef (fe80::5011:43ff:fe7d:ce7d/64), veth7f7ae99 (fe80::24d5:66ff:fe83:f612/64)
announce_addresses 192.168.1.100, 2a01:e0a:ec1:6270:da00:481b:81f4:4228, fe80::1626:ab1e:3b3d:84ce
Recorder
oldest_recorder_run 28 mai 2025 à 14:20
current_recorder_run 7 juin 2025 à 23:38
estimated_db_size 63.56 MiB
database_engine sqlite
database_version 3.48.0
Sonoff
version 3.8.2 (c4b6fda)
cloud_online 2 / 2
local_online 2 / 2
___

Salut,

ça va être difficile de te dire exactement le souci, en revanche as-tu tenté de tester ça et de le faire marcher petit à petit en passant par l’éditeur de modèles dans les outils de dev?
Quand tu dis que le résultat est toujours 0, c’est quoi le résultat? qu’affiches tu?

@AlexHass Merci pour ton retour.
Je ne suis pas un expert dans les outils de developpement car je ne sais pas ce qui fonctionne ou non dans chaque rubrique. Cependant, j’ai décidé de mettre des « balises » pour voir comment le code est exécuté et retrouver ces informations dans les attributs du capteur.

# Ce fichier est inclus via template: !include_dir_merge_list templates/

- trigger:
    - platform: time
      at: "06:00:00"
    - platform: homeassistant
      event: start
  action:
    - service: persistent_notification.create
      data:
        message: "Le trigger du capteur 'Prevision Cuve Eau Jours' a fonctionné ! Heure : {{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
        title: "Trigger Capteur Météo OK"

    - service: weather.get_forecasts
      data:
        type: daily
      target:
        entity_id: weather.mandrevillars
      response_variable: meteo_daily_forecast

    - service: persistent_notification.create
      data:
        message: >
          Contenu de meteo_daily_forecast:
          {{ meteo_daily_forecast | tojson(indent=2) }}

          Contenu de meteo_forecast (dans le template):
          {% if 'weather.mandrevillars' in meteo_daily_forecast and meteo_daily_forecast['weather.mandrevillars'] is defined and 'forecast' in meteo_daily_forecast['weather.mandrevillars'] %}
            {{ meteo_daily_forecast['weather.mandrevillars'].forecast | tojson(indent=2) }}
          {% else %}
            'weather.mandrevillars' ou 'forecast' manquant dans meteo_daily_forecast
          {% endif %}
        title: "Débogage Prévisions Météo"

  sensor:
    - name: "Prevision Cuve Eau Jours"
      unit_of_measurement: "L"
      state_class: "measurement"
      icon: "mdi:water-boiler"
      
      state: >
        {% set final_calculated_litres = 0 %}
        {% set previsions_detaillees_attr = this.attributes.previsions_detaillees | default({}) %}
        {% set actual_previsions = previsions_detaillees_attr.actual_previsions | default([]) %}

        {% if actual_previsions is iterable %}
          {% for item in actual_previsions %}
            {% set final_calculated_litres = final_calculated_litres + (item.volume_ajoute_jour_litres | float(0)) %}
          {% endfor %}
        {% endif %}
        {{ final_calculated_litres | round(0) }}

      attributes:
        _debug_state_messages: >
          {% set debug_messages = [] %}
          {% set previsions_raw_attr = this.attributes.previsions_detaillees | default({}) %}
          {% set previsions_str = previsions_raw_attr.actual_previsions | default("[]") %}
          
          {% if previsions_str is string and previsions_str | length > 0 and (previsions_str.startswith('[') or previsions_str.startswith('{')) %}
            {% set debug_messages = debug_messages + ["STATE DEBUG: Entered JSON parsing block."] %}
            {% set resultats_details = previsions_str | from_json(default=[]) %}
            
            {% if resultats_details is iterable %}
              {% set debug_messages = debug_messages + ["STATE DEBUG: JSON successfully decoded and is iterable."] %}
              {% for item in resultats_details %}
                {% set debug_messages = debug_messages + ["STATE DEBUG: Loop iteration - item (precipitation): " ~ (item.precipitation_mm | default('N/A')) | string] %}
              {% endfor %}
              {% set debug_messages = debug_messages + ["STATE DEBUG: Loop finished."] %}
            {% else %}
              {% set debug_messages = debug_messages + ["STATE DEBUG: JSON decoding resulted in non-iterable (or failed silently). Value: " ~ resultats_details | tojson] %}
            {% endif %}
          {% else %}
            {% set debug_messages = debug_messages + ["STATE DEBUG: JSON string for previsions_detaillees is empty or invalid. Value: '" ~ previsions_str | string ~ "'"] %}
          {% endif %}
          {{ debug_messages | tojson(indent=2) }}

        previsions_detaillees: >
          {% set debug_attr_messages_list = [] %} {# CHANGEMENT : Utilisation d'une variable temporaire pour les messages #}
          {% set collected_results = [] %} {# CHANGEMENT : Utilisation d'une variable temporaire pour les résultats #}
          {% set volume_actuel_litres = 0.0 %}
          {% set surface_toit_m2 = 90 %}
          {% set volume_courant = volume_actuel_litres %}

          {% set meteo_forecast = [] %}
          {% if 'weather.mandrevillars' in meteo_daily_forecast and meteo_daily_forecast['weather.mandrevillars'] is defined and 'forecast' in meteo_daily_forecast['weather.mandrevillars'] %}
            {% set meteo_forecast = meteo_daily_forecast['weather.mandrevillars'].forecast %}
            {% set debug_attr_messages_list = debug_attr_messages_list + ["ATTR DEBUG: meteo_forecast data found."] %}
          {% else %}
            {% set debug_attr_messages_list = debug_attr_messages_list + ["ATTR DEBUG: meteo_forecast data NOT found or malformed in response_variable (meteo_daily_forecast)."] %}
          {% endif %}

          {% if meteo_forecast is not none and meteo_forecast is iterable and meteo_forecast | length > 0 %}
            {% set debug_attr_messages_list = debug_attr_messages_list + ["ATTR DEBUG: meteo_forecast is iterable and not empty. Entering loop for " ~ (meteo_forecast | length) ~ " items."] %}
            {% for item in meteo_forecast %}
              
              {# NOUVELLE MÉTHODE D'AJOUT DES MESSAGES DE DÉBOGAGE #}
              {% set debug_attr_messages_list = debug_attr_messages_list + [
                  "ATTR DEBUG: Processing Day " ~ loop.index0 ~ ":",
                  "  Item precipitation (raw): " ~ (item.precipitation | default('N/A')) | string,
                  "  Item condition (raw): " ~ (item.condition | default('N/A')) | string,
                  "  Full item JSON: " ~ item | tojson
              ] %}

              {% set date_prevision = (now().date() + timedelta(days=loop.index0)).strftime('%Y-%m-%d') %}
              {% set precipitation_mm = item.precipitation | float(0) %}
              {% set volume_ajoute_jour = precipitation_mm * surface_toit_m2 %}
              {% set volume_courant = volume_courant + volume_ajoute_jour %}

              {% set debug_attr_messages_list = debug_attr_messages_list + [
                  "ATTR DEBUG: Calculated for Day " ~ loop.index0 ~ ":",
                  "  precipitation_mm_final: " ~ precipitation_mm | string,
                  "  volume_ajoute_jour_final: " ~ volume_ajoute_jour | string,
                  "  volume_cuve_estime_current: " ~ volume_courant | string
              ] %}

              {# NOUVELLE MÉTHODE D'AJOUT DES RÉSULTATS À LA LISTE #}
              {% set new_result_item = dict(
                date=date_prevision,
                precipitation_mm=precipitation_mm | round(2),
                volume_ajoute_jour_litres=volume_ajoute_jour | round(2),
                volume_cuve_estime=volume_courant | round(2)
              ) %}
              {% set collected_results = collected_results + [new_result_item] %}

            {% endfor %}
            {% set debug_attr_messages_list = debug_attr_messages_list + ["ATTR DEBUG: Loop finished. Final results count: " ~ collected_results | length | string] %}
          {% else %}
            {% set debug_attr_messages_list = debug_attr_messages_list + ["ATTR DEBUG: meteo_forecast is NOT iterable or is empty. Loop skipped."] %}
          {% endif %}
          
          {# RETOURNE LES MESSAGES ET LES RÉSULTATS #}
          {{ dict(debug_messages=debug_attr_messages_list, actual_previsions=collected_results) | tojson(indent=2) }}

Voici le retour en notification pour connaitre le contenu de meteo_daily_forecast

Débogage Prévisions Météo
Contenu de meteo_daily_forecast: {
"weather.mandrevillars": {
"forecast": [
{
"condition": "partlycloudy",
"datetime": "2025-06-12T00:00:00+00:00",
"humidity": 75,
"precipitation": 0.0,
"temperature": 31.1,
"templow": 14.9
},
{
"condition": "partlycloudy",
"datetime": "2025-06-13T00:00:00+00:00",
"humidity": 85,
"precipitation": 0.0,
"temperature": 33.4,
"templow": 19.0
},
{
"condition": "lightning",
"datetime": "2025-06-14T00:00:00+00:00",
"humidity": 80,
"precipitation": 0.0,
"temperature": 32.6,
"templow": 19.1
},
{
"condition": "lightning",
"datetime": "2025-06-15T00:00:00+00:00",
"humidity": 95,
"precipitation": 8.1,
"temperature": 22.9,
"templow": 17.7
},
{
"condition": "rainy",
"datetime": "2025-06-16T00:00:00+00:00",
"humidity": 95,
"precipitation": 0.2,
"temperature": 23.1,
"templow": 13.4
},
{
"condition": "sunny",
"datetime": "2025-06-17T00:00:00+00:00",
"humidity": 75,
"precipitation": 0.0,
"temperature": 25.5,
"templow": 13.6
},
{
"condition": "sunny",
"datetime": "2025-06-18T00:00:00+00:00",
"humidity": 75,
"precipitation": 0.0,
"temperature": 26.6,
"templow": 16.0
},
{
"condition": "sunny",
"datetime": "2025-06-19T00:00:00+00:00",
"humidity": 75,
"precipitation": 0.0,
"temperature": 26.1,
"templow": 15.1
},
{
"condition": "sunny",
"datetime": "2025-06-20T00:00:00+00:00",
"humidity": 70,
"precipitation": 0.0,
"temperature": 27.2,
"templow": 14.7
},
{
"condition": "sunny",
"datetime": "2025-06-21T00:00:00+00:00",
"humidity": 70,
"precipitation": 0.0,
"temperature": 27.6,
"templow": 15.5
},
{
"condition": "sunny",
"datetime": "2025-06-22T00:00:00+00:00",
"humidity": 65,
"precipitation": 0.0,
"temperature": 27.1,
"templow": 16.1
},
{
"condition": "sunny",
"datetime": "2025-06-23T00:00:00+00:00",
"humidity": 70,
"precipitation": 0.0,
"temperature": 27.0,
"templow": 15.6
},
{
"condition": "sunny",
"datetime": "2025-06-24T00:00:00+00:00",
"humidity": 70,
"precipitation": 0.0,
"temperature": 25.1,
"templow": 15.4
},
{
"condition": "sunny",
"datetime": "2025-06-25T00:00:00+00:00",
"humidity": 75,
"precipitation": 0.0,
"temperature": 25.4,
"templow": 14.9
}
]
}
}
Contenu de meteo_forecast (dans le template):
[
{
"condition": "partlycloudy",
"datetime": "2025-06-12T00:00:00+00:00",
"humidity": 75,
"precipitation": 0.0,
"temperature": 31.1,
"templow": 14.9
},
{
"condition": "partlycloudy",
"datetime": "2025-06-13T00:00:00+00:00",
"humidity": 85,
"precipitation": 0.0,
"temperature": 33.4,
"templow": 19.0
},
{
"condition": "lightning",
"datetime": "2025-06-14T00:00:00+00:00",
"humidity": 80,
"precipitation": 0.0,
"temperature": 32.6,
"templow": 19.1
},
{
"condition": "lightning",
"datetime": "2025-06-15T00:00:00+00:00",
"humidity": 95,
"precipitation": 8.1,
"temperature": 22.9,
"templow": 17.7
},
{
"condition": "rainy",
"datetime": "2025-06-16T00:00:00+00:00",
"humidity": 95,
"precipitation": 0.2,
"temperature": 23.1,
"templow": 13.4
},
{
"condition": "sunny",
"datetime": "2025-06-17T00:00:00+00:00",
"humidity": 75,
"precipitation": 0.0,
"temperature": 25.5,
"templow": 13.6
},
{
"condition": "sunny",
"datetime": "2025-06-18T00:00:00+00:00",
"humidity": 75,
"precipitation": 0.0,
"temperature": 26.6,
"templow": 16.0
},
{
"condition": "sunny",
"datetime": "2025-06-19T00:00:00+00:00",
"humidity": 75,
"precipitation": 0.0,
"temperature": 26.1,
"templow": 15.1
},
{
"condition": "sunny",
"datetime": "2025-06-20T00:00:00+00:00",
"humidity": 70,
"precipitation": 0.0,
"temperature": 27.2,
"templow": 14.7
},
{
"condition": "sunny",
"datetime": "2025-06-21T00:00:00+00:00",
"humidity": 70,
"precipitation": 0.0,
"temperature": 27.6,
"templow": 15.5
},
{
"condition": "sunny",
"datetime": "2025-06-22T00:00:00+00:00",
"humidity": 65,
"precipitation": 0.0,
"temperature": 27.1,
"templow": 16.1
},
{
"condition": "sunny",
"datetime": "2025-06-23T00:00:00+00:00",
"humidity": 70,
"precipitation": 0.0,
"temperature": 27.0,
"templow": 15.6
},
{
"condition": "sunny",
"datetime": "2025-06-24T00:00:00+00:00",
"humidity": 70,
"precipitation": 0.0,
"temperature": 25.1,
"templow": 15.4
},
{
"condition": "sunny",
"datetime": "2025-06-25T00:00:00+00:00",
"humidity": 75,
"precipitation": 0.0,
"temperature": 25.4,
"templow": 14.9
}
]

Il y a 2 heures

Le capteur sensor.prevision_cuve_eau_jours est à l’état 0 et ses attributs sont :

state_class: measurement
_debug_state_messages:
  - >-
    STATE DEBUG: JSON string for previsions_detaillees is empty or invalid.
    Value: '[]'
previsions_detaillees:
  actual_previsions: []
  debug_messages:
    - "ATTR DEBUG: meteo_forecast data found."
    - >-
      ATTR DEBUG: meteo_forecast is iterable and not empty. Entering loop for 14
      items.
    - "ATTR DEBUG: Loop finished. Final results count: 0"
unit_of_measurement: L
icon: mdi:water-boiler
friendly_name: Prevision Cuve Eau Jours

Mes messages de debug montrent qu’on remplit bien les conditions mais que la boucle for n’est pas exécutée.
Il y a potentiellement une erreur de lecture des données et je ne les comprends pas.

J’aurai voulu que actual_prevision soit un dictionnaire avec pour information

  • Date (de la journée)
  • precipitation_mm (qui serait une recopie de meteo_daily_forecast.precipitation
  • volume_ajoute_jour_litres (conversion des précipitation en litres
  • volume_cuve_estime (le cumul des volumes ajoutés des jours précédents)

Je ne vois pas où est l’erreur est ca fait des jours que je cherche avec les messages debug pour savoir ce qu’il se passe.
Si vous avez une idée, je suis preneur, Merci d’avance.

Bonjour,

en recherchant dans le forum, je suis tombé sur un article présentant les modifications de l’intégration Météo France dans la version 2024.4.
J’ai pu retrouver un code qui permet de récupérer les informations souhaitées

Pour finir, voila la solution que j’ai intégré à mon système domotique
Dans un fichier spécifique pour les templates : /homeassistant/templates/prevision_cuve_eau.yaml

- trigger:
    - platform: time
      at: "06:00:00"
    - platform: homeassistant
      event: start
  action:
    - service: weather.get_forecasts
      data:
        type: daily
      target:
        entity_id: weather.mandrevillars
      response_variable: daily
  sensor:
    - name: "Prevision Cuve Eau (7j)"
      unique_id: prevision_cuve_eau_7j
      state: "{{ now().strftime('%Y-%m-%d') }}"
      attributes:
        previsions_json: >-
          {% set surface_toit_m2 = 90 %}
          {% set forecast = daily['weather.mandrevillars'].forecast | default([]) %}
          {% set resultats = namespace(jours=[]) %}
          {% set total = namespace(volume=0.0) %}
          
          {% for i in range([7, forecast | length] | min) %}
            {% set jour = forecast[i] %}
            {% set pluie = jour.precipitation | float(0) %}
            {% set date = jour.datetime[:10] %}
            {% set volume = pluie * surface_toit_m2 %}
            {% set total.volume = total.volume + volume %}
            {% set resultats.jours = resultats.jours + [{
              "date": date,
              "precipitation_mm": pluie | round(2),
              "volume_ajoute_jour_litres": volume | round(2),
              "volume_cuve_estime": total.volume | round(2)
            }] %}
          {% endfor %}
          {{ resultats.jours | tojson }}

Encore merci pour la démarche de recherche. Les états et Modèles dans Outils de developpement m’ont permis d’avancer pas à pas dans la conception du code.

1 « J'aime »