Skip to content

Releases: sfox38/WhoDunnit

v1.3.1

13 Jun 00:53
5420b18

Choose a tag to compare

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 the cache_debug seen flag 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

01 May 04:05
2825bcc

Choose a tag to compare

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: diagnostic so the sensor is properly excluded from energy dashboards, voice assistants, and area summaries.

  • Added SensorDeviceClass.ENUM with 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_info from plain dicts to the typed DeviceInfo dataclass.

  • Validated restored state on startup - invalid state slugs from older versions are now logged and reset to monitoring instead 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 actual null. Update any automations or templates that test for the string value "None" - use is none or == None in Jinja2 templates instead.
    • The source_id for unresolved automation chains changed from automation.indirect to whodunnit.indirect. Update any automations filtering on source_id: automation.indirect.

Version 1.2.1

16 Mar 02:02
7482207

Choose a tag to compare

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's state previously used manual and the source_type attribute previously used physical - both must now be updated to device in 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

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_id to the history_log for 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 service status for API events such as Node-RED
  • Added confidence attribute 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 of this README.md

Version 1.0

6 February 2026

  • Initial release

Version 1.2

22 Feb 01:13
e3d734e

Choose a tag to compare

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's state previously used manual and the source_type attribute previously used physical - both must now be updated to device in 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

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_id to the history_log for 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 service status for API events such as Node-RED
  • Added confidence attribute 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 of this README.md

Version 1.0

6 February 2026

  • Initial release

Version 1.1.1

20 Feb 05:59
c66d64c

Choose a tag to compare

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_id to the history_log for easier event correlation

Version 1.1

19 Feb 07:35
d00feef

Choose a tag to compare

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 service status for API events such as Node-RED
  • Added Confidence attribute 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

17 Feb 01:41
f0cb541

Choose a tag to compare

v1.0.2 Beta 2 Pre-release
Pre-release

Beta 2

  • Added support for ESPHome devices
  • Added support for multiple entities on a single device
  • Added a new state: internal which 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

15 Feb 04:31
c7d33ab

Choose a tag to compare

v1.0.1 Beta 1 Pre-release
Pre-release

Beta 1

  • Added support for climate water_heater and valve devices.

  • 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

06 Feb 01:29
8328ccd

Choose a tag to compare

v1.0.0

Create README.md