AlexxIT/go2rtc · error
${reply}
Error message
${reply} What it means
Roborock Request guard: the IoT RPC call succeeded transport-wise, but the device's reply string was not '["ok"]' — the raw reply is returned as the error. Whatever the device answered (error text, 'ERROR', etc.) becomes the message, so the device explicitly rejected the request.
Solutions
- Read the raw device reply in the error for the concrete reason
- Verify device state — many commands fail when a stream is already active or the feature is unsupported
- Retry after re-establishing the IoT session if the reply is garbled
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at pkg/roborock/client.go:377 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of AlexxIT/go2rtc@c245815e75 (2026-09-07).
Data as JSON: /api/errors/2ff33ddc6c181a39.
Report an issue: GitHub.
Appendix: source
Thrown at pkg/roborock/client.go:377
}
func (c *Client) EnableHomesecVoice(enable bool) error {
if enable {
return c.Request("enable_homesec_voice", `{"enable":true}`)
} else {
return c.Request("enable_homesec_voice", `{"enable":false}`)
}
}
func (c *Client) Request(method string, args any) (err error) {
var reply string
if err = c.iot.Call(method, args, &reply); err != nil {
return
}
if reply != `["ok"]` {
return errors.New(reply)
}
return
}
View on GitHub (pinned to c245815e75)