# 设备间消息通信使用示例
#### 前置步骤
1. 参考[创建产品](https://support.huaweicloud.com/usermanual-iothub/iot_01_0054.html)创建产品。
2. 参考[注册单个设备](https://support.huaweicloud.com/usermanual-iothub/iot_01_0031.html)创建设备。
 
#### 配置流转规则
1. 访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击"管理控制台"进入设备接入控制台。选择您的实例，单击实例卡片进入。
2. 左侧导航栏单击"规则 \> 数据转发"，进入数据转发界面。 
   图1数据转发-列表   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001982215757.png "点击放大")
   
   
3. 在"数据转发\>规则列表"界面单击"创建规则"，填写规则参数，设置转发数据，配置数据过滤语句为：STARTS_WITH(notify_data.body.topic,'/test/M2M/')。 
   图2新建流转规则-M2M   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001982218753.png "点击放大")
   ![](https://support.huaweicloud.com/usermanual-iothub/public_sys-resources/note_3.0-zh-cn.png)
   - [图2]的设置代表：在资源空间XXX中的所有设备，Topic中包含/test/M2M/的消息上报，都会触发该流转规则，转发到设置的转发目标。
   
   - 若希望指定某个设备上报的数据进行流转，可在SQL语句中添加：AND notify_data.header.device_id='${对应的设备ID}'。
   
   - 若希望指定某种产品上报的数据进行流转，可在SQL语句中添加：AND notify_data.header.product_id='${对应的产品ID}'。
     图3数据转发-M2M_SQL语句示例   
     ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000002384114389.png "点击放大") 
   
   - 关于SQL的设置，详情可见：[SQL语句](https://support.huaweicloud.com/usermanual-iothub/iot_01_0025.html)。
    
   
   
4. 设置转发目标。单击"添加"，设置转发目标为"设备"，Topic为："$topic()"（转发后Topic不变），ttl设置为5分钟（数据缓存5分钟）。设置完成后单击"确定"。 
   图4新建转发目标-转发至设备   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000002322442206.png "点击放大")
   ![](https://support.huaweicloud.com/usermanual-iothub/public_sys-resources/note_3.0-zh-cn.png)
   由于对转发目标的范围是对应的资源空间（范围较大），只要在该资源空间下的设备进行订阅，都可以收到M2M下发的数据，因此对应的安全系数不高，在复杂场景下容易弄混，对设备侧代码配置较为麻烦。可以使用[场景二： 端到端（M2M）+策略](https://support.huaweicloud.com/usermanual-iothub/iot_01_1113.html#ZH-CN_TOPIC_0000001683906669__section7524144313285)的方法管理设备的订阅与发布，从而解决该问题。
   
   
5. 启动规则。单击页面中央的"启动规则"，完成规则设置。 
   图5启动规则-转发至设备   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001982225273.png "点击放大")
   
   
#### 策略配置
![](https://support.huaweicloud.com/usermanual-iothub/public_sys-resources/note_3.0-zh-cn.png)
由于策略暂时只在华南友好局点开启，若在其他局点中使用M2M，可先跳过该步骤，直接进行验证。
1. 访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击"管理控制台"进入设备接入控制台。选择您的实例，单击实例卡片进入。
2. 左侧导航栏单击"设备 \> 策略"，进入策略界面。 
   图6设备策略-进入界面   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001981577933.png "点击放大")
   
   
3. 在策略界面单击"创建策略"，填写策略参数，单击生成策略。策略的应用范围是资源空间（appId），其中资源"topic:"开头代表MQTT中的Topic，用于发布与订阅。允许发布和订阅主题：/test/M2M/\*。 
   图7设备策略-创建策略(M2M)   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001950727196.png "点击放大")
   
   
4. 绑定策略。下面以某个设备为例进行绑定。选择策略目标类型，单击需要绑定策略的产品或设备。 
   图8设备策略-绑定设备   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001981497785.png "点击放大")
   
   
 
#### 验证
1. 使用设备间消息通信功能时，具体步骤如下：
   1. 访问[设备接入服务](https://www.huaweicloud.com/product/iothub.html)，单击"管理控制台"进入设备接入控制台。选择您的实例，单击实例卡片进入。
   
   2. [创建产品](https://support.huaweicloud.com/usermanual-iothub/iot_01_0054.html)，产品的"协议类型"选择"MQTT"。
      图9创建产品-M2M   
      ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001982180265.png "点击放大") 
    
2. 在[1]中创建的产品下分别注册设备A（test111）和设备B（test222），详细步骤可参考[注册单个设备](https://support.huaweicloud.com/usermanual-iothub/iot_01_0031.html)。
   图10设备-注册M2M设备   
   ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001950764974.png "点击放大") 
3. 您可以根据自己的业务场景来实现设备间消息通信。下面以MQTT.fx为例说明如何进行设备间消息通信：
   1. 打开两个MQTT.fx，分别模拟设备A（test111）、B（test222）。如何使用MQTT.fx可参考[使用MQTT.fx调测](https://support.huaweicloud.com/devg-iothub/iot_01_2127.html)。
   
   2. 设备B在Subscribe页面中输入Topic" /test/M2M/#"后，单击"Subscribe"订阅。
      图11设备B（test222）在Subscribe页面中输入topic   
      ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001764240097.png "点击放大") 
   
   3. 设备A（test111）向设备B（test222）发送消息，在设备A（test111）的MQTT.fx的"Publish"页面中，输入topic"/test/M2M/${任意单词}"（其中"${任意单词}"替换成任意单词） ，在内容输入框中输入要发送的消息（如：hello）单击"Publish"即可发送。
      图12设备A Publish页面输入消息   
      ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001716440118.png "点击放大")
      在设备B的Subscribe页面可以看到接收的消息如下：
      图13设备B Subscribe页面展示   
      ![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000001716440706.png "点击放大")
      
      
    
 
