Releases: sfox38/WhoDunnit
v1.3.1
Version 1.3.1
11 June 2026
- Privacy: Diagnostics downloads now redact identifying data. HA user UUIDs are replaced with stable per-dump placeholders (
user_1,user_2, ...) so cache entries can still be cross-referenced, and person names and person entity IDs are no longer included. This makes diagnostics files safe to attach to public issue reports. - The config flow now validates the selected entity server-side (valid entity ID format, supported domain, entity exists in HA). Previously these rules were enforced only by the frontend picker, so a raw API submission could create a config entry that never produced a working sensor. Invalid submissions now show an error on the form instead.
- Removed unused constants (
ESPHOME_BLEED_THRESHOLD,NAME_TRACKER_PREFIX,NAME_SERVICE_ACCOUNT) and rewrote the stale comment that still described the superseded threshold-based ESPHome bleed detection - confidence is determined by the cache "seen" flag, not cache age. - New Icon
- Documentation: the Advanced Tuning section now references the actual tuning constants in
const.py(CACHE_TTL,CACHE_MAX_SIZE,CACHE_CLEANUP_INTERVAL,USER_CACHE_TTL,HISTORY_LOG_SIZE); clarified that thecache_debugseenflag signals a possible bleed rather than a detected one; resolved a contradiction between the cache debug notes and the documented ESPHome bleed window; assorted grammar and typo fixes.
v1.3.0
Version 1.3.0
1 May 2026
-
Architecture: Replaced per-sensor global event listeners with a single shared listener set. Previously, each tracked entity registered its own listeners for all automation, script, and service call events system-wide, scaling as O(N). Now a single set of listeners populates a shared context cache that all sensors read from.
-
Fixed a race condition where rapid consecutive state changes during a user identity lookup could produce a sensor state mixing fields from two different events.
-
User identity cache now expires after 5 minutes. Previously, person name and service account status were cached permanently until HA restarted, causing stale classifications after person renames or account changes.
-
Cached the bleed-platform check per entity (resolved once at setup rather than on every state change).
-
Added
entity_category: diagnosticso the sensor is properly excluded from energy dashboards, voice assistants, and area summaries. -
Added
SensorDeviceClass.ENUMwith a defined options list for richer UI support. -
Added target entity availability tracking - the sensor now reports unavailable if the tracked entity is removed from HA.
-
Added diagnostics support (Settings -> Integrations -> Whodunnit -> Download diagnostics).
-
Migrated
device_infofrom plain dicts to the typedDeviceInfodataclass. -
Validated restored state on startup - invalid state slugs from older versions are now logged and reset to
monitoringinstead of silently persisting. -
Removed unused imports and dead code.
-
Breaking changes:
- Default attribute values (
source_type,source_id,user_id,event_time,context_id) changed from the string"None"to actualnull. Update any automations or templates that test for the string value"None"- useis noneor== Nonein Jinja2 templates instead. - The
source_idfor unresolved automation chains changed fromautomation.indirecttowhodunnit.indirect. Update any automations filtering onsource_id: automation.indirect.
- Default attribute values (
Version 1.2.1
Whodunnit 🕵️
Version 1.2.1
16 March 2026
- Version bump to include the brand icons for Home Assistant 2026.3 and up.
Version 1.2
22 February 2026
-
Further ESPHome related refinements
-
Attributes monitoring is now Domain specific
-
Improved Confidence score in certain instances, for example when a Script is called by an Automation
-
Removed unused code and objects
-
Improved documentation, both this README.md and source code comments
-
Breaking change: Replaced the inconsistent "Manual/Physical/Internal" terminology with a single unified value
device(displayed as "Device"). The sensor'sstatepreviously usedmanualand thesource_typeattribute previously usedphysical- both must now be updated todevicein any automations, templates, or dashboard cards that reference them. -
Added:
- Now watching attributes for additional domains besides
light:climate,media_player,fan,cover,water_heater,humidifier,vacuum - New Event:
whodunnit_trigger_detected. It is fired on the HA event bus after every classification. Solves the repeated-state trigger problem (e.g. same script runs twice, light toggled on then off) where the sensor's native_value doesn't change and a standard state trigger would not fire. Payload carries all classification fields. - New attribute:
cache_debug. A diagnostic attribute showing the cache entry that matched the last classification (matched_entry), its age at match time, and total cache size. Intended to replace the need for log dumping to diagnose misclassifications
- Now watching attributes for additional domains besides
Version 1.1.1
20 February 2026
- Bug fixes:
- Physical button presses being silently dropped on ESPHome devices within the bleed window
- Dashboard toggles on ESPHome devices always showing Low confidence
- General ESPHome related improvements to the detection cascade
- Added
context_idto thehistory_logfor easier event correlation
Version 1.1
19 February 2026
- Added support for more domains :
climate,water_heater,valve,number,select,button,input_button,input_number,input_select,input_text,alarm_control_panel,timer - Added attribute changes as a trigger source
- Added support for ESPHome devices
- Added support for multiple entities on a single device
- Added
servicestatus for API events such as Node-RED - Added
confidenceattributeHigh/Medium/Low - Added a history log in attributes
- Further refinement to the Context cascade to ensure instantaneous and more accurate identification
- Refactored the code to improve memory usage, speed, and stabilty
- Improved error logging
- Improved comments in the source code
- Rewrite of this README.md
Version 1.0
6 February 2026
- Initial release
Version 1.2
Whodunnit 🕵️
Version 1.2
22 February 2026
-
Further ESPHome related refinements
-
Attributes monitoring is now Domain specific
-
Improved Confidence score in certain instances, for example when a Script is called by an Automation
-
Removed unused code and objects
-
Improved documentation, both this README.md and source code comments
-
Breaking change: Replaced the inconsistent "Manual/Physical/Internal" terminology with a single unified value
device(displayed as "Device"). The sensor'sstatepreviously usedmanualand thesource_typeattribute previously usedphysical- both must now be updated todevicein any automations, templates, or dashboard cards that reference them. -
Added:
- Now watching attributes for additional domains besides
light:climate,media_player,fan,cover,water_heater,humidifier,vacuum - New Event:
whodunnit_trigger_detected. It is fired on the HA event bus after every classification. Solves the repeated-state trigger problem (e.g. same script runs twice, light toggled on then off) where the sensor's native_value doesn't change and a standard state trigger would not fire. Payload carries all classification fields. - New attribute:
cache_debug. A diagnostic attribute showing the cache entry that matched the last classification (matched_entry), its age at match time, and total cache size. Intended to replace the need for log dumping to diagnose misclassifications
- Now watching attributes for additional domains besides
Version 1.1.1
20 February 2026
- Bug fixes:
- Physical button presses being silently dropped on ESPHome devices within the bleed window
- Dashboard toggles on ESPHome devices always showing Low confidence
- General ESPHome related improvements to the detection cascade
- Added
context_idto thehistory_logfor easier event correlation
Version 1.1
19 February 2026
- Added support for more domains :
climate,water_heater,valve,number,select,button,input_button,input_number,input_select,input_text,alarm_control_panel,timer - Added attribute changes as a trigger source
- Added support for ESPHome devices
- Added support for multiple entities on a single device
- Added
servicestatus for API events such as Node-RED - Added
confidenceattributeHigh/Medium/Low - Added a history log in attributes
- Further refinement to the Context cascade to ensure instantaneous and more accurate identification
- Refactored the code to improve memory usage, speed, and stabilty
- Improved error logging
- Improved comments in the source code
- Rewrite of this README.md
Version 1.0
6 February 2026
- Initial release
Version 1.1.1
Version 1.1.1
20 February 2026
- Bug fixes:
- Physical button presses being silently dropped on ESPHome devices within the bleed window
- Dashboard toggles on ESPHome devices always showing Low confidence
- General ESPHome related improvements to the detection cascade
- Added
context_idto thehistory_logfor easier event correlation
Version 1.1
Version 1.1
19 February 2026
- Added support for more domains : climate, water_heater, valve, number, select, button, input_button, input_number, input_select, input_text, alarm_control_panel, timer
- Added attribute changes as a trigger source
- Added support for ESPHome devices
- Added support for multiple entities on a single device
- Added
servicestatus for API events such as Node-RED - Added
Confidenceattribute High/Medium/Low - Added a history log in attributes
- Further refinement to the Context cascade to ensure instantaneous and more accurate identification
- Refactored the code to improve memory usage, speed, and stabilty
- Improved error logging
- Improved comments in the source code
- Rewrite README.md
v1.0.2 Beta 2
Beta 2
- Added support for ESPHome devices
- Added support for multiple entities on a single device
- Added a new state:
internalwhich is probably too aggressive and will likely be removed in next beta - Proper cleanup after virtual device deletion
- Further refinement to the Context cascade to ensure instantaneous and more accurate identification
- Refactored the code to improve memory usage, speed, and stabilty
- Improved comments in the source code
v1.0.1 Beta 1
Beta 1
-
Added support for
climatewater_heaterandvalvedevices. -
Added attribute changes as a trigger source for all devices. A filter is applied to help prevent chatty device attributes from triggering Whodunnit constantly. Examples:
| Entity Type | Attribute Change Example | Whodunnit Result |
|---|---|---|
| Media Player | Volume slider moved (State stays playing) | UI (Shows who changed the volume) |
| Fan | Speed changed from 50% to 75% (State stays on) | Automation (Shows which logic adjusted speed) |
| Light | Color/Brightness changed (State stays on) | UI (Shows who changed the mood) |
| Cover (Blinds) | Tilt position adjusted (State stays open) | Manual (Shows it was a physical remote) |
| Climate (HVAC) | Temperature set to new value | UI (Shows who set the new temperature) |
Initial release
v1.0.0 Create README.md