import { DpSchema, DpValue } from '../../types'; import { GetSmartDeviceModelActions } from '../types/SdmModel'; import { SendDpOption } from '../types'; export interface DpActions { /** * 所有类型都有该方法,下发 DP 点,但需要根据功能点类型传入不同的值 */ set: (value: DpValue, options?: SendDpOption) => Promise; /** * 只有 bool 类型和 bitmap 类型才有此方法,打开功能点或开启指定 bit 位 */ on?: { (options?: SendDpOption): Promise; (idx: number, options?: SendDpOption): Promise; }; /** * 只有 bool 类型和 bitmap 类型才有此方法,关闭功能点或关闭指定 bit 位 */ off?: { (options?: SendDpOption): Promise; (idx: number, options?: SendDpOption): Promise; }; /** * 只有 bool 类型和 bitmap 类型才有此方法,切换功能点或翻转指定 bit 位 */ toggle?: { (options?: SendDpOption): Promise; (idx: number, options?: SendDpOption): Promise; }; /** * 只有 value 类型才有此方法,根据当前功能点步长 step 进行递增, */ inc?: (step?: number, options?: SendDpOption) => Promise; /** * 只有 value 类型才有此方法,根据当前功能点步长 step 进行递减 */ dec?: (step?: number, options?: SendDpOption) => Promise; /** * 只有 enum 类型才有此方法,切换到前一个枚举值 */ prev?: (options?: SendDpOption) => Promise; /** * 只有 enum 类型才有此方法,切换到下一个枚举值 */ next?: (options?: SendDpOption) => Promise; /** * 只有 enum 类型才有此方法,随机切换到一个枚举值 */ random?: (options?: SendDpOption) => Promise; } /** * 获取智能设备功能点操作方法集合,根据功能点类型提供 set、toggle 等下发方法,常与 useProps 搭配使用,useProps 读取状态、useActions 下发指令。 * @public * @since @ray-js/panel-sdk 1.2.0 * @returns 功能点行为集合,key 为功能点 code, * 每个功能点根据类型提供不同操作: * - 所有类型: `set(value)` 直接下发 * - bool 类型: `on()` / `off()` / `toggle()` 快捷切换 * - value 类型: `inc(step?)` / `dec(step?)` 增减 * @typeOverride returns Record * @remarks * 基于 sdm 实例实现。必须在 SdmProvider 内部使用。 * 使用前请注意检查项目是否已挂载了 SdmProvider,项目接入可参考 [智能设备模型 - 使用](/cn/miniapp/solution-panel/ability/common/sdm/usage),全新项目可直接基于 [public-sdm](https://github.com/Tuya-Community/tuya-ray-materials/tree/main/template/PublicSdmTemplate) 示例项目进行开发。 * @example 各 DP 类型操作方法 * ```tsx * // devices/schema.ts — as const 是类型推导的基石,set 为通用方法,其余为类型专属快捷方法 * import { useProps, useActions } from '@ray-js/panel-sdk'; * * export const schema = [ * { code: 'switch_led', property: { type: 'bool' }, type: 'obj', mode: 'rw', id: 1, name: '开关' }, * { code: 'brightness', property: { type: 'value', min: 10, max: 1000, step: 1 }, type: 'obj', mode: 'rw', id: 2, name: '亮度' }, * { code: 'work_mode', property: { type: 'enum', range: ['white', 'colour'] }, type: 'obj', mode: 'rw', id: 3, name: '模式' }, * { code: 'fault', property: { type: 'bitmap', maxlen: 8 }, type: 'obj', mode: 'ro', id: 4, name: '故障' }, * { code: 'colour_data', property: { type: 'string', maxlen: 255 }, type: 'obj', mode: 'rw', id: 5, name: '颜色' }, * ] as const; * * function Home() { * const power = useProps(props => props.switch_led); * const actions = useActions(); * * const handleClick = () => { * // ✅ set — 所有类型通用 * actions.switch_led.set(true); // bool * actions.brightness.set(500); // value * actions.work_mode.set('colour'); // enum(IDE 提示 'white' | 'colour') * actions.fault.set(3); // number(bitmap) * actions.colour_data.set('000003e803e8'); // string * * // bool 专属:on / off / toggle * actions.switch_led.toggle(); * actions.switch_led.on(); * actions.switch_led.off(); * * // value 专属:inc / dec(按 step 步进,自动 clamp 到 min~max) * actions.brightness.inc(); // +1(默认 step) * actions.brightness.dec(100); // -100 * * // enum 专属:prev / next / random * actions.work_mode.next(); // 切换到下一个枚举值 * actions.work_mode.prev(); * * // bitmap 专属:on(idx) / off(idx) / toggle(idx) * actions.fault.on(0); // 置位 bit 0 * actions.fault.off(1); // 清除 bit 1 * actions.fault.toggle(2); // 翻转 bit 2 * }; * * return ( * * 开关: {String(power)} * * ); * } * ``` */ export declare function useActions(): GetSmartDeviceModelActions;