Files
EVCS/src/nodes/HA_SNAPSHOT_TEMPLATE.json.tpl
Tallagrand Thierry 4fb401be96 Le conseiller ne fixe plus la cible du matin
Le premier cablage reel (§20, 09/08) faisait suivre a la cible SOC du matin
`input_number.evcs_advisor_night_target_soc`, derriere quatre gardes :
toggle, statut ok, fraicheur de 120 minutes, bornage [22, 90].

Depuis que le conseiller est devenu observateur le 12/09, il n emet plus de
cible et ce helper est fige a 55 %. Les quatre gardes continuaient pourtant
de passer toutes les quatre, parce que la garde de fraicheur date le RUN et
non la VALEUR : le conseiller tourne toujours, donc son horodatage est
frais. Activer le toggle aurait applique un chiffre perime sans qu aucune
garde ne s y oppose.

Retire : les quatre parametres d INPUT_PARSE, le bloc de WINDOWS_SOURCEV2,
le passe-plat de BATTERY_CLOUD_LOCKS, la trace (ADVISOR) de DECISION et les
quatre champs du gabarit de snapshot. Le cablage du BILAN (§39) est intact.
`parseAdvisorRunToMs` devient `parseRunStampToMs` : le bilan publie le meme
format et reste son seul appelant.

Golden 98 → 96. Les trois scenarios du cablage sont remplaces par un seul,
`advisor-cible-ignoree`, qui pinne l ABSENCE de cablage : toutes les
conditions de l ancienne regle reunies, et la cible doit rester celle des
regles de prevision. Mutation : cablage restaure → il tombe, avec
« target=22% (ADVISOR) » dans la raison ; retire → 96/96.

Gabarit re-rendu contre Home Assistant : 196 champs, JSON valide, aucun
null. Pousse en production, cycle suivant en succes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GwpFpy2aQ2rJok6tNQSbVj
2026-09-13 12:14:38 +02:00

243 lines
16 KiB
Smarty

{{ {
"soc_percent": states("sensor.victron_battery_soc"),
"battery_current_a": states("sensor.victron_battery_current"),
"pv_power_w": states("sensor.victron_pv_power_system"),
"pv_power_10m_avg_w": states("sensor.victron_pv_power_10m_avg"),
"pv_trend_w": states("sensor.victron_pv_power_trend_w"),
"mppt_operation_modes": states.sensor
| selectattr('entity_id','search','mppt')
| selectattr('entity_id','search','operation_mode')
| map(attribute='state') | join(','),
"house_ac_power_w": states("sensor.victron_consumption_power_l1"),
"house_ac_power_prev_w": states("sensor.victron_consumption_power_l1"),
"grid_power_w": states("sensor.victron_grid_power_l1"),
"grid_state": states("switch.edf_general_ok_switch"),
"victron_acin1_available": states("sensor.victron_ac_in1_available"),
"acin1_last_changed_ts": as_timestamp(states.sensor.victron_ac_in1_available.last_changed, 0) if states.sensor.victron_ac_in1_available is not none else 0,
"grid_switch_last_changed_ts": as_timestamp(states.switch.edf_general_ok_switch.last_changed, 0) if states.switch.edf_general_ok_switch is not none else 0,
"grid_settle_seconds": states("input_number.evcs_grid_settle_seconds"),
"grid_setpoint_w": states("number.gx_device_ac_power_setpoint"),
"grid_setpoint_idle_w": states("input_number.evcs_grid_setpoint_idle_w"),
"today_remaining_kwh": states("sensor.energy_production_today_remaining"),
"tomorrow_kwh": states("sensor.energy_production_tomorrow"),
"evcs_device_connected": states("binary_sensor.victron_evcs_device_connected"),
"evcs_vehicle_connected": states("binary_sensor.victron_evcs_vehicle_connected"),
"evcs_status_raw": states("sensor.victron_evcs_status_raw"),
"evcs_mode_sensor": states("sensor.victron_evcs_mode"),
"evcs_mode_fallback": states("input_text.sensor_victron_evcs_mode"),
"evcs_set_current_a": states("sensor.victron_evcs_set_current"),
"evcs_command_current_a": states("number.victron_evcs_set_current_command"),
"evcs_current_a": states("sensor.victron_evcs_current"),
"evcs_ac_power_w": states("sensor.victron_evcs_ac_power"),
"evcs_charging_time": states("sensor.victron_evcs_charging_time"),
"evcs_session_energy_kwh": states("sensor.evcs_hq2239dnt7p_last_session_energy"),
"evcs_charging_switch": states("switch.victron_evcs_charging"),
"evcs_auto_start_switch": states("switch.victron_evcs_auto_start"),
"controller_enabled": states("input_boolean.victron_evcs_surplus_auto_enabled"),
"notifications_enabled": states("input_boolean.victron_evcs_surplus_notifications"),
"hard_stop_enabled": states("input_boolean.victron_evcs_hard_stop_enabled"),
"charge_permission_now": states("input_boolean.victron_evcs_charge_permission_now"),
"control_latch": states("input_boolean.victron_evcs_control_latch"),
"departure_priority_enabled": states("input_boolean.victron_evcs_departure_priority_enabled"),
"forecast_mode_enabled": states("input_boolean.victron_evcs_forecast_mode_enabled"),
"target_current_auto_a": states("input_number.victron_evcs_target_current_auto"),
"budget_remaining_kwh": states("input_number.victron_evcs_budget_remaining_kwh"),
"projected_end_soc_after_charge": states("input_number.victron_evcs_projected_end_soc_after_charge"),
"pv_start_min_w": states("input_number.victron_evcs_pv_start_min_w"),
"pv_hold_min_w": states("input_number.victron_evcs_pv_hold_min_w"),
"house_ac_headroom_w": states("input_number.victron_evcs_house_ac_headroom_w"),
"battery_discharge_soft_a": states("input_number.victron_evcs_battery_discharge_soft_a"),
"battery_discharge_hard_a": states("input_number.victron_evcs_battery_discharge_hard_a"),
"battery_reserve_up_a": states("input_number.victron_evcs_battery_reserve_up_a"),
"battery_neutral_band_a": states("input_number.victron_evcs_battery_neutral_band_a"),
"soc_start_min": states("input_number.victron_evcs_soc_start_min"),
"modules_en_service": states("input_number.evcs_balance_modules_en_service"),
"bms_max_discharge_current_a": states("sensor.airtria_8_us2000c_maximum_allowed_discharge_current"),
"bms_max_charge_current_a": states("sensor.airtria_8_us2000c_maximum_allowed_charge_current"),
"soc_stop_min": states("input_number.victron_evcs_soc_stop_min"),
"current_min_a": states("input_number.victron_evcs_current_min_a"),
"current_max_auto_a": states("input_number.victron_evcs_current_max_auto_a"),
"grid_current_max_a": states("input_number.evcs_plafond_courant_edf_on"),
"current_step_up_a": states("input_number.victron_evcs_current_step_up_a"),
"current_step_down_a": states("input_number.victron_evcs_current_step_down_a"),
"current_change_cooldown_seconds": states("input_number.victron_evcs_current_change_cooldown_seconds"),
"min_run_minutes": states("input_number.victron_evcs_min_run_minutes"),
"min_stop_minutes": states("input_number.victron_evcs_min_stop_minutes"),
"required_energy_kwh": states("input_number.victron_evcs_required_energy_kwh"),
"soc_comfort_target": states("input_number.victron_evcs_soc_comfort_target"),
"end_of_day_soc_guard": states("input_number.victron_evcs_end_of_day_soc_guard"),
"base_load_remaining_kwh": states("input_number.victron_base_load_remaining_kwh"),
"flexible_safety_margin_kwh": states("input_number.victron_flexible_safety_margin_kwh"),
"end_of_day_soc_target": states("input_number.victron_end_of_day_soc_target"),
"ac_loads_max_safe_w": states("input_number.victron_ac_loads_max_safe_w"),
"battery_full_soc": states("input_number.victron_evcs_battery_full_soc"),
"battery_full_forecast_min_kwh": states("input_number.victron_evcs_battery_full_forecast_min_kwh"),
"forecast_commit_soc_floor": states("input_number.victron_evcs_forecast_commit_soc_floor"),
"forecast_commit_min_kwh": states("input_number.victron_evcs_forecast_commit_min_kwh"),
"cloud_debt_kwh": states("input_number.victron_evcs_cloud_debt_kwh"),
"cloud_debt_max_kwh": states("input_number.victron_evcs_cloud_debt_max_kwh"),
"cloud_tolerance_minutes": states("input_number.victron_evcs_cloud_tolerance_minutes"),
"cloud_debt_started_at": states("input_datetime.victron_evcs_cloud_debt_started_at"),
"battery_soft_breach_at": states("input_text.victron_evcs_battery_soft_breach_at"),
"operating_mode_helper": states("input_text.victron_evcs_operating_mode"),
"departure_time": states("input_datetime.victron_evcs_departure_time"),
"departure_time_jeep": states("input_datetime.victron_evcs_departure_time_jeep"),
"evcs_vehicle": states("input_select.victron_evcs_vehicle"),
"allow_grid_departure_urgent": states("input_boolean.victron_evcs_allow_grid_departure_urgent"),
"last_start_at": states("input_datetime.victron_evcs_last_start_at"),
"last_stop_at": states("input_datetime.victron_evcs_last_stop_at"),
"last_current_change_at": states("input_datetime.victron_evcs_last_current_change_at"),
"day_start_time": states("input_datetime.victron_flexible_day_start_time"),
"day_stop_time": states("input_datetime.victron_flexible_day_stop_time"),
"vebus_overload": states("binary_sensor.victron_ve_bus_overload"),
"vebus_l1_overload": states("binary_sensor.victron_ve_bus_l1_overload"),
"vebus_low_battery": states("binary_sensor.victron_ve_bus_low_battery"),
"vebus_l1_low_battery": states("binary_sensor.victron_ve_bus_l1_low_battery"),
"vebus_ac_out_l1_power_w": states("sensor.victron_ve_bus_ac_out_l1_power"),
"vebus_ac_out_l1_current_a": states("sensor.victron_ve_bus_ac_out_l1_current"),
"vebus_ac_out_l1_voltage_v": states("sensor.victron_ve_bus_ac_out_l1_voltage"),
"vebus_dc_voltage_v": states("sensor.victron_ve_bus_dc_voltage"),
"vebus_dc_current_a": states("sensor.victron_ve_bus_dc_current"),
"vebus_dc_power_w": states("sensor.victron_ve_bus_dc_power_system"),
"vebus_state": states("sensor.victron_ve_bus_state"),
"vebus_main_state": states("sensor.victron_ve_bus_main_state"),
"last_signature": states("input_text.victron_evcs_control_last_signature"),
"hc_night_start_time": states("input_datetime.victron_evcs_hc_night_start"),
"hc_night_stop_time": states("input_datetime.victron_evcs_hc_night_stop"),
"morning_start_time": states("input_datetime.victron_evcs_morning_start"),
"morning_stop_time": states("input_datetime.victron_evcs_morning_stop"),
"hc_midday_start_time": states("input_datetime.victron_evcs_hc_midday_start"),
"hc_midday_stop_time": states("input_datetime.victron_evcs_hc_midday_stop"),
"evening_start_time": states("input_datetime.victron_evcs_evening_start"),
"evening_stop_time": states("input_datetime.victron_evcs_evening_stop"),
"allow_grid_hc_night": states("input_boolean.victron_evcs_allow_grid_hc_night"),
"night_takeover_prev": states("input_boolean.victron_evcs_night_grid_takeover_needed"),
"night_grid_session_committed_prev": states("input_boolean.victron_evcs_night_grid_session_committed"),
"prev_surplus_state": states("input_text.victron_evcs_surplus_state"),
"evcs_night_session_start_soc": states("input_text.victron_evcs_night_session_start_soc"),
"evcs_night_session_start_at": states("input_text.victron_evcs_night_session_start_at"),
"balance_required_soc": states("input_number.evcs_balance_required_soc"),
"balance_energy_to_cover_kwh": states("input_number.evcs_balance_energy_to_cover_kwh"),
"balance_status": states("input_text.evcs_balance_status"),
"balance_last_run": states("input_text.evcs_balance_last_run"),
"allow_grid_hc_midday": states("input_boolean.victron_evcs_allow_grid_hc_midday"),
"probe_enabled": states("input_boolean.victron_evcs_probe_enabled"),
"probe_minutes": states("input_number.victron_evcs_probe_minutes"),
"probe_retry_minutes": states("input_number.victron_evcs_probe_retry_minutes"),
"probe_current_a": states("input_number.victron_evcs_probe_current_a"),
"grid_battery_soft_a": states("input_number.victron_evcs_grid_battery_soft_a"),
"grid_battery_hard_a": states("input_number.victron_evcs_grid_battery_hard_a"),
"morning_probe_pv_avg_min_w": states("input_number.victron_evcs_morning_probe_pv_avg_min_w"),
"morning_probe_pv_trend_min_w": states("input_number.victron_evcs_morning_probe_pv_trend_min_w"),
"midday_probe_pv_avg_min_w": states("input_number.victron_evcs_midday_probe_pv_avg_min_w"),
"afternoon_probe_pv_avg_min_w": states("input_number.victron_evcs_afternoon_probe_pv_avg_min_w"),
"afternoon_probe_soc_min": states("input_number.victron_evcs_afternoon_probe_soc_min"),
"afternoon_battery_max_discharge_a": states("input_number.victron_evcs_afternoon_battery_max_discharge_a"),
"morning_soc_min": states("input_number.victron_evcs_morning_soc_min"),
"midday_soc_min": states("input_number.victron_evcs_midday_soc_min"),
"evening_soc_start_min": states("input_number.victron_evcs_evening_soc_start_min"),
"evening_soc_stop_min": states("input_number.victron_evcs_evening_soc_stop_min"),
"morning_battery_max_discharge_a": states("input_number.victron_evcs_morning_battery_max_discharge_a"),
"midday_battery_max_discharge_a": states("input_number.victron_evcs_midday_battery_max_discharge_a"),
"evening_battery_max_discharge_a": states("input_number.victron_evcs_evening_battery_max_discharge_a"),
"last_block_reason": states("input_text.victron_evcs_last_block_reason"),
"blocked_until": states("input_datetime.victron_evcs_blocked_until"),
"probe_started_at": states("input_datetime.victron_evcs_probe_started_at"),
"victron_evcs_strategy": states("input_select.victron_evcs_strategy"),
"evcs_priority_manual_override": states("input_boolean.victron_evcs_priority_manual_override"),
"evcs_priority_manual_mode": states("input_select.victron_evcs_priority_manual_mode"),
"evcs_priority_manual_reason": states("input_text.victron_evcs_priority_manual_reason"),
"evcs_priority_manual_until": states("input_datetime.victron_evcs_priority_manual_until"),
"house_spike_grace_minutes": states("input_number.victron_evcs_house_spike_grace_minutes"),
"solar_potential_grace_minutes": states("input_number.victron_evcs_solar_potential_grace_minutes"),
"step_up_cooldown_seconds": states("input_number.victron_evcs_step_up_cooldown_seconds"),
"step_down_cooldown_seconds": states("input_number.victron_evcs_step_down_cooldown_seconds"),
"force_mode_auto_revert_minutes": states("input_number.victron_evcs_force_mode_auto_revert_minutes"),
"overload_step_down_a": states("input_number.victron_evcs_overload_step_down_a"),
"overload_hold_seconds": states("input_number.victron_evcs_overload_hold_seconds"),
"overload_stop_after_seconds": states("input_number.victron_evcs_overload_stop_after_seconds"),
"batt_discharge_soft_gt90_a": states("input_number.victron_evcs_batt_discharge_soft_gt90_a"),
"batt_discharge_hard_gt90_a": states("input_number.victron_evcs_batt_discharge_hard_gt90_a"),
"batt_charge_reserve_gt90_a": states("input_number.victron_evcs_batt_charge_reserve_gt90_a"),
"batt_soft_tol_gt90_min": states("input_number.victron_evcs_batt_soft_tol_gt90_min"),
"batt_hard_tol_gt90_sec": states("input_number.victron_evcs_batt_hard_tol_gt90_sec"),
"batt_recovery_gt90_min": states("input_number.victron_evcs_batt_recovery_gt90_min"),
"batt_discharge_soft_80_90_a": states("input_number.victron_evcs_batt_discharge_soft_80_90_a"),
"batt_discharge_hard_80_90_a": states("input_number.victron_evcs_batt_discharge_hard_80_90_a"),
"batt_charge_reserve_80_90_a": states("input_number.victron_evcs_batt_charge_reserve_80_90_a"),
"batt_soft_tol_80_90_min": states("input_number.victron_evcs_batt_soft_tol_80_90_min"),
"batt_hard_tol_80_90_sec": states("input_number.victron_evcs_batt_hard_tol_80_90_sec"),
"batt_recovery_80_90_min": states("input_number.victron_evcs_batt_recovery_80_90_min"),
"batt_discharge_soft_60_80_a": states("input_number.victron_evcs_batt_discharge_soft_60_80_a"),
"batt_discharge_hard_60_80_a": states("input_number.victron_evcs_batt_discharge_hard_60_80_a"),
"batt_charge_reserve_60_80_a": states("input_number.victron_evcs_batt_charge_reserve_60_80_a"),
"batt_soft_tol_60_80_min": states("input_number.victron_evcs_batt_soft_tol_60_80_min"),
"batt_hard_tol_60_80_sec": states("input_number.victron_evcs_batt_hard_tol_60_80_sec"),
"batt_recovery_60_80_min": states("input_number.victron_evcs_batt_recovery_60_80_min"),
"batt_discharge_soft_40_60_a": states("input_number.victron_evcs_batt_discharge_soft_40_60_a"),
"batt_discharge_hard_40_60_a": states("input_number.victron_evcs_batt_discharge_hard_40_60_a"),
"batt_charge_reserve_40_60_a": states("input_number.victron_evcs_batt_charge_reserve_40_60_a"),
"batt_soft_tol_40_60_min": states("input_number.victron_evcs_batt_soft_tol_40_60_min"),
"batt_hard_tol_40_60_sec": states("input_number.victron_evcs_batt_hard_tol_40_60_sec"),
"batt_recovery_40_60_min": states("input_number.victron_evcs_batt_recovery_40_60_min"),
"batt_discharge_soft_25_40_a": states("input_number.victron_evcs_batt_discharge_soft_25_40_a"),
"batt_discharge_hard_25_40_a": states("input_number.victron_evcs_batt_discharge_hard_25_40_a"),
"batt_charge_reserve_25_40_a": states("input_number.victron_evcs_batt_charge_reserve_25_40_a"),
"batt_soft_tol_25_40_min": states("input_number.victron_evcs_batt_soft_tol_25_40_min"),
"batt_hard_tol_25_40_sec": states("input_number.victron_evcs_batt_hard_tol_25_40_sec"),
"batt_recovery_25_40_min": states("input_number.victron_evcs_batt_recovery_25_40_min"),
"batt_discharge_soft_lt25_a": states("input_number.victron_evcs_batt_discharge_soft_lt25_a"),
"batt_discharge_hard_lt25_a": states("input_number.victron_evcs_batt_discharge_hard_lt25_a"),
"batt_charge_reserve_lt25_a": states("input_number.victron_evcs_batt_charge_reserve_lt25_a"),
"batt_soft_tol_lt25_min": states("input_number.victron_evcs_batt_soft_tol_lt25_min"),
"batt_hard_tol_lt25_sec": states("input_number.victron_evcs_batt_hard_tol_lt25_sec"),
"batt_recovery_lt25_min": states("input_number.victron_evcs_batt_recovery_lt25_min"),
"evcs_delivery_ratio_ema": states("input_number.victron_evcs_delivery_ratio_ema"),
"evcs_delivery_noise_ema": states("input_number.victron_evcs_delivery_noise_ema"),
"evcs_no_demand_score_ema": states("input_number.victron_evcs_no_demand_score_ema"),
"evcs_no_demand_semantic_active": states("input_boolean.victron_evcs_no_demand_semantic_active"),
"evcs_no_demand_since_at": states("input_datetime.victron_evcs_no_demand_since_at"),
"evcs_no_demand_filter_eval_at": states("input_datetime.victron_evcs_no_demand_filter_eval_at")
} | tojson }}