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

  1. Read the raw device reply in the error for the concrete reason
  2. Verify device state — many commands fail when a stream is already active or the feature is unsupported
  3. 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)