| | |
| | | package com.hdl.photovoltaic.other; |
| | | |
| | | |
| | | import android.Manifest; |
| | | import android.content.ComponentName; |
| | | import android.content.Context; |
| | | import android.content.Intent; |
| | | import android.content.ServiceConnection; |
| | | import android.content.pm.PackageManager; |
| | | import android.location.Location; |
| | | import android.location.LocationListener; |
| | | import android.location.LocationManager; |
| | | import android.os.IBinder; |
| | | import android.provider.Settings; |
| | | import android.text.TextUtils; |
| | | import android.util.Log; |
| | | |
| | | import androidx.annotation.NonNull; |
| | | import androidx.core.app.ActivityCompat; |
| | | |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.JsonObject; |
| | | import com.hdl.linkpm.sdk.core.exception.HDLException; |
| | | import com.hdl.linkpm.sdk.device.bean.DeviceOidInfoBean; |
| | | 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.GatewayDriverBean; |
| | | import com.hdl.linkpm.sdk.utils.HDLMD5Utils; |
| | | import com.hdl.photovoltaic.HDLApp; |
| | | import com.hdl.photovoltaic.bean.BaseEventBus; |
| | | import com.hdl.photovoltaic.R; |
| | | import com.hdl.photovoltaic.bean.ModBusBean; |
| | | import com.hdl.photovoltaic.config.ConstantManage; |
| | | import com.hdl.photovoltaic.config.AppConfigManage; |
| | | import com.hdl.photovoltaic.config.UserConfigManage; |
| | | import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpServer; |
| | | 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.NetworkUtils; |
| | | import com.hdl.photovoltaic.utils.WifiUtils; |
| | | import com.hdl.photovoltaic.widget.ConfirmationCancelDialog; |
| | | import com.hdl.sdk.link.common.exception.HDLLinkCode; |
| | | import com.hdl.sdk.link.common.exception.HDLLinkException; |
| | | import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus; |
| | | import com.hdl.sdk.link.core.bean.gateway.GatewayBean; |
| | | import com.hdl.sdk.link.core.callback.GatewayCallBack; |
| | | import com.hdl.sdk.link.core.callback.ModbusCallBack; |
| | | import com.hdl.sdk.link.core.connect.HDLModBusConnect; |
| | | import com.hdl.sdk.link.core.utils.mqtt.MqttRecvClient; |
| | | import com.hdl.sdk.link.gateway.HDLLinkLocalGateway; |
| | | |
| | | import org.greenrobot.eventbus.EventBus; |
| | | 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; |
| | | import okhttp3.ResponseBody; |
| | | |
| | | /** |
| | | * uni小程序的逻辑 |
| | |
| | | return sHdlUniLogic; |
| | | } |
| | | |
| | | |
| | | //region ******【原生】和【小程序】通讯的3个方法名 onOtherUniMPEventReceive();openUniMP();sendUni();****** |
| | | |
| | | /** |
| | | * 原生接收到uni发来的数据 |
| | | * |
| | | * @param appId -uni小程序指定的appId |
| | | * @param event -uni小程序发来数据 |
| | | * @param topic -uni小程序发来主题(大类) |
| | | * @param data JSONObject com.alibaba.fastjson解析处理 |
| | | * @param callback callback.invoke(JSONObject) 用com.alibaba.fastjson |
| | | */ |
| | | @Override |
| | | public void onOtherUniMPEventReceive(String appId, String event, Object data, DCUniMPJSCallback callback) { |
| | | public void onOtherUniMPEventReceive(String appId, String topic, Object data, DCUniMPJSCallback callback) { |
| | | try { |
| | | if (!HDLUniMP.UNI_APP_ID.equals(appId)) { |
| | | return; |
| | | } |
| | | String type = getKeyValue("type", data); |
| | | if (HDLUniMP.UNI_EVENT_REPLY_HOME_MODEL.equals(event)) { |
| | | String type = getKeyValue("type", data);//小类 |
| | | if (HDLUniMP.UNI_EVENT_REPLY_HOME_MODEL.equals(topic)) { |
| | | //住宅模块 |
| | | switch (type) { |
| | | //创建电站 |
| | | case HDLUniMP.UNI_EVENT_REPLY_HOME_CREATION: { |
| | | |
| | | //EventBus事件分发 |
| | | BaseEventBus baseEventBus = new BaseEventBus(); |
| | | baseEventBus.setTopic(HDLUniMP.UNI_EVENT_REPLY_HOME_MODEL); |
| | | baseEventBus.setType(HDLUniMP.UNI_EVENT_REPLY_HOME_CREATION); |
| | | baseEventBus.setData(getKeyValue("data", data)); |
| | | EventBus.getDefault().post(baseEventBus); |
| | |
| | | EventBus.getDefault().post(baseEventBus); |
| | | } |
| | | break; |
| | | //住宅【电站】编辑 |
| | | case HDLUniMP.UNI_EVENT_REPLY_HOME_EDIT: { |
| | | //EventBus事件分发 |
| | | BaseEventBus baseEventBus = new BaseEventBus(); |
| | | baseEventBus.setTopic(HDLUniMP.UNI_EVENT_REPLY_HOME_MODEL); |
| | | baseEventBus.setType(HDLUniMP.UNI_EVENT_REPLY_HOME_EDIT); |
| | | baseEventBus.setData(getKeyValue("data", data)); |
| | | EventBus.getDefault().post(baseEventBus); |
| | | } |
| | | break; |
| | | |
| | | } |
| | | if (callback != null) { |
| | | uniCallbackData(null, callback); |
| | | } |
| | | } else if (HDLUniMP.UNI_EVENT_REPLY_DEVICE_MODEL.equals(event)) { |
| | | } else if (HDLUniMP.UNI_EVENT_REPLY_DEVICE_MODEL.equals(topic)) { |
| | | //设备模块 |
| | | switch (type) { |
| | | //添加逆变器到云端 |
| | |
| | | break; |
| | | //获取逆变器列表 |
| | | case HDLUniMP.UNI_EVENT_REPLY_DEVICE_LIST: { |
| | | this.uniGetCurrentHomeLocalAndCloudGatewayList(callback); |
| | | this.uniGetCurrentHomeLocalAndCloudGatewayList(data, callback); |
| | | } |
| | | break; |
| | | //modBus协议专用 |
| | | case HDLUniMP.UNI_EVENT_REPLY_DEVICE_MODBUS_SEND: { |
| | | sendModBus(data, callback); |
| | | } |
| | |
| | | |
| | | } |
| | | |
| | | } else if (HDLUniMP.UNI_EVENT_REPLY_WIFI_MODEL.equals(event)) { |
| | | WifiUtils wifiUtils = new WifiUtils(HDLApp.getInstance()); |
| | | } else if (HDLUniMP.UNI_EVENT_REPLY_WIFI_MODEL.equals(topic)) { |
| | | WifiUtils wifiUtils = WifiUtils.getInstance(); |
| | | //wifi模块 |
| | | switch (type) { |
| | | //获取wifi列表 |
| | |
| | | break; |
| | | |
| | | } |
| | | } else if (HDLUniMP.UNI_EVENT_REPLY_OTA_MODEL.equals(topic)) { |
| | | //OTA升级模块 |
| | | switch (type) { |
| | | //向云端获取oid列表 |
| | | case HDLUniMP.UNI_EVENT_REPLY_OTA_CLOUD_OID_LIST: { |
| | | this.uniGetCloudOidList(data, callback); |
| | | } |
| | | break; |
| | | //当前设备固件列表 |
| | | case HDLUniMP.UNI_EVENT_REPLY_OTA_FIRMWARES_LIST: { |
| | | this.uniGetCurrentDeviceFirmwares(data, callback); |
| | | } |
| | | break; |
| | | //设备新固件列表 |
| | | case HDLUniMP.UNI_EVENT_REPLY_OTA_FIRMWARES_NEW_LIST: { |
| | | 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); |
| | | } |
| | | break; |
| | | //当前设备驱动列表 |
| | | case HDLUniMP.UNI_EVENT_REPLY_OTA_DRIVER_LIST: { |
| | | this.uniGetCurrentGatewayDrivers(data, callback); |
| | | } |
| | | break; |
| | | //设备新驱动列表 |
| | | 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; |
| | | //设备驱动升级 |
| | | case HDLUniMP.UNI_EVENT_REPLY_OTA_DRIVER_UPGRADE: { |
| | | this.uniUpgradeGatewayDriver(data, callback); |
| | | } |
| | | break; |
| | | //设备取消驱动,固件下载升级文件 |
| | | case HDLUniMP.UNI_EVENT_REPLY_OTA_DRIVER_CANCEL_DOWNLOAD: { |
| | | this.uniCancelDownloadingUpgradeFile(data, callback); |
| | | // HdlThreadLogic.runSubThread(new Runnable() { |
| | | // @Override |
| | | // public void run() { |
| | | // HdlLogLogic.print("当前线程名称取消下载====" + Thread.currentThread().getName()); |
| | | // uniCancelDownloadingUpgradeFile(data, callback); |
| | | // } |
| | | // }); |
| | | } |
| | | break; |
| | | //设备驱动,固件取消升级 |
| | | case HDLUniMP.UNI_EVENT_REPLY_OTA_CANCEL_UPGRADE: { |
| | | |
| | | this.uniCancelUpgrade(data, callback); |
| | | } |
| | | break; |
| | | //打开服务 |
| | | case HDLUniMP.UNI_EVENT_REPLY_OTA_OPEN_SERVICE: { |
| | | this.uniOpenService(data, callback); |
| | | } |
| | | break; |
| | | //关闭服务 |
| | | case HDLUniMP.UNI_EVENT_REPLY_OTA_CLOSE_SERVICE: { |
| | | this.uniCloseService(data, callback); |
| | | } |
| | | break; |
| | | |
| | | } |
| | | } else if (HDLUniMP.UNI_EVENT_REPLY_OTHER_MODEL.equals(topic)) { |
| | | //其它模块 |
| | | switch (type) { |
| | | //获取温度单位 |
| | | case HDLUniMP.UNI_EVENT_REPLY_OTHER_UNIT: { |
| | | uniCallbackData(UserConfigManage.getInstance().getTemperature_unit(), callback); |
| | | } |
| | | break; |
| | | //获取当前app语言 |
| | | case HDLUniMP.UNI_EVENT_REPLY_OTHER_APP_LANGUAGE: { |
| | | uniCallbackData(UserConfigManage.getInstance().getCurrentAppLanguage(), callback); |
| | | } |
| | | break; |
| | | //获取位置信息 |
| | | case HDLUniMP.UNI_EVENT_REPLY_OTHER_LOCATION_INFO: { |
| | | this.uniGetLocationInfo(data, callback); |
| | | } |
| | | } |
| | | } |
| | | HdlLogLogic.print("uni===原生接收uni发来的数据===" + event + "\r\n" + data, false); |
| | | HdlLogLogic.print("uni发来的数据--->大类--->" + topic + "\r\n" + data, true); |
| | | } catch (Exception e) { |
| | | HdlLogLogic.print("uni===原生接收uni发来的数据===" + e.getMessage(), false); |
| | | HdlLogLogic.print("uni发来的数据--->" + e.getMessage(), true); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 原生打开uni指定页面 |
| | | * 原生【打开】uni指定页面 |
| | | * |
| | | * @param path 打开路径 |
| | | * @param jsonObject 附件数据(没有数据填null) |
| | | */ |
| | | public void openUniMP(String path, JSONObject jsonObject) { |
| | | |
| | | JSONObject json = this.createdJsonDate(jsonObject, true); |
| | | HdlLogLogic.print("uni===组装uni发送数据格式===" + json, false); |
| | | JSONObject json = this.createdJSONObject(jsonObject, true); |
| | | HDLUniMPSDKManager.getInstance().openUniMP(HDLUniMP.UNI_APP_ID, path, json, HdlUniLogic.this); |
| | | HdlLogLogic.print("uni--->组装uni发送数据格式--->" + json, false); |
| | | } |
| | | |
| | | /** |
| | |
| | | * 注意:需要提前小程序在运行才可成功 |
| | | * |
| | | * @param topic 主题大类(如:UNI_EVENT_REPLY_HOME_MODEL) |
| | | * @param callBackBaseBean —— |
| | | * @param callBackBaseBean 自定义实体类 |
| | | */ |
| | | public void sendUni(String topic, HDLUniMP.UniCallBackBaseBean callBackBaseBean) { |
| | | try { |
| | | HDLUniMPSDKManager.getInstance().sendUniMPEvent(HDLUniMP.UNI_APP_ID, topic, getJSONObject(callBackBaseBean)); |
| | | } catch (Exception e) { |
| | | HdlLogLogic.print("uni===原生主动向小程序发送通知事件===" + e.getMessage(), false); |
| | | HdlLogLogic.print("uni--->原生主动向小程序发送通知事件--->" + e.getMessage(), false); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | //endregion |
| | | |
| | | //region ******uni逻辑方法****** |
| | | //region ******uni接口方法****** |
| | | |
| | | /** |
| | | * 获取位置信息,包括经纬度 |
| | | */ |
| | | private void uniGetLocationInfo(Object data, DCUniMPJSCallback callback) { |
| | | |
| | | // 初始化LocationManager对象 |
| | | LocationManager locationManager = (LocationManager) HDLApp.getInstance().getSystemService(Context.LOCATION_SERVICE); |
| | | JsonObject jsonObject = new JsonObject(); |
| | | //INTERNET 允许使用网络 |
| | | //ACCESS_FINE_LOCATION 允许使用GPS定位 |
| | | //ACCESS_COARSE_LOCATION 允许使用WIFI热点或基站来获取粗略的定位 |
| | | if (ActivityCompat.checkSelfPermission(HDLApp.getInstance(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(HDLApp.getInstance(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { |
| | | jsonObject.addProperty("result", -2);//没有位置信息权限 |
| | | jsonObject.addProperty("des", "没有位置信息权限"); |
| | | uniCallbackData(jsonObject.toString(), callback); |
| | | return; |
| | | } |
| | | |
| | | // 判断设备是否支持定位功能 |
| | | if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { |
| | | jsonObject.addProperty("result", -1);//没开启定位功能 |
| | | jsonObject.addProperty("des", "没开启定位功能"); |
| | | //提示用户打开定位功能或者引导用户去系统设置页面打开定位功能 |
| | | uniCallbackData(jsonObject.toString(), callback); |
| | | return; |
| | | } |
| | | Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); |
| | | if (location == null) { |
| | | jsonObject.addProperty("result", -3);//没有位置信息权限 |
| | | jsonObject.addProperty("des", "没开启定位功能"); |
| | | uniCallbackData(jsonObject.toString(), callback); |
| | | return; |
| | | } |
| | | jsonObject.addProperty("result", 0); |
| | | jsonObject.addProperty("des", "成功"); |
| | | jsonObject.addProperty("longitude", location.getLongitude());//经度 |
| | | jsonObject.addProperty("latitude", location.getLatitude());//纬度 |
| | | uniCallbackData(jsonObject.toString(), callback); |
| | | HdlLogLogic.print("经纬度--->经度:" + location.getLongitude() + "纬度:" + location.getLatitude(), true); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 向云端获取逆变器oid列表 |
| | | * 前提条件:要上传逆变器oid列表给云端 |
| | | * |
| | | * @param callback - |
| | | */ |
| | | private void uniGetCloudOidList(Object data, DCUniMPJSCallback callback) { |
| | | HdlOtaLogic.getInstance().getCloudOidList(new CloudCallBeak<List<DeviceOidInfoBean>>() { |
| | | @Override |
| | | public void onSuccess(List<DeviceOidInfoBean> obj) { |
| | | uniCallbackData(obj, callback); |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 向云端获取【当前设备固件】列表 |
| | | * 前提条件:设备自动上报oid信息给云端 |
| | | */ |
| | | private void uniGetCurrentDeviceFirmwares(Object data, DCUniMPJSCallback callback) { |
| | | String deviceOidId = getKeyValue("deviceOidId", getKeyValue("data", data));//云端上设备id |
| | | HdlOtaLogic.getInstance().getCurrentDeviceFirmwares(deviceOidId, new CloudCallBeak<List<DeviceFirmwareBean>>() { |
| | | @Override |
| | | public void onSuccess(List<DeviceFirmwareBean> obj) { |
| | | uniCallbackData(obj, callback); |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 向云端获取【设备新固件】列表 |
| | | * 前提条件:要通过平台软件上传新固件 |
| | | */ |
| | | private void uniGetNewDeviceFirmwares(Object data, DCUniMPJSCallback callback) { |
| | | String hardwareModel = getKeyValue("hardwareModel", getKeyValue("data", data));//硬件型号 |
| | | String osImageId = getKeyValue("osImageId", getKeyValue("data", data));//系统镜像id |
| | | HdlOtaLogic.getInstance().getNewDeviceFirmwares(hardwareModel, osImageId, new CloudCallBeak<List<CloudDeviceFirmwaresBean>>() { |
| | | @Override |
| | | public void onSuccess(List<CloudDeviceFirmwaresBean> obj) { |
| | | uniCallbackData(obj, callback); |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 获取【设备本地固件】列表 |
| | | */ |
| | | private void uniGetLocalFirmwares(Object data, DCUniMPJSCallback callback) { |
| | | try { |
| | | // String hardwareModel = getKeyValue("hardwareModel", getKeyValue("data", data));//硬件型号 |
| | | String osImageId = getKeyValue("osImageId", getKeyValue("data", data));//系统镜像id |
| | | // String firmwareVersionId = getKeyValue("firmwareVersionId", getKeyValue("data", data));//固件版本id |
| | | // String oid = getKeyValue("oid", getKeyValue("data", data));//固件oid |
| | | 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]; |
| | | if (!path.contains(osImageId)) { |
| | | continue; |
| | | } |
| | | String[] ary = path.split("/"); |
| | | String[] driverInfoAry = ary[ary.length - 1].split("_"); |
| | | DeviceFirmwareBean deviceFirmwareBean = new DeviceFirmwareBean(); |
| | | deviceFirmwareBean.setOid(driverInfoAry[0]); |
| | | deviceFirmwareBean.setImageId(driverInfoAry[1]); |
| | | deviceFirmwareBean.setVersion(driverInfoAry[2].replace(".zip", "")); |
| | | deviceFirmwareBean.setLocalUrl(HdlFileLogic.getInstance().getFirmwarePathFileName(deviceFirmwareBean.getOid(), osImageId, deviceFirmwareBean.getVersion())); |
| | | list.add(deviceFirmwareBean); |
| | | } |
| | | } |
| | | if (callback != null) { |
| | | this.uniCallbackData(list, callback); |
| | | } |
| | | } catch (Exception ignored) { |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 向云端发起【设备固件下载】指令 |
| | | */ |
| | | private void uniDeviceFirmwareDownload(Object data, DCUniMPJSCallback callback) { |
| | | // String deviceOidId = getKeyValue("deviceOidId", getKeyValue("data", data));//云端上设备id |
| | | String oid = getKeyValue("oid", getKeyValue("data", data));//该固件的oid |
| | | String imageId = getKeyValue("imageId", getKeyValue("data", data));//固件镜像id |
| | | String version = getKeyValue("version", getKeyValue("data", data));//固件版本 |
| | | String localUrl = getKeyValue("localUrl", getKeyValue("data", data));//储存在本地固件文件路径 |
| | | String url = getKeyValue("url", getKeyValue("data", data));//云端上文件地址 |
| | | String md5 = getKeyValue("md5", getKeyValue("data", data));//云端上文件MD5 |
| | | HdlOtaLogic.getInstance().getDeviceUpgradeDownloadFile(url, new CloudCallBeak<ResponseBody>() { |
| | | @Override |
| | | public void onSuccess(ResponseBody responseBody) { |
| | | HdlThreadLogic.runSubThread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | String firmwarePathFileName = HdlFileLogic.getInstance().getFirmwarePathFileName(oid, imageId, version); |
| | | //不在子线程读流会卡死主线程 |
| | | boolean isBoolean = HdlOtaLogic.getInstance().disposeDownLoadFile(firmwarePathFileName, responseBody, md5, HdlOtaLogic.firmware_type); |
| | | if (isBoolean) { |
| | | HdlFileLogic.getInstance().deleteFile(localUrl);//下载成功,删除旧固件文件; |
| | | } else { |
| | | HdlFileLogic.getInstance().deleteFile(firmwarePathFileName);//下载失败,删除不完整固件文件; |
| | | } |
| | | |
| | | if (isBoolean) { |
| | | HdlLogLogic.print("写入新固件文件到内存成功.", true); |
| | | uniCallbackData(null, 0, "写入新驱动文件到内存成功", callback); |
| | | } else { |
| | | HdlLogLogic.print("下载固件升级文件失败.", true); |
| | | uniCallbackData(null, -2, "下载固件升级文件失败", callback); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | HdlLogLogic.print("下载固件文件到内存失败.", true); |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 向云端发起【设备固件】升级OTA指令 |
| | | */ |
| | | private void uniUpgradeDeviceFirmware(Object data, DCUniMPJSCallback callback) { |
| | | String homeId = UserConfigManage.getInstance().getHomeId(); |
| | | String deviceMac = getKeyValue("mac", getKeyValue("data", data));//逆变器设备mac(查找socket) |
| | | String deviceOidId = getKeyValue("deviceOidId", getKeyValue("data", data));//云端上设备id |
| | | String oid = getKeyValue("oid", getKeyValue("data", data));//升级固件的oid |
| | | String firmwareVersionId = getKeyValue("firmwareVersionId", getKeyValue("data", data));//固件版本id |
| | | String version = getKeyValue("version", getKeyValue("data", data));//固件版本 |
| | | // String hardwareModel = getKeyValue("hardwareModel", getKeyValue("data", data));//云端上文件MD5 |
| | | String imageId = getKeyValue("imageId", getKeyValue("data", data));//固件镜像id |
| | | String module = "FW#" + imageId;//模块信息(HW:硬件) |
| | | |
| | | //升级本地优先->云端升级 |
| | | HdlDeviceLogic.getInstance().isLocalConnect(deviceMac, new CloudCallBeak<Boolean>() { |
| | | @Override |
| | | public void onSuccess(Boolean b) { |
| | | if (b) { |
| | | HdlLogLogic.print("本地升级--->", true); |
| | | //本地 |
| | | //1,建立本地服务; |
| | | //2,告诉网关手机ip和端口; |
| | | //实例化 获取ip 地址 |
| | | HdlOtaLogic.getInstance().startLocalService(new ServiceConnection() { |
| | | @Override |
| | | public void onServiceConnected(ComponentName name, IBinder service) { |
| | | //本地升级固件文件路径 |
| | | String firmwarePathFileName = HdlFileLogic.getInstance().getFirmwarePathFileName(oid, imageId, version); |
| | | byte[] data = HdlFileLogic.getInstance().readFileByte(firmwarePathFileName); |
| | | if (data == null || data.length == 0) { |
| | | uniCallbackData(null, -2, "本地找不到升级固件文件,请下载好固件文件,再重新升级.", callback); |
| | | return; |
| | | } |
| | | String md5 = HDLMD5Utils.encodeMD5(data);//网关固件需要 |
| | | //升级固件文件地址 |
| | | String upgradeFileLocalPathUrl = "http://" + NetworkUtils.getIPAddress(HDLApp.getInstance()) + ":" + MyNanoHttpServer.HTTP_PORT + firmwarePathFileName; |
| | | //通知给网关升级固件文件地址等信息 |
| | | HdlOtaLogic.getInstance().pushUpgradePacketInfo(deviceMac, oid, module, version, data.length + "", upgradeFileLocalPathUrl, md5, new LinkCallBack<String>() { |
| | | @Override |
| | | public void onSuccess(String obj) { |
| | | HdlLogLogic.print("通知给网关升级固件文件地址成功.", true); |
| | | } |
| | | |
| | | @Override |
| | | public void onError(HDLLinkException e) { |
| | | HdlLogLogic.print("通知给网关升级固件文件地址失败,无法升级.", true); |
| | | uniCallbackData(null, -2, "通知给网关升级固件文件地址失败,无法升级,", callback); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | @Override |
| | | public void onServiceDisconnected(ComponentName name) { |
| | | uniCallbackData(null, -2, "本地服务有异常失败,无法升级,", callback); |
| | | } |
| | | }); |
| | | } else { |
| | | HdlLogLogic.print("在线升级--->", true); |
| | | //远程升级需要检测在逆变器有没有连接上云 |
| | | HdlDeviceLogic.getInstance().checkInverterConnectedCloud(homeId, deviceMac, new CloudCallBeak<CloudInverterDeviceBean>() { |
| | | @Override |
| | | public void onSuccess(CloudInverterDeviceBean cloudInverterDeviceBean) { |
| | | //1:连接中,2:故障,3:运行,4:离线,6:逆变器连不上云(自定义) |
| | | if (cloudInverterDeviceBean == null) { |
| | | uniCallbackData(null, 6, HDLApp.getInstance().getString(R.string.ota_binding_cloud_upgrade_fails), callback); |
| | | return; |
| | | } |
| | | if (cloudInverterDeviceBean.getDeviceStatus() != 3) { |
| | | uniCallbackData(null, cloudInverterDeviceBean.getDeviceStatus(), HDLApp.getInstance().getString(R.string.ota_not_cloud_upgrade_fails), 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 |
| | | public void onFailure(HDLException e) { |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | HdlLogLogic.print("在线升级--->", true); |
| | | //远程升级需要检测在逆变器有没有连接上云 |
| | | HdlDeviceLogic.getInstance().checkInverterConnectedCloud(homeId, deviceMac, new CloudCallBeak<CloudInverterDeviceBean>() { |
| | | @Override |
| | | public void onSuccess(CloudInverterDeviceBean cloudInverterDeviceBean) { |
| | | //1:连接中,2:故障,3:运行,4:离线,6:逆变器连不上云(自定义) |
| | | if (cloudInverterDeviceBean == null) { |
| | | uniCallbackData(null, 6, HDLApp.getInstance().getString(R.string.ota_binding_cloud_upgrade_fails), callback); |
| | | return; |
| | | } |
| | | if (cloudInverterDeviceBean.getDeviceStatus() != 3) { |
| | | uniCallbackData(null, cloudInverterDeviceBean.getDeviceStatus(), HDLApp.getInstance().getString(R.string.ota_not_cloud_upgrade_fails), 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 |
| | | public void onFailure(HDLException e) { |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 向云端获取【当前设备驱动】列表 |
| | | * 前提条件:设备自动上报oid信息给云端 |
| | | */ |
| | | private void uniGetCurrentGatewayDrivers(Object data, DCUniMPJSCallback callback) { |
| | | String deviceOid = getKeyValue("oid", getKeyValue("data", data)); |
| | | HdlOtaLogic.getInstance().getCurrentGatewayDrivers(deviceOid, new CloudCallBeak<List<GatewayDriverBean>>() { |
| | | @Override |
| | | public void onSuccess(List<GatewayDriverBean> obj) { |
| | | uniCallbackData(obj, callback); |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 向云端获取【设备新驱动】列表 |
| | | * 前提条件:要通过平台软件上传新驱动 |
| | | */ |
| | | private void uniGetNewGatewayDrivers(Object data, DCUniMPJSCallback callback) { |
| | | String driveCode = getKeyValue("driveCode", getKeyValue("data", data));//驱动编号或驱动名称 |
| | | String osImageId = getKeyValue("osImageId", getKeyValue("data", data));//驱动类型id |
| | | HdlOtaLogic.getInstance().getNewGatewayDrivers(driveCode, osImageId, new CloudCallBeak<CloudGatewayDriversBean>() { |
| | | @Override |
| | | public void onSuccess(CloudGatewayDriversBean obj) { |
| | | uniCallbackData(obj, callback); |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 获取【设备本地驱动】列表 |
| | | */ |
| | | private void uniGetLocalDrivers(Object data, DCUniMPJSCallback callback) { |
| | | 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 fileName = Objects.requireNonNull(file.list())[i]; |
| | | if (!fileName.contains(driveCode)) { |
| | | continue; |
| | | } |
| | | String[] driverInfoAry = fileName.split("_"); |
| | | GatewayDriverBean gatewayDriverBean = new GatewayDriverBean(); |
| | | gatewayDriverBean.setDriverCode(driverInfoAry[0]); |
| | | gatewayDriverBean.setVersion(driverInfoAry[1].replace(".zip", "")); |
| | | gatewayDriverBean.setLocalUrl(HdlFileLogic.getInstance().getDrivePathFileName(gatewayDriverBean.getDriverCode(), gatewayDriverBean.getVersion())); |
| | | 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 |
| | | String localUrl = getKeyValue("localUrl", getKeyValue("data", data));//储存在本地驱动文件路径 |
| | | String url = getKeyValue("url", getKeyValue("data", data));//云端上文件地址 |
| | | String md5 = getKeyValue("md5", getKeyValue("data", data));//云端上文件MD5 |
| | | HdlOtaLogic.getInstance().getDeviceUpgradeDownloadFile(url, new CloudCallBeak<ResponseBody>() { |
| | | @Override |
| | | public void onSuccess(ResponseBody responseBody) { |
| | | HdlThreadLogic.runSubThread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | |
| | | String drivePathFileName = HdlFileLogic.getInstance().getDrivePathFileName(driverCode, version); |
| | | //不在子线程读流会卡死主线程 |
| | | boolean isBoolean = HdlOtaLogic.getInstance().disposeDownLoadFile(drivePathFileName, responseBody, md5, HdlOtaLogic.driver_type); |
| | | if (isBoolean) { |
| | | HdlFileLogic.getInstance().deleteFile(localUrl);//下载成功,删除旧驱动文件; |
| | | } else { |
| | | HdlFileLogic.getInstance().deleteFile(drivePathFileName);//下载失败,删除不完整驱动文件; |
| | | } |
| | | if (isBoolean) { |
| | | HdlLogLogic.print("写入新驱动文件到内存成功.", true); |
| | | uniCallbackData(null, 0, "写入新驱动文件到内存成功", callback); |
| | | } else { |
| | | HdlLogLogic.print("下载驱动升级文件失败.", true); |
| | | uniCallbackData(null, -2, "下载驱动升级文件失败", callback); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | HdlLogLogic.print("下载驱动文件到内存失败.", true); |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 向云端发起【设备驱动】升级OTA指令 |
| | | */ |
| | | private void uniUpgradeGatewayDriver(Object data, DCUniMPJSCallback callback) { |
| | | |
| | | String homeId = UserConfigManage.getInstance().getHomeId(); |
| | | 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 version = getKeyValue("version", getKeyValue("data", data));//驱动版本号 |
| | | String driverCode = getKeyValue("driverCode", getKeyValue("data", data));//驱动编码 |
| | | String imageId = getKeyValue("imageId", getKeyValue("data", data));//固件镜像id |
| | | String module = driverCode + "#" + imageId; |
| | | //升级本地优先->云端升级 |
| | | HdlDeviceLogic.getInstance().isLocalConnect(deviceMac, new CloudCallBeak<Boolean>() { |
| | | @Override |
| | | public void onSuccess(Boolean b) { |
| | | if (b) { |
| | | HdlLogLogic.print("本地升级--->", true); |
| | | //本地 |
| | | //1,建立本地服务; |
| | | // 2,告诉网关手机ip和端口; |
| | | //实例化 获取ip 地址 |
| | | HdlOtaLogic.getInstance().startLocalService(new ServiceConnection() { |
| | | @Override |
| | | public void onServiceConnected(ComponentName name, IBinder service) { |
| | | //本地升级驱动文件路径 |
| | | String drivePathFileName = HdlFileLogic.getInstance().getDrivePathFileName(driverCode, version); |
| | | byte[] data = HdlFileLogic.getInstance().readFileByte(drivePathFileName); |
| | | if (data == null || data.length == 0) { |
| | | uniCallbackData(null, -2, "本地找不到升级驱动文件,请下载好驱动文件,再重新升级.", callback); |
| | | return; |
| | | } |
| | | String md5 = HDLMD5Utils.encodeMD5(data);//网关驱动需要 |
| | | //升级驱动文件地址 |
| | | String upgradeFileLocalPathUrl = "http://" + NetworkUtils.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("通知给网关升级驱动文件地址成功.", true); |
| | | } |
| | | |
| | | @Override |
| | | public void onError(HDLLinkException e) { |
| | | HdlLogLogic.print("通知给网关升级驱动文件地址失败,无法升级.", true); |
| | | uniCallbackData(null, -2, "通知给网关升级驱动文件地址失败,无法升级,", callback); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | @Override |
| | | public void onServiceDisconnected(ComponentName name) { |
| | | uniCallbackData(null, -2, "本地服务有异常失败,无法升级,", callback); |
| | | } |
| | | }); |
| | | } else { |
| | | HdlLogLogic.print("在线升级--->", true); |
| | | //远程升级需要【检测】在逆变器有没有连接上云 |
| | | HdlDeviceLogic.getInstance().checkInverterConnectedCloud(homeId, deviceMac, new CloudCallBeak<CloudInverterDeviceBean>() { |
| | | @Override |
| | | public void onSuccess(CloudInverterDeviceBean cloudInverterDeviceBean) { |
| | | //1:连接中,2:故障,3:运行,4:离线,6:逆变器连不上云(自定义) |
| | | if (cloudInverterDeviceBean == null) { |
| | | uniCallbackData(null, 6, HDLApp.getInstance().getString(R.string.ota_binding_cloud_upgrade_fails), callback); |
| | | return; |
| | | } |
| | | if (cloudInverterDeviceBean.getDeviceStatus() != 3) { |
| | | uniCallbackData(null, cloudInverterDeviceBean.getDeviceStatus(), HDLApp.getInstance().getString(R.string.ota_not_cloud_upgrade_fails), 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 |
| | | public void onFailure(HDLException e) { |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | HdlLogLogic.print("在线升级--->", true); |
| | | //远程升级需要【检测】在逆变器有没有连接上云 |
| | | HdlDeviceLogic.getInstance().checkInverterConnectedCloud(homeId, deviceMac, new CloudCallBeak<CloudInverterDeviceBean>() { |
| | | @Override |
| | | public void onSuccess(CloudInverterDeviceBean cloudInverterDeviceBean) { |
| | | //1:连接中,2:故障,3:运行,4:离线,6:逆变器连不上云(自定义) |
| | | if (cloudInverterDeviceBean == null) { |
| | | uniCallbackData(null, 6, HDLApp.getInstance().getString(R.string.ota_binding_cloud_upgrade_fails), callback); |
| | | return; |
| | | } |
| | | if (cloudInverterDeviceBean.getDeviceStatus() != 3) { |
| | | uniCallbackData(null, cloudInverterDeviceBean.getDeviceStatus(), HDLApp.getInstance().getString(R.string.ota_not_cloud_upgrade_fails), 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 |
| | | public void onFailure(HDLException e) { |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 取消下载【驱动,固件】升级文件 |
| | | */ |
| | | private void uniCancelDownloadingUpgradeFile(Object data, DCUniMPJSCallback callback) { |
| | | HdlOtaLogic.getInstance().stopDownloadUpgradeFile(); |
| | | uniCallbackData(null, 0, "取消下载成功.", callback); |
| | | } |
| | | |
| | | /** |
| | | * 取消【驱动,固件】升级 |
| | | */ |
| | | private void uniCancelUpgrade(Object data, DCUniMPJSCallback callback) { |
| | | HdlOtaLogic.getInstance().cancelUpgrade("", new LinkCallBack<Boolean>() { |
| | | @Override |
| | | public void onSuccess(Boolean obj) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onError(HDLLinkException e) { |
| | | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 开启服务 |
| | | */ |
| | | private void uniOpenService(Object data, DCUniMPJSCallback callback) { |
| | | HdlOtaLogic.getInstance().startLocalService(new ServiceConnection() { |
| | | @Override |
| | | public void onServiceConnected(ComponentName name, IBinder service) { |
| | | } |
| | | |
| | | @Override |
| | | public void onServiceDisconnected(ComponentName name) { |
| | | HdlOtaLogic.getInstance().mServiceStart = false; |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 关闭服务 |
| | | */ |
| | | private void uniCloseService(Object data, DCUniMPJSCallback callback) { |
| | | HdlOtaLogic.getInstance().unLocalService(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @param deviceStatus 逆变器连接云端状态值( 1:连接中,2:故障,3:运行,4:离线) |
| | | * @return 返回文本 |
| | | */ |
| | | public String getDeviceStatusString(int deviceStatus) { |
| | | switch (deviceStatus) { |
| | | case 1: { |
| | | return HDLApp.getInstance().getString(R.string.my_power_station_connecting); |
| | | } |
| | | case 2: { |
| | | return HDLApp.getInstance().getString(R.string.my_power_station_malfunction); |
| | | } |
| | | case 4: { |
| | | return HDLApp.getInstance().getString(R.string.my_power_station_off_line); |
| | | } |
| | | default: |
| | | return ""; |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 逆变器清空住宅id |
| | |
| | | */ |
| | | private void uniUploadDataToCloud(Object data, DCUniMPJSCallback callback) { |
| | | String mac = getKeyValue("mac", getKeyValue("data", data)); |
| | | HdlDeviceLogic.getInstance().uploadDataToCloud(mac, null); |
| | | HdlDeviceLogic.getInstance().uploadDataToCloud(UserConfigManage.getInstance().getHomeId(), mac, null); |
| | | } |
| | | |
| | | /** |
| | |
| | | String mac = getKeyValue("mac", getKeyValue("data", data)); |
| | | String date = getKeyValue("date", getKeyValue("data", data)); |
| | | String time = getKeyValue("time", getKeyValue("data", data)); |
| | | HdlDeviceLogic.getInstance().editGatewayTime(mac, date, time, new LinkCallBack<Boolean>() { |
| | | String timezone = getKeyValue("timezone", getKeyValue("data", data)); |
| | | HdlDeviceLogic.getInstance().editGatewayTime(mac, date, time, timezone, new LinkCallBack<Boolean>() { |
| | | @Override |
| | | public void onSuccess(Boolean obj) { |
| | | uniCallbackData(true, callback); |
| | |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | private void uniAddInverterDeviceToCloud(Object data, DCUniMPJSCallback callback) { |
| | | String mac = getKeyValue("mac", getKeyValue("data", data)); |
| | | HdlDeviceLogic.getInstance().setGatewayRemoteParam(mac, new LinkCallBack<Boolean>() { |
| | | String homeId = UserConfigManage.getInstance().getHomeId(); |
| | | HdlDeviceLogic.getInstance().setGatewayRemoteParam(homeId, mac, new LinkCallBack<Boolean>() { |
| | | @Override |
| | | public void onSuccess(Boolean obj) { |
| | | HdlDeviceLogic.getInstance().editGatewayParam(mac, new LinkCallBack<Boolean>() { |
| | |
| | | public void onSuccess(Boolean obj) { |
| | | GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getLocalGateway(mac); |
| | | if (gatewayBean == null) { |
| | | uniCallbackData(null, -100, "本地找不到网关", callback); |
| | | uniCallbackData(null, -100, HDLApp.getInstance().getString(R.string.The_gateway_cannot_be_found_locally), callback); |
| | | |
| | | return; |
| | | } |
| | | HdlDeviceLogic.getInstance().addInverterDeviceToCloud(mac, |
| | | gatewayBean.getGatewayType(), |
| | | gatewayBean.getSid(), |
| | | gatewayBean.getOid(), |
| | | gatewayBean.getDevice_name(), |
| | | new CloudCallBeak<Boolean>() { |
| | | @Override |
| | | public void onSuccess(Boolean obj) { |
| | | uniCallbackData(null, callback); |
| | | } |
| | | HdlDeviceLogic.getInstance().addInverterDeviceToCloud(homeId, mac, gatewayBean.getGatewayType(), gatewayBean.getSid(), gatewayBean.getOid(), gatewayBean.getDevice_name(), new CloudCallBeak<Boolean>() { |
| | | @Override |
| | | public void onSuccess(Boolean obj) { |
| | | uniCallbackData(null, callback); |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | uniCallbackData(null, e.getCode(), e.getMsg(), callback); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | @Override |
| | |
| | | */ |
| | | private void uniDelInverterDevice(Object data, DCUniMPJSCallback callback) { |
| | | String deviceId = getKeyValue("deviceId", getKeyValue("data", data)); |
| | | HdlDeviceLogic.getInstance().delInverterDevice(deviceId, new CloudCallBeak<Boolean>() { |
| | | String homeId = UserConfigManage.getInstance().getHomeId(); |
| | | HdlDeviceLogic.getInstance().delInverterDevice(homeId, deviceId, new CloudCallBeak<Boolean>() { |
| | | @Override |
| | | public void onSuccess(Boolean obj) { |
| | | uniCallbackData(null, callback); |
| | |
| | | * @param callback uni回调 |
| | | */ |
| | | private void uniSearchGateway(DCUniMPJSCallback callback) { |
| | | HdlDeviceLogic.getInstance().searchGateway(new GatewayCallBack() { |
| | | HdlDeviceLogic.getInstance().searchCurrentHomeGateway(new GatewayCallBack() { |
| | | @Override |
| | | public void onSuccess(List<GatewayBean> gatewayBeanList) { |
| | | uniCallbackData(gatewayBeanList, callback); |
| | |
| | | * |
| | | * @param callback uni回调 |
| | | */ |
| | | private void uniGetCurrentHomeLocalAndCloudGatewayList(DCUniMPJSCallback callback) { |
| | | HdlDeviceLogic.getInstance().getCurrentHomeLocalAndCloudGatewayList(new CloudCallBeak<List<GatewayBean>>() { |
| | | private void uniGetCurrentHomeLocalAndCloudGatewayList(Object data, DCUniMPJSCallback callback) { |
| | | String homeId = getKeyValue("homeId", getKeyValue("data", data)); |
| | | HdlDeviceLogic.getInstance().getCurrentHomeLocalAndCloudGatewayList(homeId, new CloudCallBeak<List<GatewayBean>>() { |
| | | @Override |
| | | public void onSuccess(List<GatewayBean> list) { |
| | | GatewayBean gatewayBean = HdlDeviceLogic.getInstance().queryCurrentHomeMainGateway(list, homeId); |
| | | if (gatewayBean != null) { |
| | | //进来住宅详情都要上传一次oid列表到云端; |
| | | HdlDeviceLogic.getInstance().uploadDataToCloud(homeId, gatewayBean.getDevice_mac(), null); |
| | | } |
| | | //EventBus事件分发,进入住宅开始订阅主题 |
| | | BaseEventBus baseEventBus = new BaseEventBus(); |
| | | baseEventBus.setType(HDLUniMP.UNI_EVENT_REPLY_DEVICE_LIST); |
| | | baseEventBus.setData(list); |
| | | |
| | | EventBus.getDefault().post(baseEventBus); |
| | | if (callback != null) { |
| | | uniCallbackData(list, callback); |
| | | //EventBus事件分发 |
| | | BaseEventBus baseEventBus = new BaseEventBus(); |
| | | baseEventBus.setType(HDLUniMP.UNI_EVENT_REPLY_DEVICE_LIST); |
| | | baseEventBus.setData(list); |
| | | EventBus.getDefault().post(baseEventBus); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | /** |
| | | * 发送modbus协议数据 |
| | | * 透传协议 |
| | | * 下发主题:/user/${gw_id}/custom/native/${driver}/down; |
| | | * 逆变器回复主题:/user/${gw_id}/custom/native/${driver}/down_reply; |
| | | * Modbus ECU协议:事件ID(2个byte)->协议[固定:0,0](2个byte)->长度(2byte)->标识符[oid的addresses值](4个byte)->功能码(1个byte)->负载数据(N个byte); |
| | | * 长度(2个byte)=标识符(4个byte)+功能码(1个byte)+负载数据(N个byte); |
| | | * 负载数据=寄存器地址(2个byte)+寄存器长度(2个byte)+内容长度(1个byte)+内容数据(N个byte)【注意:单个写入寄存器-->去掉<寄存器长度>和<内容长度>】; |
| | | * 寄存器长度=(内容数据/2); |
| | | * 例子:new byte[]{00,01,00,00,00,0x09,00,00,00,01,03,00,00,00,01}; |
| | | * |
| | | * @param data modbus数据 |
| | | * @param callback 回调 |
| | | */ |
| | | void sendModBus(Object data, DCUniMPJSCallback callback) { |
| | | private void sendModBus(Object data, DCUniMPJSCallback callback) { |
| | | String tempData = getKeyValue("data", data); |
| | | if (TextUtils.isEmpty(tempData)) { |
| | | HdlLogLogic.print("data内容为空", false); |
| | | HdlLogLogic.print("data内容为空--->", false); |
| | | return; |
| | | } |
| | | ModBusBean modBusBean = new Gson().fromJson(tempData, ModBusBean.class); |
| | |
| | | // modBusBean.setOid("0101050217BBC400"); |
| | | // } |
| | | if (modBusBean.getMac() == null || modBusBean.getData() == null) { |
| | | HdlLogLogic.print("内容为空===oid=" + modBusBean.getMac() + " data=" + Arrays.toString(modBusBean.getData()), false); |
| | | HdlLogLogic.print("内容为空--->oid--->" + modBusBean.getMac() + " data--->" + Arrays.toString(modBusBean.getData()), false); |
| | | return; |
| | | } |
| | | |
| | |
| | | /** |
| | | * 组装uni发送数据格式 |
| | | * |
| | | * @param data -附件数据(没有数据填null) |
| | | * @param data 附加数据(没有数据填null) |
| | | * @param isTokenAndRefreshToken (true=底层默认添加token和refreshToken;false=不加) |
| | | * @return JSONObject |
| | | * @return JSONObject uni方法名里面参数需要的JSONObject对象 |
| | | */ |
| | | private JSONObject createdJsonDate(JSONObject data, boolean isTokenAndRefreshToken) { |
| | | private JSONObject createdJSONObject(JSONObject data, boolean isTokenAndRefreshToken) { |
| | | HDLUniMP.UniCallBackBaseBean uniCallBackBaseBean = new HDLUniMP.UniCallBackBaseBean(); |
| | | try { |
| | | if (data == null) { |
| | | data = new JSONObject(); |
| | | } |
| | | if (isTokenAndRefreshToken) { |
| | | //小程序那里有自己的请求方法,需要这些数据 |
| | | data.put("token", UserConfigManage.getInstance().getToken()); |
| | | data.put("refreshToken", UserConfigManage.getInstance().getRefreshToken()); |
| | | data.put("serverAddress", AppConfigManage.getUserRegionUrl()); |
| | | data.put("appKey", AppConfigManage.getAppKey()); |
| | | data.put("appSecret", AppConfigManage.getAppSecret()); |
| | | } |
| | | uniCallBackBaseBean.setData(data); |
| | | return getJSONObject(uniCallBackBaseBean); |
| | | } catch (Exception e) { |
| | | HdlLogLogic.print("uni===组装uni发送数据格式===" + e.getMessage(), false); |
| | | HdlLogLogic.print("uni--->组装uni发送数据格式有异常--->" + e.getMessage(), false); |
| | | } |
| | | return new JSONObject(); |
| | | } |
| | |
| | | if (callback != null) { |
| | | callback.invoke(getJSONObject(uniCallBackBaseBean)); |
| | | // callback.invoke(uniCallBackBaseBean); |
| | | HdlLogLogic.print("uni--->组装uni发送数据格式--->" + new Gson().toJson(uniCallBackBaseBean), false); |
| | | |
| | | } |
| | | } catch (Exception e) { |
| | | HdlLogLogic.print("uni===组装uni发送数据格式===" + e.getMessage(), false); |
| | | HdlLogLogic.print("uni--->组装uni发送数据格式--->" + e.getMessage(), false); |
| | | } |
| | | |
| | | |
| | |
| | | * |
| | | * @return JSONObject |
| | | */ |
| | | private JSONObject getJSONObject(Object obj) { |
| | | public JSONObject getJSONObject(Object obj) { |
| | | try { |
| | | if (obj == null) { |
| | | return new JSONObject(); |
| | |
| | | * @param obj - |
| | | * @return value |
| | | */ |
| | | private String getKeyValue(String key, Object obj) { |
| | | public String getKeyValue(String key, Object obj) { |
| | | try { |
| | | JSONObject jsonObject = this.getJSONObject(obj); |
| | | if (jsonObject.has(key)) { |
| | |
| | | } catch (Exception e) { |
| | | return ""; |
| | | } |
| | | |
| | | } |
| | | //endregion |
| | | |