src/main/java/com/fzzy/gateway/GatewayTimerScheduled.java
@@ -72,6 +72,8 @@ String url = DEFAULT_URL; url = url.replace("{appId}", DEFAULT_APP_ID).replace("{appsecret}", DEFAULT_APP_SECRET).replace("{cityid}", DEFAULT_CITYID); log.debug("------æ°è±¡URL---{}",url); String result = GatewayHttpUtil.doGet(url, null); if (null == result) { src/main/java/com/fzzy/gateway/hx2023/ScConstant.java
@@ -26,4 +26,10 @@ public static int CODE_200 = 200; /** * ä¸åæä»¤å夿¥ætopic */ public static String TOPIC_REPORT = "/${productId}/${deviceId}/properties/report"; } src/main/java/com/fzzy/gateway/hx2023/service/OnReceiveMqttService.java
@@ -9,6 +9,7 @@ import com.fzzy.gateway.hx2023.data.CloudSendData; import com.fzzy.gateway.hx2023.data.SyncReqData; import com.fzzy.mqtt.MqttProviderConfig; import com.fzzy.mqtt.MqttPublishService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -24,7 +25,7 @@ @Resource private GatewayRemoteManager gatewayRemoteManager; @Resource private MqttProviderConfig providerClient; private MqttPublishService publishService; /** @@ -69,11 +70,11 @@ //èªå¨æ¨é if (200 == resp.getCode() && syncReqData.isAutoReplay()) { String topic = "/${productId}/${deviceId}/properties/report"; String topic = ScConstant.TOPIC_REPORT; topic = topic.replace("${productId}", device.getProductId()).replace("${deviceId}", device.getDeviceId()); providerClient.publish(topic, resp.getData()); publishService.publishMsg(topic, resp.getData()); log.info("=======ç²®æ æ¨é==========={}", resp.getData()); } src/main/java/com/fzzy/gateway/service/GatewayDeviceService.java
@@ -13,17 +13,20 @@ import com.fzzy.gateway.GatewayUtils; import com.fzzy.gateway.api.DeviceReportService; import com.fzzy.gateway.api.GatewayRemoteManager; import com.fzzy.gateway.data.BaseResp; import com.fzzy.gateway.entity.GatewayDevice; import com.fzzy.gateway.hx2023.ScConstant; import com.fzzy.gateway.hx2023.data.*; import com.fzzy.gateway.service.repository.GatewayDeviceRep; import com.fzzy.mqtt.MqttProviderConfig; import com.fzzy.mqtt.MqttPublishService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.DateFormatUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; @@ -47,6 +50,9 @@ private GatewayRemoteManager gatewayRemoteManager; @Resource private MqttPublishService mqttPublishService; @Resource private MqttProviderConfig providerClient; /** * gatewayDeviceService#listAll * @@ -67,7 +73,7 @@ public void updateSave(GatewayDevice data) { GatewayDevice data2 = new GatewayDevice(); BeanUtils.copyProperties(data, data2); if (null == data2.getDeviceSn()) { if (null != data2.getIp()) { data.setDeviceSn(data2.getIp()); @@ -77,10 +83,10 @@ } if (null == data2.getId()) { data2.setId(ContextUtil.getUUID()); data2.setId(ContextUtil.getUUID()); gatewayDeviceRep.save(data2); }else{ gatewayDeviceRep.save(data2); } else { gatewayDeviceRep.save(data2); } flushCache(); } @@ -112,10 +118,6 @@ } /** * gatewayDeviceService#ajaxTestWeight * å°ç£ æ¨éæµè¯ @@ -128,16 +130,16 @@ double weigh = (double) parameter.getWeight(); //double weigh = Double.parseDouble("3500.0"); List<GatewayDevice> devices = listAll(); if(devices == null || devices.size()<= 0){ if (devices == null || devices.size() <= 0) { return "没æè®¾å¤"; } List<GatewayDevice> weights = devices.stream().filter(s ->(GatewayDeviceType.TYPE_01.getCode().equals(s.getType()))).collect(Collectors.toList()); if(weights == null || weights.size()<= 0){ return "没æè·åå°å°ç£ 设å¤"; } List<GatewayDevice> weights = devices.stream().filter(s -> (GatewayDeviceType.TYPE_01.getCode().equals(s.getType()))).collect(Collectors.toList()); if (weights == null || weights.size() <= 0) { return "没æè·åå°å°ç£ 设å¤"; } String topic = "/device/hx-weigh-big-01/91511424746940066Y001_91511424746940066Y0010000_002_004_002_001/message/property/report"; for (GatewayDevice device: weights) { for (GatewayDevice device : weights) { WebSocketPacket packet = new WebSocketPacket(); @@ -163,7 +165,7 @@ packet.setTimestamp(System.currentTimeMillis()); topic = "/device/"+header.getProductId()+"/"+device.getDeviceId()+"/message/property/report"; topic = "/device/" + header.getProductId() + "/" + device.getDeviceId() + "/message/property/report"; mqttPublishService.publishMsg(topic, JSON.toJSONString(packet)); } return "SUCCESS"; @@ -172,6 +174,7 @@ /** * gatewayDeviceService#ajaxTestLpr * å°ç£ æ¨éæµè¯ * * @return */ @Expose @@ -179,16 +182,16 @@ //String carNumber = parameter.getCarNumber(); String carNumber = "å·A12345"; List<GatewayDevice> devices = listAll(); if(devices == null || devices.size()<= 0){ if (devices == null || devices.size() <= 0) { return "没æè®¾å¤"; } List<GatewayDevice> weights = devices.stream().filter(s ->(GatewayDeviceType.TYPE_02.getCode().equals(s.getType()))).collect(Collectors.toList()); if(weights == null || weights.size()<= 0){ List<GatewayDevice> weights = devices.stream().filter(s -> (GatewayDeviceType.TYPE_02.getCode().equals(s.getType()))).collect(Collectors.toList()); if (weights == null || weights.size() <= 0) { return "没æè·åå°è®¾å¤"; } String topic = "/device/hx-weigh-big-01/91511424746940066Y001_91511424746940066Y0010000_002_004_002_001/message/property/report"; for (GatewayDevice device: weights) { for (GatewayDevice device : weights) { WebSocketPacket packet = new WebSocketPacket(); @@ -212,7 +215,7 @@ packet.setTimestamp(System.currentTimeMillis()); topic = "/device/"+header.getProductId()+"/"+device.getDeviceId()+"/message/property/report"; topic = "/device/" + header.getProductId() + "/" + device.getDeviceId() + "/message/property/report"; mqttPublishService.publishMsg(topic, JSON.toJSONString(packet)); } return "SUCCESS"; @@ -247,6 +250,9 @@ return this.pushByV40(list, start, end); } private String pushByV40(List<GatewayDevice> list, Date start, Date end) { @@ -352,27 +358,27 @@ //夿æå¤§ if (curTemp.equals(result.getMaxTemperature())) { result.setMaxX(x+""); result.setMaxY(y+""); result.setMaxZ(position+""); result.setMaxX(x + ""); result.setMaxY(y + ""); result.setMaxZ(position + ""); } //夿æå° if (curTemp.equals(result.getMinTemperature())) { result.setMinX(x+""); result.setMinY(y+""); result.setMinZ(position+""); result.setMinX(x + ""); result.setMinY(y + ""); result.setMinZ(position + ""); } temperature.add(new KafkaGrainDataDetail1(cableNum + "", z + "", curTemp, position + "", x+"", y+"")); temperature.add(new KafkaGrainDataDetail1(cableNum + "", z + "", curTemp, position + "", x + "", y + "")); } //ç²®æ¸©ä¿¡æ¯ JSONObject trhInfo = new JSONObject(); // TRHInfo trhInfo = new TRHInfo(); trhInfo.put("temperature",temperature); // TRHInfo trhInfo = new TRHInfo(); trhInfo.put("temperature", temperature); //仿¸©åº¦ä¿¡æ¯ @@ -385,7 +391,7 @@ List<KafkaGrainTH> temperatureAndhumidity = new ArrayList<>(); temperatureAndhumidity.add(grainTH); trhInfo.put("temperatureAndhumidity",temperatureAndhumidity); trhInfo.put("temperatureAndhumidity", temperatureAndhumidity); //trhInfo.put("temperatureAndhumidity",grainTH); JSONObject params = new JSONObject(); src/main/java/com/fzzy/gateway/service/GatewayDeviceService2.java
@@ -1,10 +1,19 @@ package com.fzzy.gateway.service; import com.bstek.dorado.annotation.DataResolver; import com.bstek.dorado.annotation.Expose; import com.fzzy.api.data.GatewayDeviceType; import com.fzzy.api.utils.ContextUtil; import com.fzzy.gateway.GatewayUtils; import com.fzzy.gateway.api.GatewayRemoteManager; import com.fzzy.gateway.data.BaseResp; import com.fzzy.gateway.entity.GatewayDevice; import com.fzzy.gateway.hx2023.ScConstant; import com.fzzy.gateway.hx2023.data.SyncReqData; import com.fzzy.gateway.service.repository.GatewayDeviceRep; import com.fzzy.mqtt.MqttProviderConfig; import com.fzzy.mqtt.MqttPublishService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; @@ -12,11 +21,17 @@ import javax.annotation.Resource; import java.util.List; @Slf4j @Component public class GatewayDeviceService2 { @Resource private GatewayDeviceRep gatewayDeviceRep; @Resource private GatewayRemoteManager gatewayRemoteManager; @Resource private MqttPublishService publishService; public List<GatewayDevice> listAll() { Sort sort = new Sort(Sort.Direction.ASC, "deviceId"); @@ -59,4 +74,43 @@ } } /** * æµè¯MQTTç²®æ æ£æµ * gatewayDeviceService#ajaxTestGrain2 * ç²®æ æ¨éæµè¯ * * @param data * @return */ @Expose public String ajaxTestGrain2(GatewayDevice data) { SyncReqData reqData = new SyncReqData(); reqData.setDevice(data); reqData.setAutoReplay(true); reqData.setMessageType(ScConstant.MESSAGE_TYPE_INVOKE_FUNCTION); reqData.setMessageId(ScConstant.getMessageId()); reqData.setFunctionId(ScConstant.FUNCTION_getTAndRHInfo); if (!GatewayDeviceType.TYPE_07.getCode().equals(data.getType())) { return "ERRORï¼å½å设å¤éç²®æ 设å¤ä¸æ¯æå½åæä½"; } BaseResp resp = gatewayRemoteManager.getSyncGrainService(data.getSyncProtocol()).syncGrain2(reqData); //èªå¨æ¨é if (200 == resp.getCode() && reqData.isAutoReplay()) { String topic = ScConstant.TOPIC_REPORT; topic = topic.replace("${productId}", data.getProductId()).replace("${deviceId}", data.getDeviceId()); publishService.publishMsg(topic, resp.getData()); } log.info("=======æå¨æµè¯ç²®æ æ¨é==========={}", resp.getData()); return "SUCCESSï¼æ§è¡å®æ"; } } src/main/java/com/fzzy/gateway/view/GatewayDevice.view.xml
@@ -115,11 +115,11 @@ <Property name="label">设å¤ç±»åKEY</Property> </PropertyDef> <PropertyDef name="cableRule"> <Property/> <Property></Property> <Property name="label">å¸çº¿è§å</Property> </PropertyDef> <PropertyDef name="cableCir"> <Property/> <Property></Property> <Property name="label">çä»å±è§å</Property> </PropertyDef> </DataType> @@ -179,6 +179,17 @@ <Property name="caption">å é¤</Property> <Property name="iconClass">fa fa-minus</Property> <Property name="width">90</Property> <Property name="exClassName">toolbar-button-warn</Property> </ToolBarButton> <Separator/> <ToolBarButton> <ClientEvent name="onClick">var cur = view.get("#dgMain").getCurrentItem();
 view.get("#ajaxTestGrain").set("parameter",cur).execute(function(result){
 $alert(result);
 });
 </ClientEvent> <Property name="caption">æµè¯ç²®æ </Property> <Property name="iconClass">fa fa-minus</Property> <Property name="exClassName">toolbar-button-warn</Property> </ToolBarButton> </ToolBar> @@ -367,5 +378,9 @@ <Property name="service">gatewayDeviceService#delData</Property> <Property name="confirmMessage">ç¡®å®è¦å é¤ä¹ï¼</Property> </AjaxAction> <AjaxAction id="ajaxTestGrain"> <Property name="service">gatewayDeviceService2#ajaxTestGrain2</Property> <Property name="confirmMessage">ç¡®å®è¦æå¨æ§è¡ç²®æ ä¹ï¼</Property> </AjaxAction> </View> </ViewConfig> src/main/java/com/fzzy/mqtt/MqttConsumerConfig.java
@@ -36,7 +36,7 @@ public void connect() { try { //å建MQTT客æ·ç«¯å¯¹è±¡ client = new MqttClient(mqttProperties.getHost(), mqttProperties.getClientInId(), new MemoryPersistence()); client = new MqttClient(mqttProperties.getHost(), mqttProperties.getClientId(), new MemoryPersistence()); //è¿æ¥è®¾ç½® MqttConnectOptions options = new MqttConnectOptions(); //æ¯å¦æ¸ 空sessionï¼è®¾ç½®ä¸ºfalse表示æå¡å¨ä¼ä¿ç客æ·ç«¯çè¿æ¥è®°å½ï¼å®¢æ·ç«¯éè¿ä¹åè½è·åå°æå¡å¨å¨å®¢æ·ç«¯æå¼è¿æ¥æé´æ¨éçæ¶æ¯ @@ -51,7 +51,7 @@ //设置å¿è·³æ¶é´ åä½ä¸ºç§ï¼è¡¨ç¤ºæå¡å¨æ¯é1.5*20ç§çæ¶é´å客æ·ç«¯åéå¿è·³å¤æå®¢æ·ç«¯æ¯å¦å¨çº¿ options.setKeepAliveInterval(20); //设置é屿¶æ¯çè¯é¢ï¼è¥å®¢æ·ç«¯åæå¡å¨ä¹é´çè¿æ¥æå¤æå¼ï¼æå¡å¨å°åå¸å®¢æ·ç«¯çéå±ä¿¡æ¯ options.setWill("willTopic", (mqttProperties.getClientInId() + "䏿å¡å¨æå¼è¿æ¥").getBytes(), 0, false); options.setWill("willTopic", (mqttProperties.getClientId() + "䏿å¡å¨æå¼è¿æ¥").getBytes(), 0, false); //设置åè° // client.setCallback(new MqttConsumerCallBack()); client.setCallback(mqttConsumerCallBack); src/main/java/com/fzzy/mqtt/MqttController.java
@@ -17,14 +17,14 @@ public @ResponseBody String connect() { client.connect(); return mqttProperties.getClientOutId() + "è¿æ¥å°æå¡å¨"; return mqttProperties.getClientId() + "è¿æ¥å°æå¡å¨"; } @RequestMapping("/disConnect") @ResponseBody public String disConnect() { client.disConnect(); return mqttProperties.getClientOutId() + "䏿å¡å¨æå¼è¿æ¥"; return mqttProperties.getClientId() + "䏿å¡å¨æå¼è¿æ¥"; } } src/main/java/com/fzzy/mqtt/MqttGatewayService.java
ÎļþÒÑɾ³ý src/main/java/com/fzzy/mqtt/MqttProperties.java
@@ -31,15 +31,9 @@ /** * 客æ·ç«¯Id-åå¸è Id * 客æ·ç«¯Id */ private String clientOutId; /** * 客æ·ç«¯Id-被订é è Id */ private String clientInId; private String clientId; /** * è¶ æ¶æ¶é´ src/main/java/com/fzzy/mqtt/MqttProviderCallBack.java
@@ -4,8 +4,10 @@ import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.springframework.stereotype.Component; @Slf4j @Component public class MqttProviderCallBack implements MqttCallback { /** src/main/java/com/fzzy/mqtt/MqttProviderConfig.java
@@ -14,6 +14,8 @@ @Autowired private MqttProperties mqttProperties; @Autowired private MqttProviderCallBack mqttProviderCallBack; /** * 客æ·ç«¯å¯¹è±¡ */ @@ -34,7 +36,7 @@ public void connect(){ try{ //å建MQTT客æ·ç«¯å¯¹è±¡ client = new MqttClient(mqttProperties.getHost(),mqttProperties.getClientOutId(),new MemoryPersistence()); client = new MqttClient(mqttProperties.getHost(),mqttProperties.getClientId(),new MemoryPersistence()); //è¿æ¥è®¾ç½® MqttConnectOptions options = new MqttConnectOptions(); //æ¯å¦æ¸ 空sessionï¼è®¾ç½®false表示æå¡å¨ä¼ä¿ç客æ·ç«¯çè¿æ¥è®°å½ï¼è®¢é 主é¢ï¼qosï¼,客æ·ç«¯éè¿ä¹åè½è·åå°æå¡å¨å¨å®¢æ·ç«¯æå¼è¿æ¥æé´æ¨éçæ¶æ¯ @@ -49,9 +51,9 @@ //设置å¿è·³æ¶é´ åä½ä¸ºç§ï¼è¡¨ç¤ºæå¡å¨æ¯é 1.5*20ç§çæ¶é´å客æ·ç«¯åéå¿è·³å¤æå®¢æ·ç«¯æ¯å¦å¨çº¿ options.setKeepAliveInterval(20); //设置é屿¶æ¯çè¯é¢ï¼è¥å®¢æ·ç«¯åæå¡å¨ä¹é´çè¿æ¥æå¤æå¼ï¼æå¡å¨å°åå¸å®¢æ·ç«¯çéå±ä¿¡æ¯ options.setWill("willTopic",(mqttProperties.getClientOutId() + "䏿å¡å¨æå¼è¿æ¥").getBytes(),0,false); options.setWill("willTopic",(mqttProperties.getClientId()+ "䏿å¡å¨æå¼è¿æ¥").getBytes(),0,false); //设置åè° client.setCallback(new MqttProviderCallBack()); client.setCallback(mqttProviderCallBack); client.connect(options); } catch(MqttException e){ e.printStackTrace(); src/main/java/com/fzzy/mqtt/MqttPublishService.java
@@ -1,24 +1,33 @@ package com.fzzy.mqtt; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @Slf4j @Service public class MqttPublishService { private static MqttClient client ; @Resource private MqttProperties mqttProperties; private static MqttClient client; public void init() throws MqttException { //String topic = "/device/hx-weigh-big-01/91511424746940066Y001_91511424746940066Y0010000_002_004_002_001/message/property/report"; String username = "admin"; String password = "admin123321"; String clientid = "FZZY-gateway"; String broker = "tcp://127.0.0.1:1883"; String username = mqttProperties.getUsername(); String password = mqttProperties.getPassword(); String clientid = mqttProperties.getClientId(); String broker = mqttProperties.getHost(); //String content = " { \"headers\":{ \"productId\":\"hx-weigh-big-01\", \"keepOnlineTimeoutSeconds\":600, \"keepOnline\":true, \"deviceName\":\"å°ç£ ç§°é\" }, \"messageType\":\"REPORT_PROPERTY\", \"deviceId\":\"91511424746940066Y001_91511424746940066Y0010000_002_004_002_001\", \"properties\":{ \"weightInfo\":\"{\\\"exceed\\\":false,\\\"grossWeight\\\":3000.0,\\\"netWeight\\\":3000.0,\\\"static\\\":false,\\\"tareWeight\\\":3000.0,\\\"weightUnit\\\":\\\"KG\\\"}\" }, \"timestamp\":1698336020044 }"; int qos = 0; try { @@ -38,27 +47,31 @@ } } public void publishMsg(String topic,String content) { // String topic = "/device/hx-weigh-big-01/91511424746940066Y001_91511424746940066Y0010000_002_004_002_001/message/property/report"; //String content = " { \"headers\":{ \"productId\":\"hx-weigh-big-01\", \"keepOnlineTimeoutSeconds\":600, \"keepOnline\":true, \"deviceName\":\"å°ç£ ç§°é\" }, \"messageType\":\"REPORT_PROPERTY\", \"deviceId\":\"91511424746940066Y001_91511424746940066Y0010000_002_004_002_001\", \"properties\":{ \"weightInfo\":\"{\\\"exceed\\\":false,\\\"grossWeight\\\":3000.0,\\\"netWeight\\\":3000.0,\\\"static\\\":false,\\\"tareWeight\\\":3000.0,\\\"weightUnit\\\":\\\"KG\\\"}\" }, \"timestamp\":1698336020044 }"; int qos = 0; public void publishMsg(String topic, String content) { try { // åå»ºæ¶æ¯å¹¶è®¾ç½® QoS MqttMessage message = new MqttMessage(content.getBytes()); message.setQos(qos); // å叿¶æ¯ client.publish(topic, message); System.out.println("Message published"); System.out.println("topic: " + topic); System.out.println("message content: " + content); // å ³éè¿æ¥ //client.disconnect(); // å ³é客æ·ç«¯ //client.close(); } catch (MqttException e) { throw new RuntimeException(e); } } // String topic = "/device/hx-weigh-big-01/91511424746940066Y001_91511424746940066Y0010000_002_004_002_001/message/property/report"; //String content = " { \"headers\":{ \"productId\":\"hx-weigh-big-01\", \"keepOnlineTimeoutSeconds\":600, \"keepOnline\":true, \"deviceName\":\"å°ç£ ç§°é\" }, \"messageType\":\"REPORT_PROPERTY\", \"deviceId\":\"91511424746940066Y001_91511424746940066Y0010000_002_004_002_001\", \"properties\":{ \"weightInfo\":\"{\\\"exceed\\\":false,\\\"grossWeight\\\":3000.0,\\\"netWeight\\\":3000.0,\\\"static\\\":false,\\\"tareWeight\\\":3000.0,\\\"weightUnit\\\":\\\"KG\\\"}\" }, \"timestamp\":1698336020044 }"; int qos = mqttProperties.getQos(); try { // åå»ºæ¶æ¯å¹¶è®¾ç½® QoS MqttMessage message = new MqttMessage(content.getBytes()); message.setQos(qos); // å叿¶æ¯ client.publish(topic, message); log.info("------------Message published-------------"); log.info("topic: " + topic); log.info("message content: " + content); // å ³éè¿æ¥ //client.disconnect(); // å ³é客æ·ç«¯ //client.close(); } catch (MqttException e) { throw new RuntimeException(e); } } } src/main/java/com/fzzy/mqtt/PublishSample.java
ÎļþÒÑɾ³ý src/main/resources/application-devGateway.yml
@@ -73,8 +73,7 @@ host: tcp://127.0.0.1:1883 username: admin password: pwdmqtt.. client-outId: fzzy-customer-id client-inId: fzzy-6e3d92ff71b911eea5e50250f2000002 client-id: fzzy-customer-igds-api timeout: 10 keep-alive-interval: 20 max-connect-times: 5