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 |