decode($body); self::log($data, 'WarningServer', self::$LOG_MAJOR); $bike_no = $_SESSION['bike_no']; if (!$bike_no) return $this->response(); $type = WarningLogMap::TYPE_DEFAULT; $error_grade = WarningLogMap::ERROR_GRADE_DEFAULT; switch ($data['warning']) { case WarningMap::WARNING_SPARE_BATTERY_LOW: //低电量 $type = WarningLogMap::TYPE_BATTERY_LOW; $error_grade = WarningLogMap::ERROR_GRADE_MINOR; break; case WarningMap::WARNING_SHOCK: // 震动报警 $type = WarningLogMap::TYPE_WARNING_BIKE_SHOCK; $error_grade = WarningLogMap::ERROR_GRADE_MINOR; break; case WarningMap::WARNING_FORCE_OPEN_ELECTRIC: //非法打开电车 $type = WarningLogMap::TYPE_WARNING_BIKE_OPEN; $error_grade = WarningLogMap::ERROR_GRADE_CRITICAL; break; case WarningMap::WARNING_OUT_AREA_PLAY_VIDEO: //超出骑行区域 $type = WarningLogMap::TYPE_BIKE_OUT_AREA; $error_grade = WarningLogMap::ERROR_GRADE_MINOR; break; case WarningMap::WARNING_BMS: // 电池信息报警 $type = false; // $type = WarningLogMap::TYPE_WARNING_BMS; // $error_grade = WarningLogMap::ERROR_GRADE_MINOR; break; case WarningMap::WARNING_STOP_ELECTRIC: //断电报警 $type = WarningLogMap::TYPE_WARNING_CLOSE_ELECTRIC; $error_grade = WarningLogMap::ERROR_GRADE_MINOR; break; case WarningMap::WARNING_OVER_SPEED: //超速 $type = WarningLogMap::TYPE_WARNING_OVER_SPEED; $error_grade = WarningLogMap::ERROR_GRADE_DEFAULT; break; case WarningMap::WARNING_WHEEL_MOVEMENT: //移动报警 $type = WarningLogMap::TYPE_WARNING_WHEEL_MOVE; $error_grade = WarningLogMap::ERROR_GRADE_MINOR; break; case WarningMap::WARNING_BIKE_TROUBLE: //车子故障 $type = WarningLogMap::TYPE_WARNING_BIKE_TROUBLE; $error_grade = WarningLogMap::ERROR_GRADE_MAJOR; break; } if ($type !== false) { if ($this->is_throw_num_time($data['box_no'], 'warning_log_' . $type, 3, 10)) { $this->warningLog($bike_no, $data['box_no'], $data['status'], $body, $type, ($error_grade + 1)); } $this->warningLog($bike_no, $data['box_no'], $data['status'], $body, $type, $error_grade); } return $this->response(); } /** * 解析装载的登录数据 * @param $body * @return array * User: Mead */ private function decode($body) { $i = 0; $box_no = $this->decodeBoxNo(self::stitching($body, $i, 5)); $i += 5; // 设备时间 $box_time = $this->decodeTime(self::stitching($body, $i, 4)); $i += 4; // 警告信息 $warning_info = self::stitching($body, $i, 1); $i += 1; // 控制编码 $controller_code = self::stitching($body, $i, 1); $i += 1; // 故障状态1 $status1 = self::stitching($body, $i, 1); $i += 1; // 故障状态2 $status2 = self::stitching($body, $i, 1); $i += 1; // 故障状态3 $status3 = self::stitching($body, $i, 1); $i += 1; // 故障状态4 $status4 = self::stitching($body, $i, 1); $i += 1; // 故障状态5 $status5 = self::stitching($body, $i, 2); $i += 2; // 故障状态6 $status6 = self::stitching($body, $i, 1); $i += 1; // 故障状态7 $status7 = self::stitching($body, $i, 1); $i += 1; // 故障状态8 $status8 = self::stitching($body, $i, 1); $i += 1; // 加速度数据 $speed = self::stitching($body, $i, 2); $status8 = $this->decodeStatus8($status8); return [ 'box_no' => $box_no, 'time' => $box_time, 'warning' => $warning_info, 'status' => $status8 ]; } }