一、背景
我们在做物联网的时候,除了控制设备进行一些操作之外。设备的在线离线显示也是很重要的。如果设备离线的话,此时用户操作设备,设备并不会做出反应。对用户而言,操作体验当然是非常不好的。
这边我们可以通过阿里给出的接口,批量获取设备的状态。然后显示在APP上,此时我们可以不让用户点击离线的设备等。用户体验比较好。
二、批量获取设备的状态
1、首先,我们是要使用阿里的物联网的。并且需要引入阿里给出的phpSDK。具体的,大家可以看我之前写的关于阿里物联网的文章。
2、批量获取设备状态的接口:BatchGetDeviceStateRequest()
之所以写这篇文章,也是因为阿里在文档中,并没有直接给出这个函数。我自己也是找了很久才找到。所以这边记录一下。这里假定大家已经把阿里的SDK成功引入到项目中:
$accessKeyId = "你的账号";
$accessSecret = "你的密码";
//实例化对象
$iClientProfile = \DefaultProfile::getProfile("cn-shanghai", $accessKeyId, $accessSecret);
$client = new \DefaultAcsClient($iClientProfile);
//调用阿里批量获取设备状态的接口
$request = new Iot\BatchGetDeviceStateRequest();
$request->setProductKey('你的productkey');
//这里的arr指的是设备的唯一编号。大家自己在把设备放到物联网上的时候,都需要定义独一无二的标识
$arr = array(
0=>'code',
1=>'code'
);
$request->setDeviceNames($arr);
$response = $client->getAcsResponse($request);
//这里就能获取到返回结果
$deviceStatusList = $response->DeviceStatusList;
$deviceStatus = $deviceStatusList->DeviceStatus;
$status = [];
foreach($deviceStatus as $v)
{
$status[] = $v->Status;
}
print_r($status);
结果打印:
解释:
1、大部分解释,代码的注释里面都有
2、注意,因为是批量查询,所以我们要把查询的设备编号组成数组,当做参数传过去
3、返回的是对象数组,所以要单独拿出来状态的话,需要通过foreach循环拿出来
4、设备一共有三种状态。OFFLINE代表离线。ONLINE代表在线。还有一个状态是未激活状态,代表设备还没有接入阿里物联网。
OK,这样,我们就拿到了设备的在线离线操作,接下来可以根据自己的逻辑进行操作。
end