cqpCow 1 год назад
Родитель
Сommit
b1efdb17e7
4 измененных файлов с 134 добавлено и 3 удалено
  1. 3 0
      app/Jobs/ProcessDataJob.php
  2. 4 2
      app/Jobs/SendDataJob.php
  3. 14 0
      app/Model/DeviceData.php
  4. 113 1
      app/Service/ClearDataService.php

+ 3 - 0
app/Jobs/ProcessDataJob.php

@@ -37,6 +37,9 @@ class ProcessDataJob implements ShouldQueue
         //标记
         file_put_contents('record.txt',json_encode($this->data) . PHP_EOL,8);
 
+        //保存数据到自己服务器
+        ClearDataService::saveData($this->data);
+
         //处理数据
         $return = ClearDataService::clearData($this->data);
 

+ 4 - 2
app/Jobs/SendDataJob.php

@@ -41,7 +41,9 @@ class SendDataJob implements ShouldQueue
 
         //数据要发送的地址
         $url = ClearDataService::getUrl($this->data);
-        $return = $this->sendRequest($url,$this->data);
+        if(! empty($url)){
+            $return = $this->sendRequest($url,$this->data);
+        }
 
 //        file_put_contents('send.txt',json_encode($return) .PHP_EOL,8);
 
@@ -70,6 +72,6 @@ class SendDataJob implements ShouldQueue
 
     protected function echoMessage(OutputInterface $output)
     {
-        $output->writeln('2222222');
+        $output->writeln('发送结束');
     }
 }

+ 14 - 0
app/Model/DeviceData.php

@@ -0,0 +1,14 @@
+<?php
+
+namespace App\Model;
+
+use Illuminate\Database\Eloquent\Model;
+
+class DeviceData extends Model
+{
+    protected $table = "device_data"; //指定表
+    const CREATED_AT = 'crt_time';
+    const UPDATED_AT = 'upd_time';
+    protected $dateFormat = 'U';
+
+}

+ 113 - 1
app/Service/ClearDataService.php

@@ -3,10 +3,103 @@
 namespace App\Service;
 
 
-use App\Model\SysMenu;
+use App\Model\DeviceData;
 
 class ClearDataService extends Service
 {
+    /*
+     * 压力传感器数据
+     * [    "obj" => array:10 [
+            "applicationID" => "2"  // 应用ID
+            "applicationName" => "cloud2"  // 应用名称
+            "data" => "A3sAAA=="
+            "devEUI" => "24e124126c481114" // 设备EUI
+            "deviceName" => "设备二" // 设备名称
+            "fCnt" => 6  // 帧计数
+            "fPort" => 85 // 应用端口
+            "rxInfo" => array:1 [
+              0 => array:8 [
+                "altitude" => 0 // 网关海拔
+                "latitude" => 0 // 网关经度
+                "longitude" => 0 // 网关纬度
+                "loRaSNR" => 13.2 // 信噪比
+                "mac" => "24e124fffef7887c" // 网关ID
+                "name" => "Local Gateway" // 网关名称
+                "rssi" => -24    // 信号强度 (dBm)
+                "time" => "2023-08-03T05:47:47.337673Z"
+              ]
+            ]
+            "time" => "2023-08-03T05:47:47.337673Z"
+            "txInfo" => array:4 [ // 节点信息
+              "adr" => true  // 设备ADR状态
+              "codeRate" => "4/5" // 编码率
+              "dataRate" => array:3 [
+                "bandwidth" => 125  // 带宽
+                "modulation" => "LORA" // LORA调制
+                "spreadFactor" => 7  // 扩频因子
+              ]
+              "frequency" => 473300000 // 使用频率
+            ]
+          ]
+       "pressure" => 0
+     ]
+     *
+     *温度传感器数据
+     *
+     *  ["obj" => array:10 [
+        "applicationID" => "1"
+        "applicationName" => "cloud"
+        "data" => "A2cAAQ=="
+        "devEUI" => "24e124126d054217"
+        "deviceName" => "设备一"
+        "fCnt" => 983
+        "fPort" => 85
+        "rxInfo" => array:1 [
+          0 => array:8 [
+            "altitude" => 0
+            "latitude" => 0
+            "loRaSNR" => 13.5
+            "longitude" => 0
+            "mac" => "24e124fffef7887c"
+            "name" => "Local Gateway"
+            "rssi" => -31
+            "time" => "2023-08-02T09:50:44.880803Z"
+          ]
+        ]
+        "time" => "2023-08-02T09:50:44.880803Z"
+        "txInfo" => array:4 [
+          "adr" => true
+          "codeRate" => "4/5"
+          "dataRate" => array:3 [
+            "bandwidth" => 125
+            "modulation" => "LORA"
+            "spreadFactor" => 7
+          ]
+          "frequency" => 471900000
+        ]
+      ]
+    "temperature" => 25.6
+    ]
+     *
+     * */
+
+    public static function saveData($data){
+        //保存数据
+        $model = new DeviceData();
+        $model->data = json_encode($data);//源数据
+        $model->dev_eui = $data['obj']['devEUI'];
+        $model->device_name = $data['obj']['deviceName'];
+        $model->source_ip = self::getIP();
+        if(isset($data['temperature'])){
+            $model->data_type = 1;
+            $model->happening_data = $data['temperature'];
+        }elseif (isset($data['pressure'])){
+            $model->data_type = 2;
+            $model->happening_data = $data['pressure'];
+        }
+        $model->save();
+    }
+
     public static function clearData($data){
         if(empty($data)) return $data;
 
@@ -20,6 +113,25 @@ class ClearDataService extends Service
         // 温度传感器数据包含temperature 字段  压力传感器包含pressure 字段
 
         $url = 'http://fyy_api.qingyaokeji.com/api/testData';
+        $url = '';
         return $url;
     }
+
+    public static function getIP(){
+        if (getenv('HTTP_CLIENT_IP')) {
+            $ip = getenv('HTTP_CLIENT_IP');
+        }
+        elseif (getenv('HTTP_X_REAL_IP')) {
+            $ip = getenv('HTTP_X_REAL_IP');
+        } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
+            $ip = getenv('HTTP_X_FORWARDED_FOR');
+            $ips = explode(',', $ip);
+            $ip = $ips[0];
+        } elseif (getenv('REMOTE_ADDR')) {
+            $ip = getenv('REMOTE_ADDR');
+        } else {
+            $ip = '0.0.0.0';
+        }
+        return $ip;
+    }
 }