From 734babb3a7348050fdffe845c560ba8b0b218152 Mon Sep 17 00:00:00 2001
From: mac <user@users-MacBook-Pro.local>
Date: 星期一, 20 十一月 2023 18:24:43 +0800
Subject: [PATCH] 2023年11月20日18:24:36

---
 app/src/main/java/com/hdl/photovoltaic/internet/HttpServer/MyNanoHttpServer.java  |   96 ++++++++++++
 app/src/main/java/com/hdl/photovoltaic/utils/AppManagerUtils.java                 |   61 +++++++
 app/src/main/java/com/hdl/photovoltaic/ui/StartActivity.java                      |    1 
 app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java                          |   10 
 app/src/main/AndroidManifest.xml                                                  |   13 -
 app/src/main/java/com/hdl/photovoltaic/other/HdlLogLogic.java                     |    2 
 app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java                     |  113 +++++++++++++
 app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java                     |   56 ++++++
 app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java                    |   24 ++
 app/src/main/java/com/hdl/photovoltaic/internet/HttpServer/MyNanoHttpService.java |   41 +++++
 app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java             |   11 +
 app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java                  |    3 
 app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java     |    3 
 app/build.gradle                                                                  |    3 
 app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java                  |   15 +
 15 files changed, 423 insertions(+), 29 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index ed09318..c22f64a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -130,5 +130,8 @@
     implementation 'androidx.webkit:webkit:1.3.0'//3.6.15鐗堟湰涔嬪悗 蹇呴』闆嗘垚锛岀敤鏉ユ敮鎸佹殫榛戞ā寮�
     //********UniSDK蹇呴』娣诲姞鐨勪緷璧� end********
 
+    //NanoHTTPD鎼缓鏈嶅姟鍣�
+    implementation 'org.nanohttpd:nanohttpd:2.3.1'
+
 
 }
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3acd613..585a89c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,7 +6,6 @@
     <uses-permission
         android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
         tools:ignore="ProtectedPermissions" /> <!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> -->
-    <!-- <uses-permission android:name="android.permission.CAMERA" /> -->
     <uses-permission android:name="android.permission.VIBRATE" /> <!-- <uses-permission android:name="android.permission.INTERNET" /> -->
     <!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> -->
     <!-- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> -->
@@ -18,7 +17,7 @@
     <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> <!-- <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> -->
     <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> <!-- wifi鐘舵�佹潈闄� -->
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
-    <uses-permission android:name="android.permission.INTERNET" /> <!-- 浣嶇疆淇℃伅 -->
+    <uses-permission android:name="android.permission.INTERNET" /><!--寮�鍚綉缁滄潈闄�--><!-- 浣嶇疆淇℃伅 -->
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 濡傛灉鏄畨鍗�10.0锛岄渶瑕佸悗鍙拌幏鍙栬繛鎺ョ殑wifi鍚嶇О鍒欐坊鍔犺繘绋嬭幏鍙栦綅缃俊鎭潈闄� -->
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- android 10.0浣跨敤wifi api鏂版坊鍔犵殑鏉冮檺 -->
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
@@ -30,7 +29,6 @@
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- bugly鎵�闇�鏉冮檺 start -->
     <uses-permission android:name="android.permission.CAMERA" /> <!-- <uses-permission android:name="android.permission.INTERNET" /> -->
     <!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> -->
-    <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
@@ -43,15 +41,12 @@
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- bugly鎵�闇�鏉冮檺 end -->
     <!-- UNI SDK 鍩哄骇鍒犻櫎鐨勯儴鍒嗘潈闄� start -->
-    <uses-permission android:name="android.permission.CAMERA" />
-    <uses-permission android:name="android.permission.INTERNET" /> <!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> -->
+    <!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> -->
     <!-- <uses-feature android:name="android.hardware.camera.autofocus" /> -->
-    <!-- <uses-permission android:name="android.permission.CAMERA" /> -->
     <!-- <uses-permission android:name="android.permission.RECORD_AUDIO" /> -->
     <!-- <uses-permission android:name="android.permission.READ_PHONE_STATE" /> -->
     <!-- 璁块棶闂厜鐏� -->
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
-    <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
@@ -62,7 +57,6 @@
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-    <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="com.hdl.debugtreasure.permission.JPUSH_MESSAGE" />
     <uses-permission android:name="android.permission.CALL_PHONE" />
     <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
@@ -113,6 +107,9 @@
             </intent-filter>
         </activity>
 
+        <!--娉ㄥ唽鏈嶅姟-->
+        <service android:name="com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpService" />
+
         <meta-data
             android:name="design_height_in_dp"
             android:value="812" />
diff --git a/app/src/main/java/com/hdl/photovoltaic/internet/HttpServer/MyNanoHttpServer.java b/app/src/main/java/com/hdl/photovoltaic/internet/HttpServer/MyNanoHttpServer.java
new file mode 100644
index 0000000..7653899
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/internet/HttpServer/MyNanoHttpServer.java
@@ -0,0 +1,96 @@
+package com.hdl.photovoltaic.internet.HttpServer;
+
+import android.text.TextUtils;
+
+import com.alibaba.fastjson.JSON;
+import com.hdl.photovoltaic.other.HdlFileLogic;
+
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import fi.iki.elonen.NanoHTTPD;
+
+/**
+ * 鏈湴鏈嶅姟鍣�
+ */
+public class MyNanoHttpServer extends NanoHTTPD {
+
+    //澹版槑鏈嶅姟绔� 绔彛
+    private static final Integer HTTP_PORT = 49152;
+
+    public MyNanoHttpServer(String hostname, int port) {
+        super(hostname, port);
+    }
+
+    private volatile static MyNanoHttpServer myNanoHttpServer;
+
+    //TODO	鍗曚緥妯″紡锛岃幏鍙栧疄渚嬪璞★紝骞朵紶鍏ュ綋鍓嶆満鍣↖P
+    public static MyNanoHttpServer getInstance(String ipAddress) {
+        if (myNanoHttpServer == null) {
+            synchronized (MyNanoHttpServer.class) {
+                if (myNanoHttpServer == null) {
+                    myNanoHttpServer = new MyNanoHttpServer(ipAddress, HTTP_PORT);
+                }
+            }
+        }
+        return myNanoHttpServer;
+    }
+
+    @Override
+    public Response serve(IHTTPSession session) {
+        //TODO  瑙e喅瀹㈡埛绔姹傚弬鏁版惡甯︿腑鏂囷紝鍑虹幇涓枃涔辩爜闂
+        ContentType ct = new ContentType(session.getHeaders().get("content-type")).tryUTF8();
+        session.getHeaders().put("content-type", ct.getContentTypeHeader());
+        return dealWith(session);
+    }
+
+    private Response dealWith(IHTTPSession session) {
+        Date dateTime = new Date();
+        if (Method.POST == session.getMethod()) {
+            //鑾峰彇璇锋眰澶存暟鎹�
+            Map<String, String> header = session.getHeaders();
+            //鑾峰彇浼犲弬鍙傛暟
+            Map<String, String> params = new HashMap<String, String>();
+            try {
+                session.parseBody(params);
+                String paramStr = params.get("postData");
+                if (TextUtils.isEmpty(paramStr)) {
+                    return newFixedLengthResponse("success");
+                }
+                paramStr = paramStr.replace("\r\n", " ");
+
+                com.alibaba.fastjson.JSONObject jsonParam = JSON.parseObject(paramStr);
+                Map<String, Object> result = new HashMap<>();
+                //TODO 鍐欎綘鐨勪笟鍔¢�昏緫.....
+
+                String ss = HdlFileLogic.getInstance().readFile(HdlFileLogic.getInstance().getLogFilePath());
+                //鍝嶅簲瀹㈡埛绔�
+                return newFixedLengthResponse(ss);
+//                return newFixedLengthResponse("success");
+            } catch (IOException e) {
+                e.printStackTrace();
+            } catch (ResponseException e) {
+                e.printStackTrace();
+            }
+            return newFixedLengthResponse("success");
+        } else if (Method.GET == session.getMethod()) {
+
+            Map<String, List<String>> parameters = session.getParameters();
+            String ss = HdlFileLogic.getInstance().readFile(HdlFileLogic.getInstance().getLogFilePath());
+            //鍝嶅簲瀹㈡埛绔�
+            return newFixedLengthResponse(ss);
+//            return newFixedLengthResponse("success");
+        }
+
+        return newFixedLengthResponse("404");
+    }
+
+    public static Response newFixedLengthResponse(String msg) {
+        return newFixedLengthResponse(Response.Status.OK, NanoHTTPD.MIME_HTML, msg);
+    }
+
+}
diff --git a/app/src/main/java/com/hdl/photovoltaic/internet/HttpServer/MyNanoHttpService.java b/app/src/main/java/com/hdl/photovoltaic/internet/HttpServer/MyNanoHttpService.java
new file mode 100644
index 0000000..007d757
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/internet/HttpServer/MyNanoHttpService.java
@@ -0,0 +1,41 @@
+package com.hdl.photovoltaic.internet.HttpServer;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+import androidx.annotation.Nullable;
+
+public class MyNanoHttpService extends Service {
+    private MyNanoHttpServer myNanoHttpServer = MyNanoHttpServer.getInstance(null);
+
+    @Nullable
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        try {
+            myNanoHttpServer.start();
+        } catch (Exception e) {
+            e.printStackTrace();
+            startService(new Intent(this, MyNanoHttpService.class));
+        }
+    }
+
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        return super.onStartCommand(intent, flags, startId);
+    }
+
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        myNanoHttpServer.stop();
+    }
+}
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
index 27b5ee8..0a4b5c0 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
@@ -563,7 +563,7 @@
     }
 
     /**
-     * 鑾峰彇閫嗗彉鍣ㄥ垪琛�
+     * 鑾峰彇閫嗗彉鍣ㄥ垪琛�(鏁村悎浜戠鍜屾湰鍦板垪琛�)
      * 娉ㄦ剰:鏈夊缃戜互浜戠璁惧涓哄噯,鏈湴瀛樺湪锛屼簯绔病鏈夊垯鍒犻櫎锛涘唴缃戜互鏈湴涓轰富,鎼滅储澶氬皯涓澶囧氨鏄剧ず澶氬皯涓紱
      *
      * @param cloudCallBeak 杩斿洖閫嗗彉鍣ㄥ垪琛�
@@ -667,7 +667,7 @@
 
             @Override
             public void onError(HDLLinkException e) {
-                //澶栫綉鍙湁1鎯呭喌(鏈湴鎼滅储閫嗗彉鍣ㄥ垪琛ㄥけ璐ヤ簡)
+                //澶栫綉鍙湁1绉嶆儏鍐�(鏈湴鎼滅储閫嗗彉鍣ㄥ垪琛ㄥけ璐ヤ簡)
                 HdlDeviceLogic.getInstance().getCloudInverterDeviceList(UserConfigManage.getInstance().getHomeId(), new CloudCallBeak<List<CloudInverterDeviceBean>>() {
                     @Override
                     public void onSuccess(List<CloudInverterDeviceBean> list) {
@@ -824,6 +824,17 @@
         HDLLinkLocalGateway.getInstance().refreshGatewayByHomeIdAndSpk(UserConfigManage.getInstance().getHomeId(), spks, true, gatewayCallBack);
     }
 
+    /**
+     * 鍒ゆ柇鏄湰鍦拌繛鎺�
+     *
+     * @param deviceMac 璁惧mac
+     * @return true=鏈湴杩炴帴
+     */
+    public boolean isLocalConnect(String deviceMac) {
+        GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getLocalGateway(deviceMac);
+        return gatewayBean == null;
+    }
+
 
     /**
      * 鍒锋柊閫嗗彉鍣ㄧ紦瀛樹俊鎭�(鍖呮嫭璁剧疆mqtt绉橀挜锛�
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java
index fb26833..69b3e95 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java
@@ -79,17 +79,32 @@
     }
 
     /**
+     * 鑾峰彇瀛樻斁銆愰┍鍔ㄦ枃浠跺す銆戞牴璺緞
+     */
+    public String getDriveRootPath() {
+        return getAPPInternalStoreFilesPath() + "/upgrade/drive";
+    }
+
+
+    /**
+     * 鑾峰彇瀛樻斁銆愬浐浠舵枃浠跺す銆戞牴璺緞
+     */
+    public String getFirmwareRootPath() {
+        return getAPPInternalStoreFilesPath() + "/upgrade/firmware";
+    }
+
+    /**
      * 鑾峰彇銆愭棩蹇楁枃浠躲�戝叏璺緞
      */
     public String getLogFilePath() {
-        return getCurrentHomeRootPath() + "/Log.txt";
+        return getCurrentHomeRootPath() + "/log.txt";
     }
 
     /**
      * 鑾峰彇銆愮敤鎴锋枃浠躲�戝叏璺緞
      */
     public String getUserFilePath() {
-        return getAPPInternalStoreFilesPath() + "/UserConfigManage.txt";
+        return getAPPInternalStoreFilesPath() + "/userConfigManage.txt";
     }
 
     //endregion
@@ -102,6 +117,11 @@
     public void createDirectory() {
         //瀛樻斁浣忓畢淇℃伅
         this.createFileDir(this.getCurrentHomeRootPath());
+        //椹卞姩鏂囦欢
+        this.createFileDir(this.getDriveRootPath());
+        //鍥轰欢鏂囦欢
+        this.createFileDir(this.getFirmwareRootPath());
+
     }
 
     /**
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlLogLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlLogLogic.java
index 2945f6a..896bfc9 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlLogLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlLogLogic.java
@@ -75,7 +75,7 @@
      */
     public static void writeLog(String strLog) {
         synchronized (HdlLogLogic.class) {
-            strLog = TimeUtils.getTimeFromTimestamp(System.currentTimeMillis()) + "s%" + " " + strLog;//鍔犳墦鍗版椂闂�(s%鍗犱綅绗︼紝鏄剧ず鏃堕棿鏃惰缃笉鍚屽瓧浣撻鑹�)
+            strLog = TimeUtils.getTimeFromTimestamp(System.currentTimeMillis()) + "s%" + " " + strLog;//鍔犳墦鍗版椂闂�(s%鍗犱綅绗︼紝璁剧疆鏄剧ず鏃堕棿涓嶅悓瀛椾綋棰滆壊)
             HdlFileLogic.getInstance().appendFile(HdlFileLogic.getInstance().getLogFilePath(), strLog);
         }
     }
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java
index ca50153..d858f8c 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java
@@ -208,6 +208,12 @@
      * @param firmwareVersionId 鍥轰欢鐗堟湰Id
      */
     public void getDeviceFirmwareDownloadUrl(String firmwareVersionId, CloudCallBeak<DownloadUrlBean> callBack) {
+//        "protocolType":"bus",
+//                "deviceModel":"029B9988",
+//                "firmwareNameEn":"鏍稿績灞�",
+//                "firmwareNameCn":"鏍稿績灞�",
+//                "imageId":"12345678",
+//                "version":"V01.02.20"
         String requestUrl = HttpApi.POST_OTA_GET_LinkDeviceFirmwareDownloadUrl;
         JsonObject json = new JsonObject();
         json.addProperty("firmwareVersionId", firmwareVersionId);
@@ -237,6 +243,17 @@
                 }
             }
         });
+    }
+
+    /**
+     * 鍚戜簯绔幏鍙栥�愯澶囧浐浠躲�戜笅杞藉崌绾ф枃浠�
+     *
+     * @param downloadUrl 浜戠鍥轰欢鍦板潃
+     */
+    public void getDeviceFirmwareDownloadFile(String downloadUrl, CloudCallBeak<DownloadUrlBean> callBack) {
+        String requestUrl = HttpApi.POST_OTA_GET_LinkDeviceFirmwareDownloadUrl;
+        JsonObject json = new JsonObject();
+
     }
 
     //endregion
@@ -364,7 +381,11 @@
      *
      * @param driverVersionId 椹卞姩鐗堟湰Id
      */
-    public void getDeviceDriverDownloadUrl(String driverVersionId, CloudCallBeak<DownloadUrlBean> callBack) {
+    public void getDeviceDriverDownloadUrl(String driverVersionId, CloudCallBeak<String> callBack) {
+//        "driverCode":"029B9988",
+//                "driverName":"鏍稿績灞�",
+//                "imageId":"12345678",
+//                "version":"V01.02.20"
         String requestUrl = HttpApi.POST_OTA_GET_LinkDeviceDriverDownloadUrl;
         JsonObject json = new JsonObject();
         json.addProperty("driverVersionId", driverVersionId);
@@ -374,7 +395,7 @@
 
                 if (TextUtils.isEmpty(json)) {
                     if (callBack != null) {
-                        callBack.onSuccess(new DownloadUrlBean());
+                        callBack.onSuccess("-2");
                     }
                     return;
                 }
@@ -382,9 +403,25 @@
                 Type typeOfT = new TypeToken<DownloadUrlBean>() {
                 }.getType();
                 DownloadUrlBean downloadUrlBean = gson.fromJson(json, typeOfT);
-                if (callBack != null) {
-                    callBack.onSuccess(downloadUrlBean);
+                if (downloadUrlBean == null) {
+                    if (callBack != null) {
+                        callBack.onSuccess("-2");
+                    }
+                    return;
                 }
+                getDeviceDriverDownloadFile(downloadUrlBean.getDownloadUrl(), new CloudCallBeak<DownloadUrlBean>() {
+                    @Override
+                    public void onSuccess(DownloadUrlBean obj) {
+                        String full = HdlFileLogic.getInstance().getDriveRootPath() + "/" + driverVersionId;
+                        HdlFileLogic.getInstance().writeFile(full, obj.toString());
+                    }
+
+                    @Override
+                    public void onFailure(HDLException e) {
+
+                    }
+                });
+
             }
 
             @Override
@@ -396,6 +433,17 @@
         });
     }
 
+    /**
+     * 鍚戜簯绔幏鍙栥�愯澶囬┍鍔ㄣ�戜笅杞藉崌绾ф枃浠�
+     *
+     * @param downloadUrl 浜戠鍥轰欢鍦板潃
+     */
+    public void getDeviceDriverDownloadFile(String downloadUrl, CloudCallBeak<DownloadUrlBean> callBack) {
+        String requestUrl = HttpApi.POST_OTA_GET_LinkDeviceFirmwareDownloadUrl;
+        JsonObject json = new JsonObject();
+
+    }
+
 
     //endregion
 }
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
index ff4307a..78ed634 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
@@ -10,6 +10,7 @@
 import com.hdl.linkpm.sdk.ota.bean.CloudDeviceFirmwaresBean;
 import com.hdl.linkpm.sdk.ota.bean.CloudGatewayDriversBean;
 import com.hdl.linkpm.sdk.ota.bean.DeviceFirmwareBean;
+import com.hdl.linkpm.sdk.ota.bean.DownloadUrlBean;
 import com.hdl.linkpm.sdk.ota.bean.GatewayDriverBean;
 import com.hdl.photovoltaic.HDLApp;
 import com.hdl.photovoltaic.bean.ModBusBean;
@@ -210,6 +211,16 @@
                         this.uniGetNewDeviceFirmwares(data, callback);
                     }
                     break;
+                    //璁惧鏈湴鍥轰欢鍒楄〃
+                    case HDLUniMP.UNI_EVENT_REPLY_OTA_FIRMWARES_LOCAL: {
+                        this.uniGetLocalFirmwares(data, callback);
+                    }
+                    break;
+                    //璁惧鍥轰欢涓嬭浇
+                    case HDLUniMP.UNI_EVENT_REPLY_OTA_FIRMWARES_DOWNLOAD: {
+                        this.uniDeviceFirmwareDownload(data, callback);
+                    }
+                    break;
                     //璁惧鍥轰欢鍗囩骇
                     case HDLUniMP.UNI_EVENT_REPLY_OTA_FIRMWARES_UPGRADE: {
                         this.uniUpgradeDeviceFirmware(data, callback);
@@ -223,6 +234,16 @@
                     //璁惧鏂伴┍鍔ㄥ垪琛�
                     case HDLUniMP.UNI_EVENT_REPLY_OTA_DRIVER_NEW: {
                         this.uniGetNewGatewayDrivers(data, callback);
+                    }
+                    break;
+                    //璁惧鏈湴椹卞姩鍒楄〃
+                    case HDLUniMP.UNI_EVENT_REPLY_OTA_DRIVER_LOCAL: {
+                        this.uniGetLocalDrivers(data, callback);
+                    }
+                    break;
+                    //璁惧椹卞姩涓嬭浇
+                    case HDLUniMP.UNI_EVENT_REPLY_OTA_DRIVER_DOWNLOAD: {
+                        this.uniGatewayDriverDownload(data, callback);
                     }
                     break;
                     //璁惧椹卞姩鍗囩骇
@@ -338,14 +359,23 @@
     }
 
     /**
-     * 鍚戜簯绔彂璧枫�愯澶囧浐浠躲�戝崌绾TA鎸囦护
+     * 鑾峰彇銆愯澶囨湰鍦板浐浠躲�戝垪琛�
      */
-    private void uniUpgradeDeviceFirmware(Object data, DCUniMPJSCallback callback) {
+    private void uniGetLocalFirmwares(Object data, DCUniMPJSCallback callback) {
+        String hardwareModel = getKeyValue("hardwareModel", getKeyValue("data", data));//纭欢鍨嬪彿
+        String osImageId = getKeyValue("osImageId", getKeyValue("data", data));//绯荤粺闀滃儚id
+        String firmwareVersionId = getKeyValue("firmwareVersionId", getKeyValue("data", data));//绯荤粺闀滃儚id
+    }
+
+    /**
+     * 鍚戜簯绔彂璧枫�愯澶囧浐浠躲�戜笅杞芥寚浠�
+     */
+    private void uniDeviceFirmwareDownload(Object data, DCUniMPJSCallback callback) {
         String deviceOidId = getKeyValue("deviceOidId", getKeyValue("data", data));//璁惧id
         String firmwareVersionId = getKeyValue("firmwareVersionId", getKeyValue("data", data));//鍥轰欢鐗堟湰id
-        HdlOtaLogic.getInstance().upgradeDeviceFirmware(deviceOidId, firmwareVersionId, new CloudCallBeak<Boolean>() {
+        HdlOtaLogic.getInstance().getDeviceFirmwareDownloadUrl(firmwareVersionId, new CloudCallBeak<DownloadUrlBean>() {
             @Override
-            public void onSuccess(Boolean obj) {
+            public void onSuccess(DownloadUrlBean obj) {
                 uniCallbackData(obj, callback);
             }
 
@@ -354,6 +384,37 @@
                 uniCallbackData(null, e.getCode(), e.getMsg(), callback);
             }
         });
+    }
+
+    /**
+     * 鍚戜簯绔彂璧枫�愯澶囧浐浠躲�戝崌绾TA鎸囦护
+     */
+    private void uniUpgradeDeviceFirmware(Object data, DCUniMPJSCallback callback) {
+
+        String deviceMac = getKeyValue("mac", getKeyValue("data", data));//缃戝叧璁惧mac锛堟煡鎵緎ocket锛�
+        String deviceOidId = getKeyValue("deviceOidId", getKeyValue("data", data));//璁惧id
+        String firmwareVersionId = getKeyValue("firmwareVersionId", getKeyValue("data", data));//鍥轰欢鐗堟湰id
+
+        boolean isLocalConnect = HdlDeviceLogic.getInstance().isLocalConnect(deviceMac);
+        if (isLocalConnect) {
+            //鏈湴
+            //1,寤虹珛鏈湴鏈嶅姟锛�
+            // 2锛屽憡璇夌綉鍏虫墜鏈篿p鍜岀鍙o紱
+
+        } else {
+            //浜戠
+            HdlOtaLogic.getInstance().upgradeDeviceFirmware(deviceOidId, firmwareVersionId, new CloudCallBeak<Boolean>() {
+                @Override
+                public void onSuccess(Boolean obj) {
+                    uniCallbackData(obj, callback);
+                }
+
+                @Override
+                public void onFailure(HDLException e) {
+                    uniCallbackData(null, e.getCode(), e.getMsg(), callback);
+                }
+            });
+        }
     }
 
     /**
@@ -396,9 +457,20 @@
     }
 
     /**
-     * 鍚戜簯绔彂璧枫�愯澶囬┍鍔ㄣ�戝崌绾TA鎸囦护
+     * 鑾峰彇銆愯澶囨湰鍦伴┍鍔ㄣ�戝垪琛�
      */
-    private void uniUpgradeGatewayDriver(Object data, DCUniMPJSCallback callback) {
+    private void uniGetLocalDrivers(Object data, DCUniMPJSCallback callback) {
+        String driveCode = getKeyValue("driveCode", getKeyValue("data", data));//椹卞姩缂栧彿鎴栭┍鍔ㄥ悕绉�
+        String osImageId = getKeyValue("osImageId", getKeyValue("data", data));//椹卞姩绫诲瀷id
+        String driverVersionId = getKeyValue("driverVersionId", getKeyValue("data", data));//椹卞姩绫诲瀷id
+    }
+
+    /**
+     * 鍚戜簯绔彂璧枫�愯澶囬┍鍔ㄣ�戜笅杞芥寚浠�
+     */
+    private void uniGatewayDriverDownload(Object data, DCUniMPJSCallback callback) {
+
+
         String deviceOid = getKeyValue("oid", getKeyValue("data", data));//缃戝叧璁惧oid
         String driverVersionId = getKeyValue("driverVersionId", getKeyValue("data", data));//椹卞姩鐗堟湰id
         HdlOtaLogic.getInstance().upgradeGatewayDriver(deviceOid, driverVersionId, new CloudCallBeak<Boolean>() {
@@ -415,6 +487,35 @@
     }
 
     /**
+     * 鍚戜簯绔彂璧枫�愯澶囬┍鍔ㄣ�戝崌绾TA鎸囦护
+     */
+    private void uniUpgradeGatewayDriver(Object data, DCUniMPJSCallback callback) {
+
+        String deviceMac = getKeyValue("mac", getKeyValue("data", data));//缃戝叧璁惧mac锛堟煡鎵緎ocket锛�
+        String deviceOid = getKeyValue("oid", getKeyValue("data", data));//缃戝叧璁惧oid
+        String driverVersionId = getKeyValue("driverVersionId", getKeyValue("data", data));//椹卞姩鐗堟湰id
+        boolean isLocalConnect = HdlDeviceLogic.getInstance().isLocalConnect(deviceMac);
+        if (isLocalConnect) {
+            //鏈湴
+            //1,寤虹珛鏈湴鏈嶅姟锛�
+            // 2锛屽憡璇夌綉鍏虫墜鏈篿p鍜岀鍙o紱
+
+        } else {
+            HdlOtaLogic.getInstance().upgradeGatewayDriver(deviceOid, driverVersionId, new CloudCallBeak<Boolean>() {
+                @Override
+                public void onSuccess(Boolean obj) {
+                    uniCallbackData(obj, callback);
+                }
+
+                @Override
+                public void onFailure(HDLException e) {
+                    uniCallbackData(null, e.getCode(), e.getMsg(), callback);
+                }
+            });
+        }
+    }
+
+    /**
      * 閫嗗彉鍣ㄦ竻绌轰綇瀹卛d
      *
      * @param data     uni鏁版嵁
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
index 3bf3d37..de54baa 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
@@ -27,7 +27,6 @@
 import com.hdl.photovoltaic.R;
 import com.hdl.photovoltaic.base.CustomBaseActivity;
 import com.hdl.photovoltaic.config.UserConfigManage;
-import com.hdl.photovoltaic.other.HdlFileLogic;
 import com.hdl.photovoltaic.other.HdlResidenceLogic;
 import com.hdl.photovoltaic.ui.account.ChangePassword;
 import com.hdl.photovoltaic.ui.account.RegisterAccountActivity;
@@ -41,7 +40,6 @@
 import com.hdl.photovoltaic.widget.ConfirmationCancelDialog1;
 
 import java.util.List;
-import java.util.Locale;
 
 /**
  * 鐧诲綍鐨勭晫闈�
@@ -53,6 +51,7 @@
     @Override
     public Object getContentView() {
 
+
         viewBinding = ActivityHomeLoginBinding.inflate(getLayoutInflater());
         return viewBinding.getRoot();
     }
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java
index 7e204c2..bc6dd9c 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java
@@ -4,6 +4,7 @@
 import androidx.appcompat.content.res.AppCompatResources;
 
 import android.Manifest;
+import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.os.Process;
@@ -18,6 +19,8 @@
 import com.hdl.photovoltaic.bean.MqttInfo;
 import com.hdl.photovoltaic.config.UserConfigManage;
 import com.hdl.photovoltaic.databinding.ActivityMyPowerStationBinding;
+import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpServer;
+import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpService;
 import com.hdl.photovoltaic.listener.CloudCallBeak;
 import com.hdl.photovoltaic.other.HdlDeviceLogic;
 import com.hdl.photovoltaic.other.HdlLogLogic;
@@ -64,7 +67,6 @@
 
     @Override
     public void onBindView(Bundle savedInstanceState) {
-
         //鍒濆鍖�
         initView();
         //鍒濆鍖栫晫闈㈢洃鍚櫒
@@ -75,6 +77,13 @@
         initMqttClient();
 
 
+        //瀹炰緥鍖� 鑾峰彇ip 鍦板潃
+        MyNanoHttpServer.getInstance(AppManagerUtils.getAppManager().getIPAddress(this));
+//        MyNanoHttpServer.getInstance("127.0.0.1");
+        Intent intent = new Intent();
+        intent.setClass(this, MyNanoHttpService.class);
+        //鍚姩鏈嶅姟鐩戝惉
+        startService(intent);
     }
 
     private void initEvent() {
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/StartActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/StartActivity.java
index 9236664..f85c6af 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/StartActivity.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/StartActivity.java
@@ -8,6 +8,7 @@
 import com.hdl.photovoltaic.R;
 import com.hdl.photovoltaic.base.CustomBaseActivity;
 import com.hdl.photovoltaic.config.UserConfigManage;
+import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpService;
 import com.hdl.photovoltaic.listener.CloudCallBeak;
 import com.hdl.photovoltaic.other.HdlResidenceLogic;
 import com.hdl.photovoltaic.ui.bean.HouseIdBean;
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java b/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java
index 5f7071b..e24ddaf 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/powerstation/HouseListFragment.java
@@ -110,6 +110,9 @@
                 HdlResidenceLogic.getInstance().switchHouse(houseIdBean);
                 String path = HDLUniMP.UNI_EVENT_OPEN_HOME_DETAILS + "?homeId=" + houseIdBean.getHomeId() + "&homeName=" + houseIdBean.getHomeName();
                 HdlUniLogic.getInstance().openUniMP(path, null);
+                HdlLogLogic.print("鐐瑰嚮浣忓畢璇︽儏===1", true);
+                HdlLogLogic.print("鐐瑰嚮浣忓畢璇︽儏===2", true);
+                HdlLogLogic.print("鐐瑰嚮浣忓畢璇︽儏===3", true);
 
             }
         });
diff --git a/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java b/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java
index 1157256..5f5fb54 100644
--- a/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java
+++ b/app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java
@@ -41,11 +41,15 @@
     /*********OTA妯″潡*********/
     public final static String UNI_EVENT_REPLY_OTA_MODEL = "uni_ota_model";//鍗囩骇妯″潡(澶х被)
     public final static String UNI_EVENT_REPLY_OTA_CLOUD_OID_LIST = "cloud_oid_list";//鍚戜簯绔幏鍙杘id鍒楄〃
-    public final static String UNI_EVENT_REPLY_OTA_FIRMWARES_LIST = "firmwares_list";//褰撳墠璁惧鍥轰欢鍒楄〃
+    public final static String UNI_EVENT_REPLY_OTA_FIRMWARES_LIST = "firmwares_current_list";//褰撳墠璁惧鍥轰欢鍒楄〃
     public final static String UNI_EVENT_REPLY_OTA_FIRMWARES_NEW_LIST = "firmwares_new_list";//璁惧鏂板浐浠跺垪琛�
+    public final static String UNI_EVENT_REPLY_OTA_FIRMWARES_LOCAL = "firmwares_local_list";//璁惧鏈湴鍥轰欢鍒楄〃
+    public final static String UNI_EVENT_REPLY_OTA_FIRMWARES_DOWNLOAD = "firmwares_download";//璁惧鍥轰欢涓嬭浇
     public final static String UNI_EVENT_REPLY_OTA_FIRMWARES_UPGRADE = "firmwares_upgrade";//璁惧鍥轰欢鍗囩骇
-    public final static String UNI_EVENT_REPLY_OTA_DRIVER_LIST = "driver_list";//褰撳墠璁惧椹卞姩鍒楄〃
-    public final static String UNI_EVENT_REPLY_OTA_DRIVER_NEW = "driver_new";//璁惧鏂伴┍鍔ㄥ垪琛�
+    public final static String UNI_EVENT_REPLY_OTA_DRIVER_LIST = "driver_current_list";//褰撳墠璁惧椹卞姩鍒楄〃
+    public final static String UNI_EVENT_REPLY_OTA_DRIVER_NEW = "driver_new_list";//璁惧鏂伴┍鍔ㄥ垪琛�
+    public final static String UNI_EVENT_REPLY_OTA_DRIVER_LOCAL = "driver_local_list";//璁惧鏈湴椹卞姩鍒楄〃
+    public final static String UNI_EVENT_REPLY_OTA_DRIVER_DOWNLOAD = "driver_download";//璁惧椹卞姩涓嬭浇
     public final static String UNI_EVENT_REPLY_OTA_DRIVER_UPGRADE = "driver_upgrade";//璁惧椹卞姩鍗囩骇
 
 
diff --git a/app/src/main/java/com/hdl/photovoltaic/utils/AppManagerUtils.java b/app/src/main/java/com/hdl/photovoltaic/utils/AppManagerUtils.java
index 5ba006c..b85206e 100644
--- a/app/src/main/java/com/hdl/photovoltaic/utils/AppManagerUtils.java
+++ b/app/src/main/java/com/hdl/photovoltaic/utils/AppManagerUtils.java
@@ -4,7 +4,18 @@
 import android.content.Context;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
 
+import com.hdl.photovoltaic.HDLApp;
+
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.Stack;
 
@@ -166,5 +177,55 @@
 //        }
 //    }
 
+    /**
+     * 鑾峰緱IP鍦板潃锛屽垎涓轰袱绉嶆儏鍐�:
+     * 涓�锛氭槸wifi涓嬶紱
+     * 浜岋細鏄Щ鍔ㄧ綉缁滀笅锛�
+     */
+    public String getIPAddress(Context context) {
+        NetworkInfo info = ((ConnectivityManager) context
+                .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
+        if (info != null && info.isConnected()) {
+            if (info.getType() == ConnectivityManager.TYPE_MOBILE) {//褰撳墠浣跨敤2G/3G/4G缃戠粶
+                try {
+                    //Enumeration<NetworkInterface> en=NetworkInterface.getNetworkInterfaces();
+                    for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
+                        NetworkInterface intf = en.nextElement();
+                        for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
+                            InetAddress inetAddress = enumIpAddr.nextElement();
+                            if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
+                                return inetAddress.getHostAddress();
+                            }
+                        }
+                    }
+                } catch (SocketException e) {
+                    e.printStackTrace();
+                }
+            } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {//褰撳墠浣跨敤鏃犵嚎缃戠粶
+                WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
+                //璋冪敤鏂规硶灏唅nt杞崲涓哄湴鍧�瀛楃涓�
+                String ipAddress = intIP2StringIP(wifiInfo.getIpAddress());//寰楀埌IPV4鍦板潃
+                return ipAddress;
+            }
+        } else {
+            //褰撳墠鏃犵綉缁滆繛鎺�,璇峰湪璁剧疆涓墦寮�缃戠粶
+        }
+        return null;
+    }
+
+    /**
+     * 灏嗗緱鍒扮殑int绫诲瀷鐨処P杞崲涓篠tring绫诲瀷
+     *
+     * @param ip int绫诲瀷
+     * @return -
+     */
+    public static String intIP2StringIP(int ip) {
+        return (ip & 0xFF) + "." +
+                ((ip >> 8) & 0xFF) + "." +
+                ((ip >> 16) & 0xFF) + "." +
+                (ip >> 24 & 0xFF);
+    }
+
 
 }

--
Gitblit v1.8.0