self::ACCESS_KEY_ID, "accessKeySecret" => self::ACCESS_KEY_SECRET, ]); $config->endpoint = self::END_POINT; $this->config = $config; } /** * 编辑和获取表单 */ public function getCrudForm($data) { $url = '/ipc/save'; $rule = []; $rule[] = FormBuilder::input("iot_id", "设备ID", $data['iotId'])->disabled(true); $rule[] = FormBuilder::input("class_code", "班级代码", ''); return create_form('关联班级', $rule, $url, 'POST'); } /** * 获取设置/更新时间模版以及录像计划表 */ public function getRecordForm() { $text = '当前录像时间:'; $res = $this->QueryRecordPlanDetail(); if ($res['success'] == true) { $data = $res['data']; $templateInfo = $data->templateInfo; if ($templateInfo->allDay == 1) { $text .= '7 * 24'; } else { $week = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; $resetDataObj = reset($templateInfo->timeSectionList); $endDataObj = end($templateInfo->timeSectionList); $text .= $week[$resetDataObj->dayOfWeek] . '至' . $week[$endDataObj->dayOfWeek]; $text .= ' ' . $resetDataObj->begin / 3600 . ':00' . '-' . $resetDataObj->end / 3600 . ':00'; } } else { $text .= '未获取到当前录像时间'; } $url = '/ipc/setRecordTime'; $rule = []; $rule[] = FormBuilder::input("start_day", "开始天数", '')->required('请输入周几开始')->props(['placeholder' => '每周的周几(0~6代表周日到周六)']); $rule[] = FormBuilder::input("end_day", "结束天数", '')->required('请输入周几结束')->props(['placeholder' => '每周的周几(0~6代表周日到周六)']); $rule[] = FormBuilder::input("start_time", "开始时间", '')->required('请输入开始时间')->props(['placeholder' => '每天几时(0~23)']); $rule[] = FormBuilder::input("end_time", "结束时间", '')->required('请输入结束时间')->props(['placeholder' => '每天几时(0~23)']); return create_form($text, $rule, $url, 'POST'); } /** * 获取设备ID * @param $nickName 备注名称 */ public function getDeviceId($nickName) { $client = new Iot($this->config); $queryDeviceBySQLRequest = new QueryDeviceBySQLRequest([ "iotInstanceId" => self::IOT_INSTANCE_ID, "SQL" => "select iot_id, name, gmt_create, status from device where nickname = '" . $nickName . "'" ]); $runtime = new RuntimeOptions([]); try { $res = $client->queryDeviceBySQLWithOptions($queryDeviceBySQLRequest, $runtime); $body = $res->body; $resultData = []; if ($body->data == null || !is_array($body->data)) { return $resultData; } foreach ($body->data as $value) { $resultData[] = get_object_vars($value); } return $resultData; } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('设备ID获取失败:' . $error->message); return $error->message; } } /** * 获取播放地址 * @param $Scheme 播放协议 * @param @IotId 设备ID */ public function QueryLiveStreaming($Scheme, $IotId) { $client = new Linkvisual($this->config); $queryLiveStreamingRequest = new QueryLiveStreamingRequest([ 'scheme' => $Scheme, 'iotInstanceId' => self::IOT_INSTANCE_ID, 'iotId' => $IotId, 'playUnLimited' => true, 'urlValidDuration' => 600, ]); $runtime = new RuntimeOptions([]); try { $res = $client->queryLiveStreamingWithOptions($queryLiveStreamingRequest, $runtime); $body = $res->body; return get_object_vars($body); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('获取播放地址失败:' . $error->message); return $error->message; } } /** * IPC设备列表-分页查询 * 设备查询上线为一万台,超出一万台设备需进行功能迭代 */ public function IpcQueryDeviceRequest() { [$page, $limit] = $this->getPageValue(); $client = new Iot($this->config); $queryDeviceRequest = new QueryDeviceRequest([ "iotInstanceId" => self::IOT_INSTANCE_ID, "productKey" => self::PRODUCT_KEY, "pageSize" => $limit, "currentPage" => $page ]); $runtime = new RuntimeOptions([]); try { $res = $client->queryDeviceWithOptions($queryDeviceRequest, $runtime); $body = $res->body; return get_object_vars($body); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('查询设备列表失败:' . $error->message); return $error->message; } } /** * 修改设备备注名称 * @param $iotId 设备ID * @param $nickname 备注名称 */ public function DitDeviceNicknameInfo($iotId, $nickname) { $client = new Iot($this->config); $deviceNicknameInfo0 = new deviceNicknameInfo([ "productKey" => self::PRODUCT_KEY, "iotId" => $iotId, "nickname" => $nickname ]); if (empty($nickname)) { $deviceNicknameInfo0 = new deviceNicknameInfo([ "productKey" => self::PRODUCT_KEY, "iotId" => $iotId ]); } $batchUpdateDeviceNicknameRequest = new BatchUpdateDeviceNicknameRequest([ "deviceNicknameInfo" => [ $deviceNicknameInfo0 ], "iotInstanceId" => self::IOT_INSTANCE_ID ]); $runtime = new RuntimeOptions([]); try { $res = $client->batchUpdateDeviceNicknameWithOptions($batchUpdateDeviceNicknameRequest, $runtime); $body = $res->body; return get_object_vars($body); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('修改备注名称失败:' . $error->message); return $error->message; } } /** * 获取录像文件列表 * 默认时间为当天早8点到下午五点 * @param $iotId 设备ID */ public function QueryRecord($iotId) { $client = new Linkvisual($this->config); // $startTime = strtotime('today'); $oneHouse = 60 * 60; // $beginTime = $startTime + $oneHouse * 8; // 录像开始时间 // $endTime = $startTime + $oneHouse * 17; // 录像结束时间 $endTime = time(); $beginTime = $endTime - ($oneHouse * 24); $queryRecordRequest = new QueryRecordRequest([ "endTime" => $endTime, "beginTime" => $beginTime, "needSnapshot" => true, "iotInstanceId" => self::IOT_INSTANCE_ID, "currentPage" => 1, "pageSize" => 50, "productKey" => self::PRODUCT_KEY, "iotId" => $iotId ]); $runtime = new RuntimeOptions([]); try { $res = $client->queryRecordWithOptions($queryRecordRequest, $runtime); $body = $res->body; return get_object_vars($body); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('获取录像列表失败' . $error->message); return $error->message; } } /** * 获取录像文件播放地址 * @param $fileName 录像文件名称 * @param @iotId 设备ID */ public function QueryRecordUrlRequest($fileName, $iotId) { $client = new Linkvisual($this->config); $queryRecordUrlRequest = new QueryRecordUrlRequest([ "fileName" => $fileName, "productKey" => self::PRODUCT_KEY, "iotInstanceId" => self::IOT_INSTANCE_ID, "iotId" => $iotId, "urlValidDuration" => 60 // 地址过期时间 ]); $runtime = new RuntimeOptions([]); try { $res = $client->queryRecordUrlWithOptions($queryRecordUrlRequest, $runtime); $body = $res->body; return get_object_vars($body); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('获取录像文件播放地址失败:' . $error->message); return $error->message; } } /** * 添加IPC连续录像计划 */ public function AddRecordPlanDevice($iotId) { $client = new Linkvisual($this->config); $addRecordPlanDeviceRequest = new AddRecordPlanDeviceRequest([ "iotInstanceId" => self::IOT_INSTANCE_ID, "productKey" => self::PRODUCT_KEY, "iotId" => $iotId, "planId" => self::PLAN_ID, "streamType" => 0 ]); $runtime = new RuntimeOptions([]); try { $res = $client->addRecordPlanDeviceWithOptions($addRecordPlanDeviceRequest, $runtime); $body = $res->body; return get_object_vars($body); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('IPC添加录像计划失败:' . $error->message); return $error->message; } } /** * 删除IPC连续录像 */ public function DeleteRecordPlanDevice($iotId) { $client = new Linkvisual($this->config); $deleteRecordPlanDeviceRequest = new DeleteRecordPlanDeviceRequest([ "iotInstanceId" => self::IOT_INSTANCE_ID, "productKey" => self::PRODUCT_KEY, "iotId" => $iotId, "streamType" => 0 ]); $runtime = new RuntimeOptions([]); try { $res = $client->deleteRecordPlanDeviceWithOptions($deleteRecordPlanDeviceRequest, $runtime); $body = $res->body; return get_object_vars($body); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('删除IPC连续录像失败:' . $error->message); return $error->message; } } /** * 更新时间模版 */ public function UpdateTimeTemplate($startDay, $endDay, $startTime = 8, $endTime = 16) { $client = new Linkvisual($this->config); $startTime = 3600 * $startTime; $endTime = 3600 * $endTime; $timeSections = []; for ($i = $startDay; $i <= $endDay; $i++) { $timeSections[] = new timeSections([ "dayOfWeek" => $i, "begin" => $startTime, "end" => $endTime ]); } // $timeSections0 = new timeSections([ // "dayOfWeek" => 1, // "begin" => $startTime, // "end" => $endTime // ]); // $timeSections = []; $updateTimeTemplateRequest = new UpdateTimeTemplateRequest([ "timeSections" => $timeSections, "templateId" => self::TEMPLATE_ID, "allDay" => 0 ]); $runtime = new RuntimeOptions([]); try { $res = $client->updateTimeTemplateWithOptions($updateTimeTemplateRequest, $runtime); $body = $res->body; return get_object_vars($body); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('更新时间模版失败:' . $error->message); return $error->message; } } /** * 更新录像计划 */ public function UpdateRecordPlan() { $client = new Linkvisual($this->config); $updateRecordPlanRequest = new UpdateRecordPlanRequest([ "planId" => self::PLAN_ID, "name" => "text", "templateId" => self::TEMPLATE_ID ]); $runtime = new RuntimeOptions([]); try { $res = $client->updateRecordPlanWithOptions($updateRecordPlanRequest, $runtime); $body = $res->body; return get_object_vars($body); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('更新录像计划失败' . $error->message); return $error->message; } } /** * 对应录像计划列表 */ public function QueryRecordPlanDeviceByPlan($planId = self::PLAN_ID, $page = 1, $limit = 15) { $client = new Linkvisual($this->config); $queryRecordPlanDeviceByPlanRequest = new QueryRecordPlanDeviceByPlanRequest([ "planId" => $planId, "currentPage" => $page, "pageSize" => $limit ]); $runtime = new RuntimeOptions([]); try { $res = $client->queryRecordPlanDeviceByPlanWithOptions($queryRecordPlanDeviceByPlanRequest, $runtime); $body = $res->body; return get_object_vars($body); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('获取录像计划列表失败:' . $error->message); return $error->message; } } /** * 查询录像计划详情 */ public function QueryRecordPlanDetail($planId = self::PLAN_ID) { $client = new Linkvisual($this->config); $queryRecordPlanDetailRequest = new QueryRecordPlanDetailRequest([ "planId" => $planId ]); $runtime = new RuntimeOptions([]); try { $res = $client->queryRecordPlanDetailWithOptions($queryRecordPlanDetailRequest, $runtime); $body = $res->body; return get_object_vars($body); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('查询录像详情失败:' . $error->message); return $error->message; } } /** * 设置云端存储天数 * @param $lotId 设备ID * @param $day 存储天数;最大可设置3650天 */ public function SetDeviceRecordLifeCycle(string $lotId = '', int $day = 1) { $client = new Linkvisual($this->config); $setDeviceRecordLifeCycleRequest = new SetDeviceRecordLifeCycleRequest([ "iotInstanceId" => self::IOT_INSTANCE_ID, "iotId" => $lotId, "day" => $day ]); $runtime = new RuntimeOptions([]); try { $res = $client->setDeviceRecordLifeCycleWithOptions($setDeviceRecordLifeCycleRequest, $runtime); $body = $res->body; return get_object_vars($body); } catch (Exception $error) { if (!($error instanceof TeaError)) { $error = new TeaError([], $error->getMessage(), $error->getCode(), $error); } Utils::assertAsString($error->message); Log::error('设置云端存储天数失败:' . $error->message); return $error->message; } } /** * 处理时间格式 */ public function setTimeToTime(array $data) { foreach ($data as $key => $value) { $dateTime = strtotime($value['gmtCreate']); $data[$key]['gmtCreate'] = date('Y-m-d H:i:s', $dateTime); } return $data; } }