物联网数据分析服务提供的数据开发功能,不仅支持分析设备上报云端的数据,还可以通过SQL将分析后的决策结果下发至设备进行远程控制。

前提条件

  • 仅支持使用真实设备或使用SDK模拟设备实现下发决策至设备的功能。
  • 下发数据的设备属性,必须是读写类型。

背景信息

本文以使用Java SDK模拟空调设备为例,利用物联网数据分析服务提供的数据开发功能编写SQL,从某一个提供数据的产品获取设备数据,并将该数据下发到空调设备。

操作步骤

  1. 登录物联网平台控制台
  2. 创建一个空调设备。
    1. 参考创建产品,创建如下图所示的空调产品。
      创建产品
      产品创建成功后,到产品详情页面获取ProductSecret,以备后续使用。
    2. 参考单个创建设备,添加空调设备。
      添加设备
      设备创建成功后,保存设备证书(ProductKey、DeviceName、DeviceSecret),以备后续使用。
  3. 使用Link Kit SDK提供的Java SDK Demo模拟空调设备,使其上线。
    1. 下载Java SDK Demo并解压到本地。
    2. 解压后在device_id.json文件中,填写已保存的设备信息(ProductKey、DeviceName、DeviceSecret)和产品ProductSecret。

      更新device_id.json
    3. 启动HelloWorld.java文件中的main方法。
      启动HelloWorld.java
      返回物联网平台控制台,在设备管理页面选择空调产品后,可看到产品下的设备状态为在线
      空调设备在线
  4. 创建商场温度传感器设备,并上报数据到云端。
    1. 参考创建产品,创建一个商场温度传感器产品。

      商场温度传感器
    2. 参考批量创建设备,批量添加5个商场温度传感器设备。
    3. 参考单个添加物模型,为商场温度传感器添加自定义功能
      说明 可根据您的需求添加多种属性,但需要下发的属性,其读写类型必须是读写
    4. 在物联网平台,选择监控运维 > 在线调试,在在线调试页面,选择调试产品和设备后上报属性数据。
      温度传感器上报数据
      商场温度传感器产品下的5个设备,分别上报数据,可上报相同的属性值。
  5. 数据分析 > 数据开发页面,查看空调设备和商场温度传感器设备的数据表。
    1. 数据开发页面,选择表管理 > 平台设备数据表并刷新。
      刷新后,可在设备数据表中看到新建的空调产品。
      刷新空调数据
    2. 找到商场温度传感器,保存数据概览页面中$product_key的值,并查看设备属性标识符,以备后续SQL语句中使用。
      传感器数据记录
  6. 创建数据开发任务。
    1. 参考开发任务,创建一个下发数据至设备的任务。
      创建任务
    2. 在任务中编写如下SQL。
      -- 以下示例中的函数均可在函数列表中找到
      
      -- 查询商场温度传感器上报温度且上报时间在五分钟内,且高温数量传感器数量大于5
      CREATE VIEW HIGH_TEMPERATURE AS 
          SELECT count(CurrentTemperature) AS high_temp_num, AreaId ,AVG(CurrentTemperature) AS current_temper
          FROM ${pk.Your_ProductKey1}
          WHERE CurrentTemperature IS NOT NULL AND DATE_DIFF('MINUTE',FROM_UNIXTIME($event_time/1000),NOW()) < 5 AND CurrentTemperature > 26
              GROUP BY AreaId HAVING count(CurrentTemperature) > 5;
      
      
      
      INSERT INTO ${pk.Your_ProductKey2.Your_DeviceName2} 
      SELECT 
      1 AS PowerSwitch,
      -- 根据当前温度调整风速等级
      CASE current_temper 
          WHEN  35 THEN 5 
          WHEN  32 THEN 4 
          WHEN  30 THEN 3 
          WHEN  28 THEN 0  
          ELSE 0 END AS WindSpeed,
      -- 根据月份切换风力类型 自动 - 0;制冷 - 1;制热 - 2;通风 - 3;除湿 - 4;
       CASE 
          WHEN MONTH(NOW()) > 6 AND MONTH(NOW()) < 11 THEN 1
          WHEN MONTH(NOW()) > 11 AND MONTH(NOW()) < 4 THEN 2
          ELSE 0 END AS WorkMode
      FROM HIGH_TEMPERATURE WHERE AreaId='一楼';
      其中:
      • FROM语句中,Your_ProductKey1替换为商场温度传感器的ProductKey。
      • INSERT INTO语句中,Your_ProductKey2Your_DeviceName2替换为空调设备的ProductKey和DeviceName。
      说明 语法解释如下:
      INSERT INTO {目标表} SELECT {属性标识符} FROM {数据表/视图} WHERE {过滤条件} [LIMIT (数据条数限制)]

      编写完成后需进行语法校验

    3. 保存并运行SQL任务。
      运行任务
  7. 查看HelloWorld.java文件中设备接收到的下发属性。
    数据下发结果
    至此,您已完成利用数据开发SQL将数据下发至设备的操作。