Timer status bug

chkulakowski
Sep 2026
2 posts
0 likes
Member
Timer status bug
Posted Sat Sep 19th 12:15

Timer status

HassTimerStatus returns timer data but generic timer-status queries incorrectly respond "couldn't find that device"

Bug report

Sophia NLU version: 2.1.4 Home Assistant Core: 2026.8.1 Conversation agent: Sophia NLU STT: Home Assistant Cloud Voice satellite: Home Assistant Assist satellite

Description

HassTimerStatus appears to have a response-handling issue when querying the status of a timer without specifying the timer's original duration.

For example, after successfully creating a 10-minute timer, I ask:

How much time is left on the timer?

Sophia correctly recognizes this as HassTimerStatus, and Home Assistant successfully returns the active timer in the timers speech slot, including its device_id, original duration, and remaining time.

Despite receiving the correct timer data, Sophia responds:

sorry, i couldn't find that device.

If I instead specify the timer's original duration:

How much time is left on 10 minute timer?

Sophia successfully returns the timer status:

your 10 minute timer reports active status and 8 minutes remaining.

This suggests the timer lookup itself is succeeding, but Sophia's response handling may require start_minutes (or another timer identifier) to be present in the input intent, even when Home Assistant has already returned exactly one matching timer in the timers speech slot.

Steps to reproduce

  1. From a timer-capable Home Assistant voice satellite, say:
Set a 10 minute timer.

The timer is successfully created.

  1. While that timer is active, say:
How much time is left on the timer?
  1. Sophia correctly recognizes HassTimerStatus and HA returns the active timer, but Sophia responds:
sorry, i couldn't find that device.
  1. Ask instead:
How much time is left on 10 minute timer?
  1. Sophia correctly reports the remaining time.

Relevant Sophia logs — timer creation

[2026-09-19 07:00:11] text: Set a 10 minute timer.

    intent HassStartTimer:common_name=|time_period| timer:domain=timer:minutes=10

  response: timer 10 minute timer is set and counting down.

Failing generic timer-status query

[2026-09-19 07:00:54] text: How much time is left on the timer?

    intent HassTimerStatus:common_name=timer ?:domain=timer

      speech slots: {
        "timers": Array [
          Object {
            "device_id": String("2de298138f5ecf72e7d171ea9ad22dfa"),
            "hours_left": Number(0),
            "id": String("01M2WRKKHZ40J7BTPNV3TNKKT6"),
            "is_active": Bool(true),
            "language": String("en"),
            "minutes_left": Number(9),
            "name": String(""),
            "rounded_hours_left": Number(0),
            "rounded_minutes_left": Number(9),
            "rounded_seconds_left": Number(30),
            "seconds_left": Number(17),
            "start_hours": Number(0),
            "start_minutes": Number(10),
            "start_seconds": Number(0),
            "total_seconds_left": Number(557)
          }
        ]
      }

  response: sorry, i couldn't find that device.

The important part is that the timer was successfully returned:

"is_active": true
"start_minutes": 10
"minutes_left": 9
"total_seconds_left": 557

but Sophia nevertheless responds that it could not find the device.

Another failing query

The shorter phrase also reaches HassTimerStatus and receives the timer data:

[2026-09-19 07:01:46] text: Timer status.

    intent HassTimerStatus:common_name=timer status:domain=timer

      speech slots: {
        "timers": Array [
          Object {
            "device_id": String("2de298138f5ecf72e7d171ea9ad22dfa"),
            "hours_left": Number(0),
            "id": String("01M2WRKKHZ40J7BTPNV3TNKKT6"),
            "is_active": Bool(true),
            "language": String("en"),
            "minutes_left": Number(8),
            "name": String(""),
            "rounded_hours_left": Number(0),
            "rounded_minutes_left": Number(8),
            "rounded_seconds_left": Number(30),
            "seconds_left": Number(25),
            "start_hours": Number(0),
            "start_minutes": Number(10),
            "start_seconds": Number(0),
            "total_seconds_left": Number(505)
          }
        ]
      }

  response: no match for that request.

Again, HA appears to have successfully returned the active timer, but Sophia doesn't generate a timer-status response.

Working duration-specific query

Immediately afterward, specifying the original timer duration works:

[2026-09-19 07:01:58] text: How much time is left on 10 minute timer?

    intent HassTimerStatus:common_name=|time_period| timer ?:domain=timer:start_minutes=10

      speech slots: {
        "timers": Array [
          Object {
            "device_id": String("2de298138f5ecf72e7d171ea9ad22dfa"),
            "hours_left": Number(0),
            "id": String("01M2WRKKHZ40J7BTPNV3TNKKT6"),
            "is_active": Bool(true),
            "language": String("en"),
            "minutes_left": Number(8),
            "name": String(""),
            "rounded_hours_left": Number(0),
            "rounded_minutes_left": Number(8),
            "rounded_seconds_left": Number(0),
            "seconds_left": Number(13),
            "start_hours": Number(0),
            "start_minutes": Number(10),
            "start_seconds": Number(0),
            "total_seconds_left": Number(493)
          }
        ]
      }

  response: your 10 minute timer reports active status and 8 minutes remaining.

Relevant Assist pipeline context

The request is coming from a timer-capable Assist satellite and includes both a valid device_id and satellite_id:

engine: conversation.sophia_nlu
language: en
intent_input: How much time is left on the timer?
device_id: 2de298138f5ecf72e7d171ea9ad22dfa
satellite_id: assist_satellite.kitchen_assist_satellite
prefer_local_intents: false

The same satellite/device successfully creates the timer.

Expected behavior

When HassTimerStatus returns exactly one timer in the timers speech slot, a generic request such as:

How much time is left on the timer?

should report the status of that timer without requiring the user to know or repeat its original duration.

For example:

Your timer has 9 minutes remaining.

If multiple timers are returned, Sophia could enumerate them or require additional identification.

Actual behavior

The intent and Home Assistant timer lookup succeed, but Sophia responds:

sorry, i couldn't find that device.

or, for Timer status:

no match for that request.

Possible cause

Based on the logs, this appears to be downstream of intent recognition and HA timer lookup.

The primary difference between the failing and working requests is that the working request supplies:

start_minutes=10

as part of the input intent:

HassTimerStatus:...:start_minutes=10

The generic request doesn't supply start_minutes, although the timer object subsequently returned by Home Assistant contains:

start_minutes: 10

It may therefore be worth checking whether Sophia's HassTimerStatus response-generation logic requires start_minutes, name, or another identifying value from the parsed input rather than handling the timer(s) returned in the timers speech slot.

Sophia NLU 2.1.4

Matt
Apr 2025
36 posts
0 likes
Member
Posted Sat Sep 19th 12:40

Got it. Just finalizing v2.2 upgrade now, and will include the fix in that.

When you call a timer action without specifying which timer, it will check and if there's only one active timer it will default to that. If there's more than one active timer, it wil ask for clarification.

Thanks for the bug report. I love it. If these are the bug reports that are coming in, apparently I'm doing my job correctly and I've gotten most bugs out now.

chkulakowski
Sep 2026
2 posts
0 likes
Member
Posted 18 hours 49 mins ago

Hi Matt! Thanks for the response! I'm running v2.2 but still unable to request how much time is left on the timer. I submitted some logs earlier similar to this:

[2026-09-30 21:25:55] text: Set a 5 minute timer.
    intent HassStartTimer:common_name=|time_period| timer:domain=timer:minutes=5
  response: timer 5 minute timer started successfully. let me know if you need anything else

[2026-09-30 21:26:15] text: How much time is left on my timer?
    intent HassTimerStatus:domain=timer
      speech slots: {"timers": Array [Object {"device_id": String("2de298138f5ecf72e7d171ea9ad22dfa"), "hours_left": Number(0), "id": String("01M3TMGPYA9TA5GMTMSEQKR3H7"), "is_active": Bool(true), "language": String("en"), "minutes_left": Number(4), "name": String(""), "rounded_hours_left": Number(0), "rounded_minutes_left": Number(4), "rounded_seconds_left": Number(30), "seconds_left": Number(40), "start_hours": Number(0), "start_minutes": Number(5), "start_seconds": Number(0), "total_seconds_left": Number(280)}]}
  response: no device matches your request.

[2026-09-30 21:26:35] text: How much time is on the timer?
    intent HassTimerStatus:common_name=timer ?:domain=timer
      speech slots: {"timers": Array [Object {"device_id": String("2de298138f5ecf72e7d171ea9ad22dfa"), "hours_left": Number(0), "id": String("01M3TMGPYA9TA5GMTMSEQKR3H7"), "is_active": Bool(true), "language": String("en"), "minutes_left": Number(4), "name": String(""), "rounded_hours_left": Number(0), "rounded_minutes_left": Number(4), "rounded_seconds_left": Number(30), "seconds_left": Number(20), "start_hours": Number(0), "start_minutes": Number(5), "start_seconds": Number(0), "total_seconds_left": Number(260)}]}
  response: sorry, i couldn't find that device.
Matt
Apr 2025
36 posts
0 likes
Member
Posted 18 hours 9 mins ago

Yep, it's on the todo list. I'll probably get the patch upgrade out this weekend.

In the interm for the next few days just request the status of the starting time of the timer and it should work fine. So if you start a timer for 30 mins, just ask it for the status of the 30 min timer and should work fine.

I'll get that patched up in the next upgrade though, and thanks in advance for your patience.

Quick Reply

You must be logged in to reply to this thread.

Login Register