Stopwatch Plus – a stopwatch with live dashboard card, source entity binding and interval events

Hi everyone! :waving_hand:

Home Assistant’s built-in timer counts down – but I needed the opposite: a stopwatch that counts up, can be paused and resumed, and ideally runs on its own while a device is in use. So I built Stopwatch Plus.

What it does

  • Any number of stopwatches, each one its own device with sensors, buttons and an event entity.
  • Follows a source entity if you like: it runs while the TV is playing or a window is on, pauses otherwise, bridges short unavailable dropouts and ends the session automatically after a while of inactivity.
  • Interval events after every full interval of running time (pauses don’t count) – e.g. “the TV has been on for 1 hour”.
  • Triggers in the automation editor for every event (started, paused, stopped, interval reached …), no event names to type.
  • Dashboard card and tile card feature included and loaded automatically – counting live every second, with Start/Pause, Stop and Reset. It also shows up in the card suggestions when you add a card By entity.
  • Last session sensor that keeps the time after the stopwatch went back to zero.
  • Database-friendly: sensors update once a minute by default, the card counts live anyway.
  • Survives restarts, works from Home Assistant 2026.1 on.

Some use cases

  • Screen time for the TV or a game console, with an announcement every hour
  • A reminder every 10 minutes while a window is open
  • Sauna or workout sessions
  • Running time of a pump, dehumidifier or air purifier
  • Working time – or simply by hand while cooking

Installation

Stopwatch Plus is waiting for inclusion in the default HACS store. Until then, add it as a custom repository – one click:

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Then download it in HACS, restart Home Assistant and add a stopwatch under Settings → Devices & services → Add integration → Stopwatch Plus.

Feedback welcome

This is my first custom integration, so I’m happy about any feedback, ideas or bug reports – here or as an issue on GitHub.

It’s available in English, German, Dutch, French, Spanish and Italian. Dutch, French, Spanish and Italian are AI-translated – if you’re a native speaker and spot something odd, corrections (or new languages) are very welcome!