@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.