琅铭物联 4G(CAT.1)大功率远程控制开关模块SAC07CSA

273 阅读1分钟

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;
    }
}