Skip to content

Add support for COSORI Smart Air Fryer Toaster Oven (CTO-R301S / VS_WFBO_OVN family) #531

Description

@captnjefferson

Device

COSORI Smart Air Fryer Toaster Oven, 30L/32QT (sold at Costco/Walmart/Amazon as "COSORI Smart 32QT Toaster Oven Air Fryer")

  • deviceType: CTO-R301S-SUSW
  • configModule: VS_WFBO_OVN_CTO-R301S_OFL_US
  • type: SKA
  • connectionType: wifi+BTOnboarding
  • Sibling models exist (e.g. CTO-R302S-SUSR, the 26QT variant) sharing the VS_WFBO_OVN config-module family — presumably one implementation covers the line.

Current behavior

The device is returned by /cloud/v2/deviceManaged/devices but is not present in device_map.py, so pyvesync (tested on 3.4.2) silently drops it — manager.devices ends up empty and update() logs No devices to update. In Home Assistant this surfaces as a successfully-authenticated VeSync integration with zero devices, which is confusing to debug (nothing hints an unsupported device was skipped).

Raw device-list payload (identifiers redacted)

{
  "deviceRegion": "US",
  "isOwner": true,
  "deviceName": "Smart Air Fryer Toaster Oven",
  "cid": "vssk240e05d4...",
  "deviceStatus": "off",
  "connectionStatus": "online",
  "connectionType": "wifi+BTOnboarding",
  "deviceType": "CTO-R301S-SUSW",
  "type": "SKA",
  "uuid": "af3f84b3-....",
  "configModule": "VS_WFBO_OVN_CTO-R301S_OFL_US",
  "macID": "44:1d:64:...",
  "deviceFirstSetupTime": "Jul 16, 2026 8:36:49 PM",
  "subDeviceList": null,
  "extension": null,
  "deviceProp": null
}

Ask

Add the CTO-R301S (and ideally the VS_WFBO_OVN family) to the device map — even status-only support (on/off, cook state, remaining time, temperatures) would be valuable for Home Assistant users. The VeSync app exposes cook mode, target/current temp, timer, and start/stop for this device.

Happy to capture API traffic for specific endpoints, run test builds against the physical device, or provide additional payloads — the unit is on my bench and I can iterate quickly.

Also noting the debugging papercut: an INFO/WARNING log naming skipped unsupported deviceTypes would have saved a lot of head-scratching versus the bare No devices to update.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions