百度iot创建物影子

//增加设备
    public function batchWx()
    {
      
       
        $count = $this->request->post('count');
        $classid = $this->request->post('classid');
        if ($count>=1&&$count<=30) {
            //$this->success('一共成功生成'. $count.'台设备!');
        } else {
            $this->error('请选择正确的数量,最多不能超过30台!目前选择数量为:'. $count);
        }
        if (!empty($classid)) {
            //$this->success('一共成功生成'. $count.'台设备!');
        } else {
            $this->error('请先现在产品型号!');
        }
        $username=session('username');
        $company_id=session('company_id');
        $user_id=session('user_id');
        $company_group = session('company_group');
        $company_name = session('company_name');
        $rowsPerPage = 20;
     
        if ($company_group=='1') {
            $datas_where=" 1=1 ";
        } else {
            $datas_where=" company_id='".$company_id."' ";
        }

        // $device_class=Db::name('device_class')
        // ->where($datas_where)
        // ->where('id', $classid)
        // ->find();
        $device_class= model('PublicModel')->get_device_class_data($classid);
       
        if (!empty($device_class['class_id'])) {
            //$this->success('一共成功生成'. $count.'台设备!');
            //$type='0101';
            $deviceClass=$device_class['class_id'];
            $deviceName=$device_class['class_name'];
            $versions=$device_class['versions'];
            $class_type=$device_class['class_type'];
            $baidu_id=$device_class['baidu_id'];
            $weixin_id=$device_class['weixin_id'];
            $company_id=$device_class['company_id'];
    
        } else {
            $this->error('产品型号不存在!');
        }
      
        if (!empty($baidu_id)) {
            $baidu_schema= model('PublicModel')->get_baidu_data($baidu_id);
            //$this->success('一共成功生成'. $count.'台设备!');
        } else {
            $this->error('百度参数不存在!');
        }

        if (!empty($weixin_id)) {
            $weixin_product= model('PublicModel')->get_weixin_data($weixin_id);
            //$this->success('一共成功生成'. $count.'台设备!');
        } else {
            $this->error('微信参数不存在!');
        }
        //百度
        //系统内部id
        $schemaId=$baidu_schema['schemaId'];
        //百度物模型id
        $schema_id=$baidu_schema['schema_id'];
        //物模型名称
        $schema_name=$baidu_schema['schema_name'];
        //百度ak
        $ak=$baidu_schema['ak'];
        //百度sk
        $sk=$baidu_schema['sk'];
        //烧录主题参数
        $mqttTopicToDevice=$baidu_schema['mqttTopicToDevice'];
        //订阅主题
        $mqttTopicToControl=$baidu_schema['mqttTopicToControl'];
        //发布主题
        $mqttTopicPubToControl=$baidu_schema['mqttTopicPubToControl'];
        //微信
        //微信公众号appid
        $appid = $weixin_product['appid'];
        //微信公众号secret 
        $secret = $weixin_product['secret'];
        // 内部编号
        $wxDeviceType=$weixin_product['wx_id'];
        //微信设备分类编号

        $i=0;
        for ($i;$i<$count;$i++) {
            //创建微信设备
            $token = $this->weixin_get_token($appid, $secret);
            $access_token = $token["access_token"];
            //微信设备分类编号
            //$product_id='50717';
            //$url = "https://api.weixin.qq.com/device/getqrcode?access_token=" . $access_token . "&product_id=48126";
            $url='https://api.weixin.qq.com/device/getqrcode';
            $params_weixin = array(
             "access_token"=>$access_token,
             "product_id"=>$product_id
         );
            $j=$i;
            $device_wx =json_decode($this->http_post($url, $params_weixin), true);
            $deviceid=$device_wx['deviceid'];
            $qrticket=$device_wx['qrticket'];
            if (!empty($device_wx)) {
                $insert['wxDeviceId']=$deviceid;
                $insert['qrticket']=$qrticket;
                //生成txt文档保存(先不启用)
                // $params=json_encode($device_wx);
                // $RootDir = $_SERVER['DOCUMENT_ROOT'];
                // $path = config('view_replace_str');
                // $path_weixins= $RootDir.$path['__static__']."/".'weixin'."/".$deviceid.".txt";
                // file_put_contents($path_weixins, $params,FILE_APPEND);
            } else {
                return json(['code' => 1, 'data' => $result, 'msg' => '微信设备创建失败!']);
            }
            //$insert['wxDeviceId']='9b49e62d9c06bc23_gh_0ddfb722a565';
            //创建物影子
            $signer = new SampleSigner();
            //$credentials = array("ak" => "XXXXXX", "sk" => "XXXXXX");
            $credentials = array("ak" => $ak, "sk" => $sk);
            $httpMethod = "POST";
            //创建物影子
            $path = "/v3/iot/management/device";
            $timestamp = new \DateTime();
            $timestamp->setTimezone(new \DateTimeZone("UTC"));
            $times=time();
            $timestamp->setTimestamp($times);
            $headers = array(
                "Host" => "iotdm.gz.baidubce.com",
                "Content-Type" => "application/json; charset=utf-8"
            );
            //签名不传post所要添加的参数,HEADERS_TO_SIGN必须带要进行签名的headers而且'host'等参数名称必须为小写
            $params = array();
            $options = array(SignOption::TIMESTAMP => $timestamp, SignOption::HEADERS_TO_SIGN => array('host' => "iotdm.gz.baidubce.com",'content-type' => "application/json; charset=utf-8"));
            $ret = $signer->sign($credentials, $httpMethod, $path, $headers, $params, $options);
           
            //创建设备
            $url = "http://iotdm.gz.baidubce.com/v3/iot/management/device";
            //注意
            //1.顺序不能变1:Host 2:Authorization 3:Content-Type
            //2.传的参数要转换为json格式
            //3.必须使用 CURLOPT_NOBODY,CURLOPT_POSTFIELDS,CURLOPT_POST等参数
            $headr = array();
            $headr[] = 'Host:iotdm.gz.baidubce.com';
            $headr[] = 'Authorization:' . $ret;
            $headr[] = 'Content-Type:application/json; charset=utf-8';
            
            $paramsmy = array(
                "deviceName"=> $insert['wxDeviceId'],
                "description"=> $schema_name,
                "schemaId"=>$schemaId
                //"description"=>"物影子名称=微信设备ID",
                //"schemaId"=>"82c30e49-e8eb-49d6-b874-2126a05b539b"
            );
            //参数转换为json格式
            $instance = json_encode($paramsmy, true);
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_NOBODY, false);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headr);
            //body传json参数
            curl_setopt($ch, CURLOPT_POSTFIELDS, $instance);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            // post数据
            curl_setopt($ch, CURLOPT_POST, 1);
            //curl_setopt($ch, CURLOPT_POST, $params);
            $res = curl_exec($ch);
            curl_close($ch);
            //return json_decode($res, true);
            $device_bd= json_decode($res, true);
    
          
    
            if (!empty($device_bd)) {
                $bd_name = $device_bd['username'];
                $bd_key = $device_bd['key'];
            //生成txt文档保存(先不启用)
                // $params=json_encode($device_bd);
                // $RootDir = $_SERVER['DOCUMENT_ROOT'];
                // $path = config('view_replace_str');
                // $path_weixins= $RootDir.$path['__static__']."/".'baidu'."/".$deviceid.".txt";
                // file_put_contents($path_weixins, $params,FILE_APPEND);
            } else {
                $bd_name ='';
                $bd_key = '';
            }
            $insert['deviceClass'] = $deviceClass;
            $insert['deviceName'] = $deviceName;
            $insert['wxDeviceType'] = $wxDeviceType;
            $insert['wxOpenId'] =  '';
            $insert['mqttBaidu'] = '{"tcpEndpoint":"13xt3d9.mqtt.iot.gz.baidubce.com","username": "'.$bd_name.'","key":"'.$bd_key.'"}';
            $insert['mqttTopicToDevice'] =$mqttTopicToDevice;
            $insert['mqttTopicToControl'] =$mqttTopicToControl;
            $insert['mqttTopicPubToControl'] =$mqttTopicPubToControl;
            // $insert['mqttTopicToDevice'] = '{"topicSub":["$baidu/iot/general/{clientId}","$baidu/iot/shadow/{clientId}/update/accepted"],"topicPub":"$baidu/iot/shadow/{clientId}/update"}';
            // $insert['mqttTopicToControl'] ='{"topicSub":["$baidu/iot/shadow/{clientId}/get/accepted","$baidu/iot/shadow/{clientId}/update/accepted"],"topicPub": "$baidu/iot/shadow/{clientId}/update"}';
            // $insert['mqttTopicPubToControl'] ='$baidu/iot/shadow/{clientId}/get';
            $insert['writeStatus'] =  '0';
            $insert['create_user'] = session('user_id');
            $insert['create_time'] = date('Y-m-d h:i:s', time());
            //$insert['versions'] = 'V1.0';
            $insert['versions'] = $versions;
            $insert['company_id'] = session('company_id');
            $insert['deviceId'] = Device::get_deviceId($class_type);
            $db = Db::name('device')
               ->insert($insert);
            $deviceId = $insert['deviceId'];
        }
         
        $this->success('一共成功生成'. $count.'台设备!');
    }
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值