R3: suite de tests golden — 16 scénarios, bloquante avant push
- tests/golden/run.mjs : chaîne complète des 5 nodes (code réel) en sandbox vm, horloge simulée par scénario, snapshot HA réel comme fixture. - 16 scénarios attendus figés après revue : nuit HC (P7), solaire, abondance P6, provocation P3, gardes SOC, force_grid/force_charge, stop, overload. - n8n-push.mjs exécute la suite avant tout PUT du workflow EVCS : golden rouge = push refusé (--skip-golden en échappatoire consciente). - Validé par mutation : P7 cassé volontairement -> 2 échecs détectés + push bloqué. - tools/fetch-snapshot-fixture.mjs : recapture d'un snapshot production.
This commit is contained in:
175
tests/golden/fixture-snapshot.json
Normal file
175
tests/golden/fixture-snapshot.json
Normal file
@@ -0,0 +1,175 @@
|
||||
{
|
||||
"ac_loads_max_safe_w": "9000.0",
|
||||
"afternoon_battery_max_discharge_a": "unknown",
|
||||
"afternoon_probe_pv_avg_min_w": "1000.0",
|
||||
"afternoon_probe_soc_min": "85.0",
|
||||
"allow_grid_hc_midday": "on",
|
||||
"allow_grid_hc_night": "on",
|
||||
"base_load_remaining_kwh": "2.2",
|
||||
"batt_charge_reserve_25_40_a": "110.0",
|
||||
"batt_charge_reserve_40_60_a": "70.0",
|
||||
"batt_charge_reserve_60_80_a": "40.0",
|
||||
"batt_charge_reserve_80_90_a": "10.0",
|
||||
"batt_charge_reserve_gt90_a": "5.0",
|
||||
"batt_charge_reserve_lt25_a": "150.0",
|
||||
"batt_discharge_hard_25_40_a": "-15.0",
|
||||
"batt_discharge_hard_40_60_a": "-30.0",
|
||||
"batt_discharge_hard_60_80_a": "-50.0",
|
||||
"batt_discharge_hard_80_90_a": "-80.0",
|
||||
"batt_discharge_hard_gt90_a": "-100.0",
|
||||
"batt_discharge_hard_lt25_a": "-8.0",
|
||||
"batt_discharge_soft_25_40_a": "-5.0",
|
||||
"batt_discharge_soft_40_60_a": "-12.0",
|
||||
"batt_discharge_soft_60_80_a": "-20.0",
|
||||
"batt_discharge_soft_80_90_a": "-40.0",
|
||||
"batt_discharge_soft_gt90_a": "-50.0",
|
||||
"batt_discharge_soft_lt25_a": "-3.0",
|
||||
"batt_hard_tol_25_40_sec": "5.0",
|
||||
"batt_hard_tol_40_60_sec": "10.0",
|
||||
"batt_hard_tol_60_80_sec": "15.0",
|
||||
"batt_hard_tol_80_90_sec": "20.0",
|
||||
"batt_hard_tol_gt90_sec": "20.0",
|
||||
"batt_hard_tol_lt25_sec": "2.0",
|
||||
"batt_recovery_25_40_min": "12.0",
|
||||
"batt_recovery_40_60_min": "10.0",
|
||||
"batt_recovery_60_80_min": "8.0",
|
||||
"batt_recovery_80_90_min": "6.0",
|
||||
"batt_recovery_gt90_min": "6.0",
|
||||
"batt_recovery_lt25_min": "15.0",
|
||||
"batt_soft_tol_25_40_min": "2.0",
|
||||
"batt_soft_tol_40_60_min": "4.0",
|
||||
"batt_soft_tol_60_80_min": "6.0",
|
||||
"batt_soft_tol_80_90_min": "10.0",
|
||||
"batt_soft_tol_gt90_min": "12.0",
|
||||
"batt_soft_tol_lt25_min": "1.0",
|
||||
"battery_current_a": "2.799999952316284",
|
||||
"battery_discharge_hard_a": "-25.0",
|
||||
"battery_discharge_soft_a": "0.0",
|
||||
"battery_full_forecast_min_kwh": "4.5",
|
||||
"battery_full_soc": "90.0",
|
||||
"battery_neutral_band_a": "0.0",
|
||||
"battery_reserve_up_a": "8.0",
|
||||
"blocked_until": "2026-08-07 19:08:30",
|
||||
"budget_remaining_kwh": "-10.11",
|
||||
"charge_permission_now": "off",
|
||||
"cloud_debt_kwh": "0.0",
|
||||
"cloud_debt_max_kwh": "1.2",
|
||||
"cloud_debt_started_at": "2026-08-06 19:41:30",
|
||||
"cloud_tolerance_minutes": "20.0",
|
||||
"control_latch": "off",
|
||||
"controller_enabled": "on",
|
||||
"current_change_cooldown_seconds": "30.0",
|
||||
"current_max_auto_a": "22.0",
|
||||
"current_min_a": "6.0",
|
||||
"current_step_down_a": "2.0",
|
||||
"current_step_up_a": "1.0",
|
||||
"day_start_time": "08:30:00",
|
||||
"day_stop_time": "20:15:00",
|
||||
"departure_priority_enabled": "on",
|
||||
"departure_time": "08:50:00",
|
||||
"end_of_day_soc_guard": "85.0",
|
||||
"end_of_day_soc_target": "85.0",
|
||||
"evcs_ac_power_w": "0.0",
|
||||
"evcs_auto_start_switch": "off",
|
||||
"evcs_charging_switch": "off",
|
||||
"evcs_command_current_a": "6",
|
||||
"evcs_current_a": "0.0",
|
||||
"evcs_delivery_noise_ema": "0.003",
|
||||
"evcs_delivery_ratio_ema": "0.001",
|
||||
"evcs_device_connected": "on",
|
||||
"evcs_mode_fallback": "unknown",
|
||||
"evcs_mode_sensor": "Manuel",
|
||||
"evcs_no_demand_filter_eval_at": "2026-08-07 19:08:30",
|
||||
"evcs_no_demand_score_ema": "0.002",
|
||||
"evcs_no_demand_semantic_active": "off",
|
||||
"evcs_no_demand_since_at": "2026-08-07 18:26:00",
|
||||
"evcs_priority_manual_mode": "normal",
|
||||
"evcs_priority_manual_override": "off",
|
||||
"evcs_priority_manual_reason": "unknown",
|
||||
"evcs_priority_manual_until": "2026-04-14 00:00:00",
|
||||
"evcs_set_current_a": "6",
|
||||
"evcs_status_raw": "0",
|
||||
"evcs_vehicle_connected": "off",
|
||||
"evening_battery_max_discharge_a": "-30.0",
|
||||
"evening_soc_start_min": "85.0",
|
||||
"evening_soc_stop_min": "80.0",
|
||||
"evening_start_time": "17:00:00",
|
||||
"evening_stop_time": "20:30:00",
|
||||
"flexible_safety_margin_kwh": "0.9",
|
||||
"force_mode_auto_revert_minutes": "120.0",
|
||||
"forecast_commit_min_kwh": "10.0",
|
||||
"forecast_commit_soc_floor": "35.0",
|
||||
"forecast_mode_enabled": "off",
|
||||
"grid_battery_hard_a": "-20.0",
|
||||
"grid_battery_soft_a": "-10.0",
|
||||
"grid_current_max_a": "20.0",
|
||||
"grid_power_w": "0",
|
||||
"grid_state": "off",
|
||||
"hard_stop_enabled": "on",
|
||||
"hc_midday_start_time": "12:24:00",
|
||||
"hc_midday_stop_time": "14:24:00",
|
||||
"hc_night_start_time": "01:24:00",
|
||||
"hc_night_stop_time": "07:24:00",
|
||||
"house_ac_headroom_w": "5000.0",
|
||||
"house_ac_power_prev_w": "1842.0",
|
||||
"house_ac_power_w": "1842.0",
|
||||
"house_spike_grace_minutes": "10.0",
|
||||
"last_block_reason": "vehicle_not_connected",
|
||||
"last_current_change_at": "2026-08-07 18:26:30",
|
||||
"last_signature": "vehicle_not_connected|profile=evening_high_soc|source=solar_only|chg=0|perm=0|l=0|cur=6|block=vehicle_not_connected|stop=0|prio=0|night=0|ntrg=85|nurg=0|vdf=0|vdfs=0.002",
|
||||
"last_start_at": "2026-08-07 18:26:30",
|
||||
"last_stop_at": "2026-08-07 18:26:00",
|
||||
"midday_battery_max_discharge_a": "-40.0",
|
||||
"midday_probe_pv_avg_min_w": "0.0",
|
||||
"midday_soc_min": "75.0",
|
||||
"min_run_minutes": "29.0",
|
||||
"min_stop_minutes": "0.0",
|
||||
"morning_battery_max_discharge_a": "-20.0",
|
||||
"morning_probe_pv_avg_min_w": "1500.0",
|
||||
"morning_probe_pv_trend_min_w": "-2000.0",
|
||||
"morning_soc_min": "35.0",
|
||||
"morning_start_time": "07:30:00",
|
||||
"morning_stop_time": "11:00:00",
|
||||
"night_takeover_prev": "off",
|
||||
"notifications_enabled": "on",
|
||||
"operating_mode_helper": "evening_high_soc",
|
||||
"overload_hold_seconds": "30.0",
|
||||
"overload_step_down_a": "2.0",
|
||||
"overload_stop_after_seconds": "120.0",
|
||||
"probe_current_a": "6.0",
|
||||
"probe_enabled": "on",
|
||||
"probe_minutes": "3.0",
|
||||
"probe_retry_minutes": "45.0",
|
||||
"probe_started_at": "2026-03-31 00:00:00",
|
||||
"projected_end_soc_after_charge": "35.2",
|
||||
"pv_hold_min_w": "500.0",
|
||||
"pv_power_10m_avg_w": "1778",
|
||||
"pv_power_w": "1851.9319741067588",
|
||||
"pv_start_min_w": "700.0",
|
||||
"pv_trend_w": "unknown",
|
||||
"required_energy_kwh": "10.5",
|
||||
"soc_comfort_target": "85.0",
|
||||
"soc_percent": "93.0",
|
||||
"soc_start_min": "80.0",
|
||||
"soc_stop_min": "29.0",
|
||||
"solar_potential_grace_minutes": "12.0",
|
||||
"step_down_cooldown_seconds": "60.0",
|
||||
"step_up_cooldown_seconds": "30.0",
|
||||
"target_current_auto_a": "6.0",
|
||||
"today_remaining_kwh": "3.486",
|
||||
"tomorrow_kwh": "57.263",
|
||||
"vebus_ac_out_l1_current_a": "8.0",
|
||||
"vebus_ac_out_l1_power_w": "1846",
|
||||
"vebus_ac_out_l1_voltage_v": "229.75999450683594",
|
||||
"vebus_dc_current_a": "-38.400001525878906",
|
||||
"vebus_dc_power_w": "-1842.0",
|
||||
"vebus_dc_voltage_v": "51.279998779296875",
|
||||
"vebus_l1_low_battery": "off",
|
||||
"vebus_l1_overload": "off",
|
||||
"vebus_low_battery": "off",
|
||||
"vebus_main_state": "4",
|
||||
"vebus_overload": "off",
|
||||
"vebus_state": "9",
|
||||
"victron_acin1_available": "0",
|
||||
"victron_evcs_strategy": "auto_solar_plus"
|
||||
}
|
||||
Reference in New Issue
Block a user