123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <?php
- require('../vendor/autoload.php');
- use \PhpMqtt\Client\MqttClient;
- use \PhpMqtt\Client\ConnectionSettings;
- use think\facade\Cache;
- use think\facade\Db;
- date_default_timezone_set("PRC");
- define('HOST', '127.0.0.1');
- define('PORT', '6379');
- define('PASSWORD', '123456');
- define('DATABASE', 2);
- // define('HOST', 'r-bp1eebab79320044pd.redis.rds.aliyuncs.com');
- // define('PORT', '6379');
- // define('PASSWORD', '7e2b5c91e438be3c!');
- // define('DATABASE', 4);
- (new think\App())->initialize();
- function app_redis()
- {
- static $redis = null;
- static $conn = false;
- if (!$conn) {
- connect: //定义标签
- $redis = new Redis();
- try {
- //建立的Redis短连接,在请求结束后不会自动关闭,相当于持久连接.
- $conn = $redis->connect(HOST, PORT);
- $conn = $redis->auth(PASSWORD);
- $conn = $redis->select(DATABASE);
- // 连接成功,返回$redis对象,连接失败,返回false.
- return ($conn === true) ? $redis : false;
- } catch (Exception $e) {
- return false;
- }
- } else {
- // 这里假设PHP-FPM在处理一个请求的时间内,Redis连接都是可用的.
- // 所以只在PHP-CLI下检查Redis连接的状态,进行断线重连.
- if (php_sapi_name() === 'cli') {
- try {
- // ping用于检查当前连接的状态,成功时返回+PONG,失败时抛出一个RedisException对象.
- // ping失败时警告:
- // Warning: Redis::ping(): connect() failed: Connection refused
- // var_dump('AAAAAAAAA', $redis);
- // echo 'Redis 连接状态' . $redis->ping() . PHP_EOL;
- @$redis->ping();
- if (!$redis->ping()) {
- goto connect; //跳转到标签出继续执行连接操作
- }
- } catch (Exception $e) {
- // 信息如 Connection lost 或 Redis server went away
- echo $e->getMessage();
- echo 'Redis 连接失败 重新连接:' . PHP_EOL;
- // 断线重连
- goto connect;
- }
- }
- return $redis;
- }
- }
- //thing/product/8UUXN4U00A0725/osd
- //{"bid":"f78e5818-9ae0-47a2-a671-f9ed5940a4c2","data":{"81-0-0":{"gimbal_pitch":0,"gimbal_roll":0,"gimbal_yaw":184.43904979204333,"payload_index":"81-0-0","thermal_current_palette_style":0,"thermal_gain_mode":2,"thermal_global_temperature_max":54.8718490600586,"thermal_global_temperature_min":-11.4954891204834,"thermal_isotherm_lower_limit":-20,"thermal_isotherm_state":0,"thermal_isotherm_upper_limit":150,"zoom_factor":0.56782334384858046},"activation_time":1731793516,"attitude_head":-175.8,"attitude_pitch":-2.5,"attitude_roll":-4.1,"battery":{"batteries":[{"capacity_percent":62,"firmware_version":"26.03.00.37","high_voltage_storage_days":6,"index":0,"loop_times":1,"sn":"6Q7PMBHDA100EH","sub_type":0,"temperature":41.1,"type":0,"voltage":15230}],"capacity_percent":62,"landing_power":8,"remain_flight_time":1364,"return_home_power":25},"best_link_gateway":"7CTDLB100A0135","cameras":[{"camera_mode":0,"ir_metering_mode":0,"ir_metering_point":{"temperature":0,"x":0.5,"y":0.5},"ir_zoom_factor":2,"liveview_world_region":{"bottom":0.57610434293746948,"left":0.43082082271575928,"right":0.56011581420898438,"top":0.44691991806030273},"payload_index":"81-0-0","photo_state":0,"photo_storage_settings":["ir","vision"],"record_time":0,"recording_state":0,"remain_photo_num":4473,"remain_record_duration":0,"screen_split_enable":false,"wide_calibrate_farthest_focus_value":36,"wide_calibrate_nearest_focus_value":66,"wide_exposure_mode":1,"wide_exposure_value":16,"wide_focus_mode":2,"wide_focus_state":0,"wide_focus_value":36,"wide_iso":3,"wide_max_focus_value":66,"wide_min_focus_value":34,"wide_shutter_speed":3,"zoom_calibrate_farthest_focus_value":36,"zoom_calibrate_nearest_focus_value":66,"zoom_exposure_mode":1,"zoom_exposure_value":16,"zoom_factor":6.999994214380596,"zoom_focus_mode":2,"zoom_focus_state":0,"zoom_focus_value":36,"zoom_iso":3,"zoom_max_focus_value":66,"zoom_min_focus_value":34,"zoom_shutter_speed":3}],"country":"CN","distance_limit_status":{"distance_limit":5000,"is_near_distance_limit":0,"state":0},"elevation":110.6,"gear":1,"height":1233.1537109375,"height_limit":600,"home_distance":2.7324116230010986,"horizontal_speed":0,"is_near_area_limit":1,"is_near_height_limit":0,"latitude":40.72114645369534,"longitude":109.83766356702714,"maintain_status":{"maintain_status_array":[{"last_maintain_flight_sorties":0,"last_maintain_flight_time":0,"last_maintain_time":0,"last_maintain_type":1,"state":0},{"last_maintain_flight_sorties":0,"last_maintain_flight_time":0,"last_maintain_time":0,"last_maintain_type":2,"state":0},{"last_maintain_flight_sorties":0,"last_maintain_flight_time":0,"last_maintain_time":0,"last_maintain_type":3,"state":0}]},"mode_code":16,"night_lights_state":0,"obstacle_avoidance":{"downside":1,"horizon":1,"upside":1},"position_state":{"gps_number":32,"is_fixed":0,"quality":5,"rtk_number":49},"rc_lost_action":2,"rid_state":true,"rth_altitude":120,"storage":{"total":60397000,"used":24748000},"total_flight_distance":668806.33705822239,"total_flight_sorties":174,"total_flight_time":129771.41709938273,"track_id":"bced3e0b-dfda-4c62-8156-6319d771b3cf","vertical_speed":0,"wind_direction":4,"wind_speed":66},"tid":"4c0c46ea-3111-4b3c-9b43-5cb8b5487f2c","timestamp":1750146328063,"gateway":"7CTDLB100A0135"}
- while (1) {
- $jsonData= app_redis()->rpop("OSD_DRONE_LIST");
- if(!$jsonData){
- sleep(3);
- continue;
- }
- $redis_data=json_decode($jsonData,true);
- $topic=$redis_data['form'];
- $data=$redis_data['val'];
- $parts = explode('/', $topic);
- $device_sn = $parts[2];
- var_dump($data['data']['latitude']);
- var_dump($data['data']['longitude']);
- var_dump($data['data']['height']);
- var_dump($data['timestamp']);
- var_dump($data['gateway']);
- var_dump($data['device_sn']);
- $save_data=[
- 'longitude'=>$data['data']['longitude'],
- 'latitude'=>$data['data']['latitude'],
- 'height'=>$data['data']['height'],
- // 'time'=>$data['timestamp'],
- 'time'=>intval($data['timestamp']/ 1000),
- 'gateway'=>$data['gateway'],
- 'device_sn'=>$device_sn ,
- ];
- try {
- $res = Db::connect('uav')->name('uav_route')->insertGetId($save_data);
- var_dump($res);
- } catch (\Exception $e) {
- // 错误日志或重新连接逻辑
- echo "错误: " . $e->getMessage().PHP_EOL;
- // 重新连接逻辑(示例):
- Db::connect('uav')->close(); // 关闭现有连接
- Db::connect('uav')->connect(); // 重新连接
- $res = Db::connect('uav')->name('uav_route')->insertGetId($save_data);
- var_dump($res);
- }
- }
|