123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Mead
- * Date: 2019/9/3
- * Time: 8:05 PM
- */
- namespace App\Servers\Weikemu\Transforms;
- use App\Models\BoxSettingTraitModel;
- use App\Models\WarningLogTraitModel;
- use App\Servers\BaseServer;
- /**
- * 告警报文
- * Class WarningServer
- * @package App\Servers\Weikemu
- */
- class WarningTransform extends BaseServer
- {
- use BoxSettingTraitModel, WarningLogTraitModel;
- public static $typeMaps = [
- '震动告警',
- '外部电池移除',
- '位移告警',
- '温度告警',
- '自动落锁(ACC断开)',
- '',
- '',
- '终端电量告警',
- '外部电量告警',
- '外部电池接入',
- 'ACC接通',
- 'ACC断开',
- '移动告警',
- '后座锁关闭',
- '后座锁打开'
- ];
- public function main($body)
- {
- $data = $this->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];
- }
- }
|