šŸ›” Watchman - keeps track of missing entities and actions in your config files

I’ve replied in that GitHub issue 222 here

Is there no way to trigger a re-parsing now. It feels like it only ever runs once (I am forcing restarts just to get an updated report after making changes).

There is no need to restart Home Assistant to trigger parsing. Watchman is smart enough to re-parse automatically whenever Home Assistant fires an event indicating that configuration files may have changed (e.g., if you select Developer Tools → YAML → Reload All YAML configuration after editing a file).

That said, just like in the previous version, you can still force a re-parse when generating a report via Developer Tools → Actions → Watchman.report. Please ensure the Force configuration parsing toggle (not the checkbox) is enabled.

1 Like

Thanks. I guess my problem was that I was changing dashboard yaml so a dashboard refresh wasn’t enough to trigger an automatic re-parse.

I’ll check if Watchman can handle this event in a future version as well.

1 Like

Hi, I’m not sure if I am doing something wrong here but I can’t seem to trigger a report under the devtools, actions. When I try to search for watchman no results are shown, and even trying a manual entry of the watchman: report action doesn’t work. It’s installed via HACS, and I even tried to redownload it but it still doesn’t show up. Maybe it’s not compatible with the latest HA? I am using 2026.1.3 at the moment.

OK, been reading this thread. I’ve removed the files and then downloaded the DEV version and created the integration, now it’s got a simple ā€œpressā€ link to create a report, testing this now.

Thank you for the utility!

Dennis

1 Like

You should search for the ā€œReportā€ action.

v0.8.3-rc1

0.8.3-rc1 is available in HACS.

Note: As this is a pre-release, it will not appear in the update list by default unless you have explicitly enabled beta versions in HACS.

Resolved the issue with excessive CPU resource consumption. This fix has been confirmed by at least 5 users. Thanks to everyone who helped find and solve the problem.

Installation:
To install via HACS, select … → ā€œUpdate informationā€. Then …->ā€œRedownloadā€, click ā€œNeed a different version?ā€, and choose v0.8.3-rc1.

3 Likes

v0.8.3-rc2

It includes improvements to the parser and stability fixes. You can grab it via HACS by selecting the pre-release (beta) option. Additional information about rc2 changes can be found here.

If testing goes well, I plan to push the final 0.8.3 release by the end of the week.

3 Likes

I have somewhat odd problem:
i have TV remote control, made with esp32 and esphome. In my esphome yaml i use events when button is pressed. Example:

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO0
      mode:
        input: true
        pullup: true
      inverted: true
      allow_other_uses: true
    name: "Power"
    id: power
    internal: true
    on_press:
      then:
        - script.execute: reset_idle_timer
        - homeassistant.event:
            event: esphome.remote_button_pressed
            data: {button: "power", type: "single"}

Then i have automation, which is triggered by this event. Now with latest watchman i get a warning in (watchman) that ā€œesphome.remote_button_pressedā€ is missing. The funny thing is that automation is working - it IS triggered by this event… ?

I am seeing this type of ghost error being reported when light group [helpers] are used:

missing_entities:

  • id: light.is_off
    state: missing
    file: automations.yaml
    line: 13
    context:
    parent_type: automation
    parent_alias: Automation - Toggle North Office lights
    parent_id: ā€œ1767323455586ā€

The error indicates that ā€œstateā€ is missing. Here is the YAML from the relevant automation:

triggers:

  • device_id: b6caf6f448a8eea0f04613832e6db86b
    domain: lutron_caseta
    type: press
    subtype: ā€œonā€
    trigger: device
    conditions:
    actions:
  • if:
    • condition: light.is_off
      target:
      entity_id: light.group_north_office_lights
      options:
      behavior: any
      then:
    • action: light.turn_on
      metadata: {}
      target:
      entity_id: light.group_north_office_lights
      data: {}
      else:
      …

The automation works fine.

Please suggest how I can avoid receiving these types of ghost errors.

D

Please use code tags in your posts.

I’m guessing light.is_off is one of the hundreds of domain specific conditions and triggers being added and currently available as labs feature. They are not official yet and may change.

Those a quite a violation of the DRY principle because most of them are different ways to do exactly the same thing as a state or numerical state trigger/conditions, but are formulated differently. So we now have device triggers/conditions, service based triggers/conditions and domain triggers and conditions doing the same thing. Yay!

I’ll be avoiding them because it is a pain and I don’t realy give a shit if it is a light, switch, binary sensor or whatever that is off or on. I should not need to have to pick the right one. It was bad enough with actions for number and input number being confused. Now those problems of things not mixing well will multiply like rabbits.

1 Like

Apologies if this has been answered somewhere in the 273 posts above.

Could someone explain if there’s a significant difference in functionality between Watchman, & the missing entities / actions that are surfaced as Repairs in the Spook HACS integration? Thanks.

I had an update today - I was clean, now 20 missing entities, all in lovelace ?
I have nothing missing in the dashboard. It must be looking at more stuff.
I re-ran the list, and these are them - I tried a few things to skip these in the config for the integrations - but just cant ignore it.

-== Watchman Report ==-

-== Congratulations, all 30 actions from your config are available!

-== Missing 30 entity(ies) from 413 found in your config:
±-------------------------------±--------±-------------------------------------------------------------+
| Entity ID | State | Location |
±-------------------------------±--------±-------------------------------------------------------------+
| vacuum.lubluelu_vac | unavail | .storage/lovelace:501,2898 |
| sensor.air_con_power | missing | .storage/lovelace:1614 |
| sensor.power_now | missing | .storage/lovelace:2348 |
| sensor.energy_garage_corner | missing | .storage/lovelace:2425 |
| sensor.energy_power_now | missing | .storage/lovelace:2443 |
| device_tracker.tallons_iphonex | missing | .storage/lovelace:2873 |
| r | | |
| calendar.llm_vision_timeline | missing | .storage/lovelace:2890 |
| sensor.lubluelu_vac_cleaning_a | unavail | .storage/lovelace:2906 |
| rea | | |
| sensor.lubluelu_vac_cleaning_t | unavail | .storage/lovelace:2910 |
| ime | | |
| sensor.lubluelu_vac_duster_clo | unavail | .storage/lovelace:2914 |
| th_lifetime | | |
| sensor.lubluelu_vac_filter_lif | unavail | .storage/lovelace:2918 |
| etime | | |
| sensor.lubluelu_vac_rolling_br | unavail | .storage/lovelace:2922 |
| ush_lifetime | | |
| sensor.lubluelu_vac_side_brush | unavail | .storage/lovelace:2926 |
| _lifetime | | |
| switch.lubluelu_vac_do_not_dis | unavail | .storage/lovelace:3025 |
| turb | | |
| select.lubluelu_vac_mode | unavail | .storage/lovelace:3029 |
| button.lubluelu_vac_reset_dust | unavail | .storage/lovelace:3033 |
| er_cloth | | |
| button.lubluelu_vac_reset_edge | unavail | .storage/lovelace:3037 |
| _brush | | |
| button.lubluelu_vac_reset_filt | unavail | .storage/lovelace:3041 |
| er | | |
| button.lubluelu_vac_reset_map | unavail | .storage/lovelace:3045 |
| button.lubluelu_vac_reset_roll | unavail | .storage/lovelace:3049 |
| _brush | | |
| number.lubluelu_vac_volume | unavail | .storage/lovelace:3053 |
| select.lubluelu_vac_water_tank | unavail | .storage/lovelace:3057 |
| _adjustment | | |
| switch.voltorb_sentry_mode | disable | .storage/lovelace:3198,3221 |
| | d | |
| binary_sensor.voltorb_ischargi | missing | .storage/lovelace:3703,3730 |
| ng | | |
| sensor.time | missing | .storage/lovelace:3887,3903 |
| sensor.last_boot | missing | .storage/lovelace:3887,3903 |
| sensor.uptime | missing | .storage/lovelace:3887,3903 |
| sensor.ha_uptime | missing | .storage/lovelace:3887,3903 |
| sensor.version | missing | .storage/lovelace:3887,3903 |
| sensor.hacs | missing | .storage/lovelace:3887,3903 |
±-------------------------------±--------±-------------------------------------------------------------+

-== Report created on 07 Feb 2026 13:31:51
-== Parsed 13 files in 0.32s., ignored 49 files
-== Generated in: 0.13s. Validated in: 0.00s.

1 Like

Similar to @vwkombi I was clean before the update, but after the update I had a bunch of missing entities in .storage/core.config_entries. I am not sure what I am to fix here as they are both entities I had manually deleted months ago or renamed.

-== Watchman Report ==-

-== Congratulations, all 41 actions from your config are available!

-== Missing 12 entity(ies) from 218 found in your config:
±-------------------------------±--------±-------------------------------------------------------------+
| Entity ID | State | Location |
±-------------------------------±--------±-------------------------------------------------------------+
| sensor.alexander_bedroom_therm | missing | .storage/core.config_entries:163 |
| ostat_current_temperature | | |
| sensor.master_bedroom_thermost | missing | .storage/core.config_entries:163 |
| at_current_temperature | | |
| sensor.hallway_thermostat_curr | missing | .storage/core.config_entries:163 |
| ent_temperature | | |
| sensor.kitchen_thermostat_curr | missing | .storage/core.config_entries:163 |
| ent_temperature | | |
| sensor.living_room_thermostat_ | missing | .storage/core.config_entries:163 |
| current_temperature | | |
| sensor.family_room_thermostat_ | missing | .storage/core.config_entries:163 |
| current_temperature | | |
| sensor.office_thermostat_curre | missing | .storage/core.config_entries:163 |
| nt_temperature | | |
| sensor.epas_motion_temperature | missing | .storage/core.config_entries:163,165 |
| binary_sensor.epas_motion | missing | .storage/core.config_entries:177 |
| binary_sensor.laundry_motion | missing | .storage/core.config_entries:177 |
| calendar.countdowns | missing | .storage/core.config_entries:200 |
| binary_sensor.front_door_doorb | missing | .storage/core.config_entries:292 |
| ell | | |
±-------------------------------±--------±-------------------------------------------------------------+

-== Report created on 08 Feb 2026 17:56:29
-== Parsed 27 files in 0.59s., ignored 0 files
-== Generated in: 0.20s. Validated in: 0.00s.

I had a couple of these - they were referenced in template helpers I had set up through the GUI. I’d obviously forgotten to update these when I changed the entity_id on another sensor.

It’s one of the enhancements noted in the release announcement that Watchman will now check GUI-created template helpers.

1 Like

That’s correct. Watchman now checks for missing entities in templates and groups created via the GUI.

The text report format has not changed yet, but you can see the names of the helpers (templates and groups) containing the flagged entity in the report service output (YAML response).

1 Like

This helped a lot. Was able to find where all these mentioned entities were used in template sensor. Thanks!