Skip to content

HA Sim Test Recipes

Willem edited this page Aug 24, 2026 · 1 revision

HA-Sim Test Tool — Test Recipes

73 recipes (R01–R86, with gaps where structural recipes were converted to pytest). Each recipe is a self-contained module under tools/ha_sim_test/recipes/.

The 10 structural recipes (R39, R48, R49, R51–R57) have been converted to pytest unit tests — 7 in ramses_rf (tests/tests_rf/structural/) and 3 in ramses_cc (tests/tests_new/structural/). These tests run directly against the source code without needing the ha-sim container.

Device lifecycle

Recipe Description Checks
R01 Heat profile activation + schema/entities 5
R02 remove_device — remove TRV 4
R03 remove_device — HGI rejection 2
R04 remove_device — CTL / main_tcs removal 3
R05 No resurrection after restart 2
R10 Invalid main_tcs safety net 4
R11 Discover → accept → remove lifecycle 6
R16 Concurrency/stress test — rapid add/remove 4

Schema management

Recipe Description Checks
R07 HVAC schema caching — FAN + REM 5
R07b Restart, HVAC survives + device-loss scenario 5
R08 HVAC schema caching — merge union on reload 3
R09 User schema edits survive sync — _alias 2
R15 Verify hvac_schema key in .storage 3
R20 SSOT Phase 2 migration — known_list traits 5

Zone binding & packet injection

Recipe Description Checks
R06 Zone binding via inject_message (000C packet) 2
R14 Raw packet injection — zone rebinding 1
R19 Zone binding from broadcast traffic (passive) 1
R19b Invalid zone indices are rejected 1
R19c 18: (HGI) devices tracked but no zone binding 2
R21 CTL (01:) does not get zone_idx from 000A 3
R22 THM (22:) zone binding via 000A 2
R23 0004 zone_name propagation (parser_0004) 2
R28 Foreign HGI — 0004 zone names not blocked 4

Discovery service

Recipe Description Checks
R17 Discovery service lifecycle [A] 14
R18 add_faked_rem service — creates faked REM 6
R47 Unknown device discovery + log tracking 4

BDR / OTB classification (issue 834)

Recipe Description Checks
R29 BDR 3B00/3EF0 → appliance_control 6
R34 BDR re-parent hotwater_valve → appliance_control 5
R37 BDR hotwater_valve misclassified as appliance_control 10

Phase 3c — _class detection & mismatch

Recipe Description Checks
R24 Phase 3c — class mismatch flagging 5
R25 Phase 3c — fix mismatch, notification dismissed 2
R26 Phase 3c — missing _class detection 3
R27 Phase 3c — accept_discovered_device preserves root 5

Phase 3d — FAN _commands & multi-REM

Recipe Description Checks
R30 Phase 3d.4 — multi-REM FAN with _bound as list 5
R31 Phase 3d.6 — _commands override precedence (E2E) 6
R33 Phase 3d.3b — consolidated stripper validation 11

Phase 4 — known_list enforcement (PR 870)

Recipe Description Checks
R58 Phase 4 — known_list removed, enforce always-on 14

HVAC topology (FAN/REM/CO2)

Recipe Description Checks
R62 Topology event-driven schema sync (step 5) 5
R65 HVAC 'belongs to' FAN detected from traffic 19
R66 HVAC dual-role CO2+REM support 13
R67 HVAC via_device/parent_device grouping (step 6d) 19
R68 Active HVAC topology probing (6f) 13

CQRS / DHW hydration

Recipe Description Checks
R35 Water heater DHW CQRS hydration (issue 843) 4
R36 Zone climate state hydration (issue 843) 3

Battery & cache restore

Recipe Description Checks
R32 Battery (1060) cache restore — stale 1060 after restart 4

Device health tracking (issue 767)

Recipe Description Checks
R50 Device health tracking — orphaned/lost devices 17

HVAC topology learning (issue 767)

Recipe Description Checks
R42 HVAC topology learned from traffic — binding rules 4
R43 CO2 dual-role device — 1298 + 22F1 from same 37: 2
R44 Schema migration v1→v2 — traits survive restart 5
R45 Crash recovery — force reload, topology survives 6
R46 _disabled trait — device excluded from known_list 5

Packet DTO & positional addressing (issue 639)

Recipe Description Checks
R38 Faked THM 30C9 correct zone_idx (issue 639) 3
R40 PacketDTO rx_path integrity (issue 639) 9

Payload decode regression guards

Recipe Description Checks
R63 Zone name survives message_store prune (issue 919) 5
R64 No repeated discovery notifications (issue 917) 3
R69 Faked THM 03x 30C9 decoder (issue 929) 4
R70 3EF0 9-byte OTB payload decode (PR 1031 regression guard) 19
R71 1260 DHW temperature value accuracy 3
R72 3150 heat_demand value accuracy 6

Domain ID & placement (issue 931)

Recipe Description Checks
R73 Authoritative domain_id from 000C — FA/F9/FC placement 6
R74 Manual placement preserved + comment staleness 5

Zone class & BDR fallback (issue 947)

Recipe Description Checks
R75 Zone class inference + BDR hotwater_valve fallback 8
R76 Zone name 0004 polling regression 5

Discovery & re-notification (issues 987, 988, 1000, 1003)

Recipe Description Checks
R77 HGI device not re-discovered every cycle (issue 987) 4
R78 Orphaned device suppress_not_seen, no re-notify (issue 988) 4
R79 FAN→DIS reclassification via contradiction detection (issue 1000) 5
R80 Foreign-owned device not flagged as "new" (issue 1003) 3

Config entry migration

Recipe Description Checks
R81 Config entry migration v2→v3 (known_list to schema) 25
R82 Config entry migration v1→v3 (0.56-era to current) 26

Zone sensor learning (issue 1013)

Recipe Description Checks
R83 Representative TRV sensor persistence 7
R84 Multi-room zone sensor learning 6

Zone config & demand hydration (issue 1102)

Recipe Description Checks
R85 000A zone config hydration (min/max temp) 3
R86 relay/heat/TPI demand hydration (ramses_cc#1026) 3

Other

Recipe Description Checks
R60 send_packet CommandDTO + device_id filter (issue 864) 9
Log Report ERROR/WARNING analysis 2

Total: ~449 checks across 73 recipes (10 structural recipes converted to pytest — see ramses_rf/ramses_cc test suites).

Removed / converted recipes

Recipe Reason
R39, R41, R48, R49 Converted to pytest in ramses_rf
R51–R57 Converted to pytest in ramses_rf/ramses_cc
R59 Removed — functionality covered by R58

Back to: HA-Sim Test Tool

Clone this wiki locally