1.产品介绍
产品地址:www.lmcraft.com/iot/produce…
功能 : 远程开关设备 设备定位 定时开关 onenet平台可以获取设备是否连接,多设备发送指令
用户命令端通过HTTP请求与OneNET连接,获取硬件模块的状态数,发送控制命令给模块。
购买 item.taobao.com/item.htm?id…
onenet地址 : open.iot.10086.cn
onenet接口文档:open.iot.10086.cn/doc/multipr…
onenet 注册账号
在多协议接入里面添加产品,添加设备不用手动添加,使用自带的配置
将设备迁移到自己的onenet账号(先将数据线的usb插入电脑,运行第一张图的配置工具,这个串口不要选com1)
配置文件需要填写的地方
填写之后回车,将usb的四根线按照顺序插入
php 代码
base.php
<?php
namespace device;
class Base
{
protected $api_key = 'sEwH=PjzdsKdqnjxRjmfaRfY5wI='; #sEwH=PjzdsKdqnjxRjmfaRfY5wI= XIEmpODZkrpznjuwGzxfWDV0=Yo=
public function __construct($data = [])
{
}
/**
* 发起http协议POST请求
* httpData
* @param string $url 请求地址
* @param array $data 请求数据
* @date 2020-05-28
* @return mixed
* @author Alan
*/
protected function httpData($url, $data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type:application/json','api-key:'.$this->api_key]);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, request()->domain());
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);#json_encode($data)http_build_query($data)
$status = curl_exec($ch);
curl_close($ch);
return json_decode($status, true);
}
/**
* 发起http协议get请求
* @param $url
* @return mixed
*/
function curl_get($url){
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, $url);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 0);
// 超时设置,以秒为单位
curl_setopt($curl, CURLOPT_TIMEOUT, 1);
// 设置请求头
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type:application/json','api-key:'.$this->api_key]);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
//执行命令
$data = curl_exec($curl);
curl_close($curl);
return json_decode($data, true);
}
}
Request.php
<?php
namespace device;
class Request extends Base
{
/**
* 开启设备
* {
* "errno": 0, 为0时正常获取成功
* "data": [
* ],
* "error": "succ" 为’succ‘时正常获取成功
* }
* @param $device_id
* @return mixed
*/
public function open($device_id){
$result = $this->httpData('http://api.heclouds.com/cmds?device_id='.$device_id,'rs,0,-1');
return $result;
}
/**
* 关闭设备
* {
* "errno": 0, 为0时正常获取成功
* "data": [
* ],
* "error": "succ" 为’succ‘时正常获取成功
* }
* @param $device_id
* @return mixed
*/
public function close($device_id)
{
$result = $this->httpData('http://api.heclouds.com/cmds?device_id='.$device_id,'rs,0,0');
return $result;
}
/**
* 刷新位置信息
* {
* "errno": 0, 为0时正常获取成功
* "data": [
* ],
* "error": "succ" 为’succ‘时正常获取成功
* }
* @param $device_id
* @return mixed
*/
public function refreshLocation($device_id)
{
$result = $this->httpData('http://api.heclouds.com/cmds?device_id='.$device_id,'ps');
return $result;
}
/**
* 获取设备经纬度
* {
* "errno": 0, 为0时正常获取成功
* "data": [
* ],
* "error": "succ" 为’succ‘时正常获取成功
* }
* @param $device_id
* @return int[]
*/
public function getLocation($device_id)
{
$result = $this->curl_get('http://api.heclouds.com/devices/'.$device_id.'/datapoints','');
$return_data = [
'lat'=>0,
'lng'=>0,
];
foreach ($result['data']['datastreams'] as $k => $v){
if($v['id'] == 'longitude'){
$return_data['lng'] = $v['datapoints'][0]['value'];
}
if($v['id'] == 'latitude'){
$return_data['lat'] = $v['datapoints'][0]['value'];
}
}
$result['data'] = $return_data;
return $result;
}
/**
* 获取多个设备定位
* {
* "errno": 0, 为0时正常获取成功
* "data": [
* ],
* "error": "succ" 为’succ‘时正常获取成功
* }
* @param $device_id 多个设备定位用','隔开
* @return mixed
*/
public function getManyLocation($device_id)
{
$result = $this->curl_get('http://api.heclouds.com/devices/datapoints?devIds='.$device_id,'');
$return_data = [];
foreach ($result['data']['devices'] as $k => $v){
$location = [];
foreach ($v['datastreams'] as $kk=>$vv){
if($vv['id'] == 'longitude'){
$location['lng'] = $vv['value'];
}
if($vv['id'] == 'latitude'){
$location['lat'] = $vv['value'];
}
}
$return_data[] = $location;
}
$result['data'] = $return_data;
return $result;
}
}