ConfigTransform.php 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Mead
  5. * Date: 2019/9/3
  6. * Time: 8:05 PM
  7. */
  8. namespace App\Servers\Weikemu\Transforms;
  9. use App\Models\BoxSettingTraitModel;
  10. use App\Models\WarningLogTraitModel;
  11. use App\Servers\BaseServer;
  12. use App\Servers\Weikemu\Models\CacheLogTraitModel;
  13. /**
  14. * 配置报文
  15. * Class LoginServer
  16. * @package App\Servers
  17. */
  18. class ConfigTransform extends BaseServer
  19. {
  20. use BoxSettingTraitModel, WarningLogTraitModel, CacheLogTraitModel;
  21. /**
  22. * 处理设备序列号
  23. * @param $no
  24. * @return bool|string
  25. * User: Mead
  26. */
  27. private static function box_no($no)
  28. {
  29. return substr($no, 0, 9);
  30. }
  31. public function main($body)
  32. {
  33. $data = $this->decode($body);
  34. $this->cacheLog($data['box_no'], $this->msg_id, [
  35. 'SERVER' => $data['server_ip'] . ':' . $data['server_port'],
  36. 'FREQ' => $data['motion_position_reporting_interval'],
  37. 'MAXSPEEDPERCENT' => $data['controller_speed_limit_threshold'],
  38. 'SOFTVERSION' => $data['function_version'],
  39. 'PULSE' => $data['static_position_reporting_interval'] * 60,
  40. 'MAXECUSPEED' => self::speedFormat($data['controller_speed_limit_threshold']),
  41. 'BLUETOOTH_TOKEN' => $data['bluetooth_token'],
  42. 'BLUETOOTH_MAC' => $data['bluetooth_MAC'],
  43. 'imei' => $data['imei'],
  44. 'AUTO_LOCK_TIME' => $data['configs'][7]['value'] ? $data['automatic_locking_time'] : '关闭'
  45. ]);
  46. return $this->response();
  47. }
  48. /**
  49. * 解析装载的状态消息
  50. * @param $body
  51. * @return array
  52. * User: Mead
  53. */
  54. private function decode($body)
  55. {
  56. $top34Data = $this->decodeWeiKeMuTop34($body);
  57. $i = 34;
  58. $configs = self::stitching($body, $i, 2); // i=34
  59. $i += 2;
  60. // 实时追踪消息上报时间间隔,量化单位30秒
  61. $real_time_tracking_interval = self::stitching($body, $i, 2); // i=36
  62. $i += 2;
  63. //实时追踪持续时间
  64. $real_time_tracking_duration = self::stitching($body, $i, 2); // i=38
  65. $i += 2;
  66. //运动状态,位置采样间隔设置
  67. $motion_position_sampling_interval = self::stitching($body, $i, 1); // i=40
  68. $i += 1;
  69. // 运动状态,位置上报间隔设置
  70. $motion_position_reporting_interval = self::stitching($body, $i, 1); // i=41
  71. $i += 1;
  72. //静止状态,位置上报间隔设置
  73. $static_position_reporting_interval = self::stitching($body, $i, 2); // i=42
  74. $i += 2;
  75. // 超速门限,取值范围 0~126,量化单位2km/h,
  76. $overspeed_threshold = self::stitching($body, $i, 1); // i=44
  77. $i += 1;
  78. // 温度门限
  79. $temperature_threshold = self::stitching($body, $i, 1); // i=45
  80. $i += 1;
  81. // 位移告警门限
  82. $displacement_threshold = self::stitching($body, $i, 1); // i=46
  83. $i += 1;
  84. //自动落锁时长,量化单位1分钟
  85. $automatic_locking_time = self::stitching($body, $i, 1); // i=47
  86. $i += 1;
  87. //服务器地址端口号
  88. $server_port = self::stitching($body, $i, 2); // i=48
  89. $i += 2;
  90. // ip
  91. $server_ip = self::stitching($body, $i, 4); // i=50
  92. // self::log($server_ip,'ip',2);
  93. $i += 4;
  94. // 蓝牙名称
  95. $bluetooth_name = self::stitching($body, $i, 10); // i=54
  96. // self::dd($bluetooth_name);
  97. $i += 10;
  98. // 蓝牙token
  99. $bluetooth_token = self::stitching($body, $i, 4); // i=64
  100. $i += 4;
  101. $i += 6;
  102. // 控制器限速门限
  103. $controller_speed_limit_threshold = self::stitching($body, $i, 2); // i=74
  104. $i += 2;
  105. $i += 6;
  106. $i += 8;
  107. $i += 4;
  108. // 设备版本号
  109. $equipment_version = self::stitching($body, $i, 20); // i=94
  110. $i += 20;
  111. // 功能版本号
  112. $function_version = self::stitching($body, $i, 1); // i=114
  113. $i += 1;
  114. //蓝牙MAC
  115. $bluetooth_MAC = substr(self::stitching($body, $i, 8), 0); // i=115
  116. self::log($automatic_locking_time, 'Setting');
  117. self::log(hexdec($automatic_locking_time), 'Setting');
  118. self::log($configs, 'Setting');
  119. self::log(self::handleConfigs($configs), 'Setting');
  120. return array_merge($top34Data, [
  121. 'configs' => self::handleConfigs($configs),
  122. 'real_time_tracking_interval' => hexdec($real_time_tracking_interval) * 30, //秒
  123. 'real_time_tracking_duration' => hexdec($real_time_tracking_duration), // 分钟
  124. 'motion_position_sampling_interval' => hexdec($motion_position_sampling_interval), // 秒
  125. 'motion_position_reporting_interval' => hexdec($motion_position_reporting_interval), // 秒
  126. 'static_position_reporting_interval' => hexdec($static_position_reporting_interval), // 分钟
  127. 'overspeed_threshold' => hexdec($overspeed_threshold) * 2, // km/h
  128. 'temperature_threshold' => hexdec($temperature_threshold),// 度
  129. 'displacement_threshold' => hexdec($displacement_threshold),// 米
  130. 'automatic_locking_time' => hexdec($automatic_locking_time), // 分钟
  131. 'server_port' => hexdec($server_port),
  132. 'server_ip' => self::handleIp($server_ip),
  133. 'bluetooth_name' => hex2bin($bluetooth_name),
  134. 'bluetooth_token' => $bluetooth_token,
  135. 'controller_speed_limit_threshold' => hexdec($controller_speed_limit_threshold),
  136. 'equipment_version' => hex2bin($equipment_version),
  137. 'function_version' => hexdec($function_version),
  138. 'bluetooth_MAC' => $bluetooth_MAC
  139. ]);
  140. }
  141. private static function handleConfigs($configs)
  142. {
  143. $data = self::handleU2($configs);
  144. $config = array_slice($data, 0, 8);
  145. $names = ['震动告警开启设置', '断电告警开启设置', '位移告警开启设置', '实时追踪开启设置', '保留', '超速开启设置', '保留', '自动落锁', '温度告警'];
  146. $nConfigs = [];
  147. foreach ($config as $k => $c) {
  148. $nConfigs[$k] = [
  149. 'value' => $c,
  150. 'name' => $names[$k]
  151. ];
  152. }
  153. return $nConfigs;
  154. }
  155. private static function handleIp($ip)
  156. {
  157. $ipArr = str_split($ip, 2);
  158. $res = '';
  159. foreach ($ipArr as $v) {
  160. $res .= base_convert($v, 16, 10) . '.';
  161. }
  162. return rtrim($res, '.');
  163. }
  164. private static function speedFormat($speed)
  165. {
  166. $MAXSPEEDPERCENT = 7;
  167. switch ($speed) {
  168. case 70:
  169. $MAXSPEEDPERCENT = 1;
  170. break;
  171. case 75:
  172. $MAXSPEEDPERCENT = 2;
  173. break;
  174. case 80:
  175. $MAXSPEEDPERCENT = 3;
  176. break;
  177. case 85:
  178. $MAXSPEEDPERCENT = 4;
  179. break;
  180. case 90:
  181. $MAXSPEEDPERCENT = 5;
  182. break;
  183. case 95:
  184. $MAXSPEEDPERCENT = 6;
  185. break;
  186. case 100:
  187. $MAXSPEEDPERCENT = 7;
  188. break;
  189. }
  190. return $MAXSPEEDPERCENT;
  191. }
  192. /**
  193. * 状态响应
  194. * @param $login_type
  195. * @return array
  196. * User: Mead
  197. */
  198. public function response($login_type = '00')
  199. {
  200. $body = [
  201. '5b',
  202. '0000'
  203. ];
  204. return $body;
  205. }
  206. }