decode($body); $type = 100; foreach ($data['warning'] as $k => $v) { if ($v) { $type = $k; self::log(self::$typeMaps[$k], 'WARNING', self::$LOG_DEV); break; } } $box_no = $data['box_no']; switch ($type) { case 0: // 震动告警 break; case 1: //外部电池移除 break; case 2: //位移告警 break; case 3: //温度告警 break; case 4: //自动落锁(ACC断开) break; case 5: case 6: break; case 7: // 终端电量告警 break; case 8: // 外部电量告警 break; case 9: // 外部电池接入 $key = "cache:min:update_stop_bike_battery:{$box_no}"; $this->redis->del($key); break; case 10: //ACC接通 break; case 11: //ACC断开 break; case 12: //移动告警 break; case 13: //后座锁关闭 break; case 14: //后座锁打开 break; } return $this->response(); } /** * 告警响应 * @param $login_type * @return array * User: Mead */ public function response($login_type = '00') { $body = [ '5b', '0000' ]; return $body; } /** * 解析装载的状态消息 * @param $body * @return array * User: Mead */ private function decode($body) { $top34Data = $this->decodeWeiKeMuTop34($body); $i = 34; // 告警消息 $warning = self::stitching($body, $i, 2); // i=34 $i += 2; // 定位类型 $location_type = self::stitching($body, $i, 1); // i=36 $i += 1; //ACC状态 $acc_status = self::stitching($body, $i, 1); // i=37 $i += 1; // 动态计算 $yjlx = self::stitching($body, $i, -1); // i=38 return array_merge($top34Data, [ 'warning' => self::handleWarning($warning), 'location_type' => self::handleLocationType($location_type),//0为基站定位 1为卫星定位 'acc_status' => self::handleACCStatus($acc_status),// 1:ACC接通;0:ACC断开 ]); } /** * 处理设备序列号 * @param $no * @return bool|string * User: Mead */ private static function box_no($no) { return substr($no, 0, 9); } /** * handleWarning 解析告警 * * @param $warning * @param int $offset * @param int $len * @return array * @author Fx * */ private static function handleWarning($warning, $offset = 0, $len = 16) { $data = self::handleU2($warning); return array_slice($data, $offset, $len); } private static function handleLocationType($location_type) { $data = self::handleU1($location_type); return $data[0]; } private static function handleACCStatus($acc_status) { $data = self::handleU1($acc_status); return $data[0]; } }