I did something simillar for my heating but as well as doors I also included room fans being on or no motion for 30 minutes. I use a template binary sensor to determine when an inhibit (blocking state) is active as follows:
z2_inhibit:
friendly_name: "Z2 Inhibit Active"
value_template: >-
{{ is_state('binary_sensor.balcony_door', 'on') or is_state('switch.sonoff04', 'on') or
is_state('input_boolean.z2_manual_operation', 'on') or is_state('binary_sensor.z2_occupied', 'off') }}
I then use the simple-thermostat card to show what states are inhibiting the heating from operating (in the example below maual operation and the fan are on but motion and open door are off):

At the moment the heating is in manual/standby (i.e. off) as it is quite warm, however if I flip manual off then it goes into “Eco” because the cooling fan is still on:

If the fan was turned off it would go into “Comfort” (the desired room “Comfort” temperature is set in each radiator using an IR remote).
Like you I am hoping this will save some energy.