diff --git a/src/settings.ts b/src/settings.ts index ff0cb5ba..543bf419 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -308,6 +308,11 @@ export const DEVICE_CLASS_MAP: Record = { 'Lock Lite': 'WoSmartLockLite', 'Lock Pro': 'WoSmartLockPro', 'Lock Pro WiFi': 'WoSmartLockProWiFi', + // OpenAPI deviceType names (SwitchBotAPI device pages) + 'Smart Lock': 'WoSmartLock', + 'Smart Lock Pro': 'WoSmartLockPro', + 'Smart Lock Pro Wifi': 'WoSmartLockProWiFi', + 'Smart Lock Ultra': 'WoSmartLockPro', 'Lock Vision': 'WoSmartLockVision', 'Lock Vision Pro': 'WoSmartLockVisionPro', 'Keypad': 'WoKeypad', @@ -332,6 +337,7 @@ export const DEVICE_CLASS_MAP: Record = { 'RGBICWW Floor Lamp': 'WoRGBICWWFloorLamp', 'SwitchBot RGBICWW Floor Lamp': 'WoRGBICWWFloorLamp', 'Art Frame': 'WoArtFrame', + 'AI Art Frame': 'WoArtFrame', 'SwitchBot Art Frame': 'WoArtFrame', // S1 and S1 Plus use the original start/stop/dock OpenAPI commands, unlike the S10/S20 'Robot Vacuum Cleaner S1': 'WoVacuum', @@ -359,17 +365,25 @@ export const DEVICE_CLASS_MAP: Record = { 'WoLinkMatter': 'WoHubMiniMatter', 'SwitchBot HubMini Matter': 'WoHubMiniMatter', 'Hub Plus': 'WoHub2', + 'Hub': 'WoHub2', 'Remote': 'WoRemote', 'Battery Circulator Fan': 'WoCirculatorFan', 'Circulator Fan': 'WoCirculatorFan', + 'Battery Circulator Fan 2 Pro': 'WoCirculatorFan', + 'Standing Fan': 'WoCirculatorFan', 'USB Circulator Fan': 'WoCirculatorFan', 'Smart Thermostat Radiator': 'WoSmartThermostatRadiator', + 'Smart Radiator Thermostat': 'WoSmartThermostatRadiator', 'Thermostat Radiator': 'WoSmartThermostatRadiator', 'Radiator Thermostat': 'WoSmartThermostatRadiator', 'Climate Panel': 'WoClimatePanel', + 'Home Climate Panel': 'WoClimatePanel', 'Smart Climate Panel': 'WoClimatePanel', 'Air Purifier': 'WoAirPurifier', 'Air Purifier Table': 'WoAirPurifierTable', + 'Air Purifier VOC': 'WoAirPurifier', + 'Air Purifier Table PM2.5': 'WoAirPurifierTable', + 'Air Purifier Table VOC': 'WoAirPurifierTable', 'Water Leak Detector': 'WoLeak', 'Presence Sensor': 'WoPresence', 'Relay Switch 1PM': 'WoRelaySwitch1PM', @@ -383,6 +397,7 @@ export const DEVICE_CLASS_MAP: Record = { 'K10+': 'WoVacuumK10Plus', 'K10+ Pro': 'WoVacuumK10Pro', 'RGBIC Neon Wire Rope Light': 'WoRGBICNeonWireRopeLight', + 'RGBIC Neon Rope Light': 'WoRGBICNeonWireRopeLight', 'Candle Warmer Lamp': 'WoCandleWarmerLamp', 'Pan/Tilt Cam Plus 3K': 'WoPanTiltCamPlus3K', 'remote with screen': 'WoRemoteWithScreen', diff --git a/test/types/device-type-resolution.test.ts b/test/types/device-type-resolution.test.ts index 12478796..27849402 100644 --- a/test/types/device-type-resolution.test.ts +++ b/test/types/device-type-resolution.test.ts @@ -53,3 +53,26 @@ describe('resolveDeviceClassName', () => { } }) }) + +// OpenAPI deviceType values from the SwitchBotAPI device pages. These had no class, so the +// device was never created for OpenAPI users (every lock, for example). +describe('openAPI deviceType names', () => { + it.each([ + ['Smart Lock', 'WoSmartLock'], + ['Smart Lock Pro', 'WoSmartLockPro'], + ['Smart Lock Pro Wifi', 'WoSmartLockProWiFi'], + ['Smart Lock Ultra', 'WoSmartLockPro'], + ['Air Purifier VOC', 'WoAirPurifier'], + ['Air Purifier Table PM2.5', 'WoAirPurifierTable'], + ['Air Purifier Table VOC', 'WoAirPurifierTable'], + ['Smart Radiator Thermostat', 'WoSmartThermostatRadiator'], + ['Home Climate Panel', 'WoClimatePanel'], + ['Standing Fan', 'WoCirculatorFan'], + ['Battery Circulator Fan 2 Pro', 'WoCirculatorFan'], + ['RGBIC Neon Rope Light', 'WoRGBICNeonWireRopeLight'], + ['AI Art Frame', 'WoArtFrame'], + ['Hub', 'WoHub2'], + ])('resolves %s', (apiType, className) => { + expect(resolveDeviceClassName(apiType)).toBe(className) + }) +})