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
- From a timer-capable Home Assistant voice satellite, say:
Set a 10 minute timer.
The timer is successfully created.
- While that timer is active, say:
How much time is left on the timer?
- Sophia correctly recognizes
HassTimerStatusand HA returns the active timer, but Sophia responds:
sorry, i couldn't find that device.
- Ask instead:
How much time is left on 10 minute timer?
- 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