设备数据

设备数据分为设备属性数据设备上下线等状态数据

  • 他们都可以进行实时消息订阅,进行订阅操作后,APP和云端建立长连接, 设备属性数据的变化与设备上下线状态的变更会通过云端实时推送给APP。
  • 其中设备属性数据同时提供了获取历史属性数据以及当前设备属性数据的接口。 以上接口需要引用以下头文件:
#import "ACDeviceDataManager.h"

代码示例

设备属性数据

设备属性可前往【控制台->产品管理->属性设置】进行创建。

以空气净化器为例来说明。

属性名 类型 描述
pm25 整数 pm2.5值
speed 整数 当前风机转速
mode 字符串 当前净化器状态(auto(自动), high(高速), medium(中速), low(低速))

(1)获取设备属性相关数据

设备属性的当前数据和历史数据可前往【控制台->设备管理->对应设备详情->属性数据】进行查看。

  • 获取设备历史属性数据
//新建历史数据搜索条件实例
ACDevicePropertySearchOption *option = [[ACDevicePropertySearchOption alloc]
                                       initWithSubDomain:@"subDomain"
                                       deviceId:45
                                       startTime:[NSDate date].timeIntervalSince1970 - 3600 * 24
                                       endTime:[NSDate date].timeIntervalSince1970
                                       limit:20];
//默认返回**所有**属性字段,如下设置后结果只返回 @"pm25"和@"speed" 字段                                   
//option.selectProps = @[@"pm25", @"speed"];                   
//设置过滤条件 pm25 = 207 && speed < 20
[option filter:@"pm25" equalTo:@10];
[option filter:@"speed" lessThan:@20];
//发起查询请求
[ACDeviceDataManager fetchHistoryPropertyWithOption:option callback:^(NSArray<ACDevicePropertyMessage *> *records, NSError *error) {
                                                   if (error) {
                                                       //拉取数据错误提示
                                                       return;
                                                   }
                                                   //拉取数据成功后的操作
                                                   if (records.count > 0) {
                                                       //获取第一条数据的pm25属性值
                                                       [records[0].properties get:@"pm25"];
                                                   }
                                               }];

相关注意事项如下:

  1. option搜索实例,若不设置则默认limit为20条,上限为1000条。
  2. option搜索实例,若不设置搜索起始时间startTime,则默认从最早的数据开始搜索。
  3. option搜索实例,若不设置搜索结束时间endTime,则默认查询到最新一条数据。
  4. option搜索实例,若不设置检索返回属性字段数组selectProps,则默认返回所有属性字段。也可自定义搜索返回字段如:option.selectProps = @[@"pm25", @"speed"];
  5. option搜索实例可以对属性字段设置多种过滤条件:equal,lessThan,greaterThan,lessOrEqualTo,greaterOrEqualTo
  6. 返回结果均带有timestamp属性。
  • 获取设备当前属性数据
[ACDeviceDataManager fetchCurrentPropDataWithSubDomain:@"subDomain"
                                              deviceId:45
                                              callback:^(ACDevicePropertyMessage *result,
                                               NSError *error) {
                                                   if (error) {
                                                       //拉取数据错误提示
                                                       return;
                                                   }
                                                   //拉取数据成功后的操作
                                                   if (records.count > 0) {
                                                       //获取第一条数据的pm25属性值
                                                       [records[0].properties get:@"pm25"];
                                                   }
                                              }];

(2)订阅设备属性实时变化

当设备上报属性数据至UDS后,UDS可调用属性数据存储并推送接口,对对应设备进行属性数据实时推送,此时APP只需要订阅该设备的属性数据推送并设置了回调处理函数,则可以实现实时数据的获取与处理。

  • 订阅设备属性数据实时推送消息:
[ACDeviceDataManager subscribePropDataWithSubDomain:@"subDomain"
                                           deviceId:45
                                           callback:^(NSError *error) {
                                               if (error) {
                                                   //订阅失败提示
                                                   return;
                                               }
                                               //订阅成功提示
                                                      }];

相关注意事项如下:

  1. SubDomain为设备所属的子域
  2. deviceId为设备的激活id
  3. 如果回调结果无错误则表明订阅操作成功
  • 取消订阅设备属性数据实时推送消息:
[ACDeviceDataManager unSubscribePropDataWithSubDomain:@"subDomain"
                                             deviceId:45
                                             callback:^(NSError *error) {
                                                 if (error) {
                                                     //取消订阅失败
                                                     return;
                                                 }
                                                 //取消订阅成功
                                                        }];

相关注意事项如下:

  1. SubDomain为设备所属的子域
  2. deviceId为设备的激活id
  3. 如果回调结果无错误则表明取消订阅操作成功
  4. 下面同时提供了取消订阅所有设备实时属性数据推送的接口。
  • 取消订阅所有设备属性数据实时推送消息:
[ACDeviceDataManager unSubscribeAllDevicePropData];
  • 设置设备属性数据实时消息回调:
[ACDeviceDataManager setPropertyMessageHandler:^(NSString *subDomain,
                                                 NSInteger deviceId,
                                                 ACObject *properties) {
                                                     //通过属性名称获取属性值
                                                     [properties get:@"pm25"];
                                                 }];

相关注意事项如下:

  1. SubDomain为设备所属的子域
  2. deviceId为设备的激活id
  3. properties为设备新增的所有属性键值
  4. 此回调方法可以在您代码的任意位置进行设置。

设备状态数据

  • 订阅设备上下线状态实时消息
  [ACDeviceDataManager subscribeOnlineStatusWithSubDomain:@"subDomain"
                                                 deviceId:45
                                                 callback:^(NSError *error) {
                                                     if (error) {
                                                       //订阅失败提示
                                                       return;
                                                   }
                                                   //订阅成功提示
                                                 }];

相关注意事项如下:

  1. SubDomain为设备所属的子域
  2. deviceId为设备的激活id
  3. 如果回调结果无错误则表明订阅操作成功
  4. 下面同时提供了取消订阅所有设备上下线状态推送的接口。
  • 取消订阅所有设备上下线状态推送消息:
[ACDeviceDataManager unSubscribeAllDeviceOnlineStatus];
  • 取消订阅设备上下线状态实时消息
[ACDeviceDataManager unSubscribeOnlineStatusWithSubDomain:@"subDomain"
                                                 deviceId:45
                                                 callback:^(NSError *error) {
                                                     if (error) {
                                                         //取消订阅失败
                                                         return;
                                                     }
                                                     //取消订阅成功
                                                             }];

相关注意事项如下:

  1. SubDomain为设备所属的子域
  2. deviceId为设备的激活id
  3. 如果回调结果无错误则表明取消订阅操作成功
  • 设置设备实时上下线状态回调:
[ACDeviceDataManager setOnlineStatusHandler:^(NSString *subDomain,
                                              NSInteger deviceId,
                                              ACDeviceOnlineStatus status){
                                                  //判断在线状态
                                                  switch (status) {
                                                      case ACDeviceOnlineStatusOnline:
                                                          //设备上线处理
                                                          break;
                                                      case ACDeviceOnlineStatusOffline:
                                                          //设备下线处理
                                                          break;
                                                      }
                                              }];

相关注意事项如下:

  1. SubDomain为设备所属的子域
  2. deviceId为设备的激活id
  3. status为设备上线线状态。
  4. 此回调方法可以在您代码的任意位置进行设置。

设备故障数据

  • 获取设备当前故障属性属性值

    ```objc [ACDeviceDataManager fetchCurrentFaultsWithSubDomain:@"subDomain" deviceId:45 callback:^(ACDeviceFaultsMessage result, NSError error) {

                                     }];
    

    ```

相关注意事项如下:

  1. SubDomain为设备所属的子域
  2. deviceId为设备的激活id
  3. result.faults为设备故障属性数据,所有键对应的值 0:代表对应属性故障恢复 1:代表对应属性故障发生。 其中键"_overall"的数据代表 0:整机无故障,1:整机有故障。
  • 订阅设备故障属性数据实时消息
  [ACDeviceDataManager subscribeFaultsWithSubDomain:@"subDomain"
                                           deviceId:45
                                           callback:^(NSError *error) {
                                                if (error) {
                                                  //订阅失败提示
                                                  return;
                                              }
                                              //订阅成功提示
                                            }];

相关注意事项如下:

  1. SubDomain为设备所属的子域
  2. deviceId为设备的激活id
  3. 如果回调结果无错误则表明订阅操作成功
  4. 下面同时提供了取消订阅所有设备故障属性数据推送的接口。
  • 取消订阅所有故障属性数据推送消息:
[ACDeviceDataManager unSubscribeAllDeviceFaults];
  • 取消订阅设备故障属性数据实时消息
[ACDeviceDataManager unSubscribeFaultsWithSubDomain:@"subDomain"
                                                 deviceId:45
                                                 callback:^(NSError *error) {
                                                     if (error) {
                                                         //取消订阅失败
                                                         return;
                                                     }
                                                     //取消订阅成功
                                                             }];

相关注意事项如下:

  1. SubDomain为设备所属的子域
  2. deviceId为设备的激活id
  3. 如果回调结果无错误则表明取消订阅操作成功
  • 设置设备实时故障属性数据回调:
[ACDeviceDataManager setFaultsMessageHandler:^(NSString *subDomain,
                                              NSInteger deviceId,
                                              ACObject *faults){
                                                  //TODO...
                                              }];

相关注意事项如下:

  1. SubDomain为设备所属的子域
  2. deviceId为设备的激活id
  3. faults为设备故障属性数据,所有键对应的值 0:代表对应属性故障恢复 1:代表对应属性故障发生。 其中键"_overall"的数据代表 0:整机无故障,1:整机有故障。
  4. 此回调方法可以在您代码的任意位置进行设置。

设备上报速率控制

  • 加速设备的数据上报速率:
[ACDeviceDataManager enableDeviceFastReport:45
                                  subDomain:@"subDomain"
                                   interval:3
                                    callback:^(NSError *error) {

                                    }];

相关注意事项如下:

  1. SubDomain为设备所属的子域
  2. deviceId为设备的激活id
  3. interval为控制设备上报数据的间隔时间 范围限制为:(0, 60] 秒。
  • 取消加速设备快速上报:
[ACDeviceDataManager disableDeviceFastReport:45
                                   subDomain:@"subDomain"
                                     callback:^(NSError *error) {

                                     }];

相关注意事项如下:

  1. SubDomain为设备所属的子域
  2. deviceId为设备的激活id
  3. 本接口调用后3分钟后,对应设备才会停止快速上报。
  • 取消加速所有设备快速上报:
[ACDeviceDataManager disableAllDeviceFastReport];

相关注意事项如下:

  1. 本接口调用后3分钟后,对应设备才会停止快速上报。注:若开发者的APP拥有后台运行权限,那么建议在APP进入后台的代理方法中调用此方法。