mac
2023-11-21 9f9e16bc9b4caecf741339a0699d784558fbc738
2023年11月21日19:15:18

备份代码
3个文件已添加
13个文件已修改
523 ■■■■ 已修改文件
app/src/main/java/com/hdl/photovoltaic/codes/CustomCloudCode.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/codes/CustomLocalCode.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/internet/HttpServer/MyNanoHttpServer.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/internet/HttpServer/MyNanoHttpService.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/internet/api/TopicApi.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlCommonLogic.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java 225 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values-en/strings.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values-zh/strings.xml 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/strings.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/codes/CustomCloudCode.java
New file
@@ -0,0 +1,4 @@
package com.hdl.photovoltaic.codes;
public class CustomCloudCode {
}
app/src/main/java/com/hdl/photovoltaic/codes/CustomLocalCode.java
New file
@@ -0,0 +1,4 @@
package com.hdl.photovoltaic.codes;
public class CustomLocalCode {
}
app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java
@@ -69,7 +69,7 @@
     * @param callBack 回调
     * @return -
     */
    private Disposable request(String api, String body, CloudCallBeak<String> callBack) {
    private Disposable requestPost(String api, String body, CloudCallBeak<String> callBack) {
        String requestUrl = HDLCloudUserApi.getRequestUrl(api);
@@ -111,7 +111,7 @@
     * @param callBack 回调
     * @return -
     */
    private Disposable requestFile(String api, File body, CloudCallBeak<String> callBack) {
    private Disposable requestFilePost(String api, File body, CloudCallBeak<String> callBack) {
        String requestUrl = HDLCloudUserApi.getRequestUrl(api);
@@ -153,7 +153,7 @@
     * @param callBack 回调
     */
    public Disposable requestHttp(String api, String body, CloudCallBeak<String> callBack) {
        return request(api, body, callBack);
        return requestPost(api, body, callBack);
    }
    /**
@@ -164,7 +164,7 @@
     * @param callBack 回调
     */
    public Disposable requestHttpFile(String api, File body, CloudCallBeak<String> callBack) {
        return requestFile(api, body, callBack);
        return requestFilePost(api, body, callBack);
    }
app/src/main/java/com/hdl/photovoltaic/internet/HttpServer/MyNanoHttpServer.java
@@ -20,7 +20,7 @@
public class MyNanoHttpServer extends NanoHTTPD {
    //声明服务端 端口
    private static final Integer HTTP_PORT = 49152;
    public static final Integer HTTP_PORT = 49152;
    public MyNanoHttpServer(String hostname, int port) {
        super(hostname, port);
@@ -66,10 +66,14 @@
                com.alibaba.fastjson.JSONObject jsonParam = JSON.parseObject(paramStr);
                Map<String, Object> result = new HashMap<>();
                //TODO 写你的业务逻辑.....
                String ss = HdlFileLogic.getInstance().readFile(HdlFileLogic.getInstance().getLogFilePath());
                //升级驱动文件路径
                String fileName = ((HTTPSession) session).getUri();
                String data = "";
                if (fileName.equals(HdlFileLogic.getInstance().getDriveRootPath())) {
                    data = HdlFileLogic.getInstance().readFile(fileName);
                }
                //响应客户端
                return newFixedLengthResponse(ss);
                return newFixedLengthResponse(data);
//                return newFixedLengthResponse("success");
            } catch (IOException e) {
                e.printStackTrace();
@@ -78,11 +82,15 @@
            }
            return newFixedLengthResponse("success");
        } else if (Method.GET == session.getMethod()) {
            Map<String, List<String>> parameters = session.getParameters();
            String ss = HdlFileLogic.getInstance().readFile(HdlFileLogic.getInstance().getLogFilePath());
            //升级驱动文件路径
            String fileName = ((HTTPSession) session).getUri();
            String data = "";
            if (fileName.contains(HdlFileLogic.getInstance().getDriveRootPath())) {
                data = HdlFileLogic.getInstance().readFile(fileName);
            }
            //响应客户端
            return newFixedLengthResponse(ss);
            return newFixedLengthResponse(data);
//            return newFixedLengthResponse("success");
        }
app/src/main/java/com/hdl/photovoltaic/internet/HttpServer/MyNanoHttpService.java
@@ -2,6 +2,7 @@
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import androidx.annotation.Nullable;
@@ -9,11 +10,7 @@
public class MyNanoHttpService extends Service {
    private MyNanoHttpServer myNanoHttpServer = MyNanoHttpServer.getInstance(null);
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    private final IBinder mBinder = new LocalBinder();
    @Override
    public void onCreate() {
@@ -38,4 +35,17 @@
        super.onDestroy();
        myNanoHttpServer.stop();
    }
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
    public class LocalBinder extends Binder {
        public MyNanoHttpService getService() {
            // Return this instance of LocalService so clients can call public methods
            return MyNanoHttpService.this;
        }
    }
}
app/src/main/java/com/hdl/photovoltaic/internet/api/TopicApi.java
@@ -43,6 +43,9 @@
    public static final String GET_GATEWAY_TIME = "/user/%s/custom/gateway/time/get";
    //网关时间修改
    public static final String SET_GATEWAY_TIME_EDIT = "/user/%s/custom/gateway/time/edit";
    //本地升级包推送(告诉网关下载升级包地址等信息)
    public static final String SET_GATEWAY_UPGRADE_INFO = "/base/%s/ota/device/upgrade/down";
    /*
     * 网关编辑命令
     * 与服务器无关的
app/src/main/java/com/hdl/photovoltaic/other/HdlCommonLogic.java
New file
@@ -0,0 +1,26 @@
package com.hdl.photovoltaic.other;
/**
 * 公共逻辑
 */
public class HdlCommonLogic {
    private static volatile HdlCommonLogic sHdlCommonLogic;
    /**
     * 获取当前对象
     *
     * @return HdlCommonLogic
     */
    public static synchronized HdlCommonLogic getInstance() {
        if (sHdlCommonLogic == null) {
            synchronized (HdlCommonLogic.class) {
                if (sHdlCommonLogic == null) {
                    sHdlCommonLogic = new HdlCommonLogic();
                }
            }
        }
        return sHdlCommonLogic;
    }
}
app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
@@ -835,6 +835,39 @@
        return gatewayBean == null;
    }
    /**
     * 检测逆变器有没有连接上云
     *
     * @param deviceMac 设备mac
     */
    public void checkInverterConnectedCloud(String deviceMac, CloudCallBeak<CloudInverterDeviceBean> cloudCallBeak) {
        this.getCloudInverterDeviceList(UserConfigManage.getInstance().getHomeId(), new CloudCallBeak<List<CloudInverterDeviceBean>>() {
            @Override
            public void onSuccess(List<CloudInverterDeviceBean> list) {
                CloudInverterDeviceBean cloudInverterDeviceBean = null;
                if (list != null && list.size() > 0) {
                    for (int i = 0; i < list.size(); i++) {
                        if (list.get(i).getOsn().equals(deviceMac)) {
                            cloudInverterDeviceBean = list.get(i);
                            break;
                        }
                    }
                }
                if (cloudCallBeak != null) {
                    cloudCallBeak.onSuccess(cloudInverterDeviceBean);
                }
            }
            @Override
            public void onFailure(HDLException e) {
                if (cloudCallBeak != null) {
                    cloudCallBeak.onFailure(e);
                }
            }
        });
    }
    /**
     * 刷新逆变器缓存信息(包括设置mqtt秘钥)
app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java
@@ -107,6 +107,18 @@
        return getAPPInternalStoreFilesPath() + "/userConfigManage.txt";
    }
    /**
     * 获取驱动升级文件全路径
     *
     * @param driverCode 驱动编码
     * @param version    驱动版本
     * @return 全路径
     */
    public String getDrivePathFileName(String driverCode, String version) {
        String driverFileName = driverCode + "_" + version  + ".zip";
        return HdlFileLogic.getInstance().getDriveRootPath() + "/" + driverFileName;
    }
    //endregion
    //region    ---------【文件夹】操作-----------
app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java
@@ -1,5 +1,10 @@
package com.hdl.photovoltaic.other;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.text.TextUtils;
@@ -13,10 +18,19 @@
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.config.UserConfigManage;
import com.hdl.photovoltaic.internet.HttpClient;
import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpServer;
import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpService;
import com.hdl.photovoltaic.internet.TcpClient;
import com.hdl.photovoltaic.internet.api.HttpApi;
import com.hdl.photovoltaic.internet.api.TopicApi;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.listener.LinkCallBack;
import com.hdl.photovoltaic.utils.AppManagerUtils;
import com.hdl.sdk.link.common.exception.HDLLinkException;
import com.hdl.sdk.link.core.callback.HDLLinkCallBack;
import java.lang.reflect.Type;
import java.util.ArrayList;
@@ -45,6 +59,23 @@
        }
        return sHdlOtaLogic;
    }
    /**
     * Intent专门启动本地服务
     *
     * @return Intent
     */
    public Intent getIntent() {
        return intentServer;
    }
    public void setIntent(Intent intent) {
        this.intentServer = intent;
    }
    private Intent intentServer = null;
    private ServiceConnection mServiceConnection = null;
    //region -----固件升级---------
@@ -381,47 +412,27 @@
     *
     * @param driverVersionId 驱动版本Id
     */
    public void getDeviceDriverDownloadUrl(String driverVersionId, CloudCallBeak<String> callBack) {
//        "driverCode":"029B9988",
//                "driverName":"核心层",
//                "imageId":"12345678",
//                "version":"V01.02.20"
    public void getDeviceDriverDownloadUrl(String driverVersionId, CloudCallBeak<DownloadUrlBean> callBack) {
        String requestUrl = HttpApi.POST_OTA_GET_LinkDeviceDriverDownloadUrl;
        JsonObject json = new JsonObject();
        json.addProperty("driverVersionId", driverVersionId);
        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
            @Override
            public void onSuccess(String json) {
                if (TextUtils.isEmpty(json)) {
            public void onSuccess(String s) {
                if (TextUtils.isEmpty(s)) {
                    if (callBack != null) {
                        callBack.onSuccess("-2");
                        callBack.onSuccess(new DownloadUrlBean());
                    }
                    return;
                }
                Gson gson = new Gson();
                Type typeOfT = new TypeToken<DownloadUrlBean>() {
                }.getType();
                DownloadUrlBean downloadUrlBean = gson.fromJson(json, typeOfT);
                if (downloadUrlBean == null) {
                    if (callBack != null) {
                        callBack.onSuccess("-2");
                    }
                    return;
                DownloadUrlBean downloadUrlBean = gson.fromJson(s, typeOfT);
                if (callBack != null) {
                    callBack.onSuccess(downloadUrlBean);
                }
                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
@@ -446,4 +457,72 @@
    //endregion
    /**
     * 本地升级包推送(告诉网关下载升级包地址等信息)
     *
     * @param mac          物理设备mac
     * @param oid          物理设备oid
     * @param module       模块信息
     * @param version      版本号
     * @param size         升级包大小
     * @param url          升级包下载地址(存储在本地)
     * @param sign_method  md5加密字符串
     * @param linkCallBack -
     */
    public void pushUpgradePacketInfo(String mac, String oid, String module, String version, String size, String url, String sign_method, LinkCallBack<String> linkCallBack) {
        String requestUrl = TopicApi.SET_GATEWAY_UPGRADE_INFO;
        JsonObject json = new JsonObject();
        json.addProperty("oid", oid);// 物理设备oid
        json.addProperty("module", module);//模块信息
        json.addProperty("version", version);//版本号
//        json.addProperty("is_diff", is_diff);//true=增量包,false=全量包
        json.addProperty("size", size);//升级包大小
        json.addProperty("url", url);//升级包下载地址
        json.addProperty("sign_method", sign_method);//升级包签名类型:md5
        TcpClient.getInstance().sendDataToLinkGateway(mac, requestUrl, json, "", new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                if (linkCallBack != null) {
                    linkCallBack.onSuccess(msg);
                }
            }
            @Override
            public void onError(HDLLinkException e) {
                if (linkCallBack != null) {
                    linkCallBack.onError(e);
                }
            }
        });
    }
    /**
     * 启动本地服务
     */
    public void startLocalService(ServiceConnection serviceConnection) {
        //本地
        //1,建立本地服务;
        //2,告诉网关手机ip和端口;
        //实例化 获取ip 地址
        MyNanoHttpServer.getInstance(AppManagerUtils.getAppManager().getIPAddress(HDLApp.getInstance()));
        //MyNanoHttpServer.getInstance("127.0.0.1");
        intentServer = new Intent();
        intentServer.setClass(HDLApp.getInstance(), MyNanoHttpService.class);
        this.mServiceConnection = serviceConnection;
        //启动服务监听
        HDLApp.getInstance().bindService(intentServer, serviceConnection, Context.BIND_AUTO_CREATE);
    }
    /**
     * 关闭本地服务
     */
    public void unLocalService() {
        if (intentServer != null && this.mServiceConnection != null) {
            HDLApp.getInstance().unbindService(this.mServiceConnection);
        }
    }
}
app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
@@ -1,6 +1,11 @@
package com.hdl.photovoltaic.other;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.text.TextUtils;
import android.util.Log;
@@ -12,15 +17,21 @@
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.linkpm.sdk.utils.HDLMD5Utils;
import com.hdl.photovoltaic.HDLApp;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.bean.ModBusBean;
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpServer;
import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpService;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.listener.LinkCallBack;
import com.hdl.photovoltaic.ui.bean.CloudInverterDeviceBean;
import com.hdl.photovoltaic.ui.bean.DeviceTimeBean;
import com.hdl.photovoltaic.ui.bean.OidBean;
import com.hdl.photovoltaic.uni.HDLUniMP;
import com.hdl.photovoltaic.uni.HDLUniMPSDKManager;
import com.hdl.photovoltaic.utils.AppManagerUtils;
import com.hdl.photovoltaic.utils.WifiUtils;
import com.hdl.sdk.link.common.exception.HDLLinkCode;
import com.hdl.sdk.link.common.exception.HDLLinkException;
@@ -35,8 +46,11 @@
import org.json.JSONObject;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import io.dcloud.feature.unimp.DCUniMPJSCallback;
@@ -62,6 +76,7 @@
        }
        return sHdlUniLogic;
    }
    //region ******【原生】和【小程序】通讯的3个方法名 onOtherUniMPEventReceive();openUniMP();sendUni();******
@@ -279,7 +294,7 @@
     * 注意:需要提前小程序在运行才可成功
     *
     * @param topic            主题大类(如:UNI_EVENT_REPLY_HOME_MODEL)
     * @param callBackBaseBean ——
     * @param callBackBaseBean 自定义实体类
     */
    public void sendUni(String topic, HDLUniMP.UniCallBackBaseBean callBackBaseBean) {
        try {
@@ -362,9 +377,29 @@
     * 获取【设备本地固件】列表
     */
    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
        try {
            String hardwareModel = getKeyValue("hardwareModel", getKeyValue("data", data));//硬件型号
            String osImageId = getKeyValue("osImageId", getKeyValue("data", data));//系统镜像id
            String firmwareVersionId = getKeyValue("firmwareVersionId", getKeyValue("data", data));//系统镜像id
            List<DeviceFirmwareBean> list = new ArrayList<>();
            String driverFileList = HdlFileLogic.getInstance().getFirmwareRootPath();
            File file = new File(driverFileList);
            if (file.list() != null) {
                for (int i = 0; i < Objects.requireNonNull(file.list()).length; i++) {
                    String path = Objects.requireNonNull(file.list())[i];
                    String[] ary = path.split("/");
                    String[] driverInfoAry = ary[ary.length - 1].split("_");
                    DeviceFirmwareBean deviceFirmwareBean = new DeviceFirmwareBean();
                    deviceFirmwareBean.setVersion(driverInfoAry[0]);
                    deviceFirmwareBean.setImageId(driverInfoAry[1].replace(".zip", ""));
                    list.add(deviceFirmwareBean);
                }
            }
            if (callback != null) {
                this.uniCallbackData(list, callback);
            }
        } catch (Exception ignored) {
        }
    }
    /**
@@ -395,6 +430,8 @@
        String deviceOidId = getKeyValue("deviceOidId", getKeyValue("data", data));//设备id
        String firmwareVersionId = getKeyValue("firmwareVersionId", getKeyValue("data", data));//固件版本id
        //升级本地优先->云端升级
        boolean isLocalConnect = HdlDeviceLogic.getInstance().isLocalConnect(deviceMac);
        if (isLocalConnect) {
            //本地
@@ -402,11 +439,32 @@
            // 2,告诉网关手机ip和端口;
        } else {
            //云端
            HdlOtaLogic.getInstance().upgradeDeviceFirmware(deviceOidId, firmwareVersionId, new CloudCallBeak<Boolean>() {
            //远程升级需要检测在逆变器有没有连接上云
            HdlDeviceLogic.getInstance().checkInverterConnectedCloud(deviceMac, new CloudCallBeak<CloudInverterDeviceBean>() {
                @Override
                public void onSuccess(Boolean obj) {
                    uniCallbackData(obj, callback);
                public void onSuccess(CloudInverterDeviceBean cloudInverterDeviceBean) {
                    //1:待机,2:连接中,3:故障,4:运行,5:离线,6:逆变器连不上云(自定义)
                    if (cloudInverterDeviceBean == null) {
                        uniCallbackData(null, 6, HDLApp.getInstance().getString(R.string.ota_not_cloud_upgrade_fails), callback);
                        return;
                    }
                    if (cloudInverterDeviceBean.getDeviceStatus() != 4) {
                        uniCallbackData(null, cloudInverterDeviceBean.getDeviceStatus(), getDeviceStatusString(cloudInverterDeviceBean.getDeviceStatus()), callback);
                        return;
                    }
                    //4:运行
                    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);
                        }
                    });
                }
                @Override
@@ -414,7 +472,10 @@
                    uniCallbackData(null, e.getCode(), e.getMsg(), callback);
                }
            });
        }
    }
    /**
@@ -460,23 +521,64 @@
     * 获取【设备本地驱动】列表
     */
    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
        try {
            String driveCode = getKeyValue("driveCode", getKeyValue("data", data));//驱动编号或驱动名称
            String osImageId = getKeyValue("osImageId", getKeyValue("data", data));//驱动类型id
            String driverVersionId = getKeyValue("driverVersionId", getKeyValue("data", data));//驱动类型id
            List<GatewayDriverBean> list = new ArrayList<>();
            String driverFileList = HdlFileLogic.getInstance().getDriveRootPath();
            File file = new File(driverFileList);
            if (file.list() != null) {
                for (int i = 0; i < Objects.requireNonNull(file.list()).length; i++) {
                    String path = Objects.requireNonNull(file.list())[i];
                    String[] ary = path.split("/");
                    String[] driverInfoAry = ary[ary.length - 1].split("_");
                    GatewayDriverBean gatewayDriverBean = new GatewayDriverBean();
                    gatewayDriverBean.setDriverCode(driverInfoAry[0]);
                    gatewayDriverBean.setVersion(driverInfoAry[1].replace(".zip", ""));
                    list.add(gatewayDriverBean);
                }
            }
            if (callback != null) {
                this.uniCallbackData(list, callback);
            }
        } catch (Exception exception) {
            this.uniCallbackData(new ArrayList<>(), callback);
        }
    }
    /**
     * 向云端发起【设备驱动】下载指令
     */
    private void uniGatewayDriverDownload(Object data, DCUniMPJSCallback callback) {
        String deviceOid = getKeyValue("oid", getKeyValue("data", data));//网关设备oid
        String driverCode = getKeyValue("driverCode", getKeyValue("data", data));//驱动编码
        String imageId = getKeyValue("imageId", getKeyValue("data", data));//驱动镜像id
        String version = getKeyValue("version", getKeyValue("data", data));//驱动版本
        String driverVersionId = getKeyValue("driverVersionId", getKeyValue("data", data));//驱动版本id
        HdlOtaLogic.getInstance().upgradeGatewayDriver(deviceOid, driverVersionId, new CloudCallBeak<Boolean>() {
        HdlOtaLogic.getInstance().getDeviceDriverDownloadUrl(driverVersionId, new CloudCallBeak<DownloadUrlBean>() {
            @Override
            public void onSuccess(Boolean obj) {
                uniCallbackData(obj, callback);
            public void onSuccess(DownloadUrlBean downloadUrlBean) {
                if (downloadUrlBean == null) {
                    uniCallbackData(null, -2, "下载链接找不到", callback);
                    return;
                }
                HdlOtaLogic.getInstance().getDeviceDriverDownloadFile(downloadUrlBean.getDownloadUrl(), new CloudCallBeak<DownloadUrlBean>() {
                    @Override
                    public void onSuccess(DownloadUrlBean obj) {
                        Gson gson = new Gson();
                        String json = gson.toJson(obj);
                        String drivePathFileName = HdlFileLogic.getInstance().getDrivePathFileName(driverCode, version);
                        HdlFileLogic.getInstance().writeFile(drivePathFileName, json);
                    }
                    @Override
                    public void onFailure(HDLException e) {
                    }
                });
            }
            @Override
@@ -494,17 +596,72 @@
        String deviceMac = getKeyValue("mac", getKeyValue("data", data));//网关设备mac(查找socket)
        String deviceOid = getKeyValue("oid", getKeyValue("data", data));//网关设备oid
        String driverVersionId = getKeyValue("driverVersionId", getKeyValue("data", data));//驱动版本id
        String module = getKeyValue("module", getKeyValue("data", data));//模块信息
        String version = getKeyValue("version", getKeyValue("data", data));//驱动版本号
        String driverCode = getKeyValue("driverCode", getKeyValue("data", data));//驱动编码
        //升级本地优先->云端升级
        boolean isLocalConnect = HdlDeviceLogic.getInstance().isLocalConnect(deviceMac);
        if (isLocalConnect) {
            //本地
            //1,建立本地服务;
            // 2,告诉网关手机ip和端口;
        } else {
            HdlOtaLogic.getInstance().upgradeGatewayDriver(deviceOid, driverVersionId, new CloudCallBeak<Boolean>() {
            //实例化 获取ip 地址
            HdlOtaLogic.getInstance().startLocalService(new ServiceConnection() {
                @Override
                public void onSuccess(Boolean obj) {
                    uniCallbackData(obj, callback);
                public void onServiceConnected(ComponentName name, IBinder service) {
                    //本地升级驱动文件路径
                    String drivePathFileName = HdlFileLogic.getInstance().getDrivePathFileName(driverCode, version);
                    String data = HdlFileLogic.getInstance().readFile(drivePathFileName);
                    String md5 = HDLMD5Utils.encodeMD5(data);//网关驱动需要
                    //升级驱动文件地址
                    String upgradeFileLocalPathUrl = AppManagerUtils.getAppManager().getIPAddress(HDLApp.getInstance()) + ":" + MyNanoHttpServer.HTTP_PORT + drivePathFileName;
                    //通知给网关升级驱动文件地址等信息
                    HdlOtaLogic.getInstance().pushUpgradePacketInfo(deviceMac, deviceOid, module, version, data.length() + "", upgradeFileLocalPathUrl, md5, new LinkCallBack<String>() {
                        @Override
                        public void onSuccess(String obj) {
                            HdlLogLogic.print("通知给网关升级驱动文件地址成功.", false);
                        }
                        @Override
                        public void onError(HDLLinkException e) {
                            HdlLogLogic.print("通知给网关升级驱动文件地址失败,无法升级.", false);
                            uniCallbackData(null, -2, "通知给网关升级驱动文件地址失败,无法升级,", callback);
                        }
                    });
                }
                @Override
                public void onServiceDisconnected(ComponentName name) {
                    uniCallbackData(null, -2, "本地服务有异常失败,无法升级,", callback);
                }
            });
        } else {
            //远程升级需要检测在逆变器有没有连接上云
            HdlDeviceLogic.getInstance().checkInverterConnectedCloud(deviceMac, new CloudCallBeak<CloudInverterDeviceBean>() {
                @Override
                public void onSuccess(CloudInverterDeviceBean cloudInverterDeviceBean) {
                    //1:待机,2:连接中,3:故障,4:运行,5:离线,6:逆变器连不上云(自定义)
                    if (cloudInverterDeviceBean == null) {
                        uniCallbackData(null, 6, HDLApp.getInstance().getString(R.string.ota_not_cloud_upgrade_fails), callback);
                        return;
                    }
                    if (cloudInverterDeviceBean.getDeviceStatus() != 4) {
                        uniCallbackData(null, cloudInverterDeviceBean.getDeviceStatus(), getDeviceStatusString(cloudInverterDeviceBean.getDeviceStatus()), callback);
                        return;
                    }
                    //4:运行
                    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);
                        }
                    });
                }
                @Override
@@ -512,9 +669,35 @@
                    uniCallbackData(null, e.getCode(), e.getMsg(), callback);
                }
            });
        }
    }
    /**
     * @param deviceStatus 逆变器连接云端状态值( 1:待机,2:连接中,3:故障,4:运行,5:离线)
     * @return 返回文本
     */
    public String getDeviceStatusString(int deviceStatus) {
        switch (deviceStatus) {
            case 1: {
                return HDLApp.getInstance().getString(R.string.my_power_station_await);
            }
            case 2: {
                return HDLApp.getInstance().getString(R.string.my_power_station_connecting);
            }
            case 3: {
                return HDLApp.getInstance().getString(R.string.my_power_station_malfunction);
            }
            case 5: {
                return HDLApp.getInstance().getString(R.string.my_power_station_off_line);
            }
            default:
                return "";
        }
    }
    /**
     * 逆变器清空住宅id
     *
app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java
@@ -14,6 +14,7 @@
import com.google.gson.Gson;
import com.hdl.linkpm.sdk.core.exception.HDLException;
import com.hdl.linkpm.sdk.home.type.HomeType;
import com.hdl.photovoltaic.HDLApp;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.base.CustomBaseActivity;
import com.hdl.photovoltaic.bean.MqttInfo;
@@ -23,6 +24,7 @@
import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpService;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.other.HdlDeviceLogic;
import com.hdl.photovoltaic.other.HdlFileLogic;
import com.hdl.photovoltaic.other.HdlLogLogic;
import com.hdl.photovoltaic.other.HdlMqttLogic;
import com.hdl.photovoltaic.other.HdlThreadLogic;
@@ -76,14 +78,13 @@
        //初始化mqtt客户端
        initMqttClient();
        String path = HdlFileLogic.getInstance().getDriveRootPath() + "/036F6C1B.zip";
        MyNanoHttpServer.getInstance(AppManagerUtils.getAppManager().getIPAddress(HDLApp.getInstance()));
        //MyNanoHttpServer.getInstance("127.0.0.1");
        Intent intentServer = new Intent();
        intentServer.setClass(HDLApp.getInstance(), MyNanoHttpService.class);
        startService(intentServer);
        //实例化 获取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() {
app/src/main/java/com/hdl/photovoltaic/uni/HDLUniMP.java
@@ -45,12 +45,16 @@
    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_CANCEL_DOWNLOAD = "firmwares_cancel_download";//设备固件取消下载
    public final static String UNI_EVENT_REPLY_OTA_FIRMWARES_UPGRADE = "firmwares_upgrade";//设备固件升级
    public final static String UNI_EVENT_REPLY_OTA_FIRMWARES_CANCEL_UPGRADE = "firmwares_cancel_upgrade";//设备固件取消升级
    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_CANCEL_DOWNLOAD = "driver_cancel_download";//设备驱动取消下载
    public final static String UNI_EVENT_REPLY_OTA_DRIVER_UPGRADE = "driver_upgrade";//设备驱动升级
    public final static String UNI_EVENT_REPLY_OTA_DRIVER_CANCEL_UPGRADE = "driver_cancel_upgrade";//设备驱动取消升级
    /*********Wifi模块*********/ //卫锦定义
app/src/main/res/values-en/strings.xml
@@ -75,6 +75,7 @@
    <string name="my_power_station_off_line">离线</string>
    <string name="my_power_station_malfunction">故障</string>
    <string name="my_power_station_operation">运行</string>
    <string name="my_power_station_await">待机</string>
    <!--设备-->
    <string name="device_manual_connection">手动连接</string>
@@ -105,7 +106,8 @@
    <string name="set_privacy">隐私设置</string>
    <string name="set_nickname_modification">昵称修改</string>
    <!--ota-->
    <string name="ota_not_cloud_upgrade_fails">逆变器没上云,升级失败.</string>
    <!--uin-->
    <string name="uni_open_error">页面初始化中 请等待5秒再点击</string>
app/src/main/res/values-zh/strings.xml
@@ -75,6 +75,7 @@
    <string name="my_power_station_off_line">离线</string>
    <string name="my_power_station_malfunction">故障</string>
    <string name="my_power_station_operation">运行</string>
    <string name="my_power_station_await">待机</string>
    <!--设备-->
    <string name="device_manual_connection">手动连接</string>
@@ -105,7 +106,8 @@
    <string name="set_privacy">隐私设置</string>
    <string name="set_nickname_modification">昵称修改</string>
    <!--ota-->
    <string name="ota_not_cloud_upgrade_fails">逆变器没上云,升级失败.</string>
    <!--uin-->
    <string name="uni_open_error">页面初始化中 请等待5秒再点击</string>
app/src/main/res/values/strings.xml
@@ -75,6 +75,7 @@
    <string name="my_power_station_off_line">离线</string>
    <string name="my_power_station_malfunction">故障</string>
    <string name="my_power_station_operation">运行</string>
    <string name="my_power_station_await">待机</string>
    <!--设备-->
    <string name="device_manual_connection">手动连接</string>
@@ -105,6 +106,9 @@
    <string name="set_privacy">隐私设置</string>
    <string name="set_nickname_modification">昵称修改</string>
    <!--ota-->
    <string name="ota_not_cloud_upgrade_fails">逆变器没连上云,升级失败.</string>
    <!--uin-->
    <string name="uni_open_error">页面初始化中 请等待5秒再点击</string>