1、新了解到,FBox可接多台套水肥机、气象站、墒情站,相应修改协议(主要是主题部分);
2、编写《水肥机、气象站、墒情站协议》(未完)。
11个文件已修改
1个文件已添加
93 ■■■■ 已修改文件
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttMsgParser.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttTopic.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/Vo4Up.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolParserSdV1.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComCtrlVo.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComSetParamVo.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/SoilVo.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/StateVo.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/WeatherVo.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.properties 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/文档/水肥气象墒情/水肥站、气象站、墒情站协议.docx 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttMsgParser.java
@@ -3,6 +3,7 @@
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;
/**
@@ -14,14 +15,21 @@
    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{
@@ -30,7 +38,7 @@
    }
    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 {
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/MqttTopic.java
@@ -16,18 +16,19 @@
    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;
    }
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/Vo4Up.java
@@ -6,5 +6,8 @@
 * @Description
 */
public interface Vo4Up {
    public void setNo(Integer no) ;
    String toString() ;
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/ProtocolParserSdV1.java
@@ -30,7 +30,7 @@
        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;
@@ -56,9 +56,10 @@
                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);
@@ -131,7 +132,7 @@
        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 ;
    }
@@ -147,7 +148,7 @@
        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 ;
    }
@@ -163,7 +164,7 @@
        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 ;
    }
@@ -179,7 +180,7 @@
        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 ;
    }
@@ -196,7 +197,7 @@
        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 ;
    }
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComCtrlVo.java
@@ -6,6 +6,9 @@
 * @Description
 */
public class ComCtrlVo {
    public Integer no ;//设备编号
    //启停动作,true是,false否
    //可以执行功能码 00,01,02,03的动作
    public boolean startTrueStopFalse;//
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/comParam/ComSetParamVo.java
@@ -1,6 +1,5 @@
package com.dy.common.mw.protocol4Mqtt.pSdV1.comParam;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -14,6 +13,9 @@
@NoArgsConstructor
@AllArgsConstructor
public class ComSetParamVo {
    //设备编号
    public Integer no ;
    // æ…拌设定时间
    public Integer stirDuration ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/ManureVo.java
@@ -15,6 +15,8 @@
    @JSONField(name = "flexem_message_id")
    public Integer messageId ;//消息ID
    public Integer no ;//测站编号,其不在JSON数据中,其中主题中
    @JSONField(name = "肥料流量")
    public Float manureFlow ;//肥料流量
@@ -28,6 +30,12 @@
    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)) ;
@@ -49,4 +57,5 @@
        sb.append("\n") ;
        return sb.toString() ;
    }
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/SoilVo.java
@@ -15,6 +15,8 @@
    @JSONField(name = "flexem_message_id")
    public Integer messageId ;//消息ID
    public Integer no ;//测站编号,其不在JSON数据中,其中主题中
    @JSONField(name = "土壤湿度1")
    public Float soilHumidity1 ;//土壤湿度1
@@ -43,6 +45,12 @@
    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)) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/StateVo.java
@@ -15,6 +15,8 @@
    @JSONField(name = "flexem_message_id")
    public Integer messageId ;//消息ID
    public Integer no ;//测站编号,其不在JSON数据中,其中主题中
    @JSONField(name = "搅拌运行")
    public Byte stirRunning ;//搅拌运行
@@ -31,6 +33,12 @@
    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)) ;
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol4Mqtt/pSdV1/upVos/WeatherVo.java
@@ -16,6 +16,8 @@
    @JSONField(name = "flexem_message_id")
    public Integer messageId ;//消息ID
    public Integer no ;//测站编号,其不在JSON数据中,其中主题中
    @JSONField(name = "二氧化碳")
    public Integer carbonDioxide ;//二氧化碳
@@ -42,6 +44,12 @@
    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)) ;
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/resources/config.properties
@@ -24,7 +24,7 @@
#   ç”˜å·žï¼š 60103
#   å‡‰å·žï¼š 60104
#   é‡‘川: 60105
tcp.port=60000
tcp.port=60000ba_divide
#RTU上行数据最小间隔,大于这个间隔认为设备离线了,测控一体阀是3,表阀一体机是6,默认采用时间最长的6
base.upData.min.interval=6
@@ -32,21 +32,21 @@
# 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
pipIrr-platform/Îĵµ/Ë®·ÊÆøÏóÉÊÇé/Ë®·ÊÕ¾¡¢ÆøÏóÕ¾¡¢ÉÊÇéվЭÒé.docx
Binary files differ