119 lines
5.7 KiB
TypeScript
119 lines
5.7 KiB
TypeScript
/**
|
|
* 设备维度的 ONES 锚点解析:同品类不同型号(UI 相似)用同一脚本,按当前设备动态解析锚点,
|
|
* 换 <CAT>_DEVICE 环境变量重跑即可分别回写各型号的 ONES 用例。
|
|
*
|
|
* 映射 key = DEVICE_CONFIG 里的设备名;值 = 该型号的 添加用例号 / 控制 step uuid(ble/wifi)。
|
|
* 控制步在两条协议超级用例里:ble→15975 / wifi→15974。
|
|
* 新型号:在此补一行即可被脚本识别。
|
|
*/
|
|
export interface DeviceAnchor {
|
|
add?: number; // 添加用例 ONES number
|
|
ctrlBle?: string; // 15975 下的 step uuid
|
|
ctrlWifi?: string; // 15974 下的 step uuid
|
|
}
|
|
|
|
const ANCHORS: Record<string, Record<string, DeviceAnchor>> = {
|
|
curtain: {
|
|
'Curtain 1A': { add: 15969, ctrlBle: '774V8bND', ctrlWifi: 'GPT3wJd9' },
|
|
'Curtain3 2B': { add: 40955, ctrlBle: 'QqsnPMc3', ctrlWifi: 'GYtvdMTW' },
|
|
'BlindTilt 3C': { add: 15946, ctrlBle: '3frMRDZj', ctrlWifi: '6gv1WLKE' },
|
|
// 'Roller Shade': { add: 191100, ctrlBle: 'SmzuHtWi', ctrlWifi: 'ScBpcSfJ' },
|
|
// 'Curtain3 2025': { add: 265933, ctrlBle: '3wM6fW8W', ctrlWifi: 'VbqWg59G' },
|
|
},
|
|
lock: {
|
|
'Lock 6F': { add: 15970, ctrlBle: '5YEfmpJz', ctrlWifi: '7cEkbh4Y' },
|
|
'LockPro 7G': { add: 66694, ctrlBle: 'LnPNEJmS', ctrlWifi: 'Virku9zd' },
|
|
// 以下变体 UI 相似:仅添加(控制必测无独立 step;Lock Ultra 为全新 UI,归新写)
|
|
'Lock Lite': { add: 304132 },
|
|
'Lock & Kit': { add: 51440 },
|
|
'Lock Pro & Kit': { add: 105436 },
|
|
'Lock Pro WiFi': { add: 304133 },
|
|
},
|
|
plug: {
|
|
// base Plug 仅 WiFi 必测控制(BLE 无)
|
|
'Plug 4D': { add: 15966, ctrlWifi: 'Ay79Pj23' },
|
|
'PlugMini 5E': { add: 15958, ctrlBle: '2jSFfY4k', ctrlWifi: '3nXsFW9n' },
|
|
'eu Plug': { add: 332918, ctrlBle: 'TSVKWcJ3', ctrlWifi: 'U5z9wocr' },
|
|
'Garage Door Opener': { add: 302289, ctrlBle: 'E5YRm4Pg', ctrlWifi: '2nRaC87F' },
|
|
// Relay Switch 有 1pm/1/2pm开关/2pm覆盖 多个物理型号,共用添加用例 302288;此处取 1PM 为代表
|
|
'Relay Switch 1PM': { add: 302288, ctrlBle: 'MKgLq1oy', ctrlWifi: 'XvFF8AK7' },
|
|
},
|
|
sensor: {
|
|
'Contact Sensor 5O': { add: 15962, ctrlBle: 'A8C4BsCm', ctrlWifi: 'JKSgHHbC' },
|
|
'Motion Sensor 6P': { add: 15963, ctrlBle: 'HrigrD2X', ctrlWifi: 'N7fSHmH3' },
|
|
// IOSensor 控制必测是历史数据报警/校正(现有 sensor_control 未覆盖)→ 仅添加
|
|
'IOSensor': { add: 35871 },
|
|
},
|
|
humidifier: {
|
|
'Humidifier 1K': { add: 15964, ctrlBle: 'GkkrZpaC', ctrlWifi: '8tx3Rg76' },
|
|
// Humidifier2 控制必测是"绑定温湿度计",非简单开关 → 现有 control 用例不覆盖,仅锚添加
|
|
'Humidifier2 2L': { add: 74104 },
|
|
},
|
|
hub: {
|
|
// hub 无控制必测,仅添加
|
|
'Hub2 8H': { add: 21787 },
|
|
'HubMini 9I': { add: 15972 },
|
|
'HubMiniMatter 0J': { add: 65336 },
|
|
'Hub2 S3': { add: 319304 },
|
|
'Hub Mini S3': { add: 319305 },
|
|
'Hub Mini Matter S3': { add: 319303 },
|
|
'Hub Plus': { add: 15971 },
|
|
},
|
|
meter: {
|
|
// meter 控制必测(报警/校正)现有 control 未覆盖;仅锚添加。Climate Panel/Radiator 为全新 UI,归新写
|
|
'Meter 3M': { add: 15965 },
|
|
'Meter Plus': { add: 15956 },
|
|
'Meter Pro': { add: 267367 },
|
|
'Meter Pro CO2': { add: 267366 },
|
|
},
|
|
robot: {
|
|
// robot 控制必测(清扫/暂停/回充)为 WiFi,现有无 _control;仅锚添加。K11+/S20 为全新 UI,归新写
|
|
'Robot S1': { add: 15952 },
|
|
'Robot S1P': { add: 15951 },
|
|
'Robot K10+': { add: 40954 },
|
|
'Robot K10+ Pro': { add: 122737 },
|
|
'Robot K10+ Pro Combo': { add: 162261 },
|
|
'Robot S10': { add: 78369 },
|
|
},
|
|
keypad: {
|
|
// keypad 无控制必测;keypad touch UI 相似仅添加。Keypad Vision 为全新 UI,归新写
|
|
'Keypad 2V': { add: 15949 },
|
|
'Keypad Touch': { add: 15948 },
|
|
},
|
|
strip_light: {
|
|
'StripLight 9S': { add: 15959, ctrlBle: '4poyiVwD', ctrlWifi: 'QgX4dX7X' },
|
|
'RGBWW Strip Light3': { add: 301585, ctrlBle: '3ob75cjf', ctrlWifi: 'N1kzcb7S' },
|
|
'RGBICWW Strip Light': { add: 311018, ctrlBle: 'QAHNrXrm', ctrlWifi: 'MAwYyCaC' },
|
|
'RGBIC Neon Wire Rope': { add: 311020, ctrlBle: 'E2QCS8xy', ctrlWifi: '5sJcsTgi' },
|
|
'RGBIC Neon Rope': { add: 393235, ctrlWifi: 'BiEXxZDr' },
|
|
},
|
|
ceiling_light: {
|
|
'CeilingLight 7Q': { add: 15950, ctrlBle: '2528azD6', ctrlWifi: 'TcnL3gFM' }, // pro
|
|
'CeilingLight lte': { add: 15950, ctrlBle: 'V15M64cP', ctrlWifi: 'WL8KSQLb' }, // lte 与 pro 共用添加用例
|
|
'RGBWW Floor Lamp': { add: 301586, ctrlBle: 'JVnRz7xY', ctrlWifi: '2hm6sXrk' },
|
|
'RGBICWW Floor Lamp': { add: 311019, ctrlBle: 'AfxmoAEq', ctrlWifi: 'ML8CSkWX' },
|
|
'Candle Lamp': { add: 393236, ctrlWifi: 'RXm3iNLR' },
|
|
},
|
|
fan: {
|
|
'Fan 0T': { add: 122775, ctrlBle: 'JBszgxRS', ctrlWifi: 'KNyzKhn6' }, // 无电池款
|
|
'Battery Circulator Fan': { add: 48159, ctrlBle: 'CiFPEbNS', ctrlWifi: '6RC22BGo' },
|
|
'Standing Circulator Fan': { add: 393234, ctrlBle: 'XWmNA9UL' },
|
|
},
|
|
};
|
|
|
|
const curProto = (): 'ble' | 'wifi' => (process.env.PROTO === 'wifi' ? 'wifi' : 'ble');
|
|
|
|
/** 当前设备的添加锚点前缀,如 `[P0][ONES:15969]`;无映射返回空串(不打锚点)。 */
|
|
export function onesAdd(cat: string, deviceName: string): string {
|
|
const a = ANCHORS[cat]?.[deviceName];
|
|
return a?.add ? `[P0][ONES:${a.add}]` : '';
|
|
}
|
|
|
|
/** 当前设备 + 当前协议的控制锚点前缀,如 `[P0][ONES:15975#774V8bND][ble]`;无对应返回空串。 */
|
|
export function onesCtrl(cat: string, deviceName: string): string {
|
|
const a = ANCHORS[cat]?.[deviceName];
|
|
if (!a) return '';
|
|
if (curProto() === 'wifi') return a.ctrlWifi ? `[P0][ONES:15974#${a.ctrlWifi}][wifi]` : '';
|
|
return a.ctrlBle ? `[P0][ONES:15975#${a.ctrlBle}][ble]` : '';
|
|
}
|