diff --git a/app/Admin/Controllers/EquipController.php b/app/Admin/Controllers/EquipController.php new file mode 100644 index 0000000..03a3f93 --- /dev/null +++ b/app/Admin/Controllers/EquipController.php @@ -0,0 +1,98 @@ +column('id')->sortable(); + $grid->column('title'); + $grid->column('desc'); + $grid->column('tags'); + $grid->column('protocol'); + $grid->column('location'); + $grid->column('private'); + $grid->column('auth_info'); + $grid->column('auth'); + $grid->column('obsv'); + $grid->column('other'); + $grid->column('chip'); + $grid->column('psk'); + $grid->column('created_at'); + $grid->column('updated_at')->sortable(); + + $grid->filter(function (Grid\Filter $filter) { + $filter->equal('id'); + + }); + }); + } + + /** + * Make a show builder. + * + * @param mixed $id + * + * @return Show + */ + protected function detail($id) + { + return Show::make($id, new Equip(), function (Show $show) { + $show->field('id'); + $show->field('title'); + $show->field('desc'); + $show->field('tags'); + $show->field('protocol'); + $show->field('location'); + $show->field('private'); + $show->field('auth_info'); + $show->field('auth'); + $show->field('obsv'); + $show->field('other'); + $show->field('chip'); + $show->field('psk'); + $show->field('created_at'); + $show->field('updated_at'); + }); + } + + /** + * Make a form builder. + * + * @return Form + */ + protected function form() + { + return Form::make(new Equip(), function (Form $form) { + $form->display('id'); + $form->text('title'); + $form->text('desc'); + $form->text('tags'); + $form->text('protocol'); + $form->text('location'); + $form->text('private'); + $form->text('auth_info'); + $form->text('auth'); + $form->text('obsv'); + $form->text('other'); + $form->text('chip'); + $form->text('psk'); + + $form->display('created_at'); + $form->display('updated_at'); + }); + } +} diff --git a/app/Admin/Controllers/EquipInfoController.php b/app/Admin/Controllers/EquipInfoController.php index 2a1fea2..d8c80e7 100644 --- a/app/Admin/Controllers/EquipInfoController.php +++ b/app/Admin/Controllers/EquipInfoController.php @@ -33,16 +33,49 @@ class EquipInfoController extends Controller return Grid::make(null, function (Grid $grid) { $param = request()->all(); - $grid->column('at'); - $grid->column('value'); + $grid->quickSearch()->placeholder('设备id'); + $grid->column('valve_status1', '阀开关'); + $grid->column('valve_status2', '阀门动作'); + $grid->column('valve_status3', '行程开关'); + $grid->column('valve_status4', '电位器'); + $grid->column('valve_status5', '电池电量'); + $grid->column('valve_status6', '回水传感器'); + $grid->column('valve_status7', '加速度传感器'); + $grid->column('valve_status8', '角度'); + $grid->combine('阀门状态', ['valve_status1', 'valve_status2', 'valve_status3', 'valve_status4', 'valve_status5', 'valve_status6', 'valve_status7', 'valve_status8']); + $grid->column('set_opening', '设定开度'); + $grid->column('actual_opening', '实际开度'); + $grid->column('water_inlet_temperature', '进水温度'); + $grid->column('water_return_temperature', '回水温度'); + $grid->column('battery_power', '电池电量'); + $grid->column('accelerated_x', '加速度X轴'); + $grid->column('accelerated_y', '加速度Y轴'); + $grid->column('accelerated_z', '加速度Z轴'); + $grid->column('signal_strength', '信号强度'); + $grid->column('valve_time', '阀门时间'); + $grid->column('reporting_interval', '上报间隔'); + $grid->column('interval_unit', '间隔单位'); + $grid->column('effective_time', '上报有效时长'); + $grid->column('total_number_reports', '总上报次数'); + $grid->column('other', '其他'); + $grid->column('check', '累加校验和'); + $grid->column('finish', '结束符'); + $grid->column('value', '原始数据'); + $grid->column('at', '时间'); + if (empty($param['at']['start'])){ + $param['at']['start'] = date("Y-m-d H:i:s",strtotime("-1 day")); + } + $grid->model()->setData(EquipInfoService::getDatapoints($param)); $grid->disableCreateButton(); $grid->disableActions(); $grid->disableBatchDelete(); + $grid->showPagination(); +// $grid->simplePaginate(false); $grid->disablePagination(); $grid->filter(function (Grid\Filter $filter) { - $filter->between('at', 'At')->datetime(); + $filter->between('at', 'At')->default(['start' => date("Y-m-d H:i:s",strtotime("-1 day"))])->datetime(); }); }); diff --git a/app/Admin/Repositories/Equip.php b/app/Admin/Repositories/Equip.php new file mode 100644 index 0000000..a0331e2 --- /dev/null +++ b/app/Admin/Repositories/Equip.php @@ -0,0 +1,16 @@ +request('GET', 'devices/984998613/datapoints?' . $query); + $response = $client->request('GET', 'devices/' . $param['_search_'] . '/datapoints?' . $query); $res = json_decode($response->getBody()->getContents(), true); $res = !empty($res['data']['datastreams'][0]['datapoints']) ? $res['data']['datastreams'][0]['datapoints'] : []; - return $res; + + $data = []; + foreach ($res as $re) { + $equip_data = $re['value']; +// $equip_data = '68C008669710390347698524015101FFFE0A01080000010000000000CFEB1601040400000992014B00010002000324200426151314020101009F017616'; + + $status_info = substr($equip_data, 62); + + //阀门状态 + $valve_status = substr($status_info, 0, 2); + $valve_status = base_convert($valve_status, 16, 2); + $valve_status = str_pad($valve_status, 8, '0', STR_PAD_LEFT); + + $re['valve_status1'] = (substr($valve_status, -1, 1) == 1) ? '阀开' : '阀关'; + $re['valve_status2'] = (substr($valve_status, -2, 1) == 1) ? '阀门堵转' : '阀门动作正常'; + $re['valve_status3'] = (substr($valve_status, -3, 1) == 1) ? '行程开关异常' : '行程开关正常'; + $re['valve_status4'] = (substr($valve_status, -4, 1) == 1) ? '电位器异常' : '电位器正常'; + $re['valve_status5'] = (substr($valve_status, -5, 1) == 1) ? '电池电量低' : '电池电量正常'; + $re['valve_status6'] = (substr($valve_status, -6, 1) == 1) ? '回水传感器异常' : '回水传感器正常'; + $re['valve_status7'] = (substr($valve_status, -7, 1) == 1) ? '加速度传感器异常' : '加速度传感器正常'; + $re['valve_status8'] = (substr($valve_status, -8, 1) == 1) ? '角度存在偏差' : '角度正常'; + + //设定开度 + $re['set_opening'] = base_convert(substr($status_info, 2, 2), 16, 10) . '%'; + //实际开度 + $re['actual_opening'] = base_convert(substr($status_info, 4, 2), 16, 10) . '%'; + //进水温度 + $re['water_inlet_temperature'] = base_convert(substr($status_info, 6, 4), 16, 10) / 100 . '度'; + //回水温度 + $re['water_return_temperature'] = base_convert(substr($status_info, 10, 4), 16, 10) / 100 . '度'; + //电池电量 + $re['battery_power'] = base_convert(substr($status_info, 14, 4), 16, 10) / 100 . 'V'; + //加速度X Y Z轴 + $re['accelerated_x'] = substr($status_info, 18, 4); + $re['accelerated_y'] = substr($status_info, 22, 4); + $re['accelerated_z'] = substr($status_info, 26, 4); + //信号强度 + $re['signal_strength'] = substr($status_info, 30, 2); + + //阀门时间 + $valve_time = substr($status_info, 32, 12); + $re['valve_time'] = date('Y-m-d H:i:s', strtotime('20'.$valve_time)); + //上报间隔 + $re['reporting_interval'] = substr($status_info, 44, 2); + //间隔单位 + $interval_unit = substr($status_info, 46, 2); + + switch ($interval_unit){ + case '01': + $re['interval_unit'] = '分钟'; + break; + case '02': + $re['interval_unit'] = '小时'; + break; + case '03': + $re['interval_unit'] = '天'; + break; + } + //上报有效时长 + $re['effective_time'] = substr($status_info, 48, 2); + //总上报次数 + $re['total_number_reports'] = base_convert(substr($status_info, 50, 4), 16, 10); + //其他 + $re['other'] = substr($status_info, 54, 2); + //累加校验和 + $re['check'] = substr($status_info, 56, 2); + //结束符 + $re['finish'] = substr($status_info, 58, 2); + + array_unshift($data, $re); + } + +// $res = new Paginator($res, 20, null, ['path' => url()->current(), 'query' => $param]); + + return $data; } } diff --git a/app/Admin/routes.php b/app/Admin/routes.php index fc5b0da..ed6933d 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -15,6 +15,7 @@ Route::group([ $router->get('/', 'HomeController@index'); $router->get('/test', 'HomeController@test'); $router->resource('equip_resource', 'EquipResourceRecordController'); + $router->resource('equip', 'EquipController'); $router->get('equip_info', 'EquipInfoController@index'); $router->get('/test/platformCacheList', 'TestController@platformCacheList'); diff --git a/app/Models/Equip.php b/app/Models/Equip.php new file mode 100644 index 0000000..328eafc --- /dev/null +++ b/app/Models/Equip.php @@ -0,0 +1,11 @@ +increments('id'); + $table->string('title')->default('')->comment('设备名称'); + $table->string('desc')->default('')->comment('设备描述'); + $table->string('tags')->default('')->comment('设备标签,字符串数组'); + $table->string('protocol')->default('LwM2M')->comment('接入协议,这里只能是LwM2M'); + $table->json('location')->comment('设备位置(“纬度”,“经度”,“高度”)'); + $table->boolean('private')->default('1')->comment('设备私密性(默认true)'); + $table->json('auth_info')->comment('NBIOT设备:{“imei码”:“imsi码”},imei、imsi规则见说明'); + $table->string('auth')->default('')->comment('Auth_Code,由数字或字母组成,不超过16位'); + $table->boolean('obsv')->default('1')->comment('是否订阅设备资源(默认为true)'); + $table->json('other')->comment('其他信息(JSON格式,可自定义)'); + $table->integer('chip')->comment('测试设备与芯片类型对应关系(取值1-6),详情见说明'); + $table->string('psk')->default('')->comment('DTLS加密所使用的PSK,长度8-16个字节,字母或数字组成'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('equips'); + } +} diff --git a/dcat_admin_ide_helper.php b/dcat_admin_ide_helper.php index 235bbae..451d093 100644 --- a/dcat_admin_ide_helper.php +++ b/dcat_admin_ide_helper.php @@ -36,12 +36,26 @@ namespace Dcat\Admin { * @property Grid\Column|Collection password * @property Grid\Column|Collection remember_token * @property Grid\Column|Collection username + * @property Grid\Column|Collection api-key * @property Grid\Column|Collection expired_time * @property Grid\Column|Collection imei * @property Grid\Column|Collection mode * @property Grid\Column|Collection obj_id * @property Grid\Column|Collection obj_inst_id + * @property Grid\Column|Collection res_id * @property Grid\Column|Collection trigger_msg + * @property Grid\Column|Collection val + * @property Grid\Column|Collection auth + * @property Grid\Column|Collection auth_info + * @property Grid\Column|Collection chip + * @property Grid\Column|Collection desc + * @property Grid\Column|Collection location + * @property Grid\Column|Collection obsv + * @property Grid\Column|Collection other + * @property Grid\Column|Collection private + * @property Grid\Column|Collection protocol + * @property Grid\Column|Collection psk + * @property Grid\Column|Collection tags * @property Grid\Column|Collection connection * @property Grid\Column|Collection exception * @property Grid\Column|Collection failed_at @@ -82,12 +96,26 @@ namespace Dcat\Admin { * @method Grid\Column|Collection password(string $label = null) * @method Grid\Column|Collection remember_token(string $label = null) * @method Grid\Column|Collection username(string $label = null) + * @method Grid\Column|Collection api-key(string $label = null) * @method Grid\Column|Collection expired_time(string $label = null) * @method Grid\Column|Collection imei(string $label = null) * @method Grid\Column|Collection mode(string $label = null) * @method Grid\Column|Collection obj_id(string $label = null) * @method Grid\Column|Collection obj_inst_id(string $label = null) + * @method Grid\Column|Collection res_id(string $label = null) * @method Grid\Column|Collection trigger_msg(string $label = null) + * @method Grid\Column|Collection val(string $label = null) + * @method Grid\Column|Collection auth(string $label = null) + * @method Grid\Column|Collection auth_info(string $label = null) + * @method Grid\Column|Collection chip(string $label = null) + * @method Grid\Column|Collection desc(string $label = null) + * @method Grid\Column|Collection location(string $label = null) + * @method Grid\Column|Collection obsv(string $label = null) + * @method Grid\Column|Collection other(string $label = null) + * @method Grid\Column|Collection private(string $label = null) + * @method Grid\Column|Collection protocol(string $label = null) + * @method Grid\Column|Collection psk(string $label = null) + * @method Grid\Column|Collection tags(string $label = null) * @method Grid\Column|Collection connection(string $label = null) * @method Grid\Column|Collection exception(string $label = null) * @method Grid\Column|Collection failed_at(string $label = null) @@ -133,12 +161,26 @@ namespace Dcat\Admin { * @property Show\Field|Collection password * @property Show\Field|Collection remember_token * @property Show\Field|Collection username + * @property Show\Field|Collection api-key * @property Show\Field|Collection expired_time * @property Show\Field|Collection imei * @property Show\Field|Collection mode * @property Show\Field|Collection obj_id * @property Show\Field|Collection obj_inst_id + * @property Show\Field|Collection res_id * @property Show\Field|Collection trigger_msg + * @property Show\Field|Collection val + * @property Show\Field|Collection auth + * @property Show\Field|Collection auth_info + * @property Show\Field|Collection chip + * @property Show\Field|Collection desc + * @property Show\Field|Collection location + * @property Show\Field|Collection obsv + * @property Show\Field|Collection other + * @property Show\Field|Collection private + * @property Show\Field|Collection protocol + * @property Show\Field|Collection psk + * @property Show\Field|Collection tags * @property Show\Field|Collection connection * @property Show\Field|Collection exception * @property Show\Field|Collection failed_at @@ -179,12 +221,26 @@ namespace Dcat\Admin { * @method Show\Field|Collection password(string $label = null) * @method Show\Field|Collection remember_token(string $label = null) * @method Show\Field|Collection username(string $label = null) + * @method Show\Field|Collection api-key(string $label = null) * @method Show\Field|Collection expired_time(string $label = null) * @method Show\Field|Collection imei(string $label = null) * @method Show\Field|Collection mode(string $label = null) * @method Show\Field|Collection obj_id(string $label = null) * @method Show\Field|Collection obj_inst_id(string $label = null) + * @method Show\Field|Collection res_id(string $label = null) * @method Show\Field|Collection trigger_msg(string $label = null) + * @method Show\Field|Collection val(string $label = null) + * @method Show\Field|Collection auth(string $label = null) + * @method Show\Field|Collection auth_info(string $label = null) + * @method Show\Field|Collection chip(string $label = null) + * @method Show\Field|Collection desc(string $label = null) + * @method Show\Field|Collection location(string $label = null) + * @method Show\Field|Collection obsv(string $label = null) + * @method Show\Field|Collection other(string $label = null) + * @method Show\Field|Collection private(string $label = null) + * @method Show\Field|Collection protocol(string $label = null) + * @method Show\Field|Collection psk(string $label = null) + * @method Show\Field|Collection tags(string $label = null) * @method Show\Field|Collection connection(string $label = null) * @method Show\Field|Collection exception(string $label = null) * @method Show\Field|Collection failed_at(string $label = null) diff --git a/lang/en/equip.php b/lang/en/equip.php new file mode 100644 index 0000000..9d26034 --- /dev/null +++ b/lang/en/equip.php @@ -0,0 +1,23 @@ + [ + 'Equip' => 'Equip', + 'equip' => 'Equip', + ], + 'fields' => [ + 'title' => '设备名称', + 'desc' => '设备描述', + 'tags' => '设备标签', + 'protocol' => '接入协议', + 'location' => '位置', + 'private' => '设备私密性', + 'auth_info' => 'NBIOT设备', + 'auth' => 'Auth_Code', + 'obsv' => '订阅设备资源', + 'other' => '其他信息', + 'chip' => '测试设备与芯片类型对应关系', + 'psk' => 'DTLS加密所使用的PSK', + ], + 'options' => [ + ], +];