足底健康分析服务端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

518 lines
16 KiB

3 years ago
<?php
namespace App\Http\Controllers;
3 years ago
use App\Http\Services\CommonService;
3 years ago
use Illuminate\Routing\Controller as BaseController;
3 years ago
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;
3 years ago
class IndexController extends BaseController
{
public function index()
{
return view('http.index');
}
3 years ago
3 years ago
public function tabularData()
{
$request_data = request()->all();
3 years ago
$vague = 2;
3 years ago
$datas = [
3 years ago
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 2, 2, 4, 4, 4, 4, 4, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 6, 6, 8, 4, 2, 1, 1, 1, 1, 1,
1, 1, 1, 1, 2, 4, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 4, 2, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 2, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 4, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 1, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 2, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 2, 1, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 2, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 2, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 2, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 1, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 2, 1, 1, 1, 1, 1, 1, 2, 6, 8, 8, 8, 8, 6, 4, 2, 2, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 2, 1, 1, 1, 1, 1, 2, 1, 6, 8, 8, 8, 8, 6, 6, 4, 2, 1, 1,
1, 1, 1, 2, 4, 6, 8, 9, 8, 6, 6, 4, 1, 2, 1, 1, 1, 1, 1, 2, 4, 6, 8, 8, 8, 8, 6, 6, 4, 2, 1, 1,
1, 1, 1, 2, 4, 1, 8, 9, 8, 6, 6, 4, 4, 2, 1, 1, 1, 1, 1, 2, 4, 6, 8, 8, 8, 8, 6, 6, 4, 2, 1, 1,
1, 1, 1, 2, 4, 4, 4, 9, 8, 6, 6, 4, 4, 2, 1, 1, 1, 1, 1, 2, 4, 6, 8, 8, 8, 6, 6, 2, 2, 2, 1, 1,
1, 1, 1, 1, 1, 2, 2, 4, 4, 6, 6, 4, 2, 2, 1, 1, 1, 1, 1, 2, 4, 6, 4, 4, 4, 2, 2, 2, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 4, 2, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 2, 2, 2, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
];
3 years ago
3 years ago
for ($i = 0; $i < 1024; $i++){
$datas2[intval($i / 32)][$i % 32] = $datas[$i];
3 years ago
}
foreach ($datas2 as $key1 => $data){
foreach ($data as $key2 => $datum){
if (!empty($datas2[$key1][$key2 - 1])){
$num = $datum - $datas2[$key1][$key2 - 1];
$temp = $datum;
for ($i = $vague; $i >= 1; $i--) {
$chunk[$key1][] = $temp - ($num / ($vague + 1)) * $i;
}
}
$chunk[$key1][] = $datum;
}
}
$chunk2 = [];
$key3 = 0;
$number = 1;
foreach ($chunk as $key1 => $data){
foreach ($data as $key2 => $datum){
$number++;
if (!empty($chunk[$key1 - 1][$key2])){
$num = $datum - $chunk[$key1 - 1][$key2];
$temp = $datum;
for ($i = $vague; $i >= 1; $i--) {
$chunk2[$key3 - $i][$key2] = $temp - ($num / ($vague + 1)) * $i;
}
}
$chunk2[$key3][$key2] = $datum;
}
$key3 = $key3 + ($vague + 1);
}
$chunk3 = [];
foreach ($chunk2 as $key1 => $value) {
foreach ($value as $key2 => $value2) {
$chunk3[] = [
$key2,
$key1,
$value2 / 10,
];
}
}
return [
'pressure' => $chunk3,
'foot' => [36.2, 80, 36.1, 75, 35.9, 79, 36.3, 80]
];
// $chunk = [
// // data1[0],
// // data1[1],
// // data1[2],
// // data1[3],
// // data1[4],
// // data1[5],
// // data1[6],
// // data1[7],
// // data1[8],
// // data1[9],
// // data1[10],
// // data1[11],
// // data1[12],
// [
// 1,1,0
// ],
// [
// 10,10,0.1
// ],
// [
// 20,20,0.2
// ],
// [
// 30,30,0.3
// ],
// [
// 40,40,0.4
// ], [40,40,0.4], [50,50,0.5], [60,60,0.6], [70,70,0.7], [80,80,0.8], [90,90,0.9], [99,99,1],
//
// ];
//
// $data = [$request_data['item']*50, 0, 0, 50, 100, 150, 200, 200, 150,100, 0,
// 2, 0, 100, 100, 100, 100, 100, 100, 100,100, 0,
// 3, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 4, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 5, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 6, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 7, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 8, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 9, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 10, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// 11, 0, 100, 200, 300, 100, 100, 0, 0, 0, 0,
// ];
//
//// for ($i = 0; $i < 121; $i++){
////
////
//// $chunk[intval($i / 11)][$i % 11] = [
//// $i % 11,
//// intval($i / 11),
//// $data[$i],
//// ];
//// }
// $chunk = [];
//
// for ($i = 0; $i < 121; $i++){
//
//
// $chunk[] = [
// $i % 11,
// intval($i / 11),
// $data[$i] / 300,
// ];
// }
// dump($chunk);
//
//
// $chunk2 = [];
// foreach ($chunk as $key1 => $items){
// foreach ($items as $key2 => $cell){
// $chunk2[$key1][$key2] = $cell[2];
//
// if (($key2 - 1) >= 0){
// $value = $cell[2] - $chunk[$key1][$key2 - 1][2];
//
// $increase = $value / 3;
// for ($i = 1; $i <= 3; $i++){
//
//
// $chunk2[$key1][$key2 + $i] = $cell[2] + $increase * $i;
// }
// }
// }
// }
// dump($chunk2);
// 模拟数据3
// $chunk = [];
// for ($i = 0; $i <= 32; $i++){
// for ($j = 0; $j <= 32; $j++){
// $num1 = $num2 = 0;
// if ($j > 6 && $j <= 16){
// $num1 = $j - 6;
// } elseif ($j > 16 && $j <= 26){
// $num1 = 27 - $j;
// }
// if ($i > 6 && $i <= 16){
// $num2 = $i - 6;
// } elseif ($i > 16 && $i <= 26){
// $num2 = 27 - $i;
// }
// if (!empty($num1) && !empty($num2)){
// $chunk[] = [
// $j,
// $i,
// ($num1 + $num2) / 30,
// ];
// } else {
// $chunk[] = [
// $j,
// $i,
// 0,
// ];
// }
// }
// }
// return [
// 'pressure' => $chunk,
// 'foot' => [36.2, 80, 36.1, 75, 35.9, 79, 36.3, 80]
// ];
}
3 years ago
public function lora()
3 years ago
{
3 years ago
return view('http.lora');
}
3 years ago
public function lora2()
{
3 years ago
Cache::flush();
return view('http.lora2');
3 years ago
}
3 years ago
public function getPelmaStore()
{
echo Cache::get('pelma');
return;
}
public function store()
{
// echo Cache::get('pelma');
$data = request('pelma');
Cache::put('pelma', $data);
Log::info($data);
return 'ok';
}
public function getBlood()
{
$blood = Cache::get('blood');
return $blood;
}
3 years ago
/**
* 上传血压数据
* http://127.0.0.1:8001/storeBlood?node=616162626365&data=0090243050005500
* @return string
*/
public function storeBlood()
{
// echo Cache::get('blood');
3 years ago
$request_data = request()->all();
$lora_mac = config("custom.lora_mac");
if (empty($request_data['node']) || empty($request_data['data'])){
return 'error';
}
if (!in_array($request_data['node'], $lora_mac)){
return 'error';
}
//血氧80.1
$blood = substr($request_data['data'], 0, 4);
$blood1 = hexdec(substr($blood, 0, 2));
$blood2 = substr($blood, 2, 2);
$blood2 = CommonService::customHex2dec($blood2);
Cache::put('blood' . $request_data['node'], ($blood1 + $blood2) * 100);
//体温36.1
$temperature = substr($request_data['data'], 4, 4);
$temperature1 = hexdec(substr($temperature, 0, 2));
$temperature2 = substr($temperature, 2, 2);
$temperature2 = CommonService::customHex2dec($temperature2);
Cache::put('temperature' . $request_data['node'], $temperature1 + $temperature2);
//心跳70
$heart = substr($request_data['data'], 8, 4);
$heart = hexdec(substr($heart, 0, 2));
Cache::put('heart' . $request_data['node'], $heart);
//脉搏70
$heart2 = substr($request_data['data'], 12, 4);
$heart2 = hexdec(substr($heart2, 0, 2));
Cache::put('heart2' . $request_data['node'], $heart2);
return 'ok';
3 years ago
}
public function loraData()
{
$request_data = request()->all();
// if (!empty($request_data['item']) && $request_data['item'] == '温度'){
// $temperature = rand(359, 366) / 10;
//
// $data = [[$temperature, 0, 0, "温度", date('m:s')]];
//
// } elseif (!empty($request_data['item']) && $request_data['item'] == '血氧'){
// $oxygen = rand(70, 100);
//
// $data = [[$oxygen, 0, 0, "血氧", date('m:s')]];
//
// } else {
// $temperature = rand(359, 366) / 10;
// $oxygen = rand(70, 100);
//
// $data = [[$temperature, 0, 0, "温度", date('m:s')],
// [$oxygen, 0, 0, "血氧", date('m:s')]];
//
// }
$temperature = rand(359, 366) / 10;
$oxygen = rand(70, 100);
$oxygen = 80 + ((time() % 3) + 1) * 5;
$data = [[$temperature, 0, 0, "温度", date('m:s')],
[$oxygen, 0, 0, "血氧", date('m:s')]];
return $data;
}
3 years ago
/**
* 设备列表
* @return void
*/
public function loraDeviceList()
{
3 years ago
$lora_mac = config("custom.lora_mac");
$devices = [];
foreach ($lora_mac as $key => $mac){
$devices[] = [
'name' => '设备' . ($key + 1),
'mac' => $mac,
'online' => 0,
3 years ago
];
}
return $devices;
3 years ago
}
public function loraData2()
{
$time = (int)(time() . '000');
3 years ago
$request_data = request()->all();
3 years ago
3 years ago
$node = $request_data['node'] ?? config("custom.lora_mac")[0];
3 years ago
3 years ago
$return_data = [];
$blood_data = Cache::get('blood' . $node, '');
if ($blood_data){
$return_data['blood'] = [
[
$time,
$blood_data,
]
];
}
$temperature_data = Cache::get('temperature' . $node, '');
if ($temperature_data){
$return_data['temperature'] = [
[
$time,
$temperature_data,
]
];
}
$heart_data = Cache::get('heart' . $node, '');
if ($heart_data){
$return_data['heart'] = [
[
$time,
$heart_data,
]
];
}
$heart2_data = Cache::get('heart2' . $node, '');
if ($heart2_data){
$return_data['humidity'] = [
[
$time,
$heart2_data,
]
];
}
3 years ago
$total = [50, 70, 90, 85, 80, 75, 70, 65, 60, 55];
$total_data = [];
foreach ($total as $key => $item){
$item_time = $time + 100 * $key;
$total_data[] = [
$item_time,
$item
];
}
3 years ago
return $return_data;
3 years ago
}
/**
* 专项对比数据
* @return void
*/
public function getSpecialCompare()
{
$request_data = request()->all();
3 years ago
$compare_type = $request_data['compare_type'] ?? 1;
3 years ago
$time = (int)(time() . '000');
3 years ago
$nodes = config("custom.lora_mac");
$return_data = [];
foreach ($nodes as $key => $node){
switch ($compare_type) {
case 1:
$device_data = Cache::get('blood' . $node, '');
break;
case 2:
$device_data = Cache::get('temperature' . $node, '');
break;
case 3:
$device_data = Cache::get('heart' . $node, '');
break;
case 4:
$device_data = Cache::get('heart2' . $node, '');
break;
default:
$device_data = Cache::get('blood' . $node, '');
}
if (empty($device_data)){
continue;
}
$device_id = $key + 1;
$device_name = '设备' . $device_id;
$return_data[$device_name] = [
[
$time,
$device_data
]
];
}
return $return_data;
3 years ago
return [
'设备1' => [
[
$time,
70,
]
],
3 years ago
// '设备2' => [
// [
// $time,
// 80,
// ]
// ],
3 years ago
'设备3' => [
[
$time,
90,
]
],
];
}
3 years ago
}