cancel
Showing results for 
Search instead for 
Did you mean: 

Incorrect Voice Response from Gemini for Thermostat “Turn on” Command

GregGp
Community Member

Hello,

Device configuration

  • Device type: THERMOSTAT
  • Traits:
    • action.devices.traits.OnOff
    • action.devices.traits.TemperatureSetting
  • Cloud‑to‑cloud integration

Description of the issue

All Smart Home API commands work correctly when called directly.
The integration also passes all tests in Developer Console → Cloud‑to‑Cloud → Test Suite with no errors.

However, when issuing the voice command:

“Turn on MY‑DEVICE”

the Assistant (Gemini) responds with:

“I’m sorry, I wasn’t able to turn on MY‑DEVICE. There seems to be an issue with the device.”

Despite this spoken error:

  • The EXECUTE intent is received and processed correctly
  • The device changes state as expected
  • The EXECUTE response returns SUCCESS with correct state
  • The device state in the Google Home app is correct
  • There are no errors in fulfillment logs

In other words, the voice response is incorrect, but the command execution, device behavior, and Home app state are all correct.

SYNC:

{
    "requestId": "--requestIdId--",
    "payload": {
        "agentUserId": "--agentUserId--",
        "devices": [
            {
                "id": "--DeviceId--",
                "type": "action.devices.types.THERMOSTAT",
                "traits": [
                    "action.devices.traits.TemperatureSetting",
                    "action.devices.traits.OnOff"
                ],
                "name": {
                    "name": "Heater one"
                },
                "willReportState": true,
                "roomHint": "Storage Room",
                "deviceInfo": {
                    "manufacturer": "--manufacturer--",
                    "model": "--model--",
                    "hwVersion": "--hwVersion--",
                    "swVersion": "--swVersion--"
                },
                "attributes": {
                    "thermostatTemperatureRange": {
                        "minThresholdCelsius": 17,
                        "maxThresholdCelsius": 30
                    },
                    "thermostatTemperatureUnit": "C",
                    "availableThermostatModes": [
                        "off",
                        "heat",
                        "auto",
                        "eco"
                    ],
                    "commandOnlyTemperatureSetting": false
                },
                "customData": {
                    "applianceId": "--DeviceId--",
                }
            }
       ]
    }
}
 
EXECUTE:
{
    "inputs": [
        {
            "context": {
                "locale_country": "US",
                "locale_language": "en"
            },
            "intent": "action.devices.EXECUTE",
            "payload": {
                "commands": [
                    {
                        "devices": [
                            {
                                "customData": {
                                    "applianceId": "-----"
                                },
                                "id": "--deviceID--"
                            }
                        ],
                        "execution": [
                            {
                                "command": "action.devices.commands.OnOff",
                                "params": {
                                    "on": true
                                }
                            }
                        ]
                    }
                ]
            }
        }
    ],
    "requestId": "--requestIdId--"
}
 
RESPONSE:
{
    "requestId": "--requestIdId--",
    "payload": {
        "command": [
            {
                "ids": [
                    "--device-id--"
                ],
                "status": "SUCCESS",
                "states": {
                    "on": true,
                    "online": true,
                    "activeThermostatMode": "none",
                    "thermostatMode": "auto",
                    "thermostatTemperatureSetpoint": 17,
                    "thermostatTemperatureAmbient": 17
                }
            }
        ]
    }
}




 

1 Recommended Answer

arm_dpe
Solutions Expert
Solutions Expert

 

When you issue a voice command to "Turn on," Gemini/Assistant performs a validation check. If it sees activeThermostatMode: none, it interprets this as the device being in a "stalled" or "idle" state despite the SUCCESS status, which triggers the "There seems to be an issue" fallback speech.

The voice command "Turn on [Device]" maps to action.devices.commands.OnOff.

  • Your Response: Tells the Assistant "The device is now On, but it is currently doing nothing (none).
  • Assistant's Logic: If a user turns a heater on, the Assistant expects the device to transition into a functional state (like heat or auto). Reporting none immediately after an "On" command is perceived as a failure to initialize the requested state.

We recommend few options to fix this:

  1. Align activeThermostatMode with thermostatMode. In your EXECUTE response, if the device is transitioning to auto, report the active mode as auto (or heat if the boiler actually kicks in)

  2. Use "off" for activeThermostatMode when appropriate. If the device is truly idle but "On" (e.g., the thermostat interface is powered but not calling for heat), the Assistant often prefers off over none for the active mode since off is more robustly handled by the voice engine for thermostats.

  3. In your provided response, you used: "payload": { "command": [ ... ] } instead of commands(plural) as mentioned in Google Developers documentation.
    When you use the singular command, the Google Home Graph often still updates because it is capable of partial/lenient parsing to maintain the UI state. However, the Assistant's Speech Engine (Gemini/Assistant) is programmed to look for the commands array.

View Recommended Answer in original post

2 REPLIES 2

arm_dpe
Solutions Expert
Solutions Expert

 

When you issue a voice command to "Turn on," Gemini/Assistant performs a validation check. If it sees activeThermostatMode: none, it interprets this as the device being in a "stalled" or "idle" state despite the SUCCESS status, which triggers the "There seems to be an issue" fallback speech.

The voice command "Turn on [Device]" maps to action.devices.commands.OnOff.

  • Your Response: Tells the Assistant "The device is now On, but it is currently doing nothing (none).
  • Assistant's Logic: If a user turns a heater on, the Assistant expects the device to transition into a functional state (like heat or auto). Reporting none immediately after an "On" command is perceived as a failure to initialize the requested state.

We recommend few options to fix this:

  1. Align activeThermostatMode with thermostatMode. In your EXECUTE response, if the device is transitioning to auto, report the active mode as auto (or heat if the boiler actually kicks in)

  2. Use "off" for activeThermostatMode when appropriate. If the device is truly idle but "On" (e.g., the thermostat interface is powered but not calling for heat), the Assistant often prefers off over none for the active mode since off is more robustly handled by the voice engine for thermostats.

  3. In your provided response, you used: "payload": { "command": [ ... ] } instead of commands(plural) as mentioned in Google Developers documentation.
    When you use the singular command, the Google Home Graph often still updates because it is capable of partial/lenient parsing to maintain the UI state. However, the Assistant's Speech Engine (Gemini/Assistant) is programmed to look for the commands array.

GregGp
Community Member

Thank you! All works now.