1、新了解到,FBox可接多台套水肥机、气象站、墒情站,相应修改协议(主要是主题部分);
2、编写《水肥机、气象站、墒情站协议》(未完)。
|  |  |  | 
|---|
|  |  |  | import com.dy.common.mw.protocol.Command; | 
|---|
|  |  |  | import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolConstantSdV1; | 
|---|
|  |  |  | import com.dy.common.mw.protocol4Mqtt.pSdV1.ProtocolParserSdV1; | 
|---|
|  |  |  | import com.dy.common.util.NumUtil; | 
|---|
|  |  |  | import org.eclipse.paho.client.mqttv3.MqttMessage; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | public static MqttTopic parseSubTopic(String topic) throws Exception { | 
|---|
|  |  |  | if(topic != null && topic.trim().length() != 0){ | 
|---|
|  |  |  | String[] topicGrp = topic.split("/") ; | 
|---|
|  |  |  | if(topicGrp.length != 4){ | 
|---|
|  |  |  | if(topicGrp.length != 5){ | 
|---|
|  |  |  | throw new Exception("æ¥æ¶çmqttæ¶æ¯ä¸»é¢ä¸å¯è¯å«") ; | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | if(NumUtil.isPlusIntNumber(topicGrp[4])){ | 
|---|
|  |  |  | throw new Exception("æ¥æ¶çmqttæ¶æ¯ä¸»é¢ä¸å¯è¯å«") ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(Integer.parseInt(topicGrp[4]) <= 0){ | 
|---|
|  |  |  | throw new Exception("æ¥æ¶çmqttæ¶æ¯ä¸»é¢ä¸å¯è¯å«") ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | MqttTopic vo = new MqttTopic() ; | 
|---|
|  |  |  | vo.orgTag = topicGrp[0] ; | 
|---|
|  |  |  | vo.protocol = topicGrp[1] ; | 
|---|
|  |  |  | vo.devId = topicGrp[2] ; | 
|---|
|  |  |  | vo.name = topicGrp[3] ; | 
|---|
|  |  |  | vo.type = topicGrp[3] ; | 
|---|
|  |  |  | vo.no = Integer.parseInt(topicGrp[4]) ; | 
|---|
|  |  |  | return vo ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static String createPubTopic(MqttTopic tp) throws Exception { | 
|---|
|  |  |  | return tp.orgTag + "/" + tp.protocol + "/" + tp.devId + "/" + tp.name; | 
|---|
|  |  |  | return tp.orgTag + "/" + tp.protocol + "/" + tp.devId + "/" + tp.type + "/" + tp.no; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static MqttSubMsg parseSubMsg(MqttTopic subTopic, MqttMessage mqttMsg, MqttCallback callback) throws Exception { | 
|---|
|  |  |  | 
|---|
|  |  |  | public String orgTag ;//ç»ç»æ è¯ | 
|---|
|  |  |  | public String protocol ;//åè®®åç§° | 
|---|
|  |  |  | public String devId ;//设å¤ï¼FBoxï¼ID | 
|---|
|  |  |  | public String name;//æ¶æ¯ä¸»é¢æ«ç«¯åç§° | 
|---|
|  |  |  | public String type;//æµç«ç±»å | 
|---|
|  |  |  | public Integer no;//æµç«ç¼å· | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public boolean isEmpty(){ | 
|---|
|  |  |  | return orgTag == null || protocol == null || devId == null || name == null | 
|---|
|  |  |  | || orgTag.trim().length() == 0 || protocol.trim().length() == 0 || devId.trim().length() == 0 || name.trim().length() == 0 ; | 
|---|
|  |  |  | return orgTag == null || protocol == null || devId == null || type == null || no == null | 
|---|
|  |  |  | || orgTag.trim().length() == 0 || protocol.trim().length() == 0 || devId.trim().length() == 0 || type.trim().length() == 0 || no <= 0 ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String shortName(){ | 
|---|
|  |  |  | return name; | 
|---|
|  |  |  | return type + "/" + no; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String longName(){ | 
|---|
|  |  |  | return orgTag + "/" + protocol + "/" + devId + "/" + name; | 
|---|
|  |  |  | return orgTag + "/" + protocol + "/" + devId + "/" + type + "/" + no; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | * @Description | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public interface Vo4Up { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void setNo(Integer no) ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String toString() ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | MqttSubMsgSdV1 msg = new MqttSubMsgSdV1(subTopic, strTxt); | 
|---|
|  |  |  | Vo4Up vo ; | 
|---|
|  |  |  | DevRunInfo stInfo = null ; | 
|---|
|  |  |  | switch (subTopic.name) { | 
|---|
|  |  |  | switch (subTopic.type) { | 
|---|
|  |  |  | case ProtocolConstantSdV1.SubTopicWeather -> { | 
|---|
|  |  |  | vo = JSON.parseObject(strTxt, WeatherVo.class); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | default -> { | 
|---|
|  |  |  | throw new Exception("æ¥æ¶å°MQTTæ¶æ¯ï¼åè®®" + subTopic.protocol + "ï¼è®¾å¤ID" + subTopic.devId + "ï¼ä¸»é¢" + subTopic.name + "æ¶æ¯è§£æé»è¾æªå®ç°"); | 
|---|
|  |  |  | throw new Exception("æ¥æ¶å°MQTTæ¶æ¯ï¼åè®®" + subTopic.protocol + "ï¼è®¾å¤ID" + subTopic.devId + "ï¼ä¸»é¢" + subTopic.type + "æ¶æ¯è§£æé»è¾æªå®ç°"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | vo.setNo(subTopic.no) ; | 
|---|
|  |  |  | msg.vo4Up = vo ; | 
|---|
|  |  |  | callback.callback(msg); | 
|---|
|  |  |  | callback.notify(msg.deviceId, stInfo); | 
|---|
|  |  |  | 
|---|
|  |  |  | msg.isCacheForOffLine = false ; | 
|---|
|  |  |  | msg.hasResponse = true ; | 
|---|
|  |  |  | msg.cd = CodeSdV1.cd_Fault ; | 
|---|
|  |  |  | msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicFault) ; | 
|---|
|  |  |  | msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicFault, cvo.no) ; | 
|---|
|  |  |  | msg.msg = JSON.toJSONString(new FaultClearVo(cvo.startTrueStopFalse ?(byte)1:0)) ; | 
|---|
|  |  |  | return msg ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | msg.isCacheForOffLine = false ; | 
|---|
|  |  |  | msg.hasResponse = true ; | 
|---|
|  |  |  | msg.cd = CodeSdV1.cd_Fault ; | 
|---|
|  |  |  | msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicStir) ; | 
|---|
|  |  |  | msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicStir, cvo.no) ; | 
|---|
|  |  |  | msg.msg = JSON.toJSONString(new StirStartVo(cvo.startTrueStopFalse ?(byte)1:0)) ; | 
|---|
|  |  |  | return msg ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | msg.isCacheForOffLine = false ; | 
|---|
|  |  |  | msg.hasResponse = true ; | 
|---|
|  |  |  | msg.cd = CodeSdV1.cd_Fault ; | 
|---|
|  |  |  | msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicInject) ; | 
|---|
|  |  |  | msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicInject, cvo.no) ; | 
|---|
|  |  |  | msg.msg = JSON.toJSONString(new InjectStartVo(cvo.startTrueStopFalse ?(byte)1:0)) ; | 
|---|
|  |  |  | return msg ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | msg.isCacheForOffLine = false ; | 
|---|
|  |  |  | msg.hasResponse = true ; | 
|---|
|  |  |  | msg.cd = CodeSdV1.cd_Fault ; | 
|---|
|  |  |  | msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicIrr) ; | 
|---|
|  |  |  | msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicIrr, cvo.no) ; | 
|---|
|  |  |  | msg.msg = JSON.toJSONString(new StirStartVo(cvo.startTrueStopFalse ?(byte)1:0)) ; | 
|---|
|  |  |  | return msg ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | msg.isCacheForOffLine = false ; | 
|---|
|  |  |  | msg.hasResponse = false ; | 
|---|
|  |  |  | msg.cd = CodeSdV1.cd_Param ; | 
|---|
|  |  |  | msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicParam) ; | 
|---|
|  |  |  | msg.topic = new MqttTopic(orgTag, com.protocol, com.rtuAddr, ProtocolConstantSdV1.PubTopicParam, cvo.no) ; | 
|---|
|  |  |  | msg.msg = JSON.toJSONString(new ParamSetVo(cvo.stirDuration, cvo.injectDuration)) ; | 
|---|
|  |  |  | return msg ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | * @Description | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public class ComCtrlVo { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public Integer no ;//设å¤ç¼å· | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //å¯åå¨ä½ï¼trueæ¯ï¼falseå¦ | 
|---|
|  |  |  | //å¯ä»¥æ§è¡åè½ç  00ï¼01ï¼02ï¼03çå¨ä½ | 
|---|
|  |  |  | public boolean startTrueStopFalse;// | 
|---|
|  |  |  | 
|---|
|  |  |  | package com.dy.common.mw.protocol4Mqtt.pSdV1.comParam; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.alibaba.fastjson2.annotation.JSONField; | 
|---|
|  |  |  | import lombok.AllArgsConstructor; | 
|---|
|  |  |  | import lombok.Data; | 
|---|
|  |  |  | import lombok.NoArgsConstructor; | 
|---|
|  |  |  | 
|---|
|  |  |  | @NoArgsConstructor | 
|---|
|  |  |  | @AllArgsConstructor | 
|---|
|  |  |  | public class ComSetParamVo { | 
|---|
|  |  |  | //设å¤ç¼å· | 
|---|
|  |  |  | public Integer no ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // æ
æè®¾å®æ¶é´ | 
|---|
|  |  |  | public Integer stirDuration ; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | @JSONField(name = "flexem_message_id") | 
|---|
|  |  |  | public Integer messageId ;//æ¶æ¯ID | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public Integer no ;//æµç«ç¼å·ï¼å
¶ä¸å¨JSONæ°æ®ä¸ï¼å
¶ä¸ä¸»é¢ä¸ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @JSONField(name = "è¥ææµé") | 
|---|
|  |  |  | public Float manureFlow ;//è¥ææµé | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | public Long devDt ;//è®¾å¤æ¶é´ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String devDtStr ;//è®¾å¤æ¶é´ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void setNo(Integer no ){ | 
|---|
|  |  |  | this.no = no ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getDevDtStr() { | 
|---|
|  |  |  | if(devDt == null){ | 
|---|
|  |  |  | return DateTime.yyyy_MM_dd_HH_mm_ss(DateTime.getDate(devDt)) ; | 
|---|
|  |  |  | 
|---|
|  |  |  | sb.append("\n") ; | 
|---|
|  |  |  | return sb.toString() ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | @JSONField(name = "flexem_message_id") | 
|---|
|  |  |  | public Integer messageId ;//æ¶æ¯ID | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public Integer no ;//æµç«ç¼å·ï¼å
¶ä¸å¨JSONæ°æ®ä¸ï¼å
¶ä¸ä¸»é¢ä¸ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @JSONField(name = "å壤湿度1") | 
|---|
|  |  |  | public Float soilHumidity1 ;//å壤湿度1 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | public Long devDt ;//è®¾å¤æ¶é´ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String devDtStr ;//è®¾å¤æ¶é´ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void setNo(Integer no ){ | 
|---|
|  |  |  | this.no = no ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getDevDtStr() { | 
|---|
|  |  |  | if(devDt == null){ | 
|---|
|  |  |  | return DateTime.yyyy_MM_dd_HH_mm_ss(DateTime.getDate(devDt)) ; | 
|---|
|  |  |  | 
|---|
|  |  |  | @JSONField(name = "flexem_message_id") | 
|---|
|  |  |  | public Integer messageId ;//æ¶æ¯ID | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public Integer no ;//æµç«ç¼å·ï¼å
¶ä¸å¨JSONæ°æ®ä¸ï¼å
¶ä¸ä¸»é¢ä¸ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @JSONField(name = "æ
æè¿è¡") | 
|---|
|  |  |  | public Byte stirRunning ;//æ
æè¿è¡ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | public Long devDt ;//è®¾å¤æ¶é´ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String devDtStr ;//è®¾å¤æ¶é´ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void setNo(Integer no ){ | 
|---|
|  |  |  | this.no = no ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getDevDtStr() { | 
|---|
|  |  |  | if(devDt == null){ | 
|---|
|  |  |  | return DateTime.yyyy_MM_dd_HH_mm_ss(DateTime.getDate(devDt)) ; | 
|---|
|  |  |  | 
|---|
|  |  |  | @JSONField(name = "flexem_message_id") | 
|---|
|  |  |  | public Integer messageId ;//æ¶æ¯ID | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public Integer no ;//æµç«ç¼å·ï¼å
¶ä¸å¨JSONæ°æ®ä¸ï¼å
¶ä¸ä¸»é¢ä¸ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @JSONField(name = "äºæ°§å碳") | 
|---|
|  |  |  | public Integer carbonDioxide ;//äºæ°§å碳 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | public Long devDt ;//è®¾å¤æ¶é´ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String devDtStr ;//è®¾å¤æ¶é´ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void setNo(Integer no ){ | 
|---|
|  |  |  | this.no = no ; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String getDevDtStr() { | 
|---|
|  |  |  | if(devDt != null){ | 
|---|
|  |  |  | return DateTime.yyyy_MM_dd_HH_mm_ss(DateTime.getDate(devDt)) ; | 
|---|
|  |  |  | 
|---|
|  |  |  | #   çå·ï¼ 60103 | 
|---|
|  |  |  | #   åå·ï¼ 60104 | 
|---|
|  |  |  | #   éå·ï¼ 60105 | 
|---|
|  |  |  | tcp.port=60000 | 
|---|
|  |  |  | tcp.port=60000ba_divide | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #RTUä¸è¡æ°æ®æå°é´éï¼å¤§äºè¿ä¸ªé´é认为设å¤ç¦»çº¿äºï¼æµæ§ä¸ä½éæ¯3ï¼è¡¨éä¸ä½æºæ¯6ï¼é»è®¤éç¨æ¶é´æé¿ç6 | 
|---|
|  |  |  | base.upData.min.interval=6 | 
|---|
|  |  |  | 
|---|
|  |  |  | # MQTTæå¡é
ç½® | 
|---|
|  |  |  | #   mqtt.enable æ¯å¦å¯å¨ | 
|---|
|  |  |  | #   mqtt.protocolAndDeviceIds å¨åç³»ç»ï¼orgTagï¼ä¸æ¥å
¥ç设å¤(FBox)æç¨åè®®å设å¤idéå,å¤ä¸ªç¨éå·éå¼ï¼åè®®ä¸IDç¨æ£ææ éå¼ï¼ä¾å¦ï¼sd1/338220031439,sd1/338220031440 | 
|---|
|  |  |  | #   mqtt.subTopicAndQos è®¢é
主é¢ä¸Qosï¼ä¸»é¢åä¸å
¶Qosç¨éå·éå¼ï¼å¤ä¸ªä¸»é¢åQosç¨åå·éå¼ï¼ä¾å¦ï¼topic1,1;topic2,1;topic3,1 | 
|---|
|  |  |  | #   mqtt.subTopicAndQos è®¢é
主é¢ä¸Qosï¼ä¸»é¢åä¸å
¶Qosç¨éå·éå¼ï¼å¤ä¸ªä¸»é¢åQosç¨åå·éå¼ï¼ä¸»é¢åç±ç«ç±»ååç¼å·ç»æï¼å³ä¸ä¸ªFBoxå¯ä»¥æ¥å
¥å¤ä¸ªåç±»åçæµç«ï¼ç«ç¼å·ä»1å¼å§ï¼ç«ç±»åä¸ç¼å·ç¨æ£ææ éå¼ï¼ä¾å¦ï¼weather/1,1;weather/2,1;manure/1,1 | 
|---|
|  |  |  | # 233æå¡å¨ï¼ | 
|---|
|  |  |  | #   å
è°ï¼ mqtt.enable=false  mqtt.protocolAndDeviceIds= mqtt.topicAndQos= | 
|---|
|  |  |  | #   æ²çï¼ mqtt.enable=false  mqtt.protocolAndDeviceIds= mqtt.topicAndQos= | 
|---|
|  |  |  | #   æµè¯ï¼ mqtt.enable=false  mqtt.protocolAndDeviceIds= mqtt.topicAndQos= | 
|---|
|  |  |  | #   æ¢
æ±ï¼ mqtt.enable=false  mqtt.protocolAndDeviceIds= mqtt.topicAndQos= | 
|---|
|  |  |  | # 121æå¡å¨ï¼ | 
|---|
|  |  |  | #   æ°å¤ï¼ mqtt.enable=true  mqtt.protocolAndDeviceIds=? mqtt.topicAndQos=weather,1;soil,1;manure,1;state,1 | 
|---|
|  |  |  | #   æ°å¤ï¼ mqtt.enable=true  mqtt.protocolAndDeviceIds=? mqtt.topicAndQos=weather/1,1;soil/1,1;manure/1,1;state/1,1 | 
|---|
|  |  |  | #   å»¶åºï¼ mqtt.enable=false  mqtt.protocolAndDeviceIds= mqtt.topicAndQos= | 
|---|
|  |  |  | #   é»é¾æ±ï¼ mqtt.enable=false  mqtt.protocolAndDeviceIds= mqtt.topicAndQos= | 
|---|
|  |  |  | #   çå·ï¼ mqtt.enable=false  mqtt.protocolAndDeviceIds= mqtt.topicAndQos= | 
|---|
|  |  |  | #   åå·ï¼ mqtt.enable=false  mqtt.protocolAndDeviceIds= mqtt.topicAndQos= | 
|---|
|  |  |  | #   éå·ï¼ mqtt.enable=true  mqtt.protocolAndDeviceIds=? mqtt.topicAndQos=weather,1;soil,1;manure,1;state,1 | 
|---|
|  |  |  | #   éå·ï¼ mqtt.enable=true  mqtt.protocolAndDeviceIds=? mqtt.topicAndQos=weather/1,1;soil/1,1;manure/1,1;state/1,1 | 
|---|
|  |  |  | mqtt.enable=false | 
|---|
|  |  |  | mqtt.protocolAndDeviceIds=sd1/338220031439,sd1/338220031440 | 
|---|
|  |  |  | mqtt.subTopicAndQos=weather,1;soil,1;manure,1;state,1 | 
|---|
|  |  |  | mqtt.subTopicAndQos=weather/1,1;soil/1,1;manure/1,1;state/1,1 | 
|---|
|  |  |  | #MQtt设å¤å¨ä¸å®æ¶é´ï¼åéï¼åæªå叿¶æ¯ï¼è®¤ä¸ºè®¾å¤ç¦»çº¿ | 
|---|
|  |  |  | mqtt.noSubThenOff=10 | 
|---|