package com.hdl.sdk.link.gateway; import android.text.TextUtils; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import com.hdl.sdk.link.HDLLinkLocalSdk; import com.hdl.sdk.link.R; import com.hdl.sdk.link.common.config.TopicConstant; import com.hdl.sdk.link.common.event.EventDispatcher; import com.hdl.sdk.link.common.event.EventListener; import com.hdl.sdk.link.common.exception.HDLLinkCode; import com.hdl.sdk.link.common.exception.HDLLinkException; import com.hdl.sdk.link.common.utils.IdUtils; import com.hdl.sdk.link.common.utils.IpUtils; import com.hdl.sdk.link.common.utils.LogUtils; import com.hdl.sdk.link.common.utils.SPUtils; import com.hdl.sdk.link.common.utils.ThreadToolUtils; import com.hdl.sdk.link.common.utils.gson.GsonConvert; import com.hdl.sdk.link.core.bean.LinkRequest; import com.hdl.sdk.link.core.bean.LinkResponse; import com.hdl.sdk.link.core.bean.gateway.GatewayBean; import com.hdl.sdk.link.core.bean.response.BaseLocalResponse; import com.hdl.sdk.link.core.callback.GatewayCallBack; import com.hdl.sdk.link.core.callback.HDLLinkCallBack; import com.hdl.sdk.link.core.callback.HDLLinkTCallBack; import com.hdl.sdk.link.core.config.HDLLinkConfig; import com.hdl.sdk.link.core.connect.HDLConnectHelper; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; /** * Created by hxb on 2021/12/23. */ public class HDLLinkLocalGateway { //instance private volatile static HDLLinkLocalGateway instance; //getInstance public static synchronized HDLLinkLocalGateway getInstance() { if (instance == null) { synchronized (HDLLinkLocalGateway.class) { if (instance == null) { instance = new HDLLinkLocalGateway(); } } } return instance; } /** * 网关列表,记录所有搜索到的网关,可能包含断线的网关 */ private final List gatewayBeanList = new ArrayList(); /** * 获取缓存的网关列表,可能包含断线的网关 * * @return 网关列表 */ public List getGatewayList() { return gatewayBeanList; } /** * 通过oid或者网关ID或者AMC获取内存中的网关,注意,如果是远程通讯,gatewayBeanList要平台上绑定的主网关及从网关进去,要不获取不到网关信息 * * @param oidOrGatewayId * @return */ public GatewayBean getGatewayByOidOrGatewayId(String oidOrGatewayId) { if (TextUtils.isEmpty(oidOrGatewayId)) { return null; } for (GatewayBean gatewayBean : gatewayBeanList) { if (oidOrGatewayId.equals(gatewayBean.getOid()) || oidOrGatewayId.equals(gatewayBean.getGatewayId()) || oidOrGatewayId.equals(gatewayBean.getDevice_mac()) || oidOrGatewayId.equals(gatewayBean.getIp_address()) ) return gatewayBean; } return null; } /** * 通过IP获取网关信息 * * @param ipAddress * @return */ public GatewayBean getGatewayByIpAddress(String ipAddress) { if (TextUtils.isEmpty(ipAddress)) { return null; } for (GatewayBean gatewayBean : gatewayBeanList) { if (ipAddress.equals(gatewayBean.getIp_address())) return gatewayBean; } return null; } /** * 通过spk获取网关,这个也支持获取毫米波 * * @param spkList 集合 * @return 返回网关列表 */ public List getGatewayBySpk(List spkList) { if (spkList.size() == 0) { return this.getGatewayList(); } List gatewayBeanList = new ArrayList<>(); for (GatewayBean gatewayBean : this.getGatewayList()) { if (spkList.contains(gatewayBean.getGatewayType())) gatewayBeanList.add(gatewayBean); } return gatewayBeanList; } /** * 获取网关列表 去掉红外宝这种设备 * * @param spkList 集合 * @return 返回网关列表 */ public List getGatewayByGatewayType(List spkList) { if (spkList.size() == 0) { return this.getGatewayList(); } List gatewayBeanList = new ArrayList<>(); for (GatewayBean gatewayBean : this.getGatewayList()) { if (spkList.contains(gatewayBean.getGatewayType()) && !"MIR01R-LK.10".equals(gatewayBean.getDevice_model())) gatewayBeanList.add(gatewayBean); } return gatewayBeanList; } /** * 获取本地网关对象(包括毫米波) * * @param macAndSid 设备mac * @return 找到返回GatewayBean, 未找到返回null. */ public GatewayBean getLocalGateway(String macAndSid) { if (TextUtils.isEmpty(macAndSid)) { return null; } for (GatewayBean gatewayBean : this.getGatewayList()) { if (macAndSid.equals(gatewayBean.getDevice_mac()) || macAndSid.equals(gatewayBean.getSid())) { return gatewayBean; } } return null; } /** * 获取当前住宅的主网关; * * @param homeId 住宅id * @return 找到返回GatewayBean, 未找到返回null. */ public GatewayBean findMainGateway(String homeId) { for (GatewayBean gatewayBean : this.getGatewayList()) { if (gatewayBean.getMaster().equals("true") && gatewayBean.getHomeId().equals(homeId) && gatewayBean.getGatewayType().equals("AGATEWAY")) { return gatewayBean; } } return null; } /** * 搜索网关,只发一次,没有回调 */ public void serchGatewayOneTime() { String time = String.valueOf(System.currentTimeMillis()); JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("id", IdUtils.getUUId()); jsonObject.addProperty("time_stamp", time); LinkRequest message = new LinkRequest(TopicConstant.GATEWAY_SEARCH, jsonObject.toString(), false); String ipAddress = IpUtils.getBroadcastAddress(); new HDLConnectHelper(1, ipAddress, message, false).send(); } /** * 创新所有在线的网关,包括当前住宅的及没有绑定过的网关 * * @param callBack 回调 */ public void refreshGatewayByHome(String homeId, GatewayCallBack callBack) { refreshGatewayByHome(homeId, true, callBack); } /** * 根据住宅id获取网关 * * @param homeId 过滤的住宅id * @param needEmptyHomeIdGateway 网关的住宅id为空时,是否可以加入网关列表 * @param callBack 回调方法 */ public void refreshGatewayByHome(String homeId, boolean needEmptyHomeIdGateway, GatewayCallBack callBack) { refreshGatewayByHomeIdAndSpk(homeId, this.getGatewayTypeList(), needEmptyHomeIdGateway, callBack); } /** * 获取网络设备,包括网关及毫米波等网络设备 * * @param homeId 住宅Id * @param spk 网络设备spk * @param needEmptyHomeIdGateway 是否需要空住宅Id设备 * @param callBack 回调 */ public void refreshGatewayByHomeIdAndSpk(String homeId, List spk, boolean needEmptyHomeIdGateway, GatewayCallBack callBack) { String topicReply = TopicConstant.GATEWAY_SEARCH_REPLY; final List tempGatewayBeanList = new ArrayList<>(); EventListener eventListener = getSearchGatewayEvent(homeId, spk, needEmptyHomeIdGateway, tempGatewayBeanList); EventDispatcher.getInstance().register(topicReply, eventListener); ThreadToolUtils.getInstance().newFixedThreadPool(1).execute(new Runnable() { @Override public void run() { int count = 5; while (0 < count--) { try { //搜索网关 serchGatewayOneTime(); Thread.sleep(300L); } catch (InterruptedException e) { e.printStackTrace(); } } //超出次数后移除监听事件 EventDispatcher.getInstance().remove(topicReply, eventListener); if (callBack != null) { if (tempGatewayBeanList.size() == 0) { callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_GATEWAY_FAILURE_ERROR)); } else { callBack.onSuccess(tempGatewayBeanList); } } } }); } /** * 创新所有在线的网关,包括当前住宅的及没有绑定过的网关 * * @param callBack 回调 */ public void refreshGateway(GatewayCallBack callBack) { String topicReply = TopicConstant.GATEWAY_SEARCH_REPLY; final List tempGatewayBeanList = new ArrayList<>(); EventListener eventListener = getSearchGatewayEvent(this.getGatewayTypeList(), tempGatewayBeanList); EventDispatcher.getInstance().register(topicReply, eventListener); ThreadToolUtils.getInstance().newFixedThreadPool(1).execute(new Runnable() { @Override public void run() { int count = 5; while (0 < count--) { try { //搜索网关 serchGatewayOneTime(); Thread.sleep(300L); } catch (InterruptedException e) { e.printStackTrace(); } } //超出次数后移除监听事件 EventDispatcher.getInstance().remove(topicReply, eventListener); if (callBack != null) { if (tempGatewayBeanList.size() == 0) { callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_GATEWAY_FAILURE_ERROR)); } else { callBack.onSuccess(tempGatewayBeanList); } } } }); } // /** // * 获取搜索网关事件 // * // * @param homeId // * @return // */ // private EventListener getSearchGatewayEvent(String homeId, final List tempGatewayBeanList) { // return getSearchGatewayEvent(homeId,true,tempGatewayBeanList); // } // /** // * 获取搜索网关事件 // * // * @param homeId // * @return // */ // private EventListener getSearchGatewayEvent(String homeId, boolean needEmptyHomeIdGateway, final List tempGatewayBeanList) { // //注册搜索网关监听 // return new EventListener() { // @Override // public void onMessage(Object msg) { // if (!(msg instanceof LinkResponse)) { // return; // } // GatewayBean gateway = getGatewayBeanByResponse((LinkResponse) msg); // if (gateway == null) { // return; // } // gateway.setOnline(true); // gateway.setIsLocalGateWay(true);//本地搜索到的网关标识为本地网关 // // //只加载住宅一样的或者网关还没有配置过的,或者不需要住宅id为空的网关 // if (homeId.equals(gateway.getHomeId()) || (needEmptyHomeIdGateway == true && TextUtils.isEmpty(gateway.getHomeId()))) { // //更新缓存网关,会记录所有收到的网关,以为了保存网关的IP信息 // updateGatewayList(gatewayBeanList, gateway); // //更新当前读取网关的列表,这个列表每次都是清空再读取 // updateGatewayList(tempGatewayBeanList, gateway); // } // } // }; // } /** * 获取搜索网关事件 * * @param homeId * @return */ private EventListener getSearchGatewayEvent(String homeId, List spk, boolean needEmptyHomeIdGateway, final List tempGatewayBeanList) { //注册搜索网关监听 return new EventListener() { @Override public void onMessage(Object msg) { if (!(msg instanceof LinkResponse)) { return; } GatewayBean gateway = getGatewayBeanByResponse((LinkResponse) msg); if (gateway == null) { return; } gateway.setOnline(true); gateway.setIsLocalGateWay(true);//本地搜索到的网关标识为本地网关 //只加载住宅一样的或者网关还没有配置过的,或者不需要住宅id为空的网关 if (homeId.equals(gateway.getHomeId()) || (needEmptyHomeIdGateway == true && TextUtils.isEmpty(gateway.getHomeId()))) { //更新缓存网关,会记录所有收到的网关,以为了保存网关的IP信息 updateGatewayList(gatewayBeanList, gateway); //非搜索的网关类似返回 if (spk.contains(gateway.getGatewayType())) { //更新当前读取网关的列表,这个列表每次都是清空再读取 updateGatewayList(tempGatewayBeanList, gateway); } } } }; } /** * 获取搜索网关事件 这边不过滤homeId * * @return */ private EventListener getSearchGatewayEvent(List spk, final List tempGatewayBeanList) { //注册搜索网关监听 return new EventListener() { @Override public void onMessage(Object msg) { if (!(msg instanceof LinkResponse)) { return; } GatewayBean gateway = getGatewayBeanByResponse((LinkResponse) msg); if (gateway == null) { return; } gateway.setIsLocalGateWay(true);//本地搜索到的网关标识为本地网关 //升级网关驱动 需要显示所有网关 //⚠️这边不需要添加到gatewayBeanList 因为这个是网关离线升级的时候的功能 // updateGatewayList(gatewayBeanList, gateway); //更新当前读取网关的列表,这个列表每次都是清空再读取 if (spk.contains(gateway.getGatewayType())) { //更新当前读取网关的列表,这个列表每次都是清空再读取 updateGatewayList(tempGatewayBeanList, gateway); } } }; } /** * 更新收到的网关到列表 * * @param gatewayBeanList * @param gateway 当前收到的网关 */ void updateGatewayList(final List gatewayBeanList, GatewayBean gateway) { if (TextUtils.isEmpty(gateway.getOid()) || TextUtils.isEmpty(gateway.getDevice_mac())) { LogUtils.e("网关Mac或者Oid为空,无效网关"); return; } boolean isFound = false;//是否在内存中找到网关对象 //找出mac一样的网关更新最新数据 for (int i = 0; i < gatewayBeanList.size(); i++) { if (gatewayBeanList.get(i).getDevice_mac().equals(gateway.getDevice_mac())) { isFound = true; gatewayBeanList.set(i, gateway); // break; } } //清除oid一样,mac不一样的网关缓存。一般是在网关替换的情况空间出现 for (int i = 0; i < gatewayBeanList.size(); i++) { if (gatewayBeanList.get(i).getDevice_mac().equals(gateway.getDevice_mac()) && !gatewayBeanList.get(i).getOid().equals(gateway.getOid())) { gatewayBeanList.remove(i--); } } //没有找到就添加 if (!isFound) { gatewayBeanList.add(gateway); } } /** * 获取网关对象 * * @param linkResponse * @return */ private GatewayBean getGatewayBeanByResponse(LinkResponse linkResponse) { String data = linkResponse.getData(); if (!TextUtils.isEmpty(data)) { final BaseLocalResponse response = GsonConvert.getGson().fromJson(data, new TypeToken>() { }.getType()); return response.getObjects(); } return null; } /* * 绑定网关 * */ public void SetGatewayRemoteInfo(String master, String mac, String regionUrl, String ip, boolean isEncrypt, HDLLinkCallBack callBack) { String topic = String.format(TopicConstant.GATEWAY_EDIT_REMOTE, mac); JsonObject jObject = new JsonObject(); if (master.equals("true")) { jObject.addProperty("server_addr", regionUrl); jObject.addProperty("remote", "true"); } else { jObject.addProperty("server_addr", ""); jObject.addProperty("remote", "false"); } JsonObject sendJsonObj = new JsonObject(); sendJsonObj.add("objects", jObject); String time = String.valueOf(System.currentTimeMillis()); sendJsonObj.addProperty("time_stamp", time); sendJsonObj.addProperty("id", IdUtils.getUUId()); String sendStr = sendJsonObj.toString(); LinkRequest message = new LinkRequest(topic, sendStr, isEncrypt); new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { if (callBack == null) return; callBack.onSuccess("1"); } @Override public void onFailure(HDLLinkCode hdlLinkCode) { if (callBack == null) return; callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); } }, true).send(); } /* * 绑定网关 * 编辑homeId给网关 * */ public void bindGateway(String master, String mac, String homeId, String regionUrl, String ip, boolean isEncrypt, HDLLinkCallBack callBack) { String topic = String.format(TopicConstant.GATEWAY_EDIT_REMOTE, mac); JsonObject jObject = new JsonObject(); jObject.addProperty("homeId", homeId); // if(master.equals("true")) { // jObject.addProperty("server_addr", regionUrl); // jObject.addProperty("remote", "true"); // }else { // jObject.addProperty("server_addr", ""); // jObject.addProperty("remote", "false"); // } JsonObject sendJsonObj = new JsonObject(); sendJsonObj.add("objects", jObject); String time = String.valueOf(System.currentTimeMillis()); sendJsonObj.addProperty("time_stamp", time); sendJsonObj.addProperty("id", IdUtils.getUUId()); String sendStr = sendJsonObj.toString(); LinkRequest message = new LinkRequest(topic, sendStr, isEncrypt); new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { if (callBack == null) return; callBack.onSuccess("1"); } @Override public void onFailure(HDLLinkCode hdlLinkCode) { if (callBack == null) return; callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); } }, true).send(); } /* * 初始化网关 * */ public void initializeGateway(String mac, String oid, String ip, boolean isEncrypt, HDLLinkCallBack callBack) { String topic = String.format(TopicConstant.GATEWAY_INITIALIZE_REMOTE, oid); JsonObject sendJsonObj = new JsonObject(); String time = String.valueOf(System.currentTimeMillis()); sendJsonObj.addProperty("time_stamp", time); sendJsonObj.addProperty("id", IdUtils.getUUId()); JsonObject jObject = new JsonObject(); jObject.addProperty("device_mac", mac); sendJsonObj.add("objects", jObject); String sendStr = sendJsonObj.toString(); LinkRequest message = new LinkRequest(topic, sendStr, isEncrypt); new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { if (callBack == null) return; callBack.onSuccess("1"); } @Override public void onFailure(HDLLinkCode hdlLinkCode) { if (callBack == null) return; callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); } }, true).send(); } /* * 设置主从网关标记 * */ public void setMasterGateway(String regionUrl, String ip, String mac, String master, boolean isEncrypt, HDLLinkCallBack callBack) { String topic = String.format(TopicConstant.GATEWAY_EDIT_LOCAL, mac); JsonObject jObject = new JsonObject(); jObject.addProperty("master", master); JsonObject sendJsonObj = new JsonObject(); sendJsonObj.add("objects", jObject); String time = String.valueOf(System.currentTimeMillis()); sendJsonObj.addProperty("time_stamp", time); sendJsonObj.addProperty("id", IdUtils.getUUId()); String sendStr = sendJsonObj.toString(); LinkRequest message = new LinkRequest(topic, sendStr, isEncrypt); new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { if ("true".equals(master)) { String longStr1 = SPUtils.getString("longitude"); String latStr1 = SPUtils.getString("latitude"); if (!TextUtils.isEmpty(longStr1) && !TextUtils.isEmpty(latStr1)) { HDLLinkLocalSdk.getInstance().gatewayLocation(mac, longStr1, latStr1, isEncrypt, new HDLLinkTCallBack() { @Override public void onSuccess(String data) { } @Override public void onError(HDLLinkException e) { } }); } } if (callBack == null) return; callBack.onSuccess("1"); SetGatewayRemoteInfo(master, mac, regionUrl, ip, isEncrypt, new HDLLinkCallBack() { @Override public void onSuccess(String msg) { } @Override public void onError(HDLLinkException e) { } }); } @Override public void onFailure(HDLLinkCode hdlLinkCode) { if (callBack == null) return; callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); } }, true).send(); } /** * 设置网关入网从机模式 */ public void AuthGateway(String ip, String mac, HDLLinkCallBack callBack) { String topic = String.format(TopicConstant.GATEWAY_AUTH, mac); JsonObject sendJsonObj = new JsonObject(); String time = String.valueOf(System.currentTimeMillis()); sendJsonObj.addProperty("time_stamp", time); sendJsonObj.addProperty("id", IdUtils.getUUId()); JsonObject jObject = new JsonObject(); jObject.addProperty("spk", "LINKDEVICE"); jObject.addProperty("time", "120"); sendJsonObj.add("objects", jObject); String sendStr = sendJsonObj.toString(); LinkRequest message = new LinkRequest(topic, sendStr, false); new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { callBack.onSuccess(""); } @Override public void onFailure(HDLLinkCode hdlLinkCode) { callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); } }, true).send(); } /** * 设置网关入网从机模式 */ public void AuthGateway(String ip, String mac) { String topic = String.format(TopicConstant.GATEWAY_AUTH, mac); JsonObject sendJsonObj = new JsonObject(); String time = String.valueOf(System.currentTimeMillis()); sendJsonObj.addProperty("time_stamp", time); sendJsonObj.addProperty("id", IdUtils.getUUId()); JsonObject jObject = new JsonObject(); jObject.addProperty("spk", "LINKDEVICE"); jObject.addProperty("time", "120"); sendJsonObj.add("objects", jObject); String sendStr = sendJsonObj.toString(); LinkRequest message = new LinkRequest(topic, sendStr, false); new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { } @Override public void onFailure(HDLLinkCode hdlLinkCode) { } }, true).send(); } /* * 获取网关信息 * */ public void getGatewayInfo(String ip, String mac, boolean isEncrypt, HDLLinkCallBack callBack) { String topic = String.format(TopicConstant.GATEWAY_GET, mac); JsonObject sendJsonObj = new JsonObject(); String time = String.valueOf(System.currentTimeMillis()); sendJsonObj.addProperty("time_stamp", time); sendJsonObj.addProperty("id", IdUtils.getUUId()); String sendStr = sendJsonObj.toString(); LinkRequest message = new LinkRequest(topic, sendStr, isEncrypt); new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { if (callBack == null) return; callBack.onSuccess("1"); } @Override public void onFailure(HDLLinkCode hdlLinkCode) { if (callBack == null) return; callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); } }, true).send(); } /** * 发送数据到Link网关 * * @param ip 网关IP * @param mac 网关mac * @param isEncrypt 是否加密 * @param topic 请求主题 * @param jObject 负载数据<没有填null> * @param sendPath 发送路径<类名+方法名>class->methodName */ public void sendDataToLinkGateway(String ip, String mac, boolean isEncrypt, String topic, Object jObject, String sendPath, HDLLinkCallBack callBack) { String topicSend = topic.replace("%s", mac); //组装需要发送的数据 String sendStr = createSendData(jObject); // LogUtils.i("sendDataToLinkGateway->" + sendPath + "->本地发送\r\n" + topicSend + "\r\n" + sendStr); LinkRequest message = new LinkRequest(topicSend, sendStr, isEncrypt); GatewayBean gatewayBean = this.getLocalGateway(mac); if (gatewayBean != null) { message.setCloudTopic(topic.replace("%s", gatewayBean.getGatewayId())); } new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { if (callBack == null) return; try { JSONObject jsonObject = new JSONObject(new Gson().toJson(msg)); if (jsonObject.has("data")) { callBack.onSuccess(jsonObject.getString("data")); } } catch (Exception e) { callBack.onSuccess(e.getMessage()); } // LogUtils.i("sendDataToLinkGateway->"+sendPath+"->本地接收数据\r\n"+msg.toString()); } @Override public void onFailure(HDLLinkCode hdlLinkCode) { if (callBack == null) return; callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); // LogUtils.i("sendDataToLinkGateway->" + sendPath + "->本地接收数据->失败(-200)"); } }, true, mac).send(); } /** * 组装需要发送的数据 * * @param jObject 负载数据<没有填null> * @return 返回json字符串 */ private String createSendData(Object jObject) { //topic = String.format(TopicConstant.GATEWAY_EDIT_LOCAL, mac); JsonObject sendJsonObj = new JsonObject(); if (jObject != null) { if (jObject instanceof JsonObject) { sendJsonObj.add("objects", (JsonObject) jObject); } else if (jObject instanceof JsonArray) { sendJsonObj.add("objects", (JsonArray) jObject); } else if (jObject instanceof JSONArray) { JsonArray array = GsonConvert.getGson().fromJson(jObject.toString(), new TypeToken() { }.getType()); sendJsonObj.add("objects", array); } } String time = String.valueOf(System.currentTimeMillis()); sendJsonObj.addProperty("time_stamp", time); sendJsonObj.addProperty("id", IdUtils.getUUId()); return sendJsonObj.toString(); } /** * 支持网关类型 * * @return 类型列表 */ private List getGatewayTypeList() { List typeList = new ArrayList<>(); typeList.add("AGATEWAY");//网关 typeList.add("sensor.mmv_sleep");//毫米波spk typeList.add("sensor.mmv_pose");//毫米波spk return typeList; } }