单设备支持群组支持

useActions()

版本要求:
@ray-js/panel-sdk≥1.2.0

描述

获取智能设备功能点操作方法集合,根据功能点类型提供 set、toggle 等下发方法,常与 useProps 搭配使用,useProps 读取状态、useActions 下发指令。

参数

无

返回值

类型:Record<DpCode, DpActions>
功能点行为集合,key 为功能点 code,
每个功能点根据类型提供不同操作:
- 所有类型: set(value) 直接下发
- bool 类型: on() / off() / toggle() 快捷切换
- value 类型: inc(step?) / dec(step?) 增减

引用对象

interfaceDpActions
属性类型描述
所有类型都有该方法,下发 DP 点,但需要根据功能点类型传入不同的值
只有 bool 类型和 bitmap 类型才有此方法,打开功能点或开启指定 bit 位
只有 bool 类型和 bitmap 类型才有此方法,关闭功能点或关闭指定 bit 位
只有 bool 类型和 bitmap 类型才有此方法,切换功能点或翻转指定 bit 位
只有 value 类型才有此方法,根据当前功能点步长 step 进行递增,
只有 value 类型才有此方法,根据当前功能点步长 step 进行递减
只有 enum 类型才有此方法,切换到前一个枚举值
只有 enum 类型才有此方法,切换到下一个枚举值
只有 enum 类型才有此方法,随机切换到一个枚举值
typeIgnoreDpChangeInterceptorOptions忽略 DP 数据变化拦截器的配置选项 用于配置智能设备面板中 DP 上报事件的防抖机制,避免面板操作后的 即时响应干扰用户体验或业务逻辑
属性类型描述
whiteDpCodesstring[]白名单 dp,不会忽略上报
timeoutnumber防抖超时检查,毫秒,默认为 5000
- 从面板下发 dp 到收到 dp 回复之间的最大时间,超过此时间才会触发 dpDataChange。
- 用于 dp 上报事件的防抖
自定义忽略规则
> 优先级最高,配置了自定义规则后,whiteDpCodes 和 timeout 项将无效
typeDevPropInterceptorOptions
属性类型描述
blackDpCodesstring[]黑名单 dp,不会同步到云端
首次进入时,默认的设备状态, 支持异步初始化
throttlenumber下发节流,毫秒,默认为 0
如果设置为 0,则不进行节流。
typeCustomRawDpMap自定义 DP 协议转换器,用于将原始 DP 字符串与结构化对象互转。 适用于 raw/string 类型的复合 DP(如灯的 colour_data "00ff003e8"), 将单个字符串拆解为多个语义字段(如 { hue, saturation, value })。
属性类型描述
将设备上报的原始 DP 字符串解析为结构化对象
将结构化对象序列化为下发给设备的 DP 字符串
typeDpState功能点状态对象,key 为功能点 code,value 为功能点值
export type DpState = Record<string, DpValue>;
typeDpValue功能点值类型,可能为 boolean、number、string
export type DpValue = boolean | number | string;

示例代码

各 DP 类型操作方法

// 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 (
    <View onClick={handleClick}>
      <Text>开关: {String(power)}</Text>
    </View>
  );
}