收藏官网首页
查看: 10006|回复: 0

iOS SDK 2.0文档 7-SDK流程之设备控制部分

562

主题

1222

帖子

8127

积分

版主

Rank: 7Rank: 7Rank: 7

积分
8127
跳转到指定楼层
楼主
发表于 2016-7-7 16:42:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
3.5.  设备控制部分SDK通过字典键值对方式进行设备控制和状态接收。SDK接收到APP下发的指令字典后,对应解析为设备可识别的数据,发送给设备。反之,SDK收到设备回复或上报的数据后,对应解析为字典键值对上报给APP。
智能设备需正确烧写了GAgent固件和机智云串口通讯协议。如果设备定义了数据点,APP发送的指令必须符合数据点定义。如果设备没有定义数据点,设备指令可以按照透传数据以自定义格式下发。
3.5.1.   设备控制流程图
3.5.2.   发送控制指令设备订阅变成可控状态后,APP可以发送控制指令。控制指令是字典格式,键值对为数据点名称和值。操作指令的确认回复,通过didReceiveData回调返回。
APP下发操作指令时可以指定sn,通过回调参数中的sn能够对应到下发指令是否发送成功了。但回调参数dataMap有可能是空字典,这取决于设备回复时是否携带当前数据点的状态。
如果APP下发指令后只关心是否有设备状态上报,那么下发指令的sn可填0,这时回调参数sn也为0。
【示例代码】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
* 以下代码为App使用sn的示例。如果App不使用sn,sn可设为0,回调中也不需要判断sn
*/
//在设备列表中得到设备对象,设置委托
mDevice.delegate = self;

// 对已订阅变为可控状态的设备,发送开灯指令
int sn = 5;
[self write: @{@"LED_OnOff": @(YES)} sn(sn)];

// 实现回调
- (void)deviceGizWifiDevice *)device didReceiveDataNSError *)result dataNSDictionary *)data withSNNSNumber *)sn {
    if(result.code == GIZ_SDK_SUCCESS) {
        // 如果App不使用sn,此处不需要判断sn
        if (sn == 5) {
            // 命令序号相符,开灯指令执行成功
        } else {
            // 其他命令的ack或者数据上报
        }
    } else {
        // 执行失败
    }
}

3.5.3.   接收设备状态设备订阅变成可控状态后,APP可以随时收到设备状态的主动上报,仍然通过didReceiveData回调返回。设备上报状态时,回调参数sn为0,回调参数dataMap为设备上报的状态。
【示例代码】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- (void)deviceGizWifiDevice *)device didReceiveDataNSError *)result dataNSDictionary *)dataMap withSNNSNumber *)sn {
    if (result.code == GIZ_SDK_SUCCESS) {
        // 已定义的设备数据点,有布尔、数值、枚举、扩展类型        
        NSDictionary *dataDict = dataMap[@"data"];
        // 普通数据点,以布尔类型为例,打印对应的key和value
        BOOL onOff = [dataDict[@"LED_OnOff"] boolValue];
        NSLog(@"开关值LED_OnOff:%@", @(onOff));
        // 扩展类型数据点,key如果是“extData”
        NSData *extData = dataMap[@"extdata"];
        NSLog(@"扩展数据extData:%@", extData);
         
        // 已定义的设备故障或报警数据点,设备发生故障或报警后该字段有内容,没有发生故障或报警则没内容
        NSDictionary *alertsDict = dataMap[@"alerts"];
        NSDictionary *faultsDict = dataMap[@"faults"];
        NSLog(@"报警:%@, 故障:%@", alertsDict, faultsDict);

        // 透传数据,无数据点定义,适合开发者自行定义协议做数据解析
        NSData *binary = dataMap[@"binary"];
        NSLog(@"透传数据:%@", binary);
    } else {        
        //出错,处理 result 信息   
    }
}

3.5.4.   设备状态查询设备订阅变成可控状态后,APP可以查询设备状态。设备状态查询结果也通过didReceiveData回调返回,回调参数sn为0。回调参数dataMap为设备回复的状态。
【示例代码】
1
2
3
4
5
6
7
8
9
10
11
// mDevice是从设备列表中获取到的设备实体对象,为其设置委托
mDevice.delegate = self;
[mDevice getDeviceStatus];

- (void)deviceGizWifiDevice *)device didReceiveDataNSError *)result data:(NSDictionary *)data withSN:(NSNumber *)sn {
    if(result.code == GIZ_SDK_SUCCESS) {
        // 数据解析与3.5.3相同
    } else {
        // 查询失败
    }
}


1、机智云QQ群: 287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits /   机智云智能宠物屋go-kit
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表