{"record":{"id":"e044738fa314e0fa","repo":"AprilNEA/OpenLogi","slug":"unsupported-light-product-04x","errorCode":null,"errorMessage":"unsupported light product {:04x}","messagePattern":"unsupported light product (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/openlogi-cli/src/cmd/light.rs","lineNumber":161,"sourceCode":"    apply(device, command).await\n}\n\nasync fn set_temperature(args: TemperatureArgs) -> Result<()> {\n    let devices = standalone().await?;\n    let device = select(&devices, args.device.device.as_deref())?;\n    apply(device, LightCommand::TemperatureKelvin(args.kelvin)).await\n}\n\nasync fn apply(device: &StandaloneDevice, command: LightCommand) -> Result<()> {\n    let model = find_litra(\n        device.address.vendor_id,\n        device.address.product_id,\n        device.address.usage_page,\n        device.address.usage_id,\n    )\n    .map(|descriptor| descriptor.model)\n    .ok_or_else(|| {\n        anyhow!(\n            \"unsupported light product {:04x}\",\n            device.address.product_id\n        )\n    })?;\n    let route = DeviceRoute::RawHid {\n        vendor_id: device.address.vendor_id,\n        product_id: device.address.product_id,\n        usage_page: device.address.usage_page,\n        usage_id: device.address.usage_id,\n        identity: device.address.identity.clone(),\n    };\n    openlogi_hid::apply_litra(&route, model, command)\n        .await\n        .context(\"failed to write the light command\")\n}\n\nfn select<'a>(\n    devices: &'a [StandaloneDevice],","sourceCodeStart":143,"sourceCodeEnd":179,"githubUrl":"https://github.com/AprilNEA/OpenLogi/blob/e846e6f4b4405e33bd6a9aaf949a482ce34cb6d8/crates/openlogi-cli/src/cmd/light.rs#L143-L179","documentation":"Raised in `apply` when the device's vendor/product ID pair has no entry in the light product descriptor registry, so the CLI cannot map the raw-HID device to a known model. The product lookup by (vendor_id, product_id, usage_page, usage_id) returned None, meaning this specific hardware is not a supported lighting product.","triggerScenarios":"Any light subcommand (`set_power`, `set_brightness`, `set_temperature` → `apply`) against a RawHID device whose product_id is absent from the light descriptor table — unsupported hardware, a product variant, or a cloned/rebranded device.","commonSituations":"Pointing light commands at non-Logitech or unsupported Logitech products; new hardware not yet added to the descriptor registry; a device exposing multiple HID interfaces where the wrong usage page/usage was selected.","solutions":["Confirm the product is officially supported by the light subcommands; use a supported model","Check for an updated OpenLogi release that added your product to the descriptor table","Verify the device exposes the expected usage_page/usage_id (vendor interface) — try re-plugging or a different port/cable","If the hardware is genuinely supported, add its descriptor to the light product registry"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"let descriptor = light_descriptor(\n    device.address.vendor_id,\n    device.address.product_id,\n    device.address.usage_page,\n    device.address.usage_id,\n);\nif descriptor.is_none() {\n    anyhow::bail!(\"product {:04x} has no light descriptor; use a supported light\", device.address.product_id);\n}","typeGuard":"fn supported_light(addr: &RawHidAddress) -> Option<&LightDescriptor> {\n    light_descriptor(addr.vendor_id, addr.product_id, addr.usage_page, addr.usage_id)\n}","tryCatchPattern":"match apply(device, cmd).await {\n    Ok(()) => (),\n    Err(e) if e.to_string().contains(\"unsupported light product\") => {\n        eprintln!(\"{}\\nThis product is not in the light registry; update OpenLogi or use supported hardware.\", e);\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Verify product support (via `openlogi list` or docs) before automating light commands","Keep OpenLogi updated so newly added light products are in the descriptor table","Select the correct HID interface/usage when a device exposes several raw-HID endpoints"],"tags":["cli","hardware","hid","unsupported-device"],"backgroundTag":"unsupported-operation","analyzedSha":"e846e6f4b4405e33bd6a9aaf949a482ce34cb6d8","analyzedAt":"2026-09-13T03:07:16.451Z","contentChangedAt":"2026-09-13T03:07:16.451Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}