AlexxIT/go2rtc · error
failed to fetch ring devices
Error message
failed to fetch ring devices: %w
What it means
FetchRingDevices' GET ring_devices request (via c.Request) returned an error — typically an expired token or network/API failure. Wraps the underlying request error before any JSON parsing is attempted.
Solutions
- Verify auth token validity and refresh if expired
- Check network connectivity to the Ring API
- Retry after transient failures
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at pkg/ring/api.go:340 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/c0b21e5356d374cf.
Report an issue: GitHub.
Appendix: source
Thrown at pkg/ring/api.go:340
c.tokenExpiry = time.Now().Add(expiresIn)
c.RefreshToken = encodeAuthConfig(c.authConfig)
if c.onTokenRefresh != nil {
c.onTokenRefresh(c.RefreshToken)
}
// Refresh the cached client
cacheMutex.Lock()
clientCache[c.cacheKey] = c
cacheMutex.Unlock()
return c.authToken, nil
}
func (c *RingApi) FetchRingDevices() (*RingDevicesResponse, error) {
response, err := c.Request("GET", ClientAPI("ring_devices"), nil)
if err != nil {
return nil, fmt.Errorf("failed to fetch ring devices: %w", err)
}
var devices RingDevicesResponse
if err := json.Unmarshal(response, &devices); err != nil {
return nil, fmt.Errorf("failed to unmarshal devices response: %w", err)
}
// Process "other" devices
var onvifCameras []CameraData
var intercoms []CameraData
for _, device := range devices.Other {
kind, ok := device["kind"].(string)
if !ok {
continue
}
switch RingDeviceType(kind) {View on GitHub (pinned to c245815e75)