---
title: SDM 一键执行能力使用指南 - 无线开关场景规则绑定与触发
summary: "SDM 一键执行能力使用指南，介绍无线开关场景规则绑定与触发的接入方式, 一键执行涉及的api有: getSceneListV2、getBindRuleList、bindRule、unbindRule、triggerRule。"
questions:
  - SmartTapToRunAbility 自 @ray-js/panel-sdk 哪个版本加入（1.11.0），@ray-js/ray 版本需大于多少（^1.5.15）？
  - SmartTapToRunAbility 仅支持单设备不支持群组，在群组环境下应如何处理？
  - 基础 JS 方式如何通过 new SmartTapToRunAbility().init() 创建实例并调用 getTapToRunRules？
  - SDM 模式下如何在 devices/index.ts 中将 SmartTapToRunAbility 注入 SmartDeviceModel 的 abilities？
  - SmartTapToRunAbility 底层依赖哪五个原子 API（getSceneListV2、getBindRuleList、bindRule、unbindRule、triggerRule）？
  - bindRule 和 unbindRule 分别用于将一键执行规则绑定到设备按键和解除绑定，调用方式是怎样的？
  - triggerRule 方法触发一键执行规则后会执行什么操作？
  - 无线开关产品的核心功能为什么推荐通过 SmartTapToRunAbility 实现？
  - 无线开关一键执行模板 Codelab 教程的入口在哪里，适合什么场景学习？
  - SdmProvider 接入后子组件如何通过 model.abilities 访问 TapToRun 实例？
---

# 使用

<div style={{ display: 'flex', gap: '8px', marginBottom: '16px' }}>
  <span style={{ backgroundColor: '#52c41a', color: 'white', padding: '2px 8px', borderRadius: '4px', fontSize: '12px' }}>单设备支持</span>
  <span style={{ backgroundColor: '#ff4d4f', color: 'white', padding: '2px 8px', borderRadius: '4px', fontSize: '12px' }}>群组不支持</span>
</div>

## 起步

`SmartTapToRunAbility` 自 `@ray-js/panel-sdk@1.11.0` 开始加入。

### 基础用法

以下为基础 JS 的接入示例：

```ts
import { SmartTapToRunAbility } from '@ray-js/panel-sdk';

// 创建一个 TapToRun 实例
const TapToRun = new SmartTapToRunAbility().init();

// 调用 TapToRunModel 的功能
TapToRun.getTapToRunRules()
  .then(result => {
    // 处理返回的结果
  })
  .catch(error => {
    // 处理错误情况
  });
```

### Ray & SDM

以下为 Ray 及 SDM 的接入示例：

**src/devices/index.ts**

> 生成 wireless 无线开关智能设备模型，并内置一键执行能力

```ts
import { SmartDeviceModel, SmartTapToRunAbility } from '@ray-js/panel-sdk';

const options = {
  abilities: [new SmartTapToRunAbility()],
};

const devices = {
  wireless: new SmartDeviceModel<SmartDeviceSchema, { alarm: SmartTapToRunAbility }>(options)
};
```

**src/app.tsx**

> 通过 SdmProvider 接入 React 体系

```tsx
import React from 'react';
import 'ray';
import '@/i18n';
import { kit, SdmProvider } from '@ray-js/panel-sdk';
import { devices } from '@/devices';

const { initPanelEnvironment } = kit;

interface Props {
  children: React.ReactNode;
}

initPanelEnvironment({ useDefaultOffline: true });

export default class App extends React.Component<Props> {
  onLaunch() {
    console.info('=== App onLaunch');
  }

  render() {
    return (
      <SdmProvider value={devices.sensor}>{this.props.children}</SdmProvider>
    );
  }
}
```

## 使用场景

无线开关产品的核心功能可通过 `SmartTapToRunAbility` 能力实现，建议阅读 [无线开关一键执行模板 Codelab](https://developer.tuya.com/cn/miniapp-codelabs/codelabs/panel-wireless-tap-to-run/index.html) 以了解更多。

## 注意事项

`SmartTapToRunAbility` 基于以下原子 API 实现，因此 `@ray-js/ray` 版本需大于 `^1.5.15`：

- [getSceneListV2](/cn/miniapp/develop/ray/api/scenes/query/getSceneListV2)
- [getBindRuleList](/cn/miniapp/develop/ray/api/scenes/query/getBindRuleList)
- [bindRule](/cn/miniapp/develop/ray/api/scenes/rule/bindRule)
- [unbindRule](/cn/miniapp/develop/ray/api/scenes/rule/unbindRule)
- [triggerRule](/cn/miniapp/develop/ray/api/scenes/rule/triggerRule)
