Thanks, yes ideally Iād like a page with a view of all the devices connected to HA and their historic availability. That way I can see if certain devices are having connectivity issues, if there are general networking problems etc. I think youāre right about binary sensors, Iāll take a look into that.
Hi thanks for the integration! Would like to possible to watch all entities (not only the ones being used in configuration)? Thanks
An adjusted Mark Down Card with scroll.
type: markdown
entity_id: sensor.watchman_missing_entities
card_size: 6
card_mod:
style: |
ha-card.type-markdown {
max-height: 450px;
overflow-y: auto;
padding: 0px;
}
content: >-
<h2 style="margin:2px 0;"><img src="https://brands.home-assistant.io/watchman/dark_logo.png" alt="WM Logo" width="32" height="32"> Watchman report</h2>
<h3 style="margin:2px 0 6px 0;">Missing Entities: {{ states('sensor.watchman_missing_entities') }}</h3>
{% set items = state_attr('sensor.watchman_missing_entities','entities') | default([], true) %}
{% for item in items | sort(attribute='id') -%}
<hr style="margin:6px 0;border:none;border-top:1px solid var(--divider-color,rgba(255,255,255,.2));opacity:.35;">
{% set raw_occs = item.occurrences | default([], true) %}
{% set occs = raw_occs if (raw_occs is iterable and not (raw_occs is string)) else [raw_occs] %}
{% set occ0 = (occs[0] | string) %}
{% set f0 = occ0.rsplit('/',1)[-1] %}
{% set fname0 = f0.rsplit(':',1)[0] %}
{% set line0 = f0.rsplit(':',1) | last %}
{% set state_txt = item.state | default('unknown') %}
<span style="display:flex;align-items:center;gap:6px;line-height:1.1;margin:2px 0;">
<ha-icon style="--mdc-icon-size:18px;vertical-align:middle;"
icon="{{ 'mdi:cloud-alert' if item.state == 'missing'
else 'mdi:cloud-off-outline' if item.state == 'unavail'
else 'mdi:cloud-question' }}"></ha-icon>
<span>{{ item.id }}</span>
</span>
<div style="display:flex;align-items:baseline;gap:8px;white-space:nowrap;width:100%;box-sizing:border-box;line-height:1.1;margin:2px 0;">
<span style="font-family:monospace;flex:0 0 auto;">{% if line0|int(0) > 0 %}Line {{ line0 }} : {% endif %}</span>
<span style="font-family:monospace;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;">
<a title="{{ occ0 }}" style="font-family:inherit;color:inherit;text-decoration:underline;text-underline-offset:2px;">{{ fname0 }} </a>
</span>
<strong style="flex:0 0 auto;color:#fff;">[{{ state_txt }}]</strong>
</div>
{% for o in occs[1:] -%}
{% set s = (o|string) %}
{% set f = s.rsplit('/',1)[-1] %}
{% set fn = f.rsplit(':',1)[0] %}
{% set ln = f.rsplit(':',1) | last %}
<div style="display:flex;align-items:baseline;gap:8px;white-space:nowrap;width:100%;box-sizing:border-box;line-height:1.1;margin:2px 0;">
<span style="font-family:monospace;flex:0 0 auto;">{% if ln|int(0) > 0 %}Line {{ ln }} : {% endif %}</span>
<span style="font-family:monospace;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;">
<a title="{{ s }}" style="font-family:inherit;color:inherit;text-decoration:underline;text-underline-offset:2px;">{{ fn }} </a>
</span>
<span style="flex:0 0 auto;visibility:hidden;">[{{ state_txt }}]</span>
</div>
{%- endfor %}
{%- endfor %}
Iād advise against installing the most recent update to Watchman. I installed the update on my HA Yellow, did the restart as requested, and then HA was unable to fully startup without disconnecting, forcing me to do a cold reboot again and again. I was finally able to get in with SMB during one of the boots and deleted the watchman folder, after which HA started up fine. I deleted the remnants of Watchman and all remains fine. HA 2026.1.3 with OS17 just as a data point. I donāt use Watchman very much, so itās not a big deal to not have it.
same, deleting watchman fixed it, huge error in logs when starting with it.
2026-01-25 16:01:53.953 WARNING (MainThread) [homeassistant.bootstrap] Setup timed out for stage 2 waiting on {<Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at /usr/local/lib/python3.13/asyncio/futures.py:381, <1 more>, Task.task_wakeup()]> cb=[set.remove()]>, <Task pending name='listen state_changed' coro=<add_event_handlers.<locals>.async_on_state_changed() running at /config/custom_components/watchman/__init__.py:188> wait_for=<Future pending
and it just keeps going.
Interestingly I did not see any issues after updating it. Though this is likely because I had already uninstalled the integration (in favour of using Spook) and it was just resident in HACS. I have since removed it from HACS as well. See: Cannot get into my frontend after installing esp and watchmon update? - #7 by tom_l
Same error here. 100% CPU and unable to get into the frontend after rebooting from another update (at the same time)
On CLI was able to do a
docker stop homeassistant which calmed the CPU down
then
core restart --safe-mode
This brought back the frontend and I was able to disable Watchman integration then reboot. Came back fine after that, but if I tried to enable Watchman again⦠100% CPU right away.
As I still had the CLI I could disable it again.
The only thing I had in watchman was a bunch of entities to ignore.
There were a fair amount (50 or so) but thatās all.
And yes, I did skim read the update notes before going ahead with the watchman update
I saw stuff had been re-coded, but nothing in there like ābreaking changesā, so I cracked on.
Yeah just came here to report the same.
I was on v0.6.5 and updated directly to v0.8.1 and it completely broke HA for me.
downgrading to v0.8.0 allowed HA to start normally.
it was kind of tricky to find since I upgraded 4 different HACS integrations at once.
OMG. iām not the only one. Running to my HACS to disable watchman
deleted in my docker container (or via smb)
watchman directory from custom_components
then restarted home assistant and deleted the addon in my settings.
So prior to all this info coming to light regarding the Watchman update issues, I had already hit update but not yet restarted HA. After reading about this Iāve now gone into the HA settings and deleted Watchman but again not yet restarted HA since Iām away from home. I wonder if Iāll escape the issue or if itāll still smash my HA system.
Should I go in and delete the watchman folder as well as what Iāve done so far before I restart HA or is that something that HA is looking to do since Iāve requested it to be deleted from my system (in the settings>devices/integrations page)?
If your UI is still available, and as a data pointā¦
I went to my Settings ā Devices & services, and disable Watchman v0.8.1 from there. And that disable thing was good enough for me to restart my HA, even when I still have v0.8.1 codes in my setup.
Core 2025.12.5 / HAOS 16.3
If you still have the UI then you can either use HACS to redownload the latest āstableā version (for me it was 0.8.0) or go all the way back to the version that was working for you before (that was 0.6.5 for me)
If you donāt have the UI and you have access to a good backup you can delete the existing watchman folder from your HA custom_components folder and replace it with your good watchman backup folder.
then restart as normal and you should be OK.
EDIT:
I was incorrect that 0.8.0 was working for me. I didnāt notice that the integration got a āfailed to initializeā error on that version. It just didnāt completely crash my HA so I didnāt notice.
But itās all for sure working on 0.6.5 so far.
Have you restarted HA after applying the update to 0.8.1?
If not good luck ![]()
Iāve now got something else to report and itās getting even more strange.
my 0.6.5 version was working fine before. the integrations page indicated that version was working as well. But I noticed that the reported entities service wasnāt working correctly.
I tried to go to check the integration configuration but I got āconfig flow could not be loaded server got itself into troubleā error.
I deleted and readded the integration and Iām still getting that same server error when I try to edit the config. As far as I know that all worked before so Iām not sure what just changed if I reverted back.
I need to add a bunch of ignored entities but I canāt get the config to work.
Iāve restarted HA.
Well, I went ahead and restarted HA after I had hit delete integration in the HA settings. It restarted no problem.
Hmā¦am i the only one where it works fine then (v 0.7.0 beta.1) ? ![]()
Should i go back now while itās still working⦠?
I couldnāt stop it from GUI so I used ssh to move watchman from custom_integration folder then restart HA.
It works now (without watchman)
i have no problems tooā¦



