GizWifiDevice 类
机智云 Wifi 的设备类。GizWifiDevice 类为 APP 开发者提供设备订阅、设备数据通知、设备实时状态通知,例如热水器的水温等功能。该设备实例是通过 GizWifiDevice 类分配出来的,不能自行创建。
目录
- 属性访问
- [setListener]
- [getMacAddress]
- [getDid]
- [getIPAddress]
- [getProductKey]
- [getProductName]
- [getRemark]
- [getAlias]
- [isLAN]
- [isBind]
- [isDisabled]
- [getProductType]
- [getNetStatus]
- [isSubscribed]
- [isProductDefined]
- [isLowPower]
- [isDormant]
- [getStateLastTimestamp]
- [sleepDuration]
- [getAttrStatus]
- [getRootDevice]
- [getNetType]
- 回调接口
- API 定义
属性访问
[setListener]
设置设备的监听器
定义
public void setListener(GizWifiDeviceListener Listener);
参数
属性名 | 描述 |
---|---|
listener | 设备监听器 |
代码示例
// mDevice是从设备列表中获取到的设备实体对象
mDevice.setListener(new GizWifiDeviceListener() {});
[getMacAddress]
获取设备的Mac地址。如果是 VIRTUAL:SITE,则是虚拟设备
定义
public String getMacAddress();
[getDid]
设备云端身份标识DID
定义
public String getDid()
[getIPAddress]
获取设备的ip地址。大循环设备的ip地址为云端服务器域名
定义
public String getIpAddress()
[getProductKey]
获取设备的产品类型识别码
定义
public String getProductKey()
[getProductName]
获取设备的产品名称
定义
public String getProductName()
[getRemark]
获取设备的备注信息。设备绑定后可以修改,默认为空
定义
public String getRemark()
[getAlias]
获取设备的别名。设备绑定后可以修改,默认为空
定义
public String getAlias()
[isLAN]
判断设备是小循环还是大循环
定义
public boolean isLAN()
[isBind]
判断设备是否已绑定
定义
public boolean isBind()
[isDisabled]
判断设备是否已在云端注销
定义
public boolean isDisabled()
[getProductType]
GizWifiDeviceType类型。设备分类,是轻网关子设备还是普通设备
定义
public GizWifiDeviceType getProductType()
[getNetStatus]
获取设备的网络状态,详见GizWifiDeviceNetStatus枚举定义
定义
public GizWifiDeviceNetStatus getNetStatus()
[isSubscribed]
判断设备是否已订阅
定义
public boolean isSubscribed()
[isProductDefined]
判断设备是否定义了产品数据点
定义
public boolean isProductDefined()
[isLowPower]
判断设备是否低功耗设备
定义
public boolean isLowPower();
[isDormant]
判断设备是否休眠
定义
public boolean isDormant();
[getStateLastTimestamp]
获取设备最后的活跃时间
定义
public int getStateLastTimestamp();
[sleepDuration]
获取设备休眠时长
定义
public int getSleepDuration();
[getAttrStatus]
获取缓存的最新设备状态
定义
public ConcurrentHashMap<String, Object> getAttrStatus()
[getRootDevice]
获取根设备。子设备的根设备为网关,单品没有根设备为null
定义
public GizWifiDevice getRootDevice()
[getNetType]
获取设备的网络类型,详见GizDeviceNetType枚举定义
定义
public GizDeviceNetType getNetType();
回调接口
以下是GizWifiDevice类提供的所有回调接口,将在在后续API定义中详细介绍:
- didGetHardwareInfo:设备硬件信息的回调
- didSetCustomInfo:设置设备绑定信息的回调
- didExitProductionTesting:设备退出产测的回调
- didSetSubscribe:设备订阅或解除订阅的回调
- didUpdateNetStatus:设备网络状态变化通知
- didReceiveData:控制指令回复或设备状态上报的回调
- didReceiveAppToDevAttrStatus: 接收非本机发出的设备控制指令(仅支持低功耗设备)
[didUpdateNetStatus]
该回调主动上报设备的网络状态变化,当设备重上电、断电或可控时会触发该回调
回调
public void didUpdateNetStatus(GizWifiDevice device, GizWifiDeviceNetStatus netStatus)
回调参数
属性名 | 描述 |
---|---|
device | 回调的 GizWifiDevice 对象 |
netStatus | 设备是离线、在线还是可控状态 |
代码示例
// mDevice是从设备列表中获取到的设备实体对象
mDevice.setListener(mListener);
// 实现回调
GizWifiDeviceListener mListener = new GizWifiDeviceListener() {
@override
public void didUpdateNetStatus(GizWifiDevice device, GizWifiDeviceNetStatus netStatus) {
}
};
[didReceiveData]
接收到设备状态上报的回调
回调
public void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn);
回调参数
属性名 | 描述 |
---|---|
device | 回调的 GizWifiDevice 对象 |
result | 详细见 GizWifiErrorCode 枚举定义。GIZ_SDK_SUCCESS 表示成功,其他为失败。失败时,dataMap为空字典 |
dataMap | 设备上报的数据内容,字典格式: { "data": [value], // value 为 NSDictionary 类型,内容为设备状态键值对,[数据点标识名:数据点值],数据点值的类型与 site 上的定义一致 "alerts": [value], // value 为 NSDictionary 类型,内容为设备报警键值对,[数据点标识名:数据点值],数据点值的类型与 site 上的定义一致 "faults": [value], // value 为 NSDictionary 类型,内容为设备故障键值对,[数据点标识名:数据点值],数据点值的类型与 site 上的定义一致 "binary": [value], // value 为 NSData 类型,内容为二进制数据,指没有在 site 上定义数据点的需要透传的数据 } |
sn | 控制指令的应答序号,此应答序号与 APP 发送控制指令的序号一致。设备主动上报数据和回复状态查询时,序号为0 |
代码示例
// mDevice是从设备列表中获取到的设备实体对象
mDevice.setListener(mListener);
// 实现回调
GizWifiDeviceListener mListener = new GizWifiDeviceListener() {
@Override
public void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn) {
}
};
[didReceiveAppToDevAttrStatus]
接收非本机发出的设备控制指令(仅支持低功耗设备)
回调
public void didReceiveAppToDevAttrStatus(GizWifiErrorCode result, GizWifiDevice device,
ConcurrentHashMap<String, Object> attrStatus, ConcurrentHashMap<String, Object> adapterAttrStatus, int sn);
回调参数
属性名 | 描述 |
---|---|
device | 回调的 GizWifiDevice 对象 |
result | 详细见 GizWifiErrorCode 枚举定义。GIZ_SDK_SUCCESS 表示成功,其他为失败。失败时,attrStatus为空字典 |
attrStatus | 设备上报的数据内容,字典格式: { "data": [value], // value 为 NSDictionary 类型,内容为设备状态键值对,[数据点标识名:数据点值],数据点值的类型与 site 上的定义一致 "alerts": [value], // value 为 NSDictionary 类型,内容为设备报警键值对,[数据点标识名:数据点值],数据点值的类型与 site 上的定义一致 "faults": [value], // value 为 NSDictionary 类型,内容为设备故障键值对,[数据点标识名:数据点值],数据点值的类型与 site 上的定义一致 "binary": [value], // value 为 NSData 类型,内容为二进制数据,指没有在 site 上定义数据点的需要透传的数据 } |
sn | 控制指令的应答序号,此应答序号与 APP 发送控制指令的序号一致。设备主动上报数据和回复状态查询时,序号为0 |
代码示例
// mDevice是从设备列表中获取到的设备实体对象
mDevice.setListener(mListener);
// 实现回调
GizWifiDeviceListener mListener = new GizWifiDeviceListener() {
@Override
public void didReceiveAppToDevAttrStatus(GizWifiErrorCode result, GizWifiDevice device,
ConcurrentHashMap<String, Object> attrStatus, ConcurrentHashMap<String, Object> adapterAttrStatus, int sn) {
}
};
API 定义
[setSubscribe]
设备订阅或解除订阅。订阅了设备,表示使用者关心这个设备的消息推送。解除订阅,表示使用者不关心这个设备的消息推送。订阅设备后,SDK将自动登录和自动绑定设备。解除订阅后,设备连接将自动断开,但不会自动解绑。一般来说,设备订阅都会成功的,SDK会记住设备是否被订阅了
定义
public void setSubscribe(boolean subscribed, boolean autoGetDeviceStatus);
参数
属性名 | 描述 |
---|---|
subscribed | 订阅或者解除订阅。true表示订阅,false表示解除订阅 |
autoGetDeviceStatus | 是否自动去获取一次设备状态。true表示在与设备建立连接成功之后,SDK会主动去获取一次设备状态; false表示SDK不会主动获取设备状态 |
回调
public void didSetSubscribe(GizWifiErrorCode result, GizWifiDevice device, boolean isSubscribed)
回调参数
属性名 | 描述 |
---|---|
device | 回调的 GizWifiDevice 对象 |
result | 详细见 GizWifiErrorCode 枚举定义。GIZ_SDK_SUCCESS 表示成功,其他为失败。失败时,订阅状态无变化 |
isSubscribed | 设备是被订阅了还是被解除订阅了。true表示被订阅,false表示被解除订阅 |
代码示例
// mDevice是从设备列表中获取到的设备实体对象
mDevice.setListener(mListener);
mDevice.setSubscribe(true, true); // 订阅设备,自动获取设备状态
mDevice.setSubscribe(false, false); // 解除订阅
// 实现回调
GizWifiDeviceListener mListener = new GizWifiDeviceListener() {
@Override
public void didSetSubscribe(GizWifiErrorCode result, GizWifiDevice device, boolean isSubscribed) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 订阅或解除订阅成功
} else {
// 失败
}
}
};
[getDeviceStatus]
获取设备状态。已订阅的设备变为可控状态后才能获取到状态。如果设备是变长数据点类型,则可查询指定的数据点状态
定义
public void getDeviceStatus(List<String> attrs)
参数
属性名 | 描述 |
---|---|
attrs | 要查询状态的数据点名称,为String类型数组。此参数默认值为null。SDK默认返回设备的所有数据点状态。若要查询某些数据点的状态,参数应指定为要查询的数据点名称数组 |
回调
设备回复或上报的数据中,当 SDK 遇到无法解析的数据时,会作为透传数据处理,此时错误码为 GIZ_SDK_SUCCESS
public void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn)
回调参数
属性名 | 描述 |
---|---|
device | 回复状态的设备对象 |
result | 详细见 GizWifiErrorCode 枚举定义。GIZ_SDK_SUCCESS 表示成功,其他为失败。失败时,dataMap为空字典 |
dataMap | 设备上报的数据内容,字典格式: { "data": [value], // value为ConcurrentHashMap类型,内容为设备状态键值对,[数据点标识名:数据点值],数据点值的类型与 site 上的定义一致 "alerts": [value], // value为ConcurrentHashMap类型,内容为设备报警键值对,[数据点标识名:数据点值],数据点值的类型与 site 上的定义一致 "faults": [value], // value为ConcurrentHashMap类型,内容为设备故障键值对,[数据点标识名:数据点值],数据点值的类型与site上的定义一致 "binary": [value], // value为Byte[]类型,内容为二进制数据,指没有在site上定义数据点的需要透传的数据 } |
sn | 控制指令的应答序号,此应答序号与 APP 发送控制指令的序号一致。设备主动上报数据和回复状态查询时,序号为0 |
代码示例
// mDevice是从设备列表中获取到的设备实体对象
mDevice.setListener(mListener);
mDevice.getDeviceStatus(null);
// 实现回调
GizWifiDeviceListener mListener = new GizWifiDeviceListener() {
@Override
public void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 查询成功
} else {
// 查询失败
}
}
};
[write]
给设备发送控制指令。已订阅的设备变为可控状态后才能发送控制指令
定义
public void write(ConcurrentHashMap<String, Object> data, int sn)
参数
属性名 | 描述 |
---|---|
data | 该参数为要发给设备的操作指令。为字典格式,字典键值对可按以下方式填充:1、如果设备有数据点定义,操作指令一次可以下发多个数据点。字典中的key为数据点名称,value为数据点的值。value类型要与数据点定义一致:(1)如果数据点为布尔类型,则value为boolean类型;(2)如果数据点为数值类型,则value为int或float类型;(3)如果数据点为枚举类型,则value为枚举序号(int类型)或者枚举字符串 (String类型);(4)如果数据点为扩展类型,则value为Byte[]类型;2、如果设备操作采用透传方式,透传指令一次只能下发一条。字典中的key填充为”binary”,value为Byte[]类型。 |
sn | 控制指令序号,用于对应控制指令应答数据。控制确认回调时会返回这个sn |
回调
设备回复或上报的数据中,当 SDK 遇到无法解析的数据时,会作为透传数据处理,此时错误码为 GIZ_SDK_SUCCESS
public void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn)
回调参数
属性名 | 描述 |
---|---|
device | 回复状态的设备对象 |
result | 详细见 GizWifiErrorCode 枚举定义。GIZ_SDK_SUCCESS 表示成功,其他为失败。失败时,dataMap为空字典 |
dataMap | 设备上报的数据内容,字典格式: { "data": [value], // value为ConcurrentHashMap类型,内容为设备状态键值对,[数据点标识名:数据点值],数据点值的类型与 site 上的定义一致 "alerts": [value], // value为ConcurrentHashMap类型,内容为设备报警键值对,[数据点标识名:数据点值],数据点值的类型与 site 上的定义一致 "faults": [value], // value为ConcurrentHashMap类型,内容为设备故障键值对,[数据点标识名:数据点值],数据点值的类型与site上的定义一致 "binary": [value], // value为Byte[]类型,内容为二进制数据,指没有在site上定义数据点的需要透传的数据 } |
sn | 控制指令的应答序号,此应答序号与 APP 发送控制指令的序号一致。设备主动上报数据和回复状态查询时,序号为0 |
代码示例
// mDevice是从设备列表中获取到的设备实体对象,设置监听
mDevice.setListener(mListener);
/*
* 此代码为使用sn的示例。如果App使用命令序号sn,sn可设为相应的值
*/
// 订阅设备并变为可控状态后,执行开灯动作
int sn = 0;
ConcurrentHashMap command = new ConcurrentHashMap<String, boolean> ();
command.put("LED_OnOff", true);
mDevice.write(command, sn);
// 实现回调
GizWifiDeviceListener mListener = new GizWifiDeviceListener() {
@Override
public void didReceiveData(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, Object> dataMap, int sn) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 开灯成功
} else {
// 开灯失败
}
}
};
[setCustomInfo]
修改设备的备注和别名。设备绑定后才能修改。 请注意,remark和alias内容中若有以下左边的5个字符,将被转义为右边的内容: & --> & < --> < --> > " --> " ' --> '
定义
public void setCustomInfo(String remark, String alias)
参数
属性名 | 描述 |
---|---|
remark | 待修改的备注信息。传 null表示不修改,传””则会覆盖为空串 |
alias | 待修改的设备别名。传 null表示不修改,传””则会覆盖为空串 |
回调
public void didSetCustomInfo(GizWifiErrorCode result, GizWifiDevice device)
回调参数
属性名 | 描述 |
---|---|
device | 修改备注和别名的设备对象 |
result | 详细见 GizWifiErrorCode 枚举定义。GIZ_SDK_SUCCESS 表示成功,其他为失败 |
代码示例
// mDevice是从设备列表中获取到的设备实体对象
mDevice.setListener(mListener);
mDevice.setCustomInfo("your_remark", "your_alias");
// 实现回调
GizWifiDeviceListener mListener = new GizWifiDeviceListener() {
@Override
public void didSetCustomInfo(GizWifiErrorCode result, GizWifiDevice device) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 修改成功
} else {
// 修改失败
}
}
};
[getHardwareInfo]
获取硬件信息。不订阅设备也可以使用此接口,只要设备连入正常工作模式即可
定义
public void getHardwareInfo()
回调
public void didGetHardwareInfo(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, String> hardwareInfo)
回调参数
属性名 | 描述 |
---|---|
device | 返回硬件信息的设备对象 |
result | 详细见 GizWifiErrorCode 枚举定义。GIZ_SDK_SUCCESS 表示成功,其他为失败。失败时,hardwareInfo为null |
hardwareInfo | 硬件信息。对应的硬件信息键值对有:{"wifiHardVersion": [value], // value为String 类型,设备的 Wifi 模组硬件版本号"wifiSoftVersion": [value], // value为String 类型,设备的 Wifi 模组软件版本号"wifiFirmwareId": [value], // value为String 类型,设备的 Wifi 固件 ID"wifiFirmwareVer": [value], // value为String 类型,设备的 Wifi 固件版本"mcuHardVersion": [value], // value为String 类型,设备的硬件版本号"mcuSoftVersion": [value], // value为String 类型,设备的软件版本号"productKey": [value], // value为String 类型,设备的产品唯一标识码} |
代码示例
// mDevice是从设备列表中获取到的设备实体对象
mDevice.setListener(mListener);
mDevice.getHardwareInfo();
// 实现回调
GizWifiDeviceListener mListener = new GizWifiDeviceListener() {
@Override
public void didGetHardwareInfo(GizWifiErrorCode result, GizWifiDevice device, ConcurrentHashMap<String, String> hardwareInfo) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 获取成功
} else {
// 获取失败
}
}
};
[exitProductionTesting]
让设备退出产测模式。不订阅设备就可以调用此接口,设备进入产测模式后会响应
定义
public void exitProductionTesting()
回调
public void didExitProductionTesting (GizWifiErrorCode result, GizWifiDevice device)
回调参数
属性名 | 描述 |
---|---|
device | 返回硬件信息的设备对象 |
result | 详细见 GizWifiErrorCode 枚举定义。GIZ_SDK_SUCCESS 表示成功,其他为失败 |
代码示例
// mDevice是从设备列表中获取到的设备实体对象
mDevice.setListener(mListener);
mDevice.exitProductionTesting();
// 实现回调
GizWifiDeviceListener mListener = new GizWifiDeviceListener() {
@Override
public void didExitProductionTesting(GizWifiErrorCode result, GizWifiDevice device) {
if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS) {
// 执行成功
} else {
// 执行失败
}
}
};