SOURCE

console 命令行工具 X clear

                    
>
console
var code = '2A0101006F020000634A2640A32100000000000000050000000801004F0602000000010000000100000000220524224404000000000001631B00040001000101000200040000012C0003000800000000000000000004001438393836303631393130303032353238373632362C4823'
code = '2A010100430000005BDE57912F8100000000000000000000800900003004000000FF000000EF0000000000240221203755000200010001050002000400000078B0AB23'

code = code.replace(/\s*/g,"")
//console.log(code)

var index = 0
document.getElementById("show").innerHTML = getFormatCode()

function getFormatCode() {
    let orderNo = code.substring(48,52)
    if(orderNo == '0008') {
        return getEx1FormatCode()
    }else if(orderNo == '8009') {
        return getSendEx1FormatCode()
    }    
}

function getSendEx1FormatCode() {
    var formatCode = getCodeStr(2)
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(4)
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(4)
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(2)
    var sn = getCodeStr(16)
    formatCode += '<br /><span class="m1"></span>' + sn + '<span class="annotation">//SN ' + parseInt(sn, 16) + '</span>'
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(16)
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(4)
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(4)
    formatCode += '<br /><span class="m2"></span>' + getCodeStr(2) + '<span class="annotation">//接口类型:1:UART</span>'
    var length = getCodeStr(4)
    formatCode += '<br /><span class="m2"></span>' + length + '<span class="annotation">//长度 ' + parseInt(length, 16) + '</span>'
    var operateCode = getCodeStr(2)
    formatCode += '<br /><span class="m3"></span>' + operateCode + '<span class="annotation">//操作码 1:电磁阀控制 2:综合控制 3:请求SIM卡信息 4:综合控制EX1</span>'
    if(operateCode == 2) {
        let colorStr = getCodeStr(4)
        formatCode += '<br /><span class="m3"></span>' + colorStr + '<span class="annotation">//颜色状态 ' + parseInt(colorStr, 16).toString(2) + '</span>'
        let lightStr = getCodeStr(4)
        formatCode += '<br /><span class="m3"></span>' + lightStr + '<span class="annotation">//闪烁状态 ' + parseInt(lightStr, 16).toString(2) + '</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(2) + '<span class="annotation">//电磁阀 0:关闭 1:打开</span>'
        var extCount = getCodeStr(4)    
        formatCode += '<br /><span class="m3"></span>' + extCount + '<span class="annotation">//扩展信息数量</span>'
    }else if(operateCode == 4) {
        let colorStr = getCodeStr(8)
        formatCode += '<br /><span class="m3"></span>' + colorStr + '<span class="annotation">//颜色状态 ' + parseInt(colorStr, 16).toString(2) + '</span>'
        let lightStr = getCodeStr(8)
        formatCode += '<br /><span class="m3"></span>' + lightStr + '<span class="annotation">//闪烁状态 ' + parseInt(lightStr, 16).toString(2) + '</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(8) + '<span class="annotation">//呼吸灯状态</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(2) + '<span class="annotation">//电磁阀 0:关闭 1:打开</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(12) + '<span class="annotation">//YY-MM-DD-hh-mm-ss</span>'    
        //扩展字段 
        var extCount = getCodeStr(4)    
        formatCode += '<br /><span class="m3"></span>' + extCount + '<span class="annotation">//扩展信息数量</span>'
        for(var i = 0; i < extCount; i++) {
            var extLength = 0
            if(i == 0) {
                extLength = 10
            }else if(i == 1) {
                extLength = 16
            }else if(i == 2) {
                extLength = 24
            }else if(i == 3) {
                extLength = 48
            }else if(i == 4) {
                extLength = 16
            }else if(i == 5) {
                extLength = 12
            }
            var extStr = getCodeStr(extLength)
            var extContentLength = parseInt(extStr.substring(4,8), 16) * 2
            var extContent = extStr.substr(-extContentLength)
            console.log(extContent)
            var remarkStr = ''
            if(i == 0) {
                remarkStr = parseInt(extContent, 16) + ' 用水时状态:0:正常 不响(1logo5秒+闪红 2logo5秒+长红)3:只响  响(4logo5秒+闪红 5logo5秒+长红)'
            }else if(i == 1) {
                remarkStr = parseInt(extContent, 16) + ' 超长用水报警阀值(单位:秒)';
            }else if(i == 2) {
                var flowStr = extStr.substring(8,32)            
                remarkStr = parseInt(extContent, 16) + ' 设备累积水流脉冲量 ' + parseInt(flowStr, 16) / 1515 + '升'
            }else if(i == 3) {
                remarkStr = parseInt(extContent, 16) + ' SIMICCID'
            }else if(i == 4) {
                remarkStr = parseInt(extContent, 16) + ' TDS值'
            }else if(i == 5) {
                remarkStr = parseInt(extContent, 16) + ' 水压传感ADC值'
            }
            formatCode += '<br /><span class="m3"></span>' + extStr + '<span class="annotation">//' + remarkStr + '</span>'
        }
    }
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(4)
    formatCode += '<br /><span></span>' + getCodeStr(2)
    return formatCode
}

function getEx1FormatCode() {
    var formatCode = getCodeStr(2)
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(4)
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(4)
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(2)
    var sn = getCodeStr(16)
    formatCode += '<br /><span class="m1"></span>' + sn + '<span class="annotation">//SN ' + parseInt(sn, 16) + '</span>'
    var model = getCodeStr(16)
    formatCode += '<br /><span class="m1"></span>' + model
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(4)
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(4)
    formatCode += '<br /><span class="m2"></span>' + getCodeStr(2) + '<span class="annotation">//接口类型 1:UART</span>'
    var length = getCodeStr(4)
    formatCode += '<br /><span class="m2"></span>' + length + '<span class="annotation">//长度 ' + parseInt(length, 16) + '</span>'
    var operateCode = getCodeStr(2)
    if(operateCode == 1) {
        formatCode += '<br /><span class="m3"></span>' + operateCode + '<span class="annotation">//操作码</span>'
        var alarmCode = getCodeStr(2)
        formatCode += '<br /><span class="m3"></span>' + alarmCode + '<span class="annotation">//报警标志位 ' + getAlarmStr(alarmCode) + '</span>'
        let colorStr = getCodeStr(4)
        formatCode += '<br /><span class="m3"></span>' + colorStr + '<span class="annotation">//颜色状态 ' + parseInt(colorStr, 16).toString(2) + '</span>'
        let lightStr = getCodeStr(4)
        formatCode += '<br /><span class="m3"></span>' + lightStr + '<span class="annotation">//闪烁状态 ' + parseInt(lightStr, 16).toString(2) + '</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(12) + '<span class="annotation">//YY-MM-DD-hh-mm-ss</span>'
        var electricQuantity = getCodeStr(2)
        formatCode += '<br /><span class="m3"></span>' + electricQuantity + '<span class="annotation">//电池余量 ' + parseInt(electricQuantity, 16) + '%</span>'
        var flowCountHex = getCodeStr(8)
        var flowCountInt = parseInt(flowCountHex, 16)
        var reviseFlowCount = 0        
        if(model == '0000000000000002') {
            reviseFlowCount = Math.round(Math.trunc(flowCountInt / 30) * 5)
            console.log(reviseFlowCount)
            reviseFlowCount += Math.round((flowCountInt % 30 / 5.8))            
            console.log(reviseFlowCount)
        }else {
            if(flowCountInt > 32) {
                reviseFlowCount = Math.trunc(flowCountInt / 1.1666)
            }else {
                reviseFlowCount = Math.trunc(flowCountInt - (flowCountInt / 6))
            }
        }
        formatCode += '<br /><span class="m3"></span>' + flowCountHex + '<span class="annotation">//水流传感(报' + flowCountInt + '升,校正' + reviseFlowCount + '升)</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(2) + '<span class="annotation">//电磁阀 0:关闭 1:打开</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(2) + '<span class="annotation">//信道误码率</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(2) + '<span class="annotation">//信号强度指示</span>'
    }else if(operateCode == 2) {
        //复位
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(4) + '<span class="annotation">//滤芯复位状态</span>'
    }else if(operateCode == 4) {
        //上报单次流量值
        formatCode += '<br /><span class="m3"></span>' + operateCode + '<span class="annotation">//操作码:上报单次流量值</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(8) + '<span class="annotation">//水流检测脉冲数</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(8) + '<span class="annotation">//持续时间,单位秒</span>'
    }else if(operateCode == 6) {
        formatCode += '<br /><span class="m3"></span>' + operateCode + '<span class="annotation">//操作码</span>'
        var alarmCode = getCodeStr(2)
        formatCode += '<br /><span class="m3"></span>' + alarmCode + '<span class="annotation">//报警标志位 ' + getAlarmStr(alarmCode) + '</span>'
        let colorStr = getCodeStr(8)
        formatCode += '<br /><span class="m3"></span>' + colorStr + '<span class="annotation">//颜色状态 ' + parseInt(colorStr, 16).toString(2) + '</span>'
        let lightStr = getCodeStr(8)
        formatCode += '<br /><span class="m3"></span>' + lightStr + '<span class="annotation">//闪烁状态 ' + parseInt(lightStr, 16).toString(2) + '</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(8) + '<span class="annotation">//呼吸灯状态</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(12) + '<span class="annotation">//YY-MM-DD-hh-mm-ss</span>'
        var electricQuantity = getCodeStr(2)
        formatCode += '<br /><span class="m3"></span>' + electricQuantity + '<span class="annotation">//电池余量' + parseInt(electricQuantity, 16) + '%</span>'
        var flowCountHex = getCodeStr(8)
        var flowCountInt = parseInt(flowCountHex, 16)
        var reviseFlowCount = 0;
        if(flowCountInt > 32) {
            reviseFlowCount = Math.trunc(flowCountInt / 1.1666)
        }else {
            reviseFlowCount = Math.trunc(flowCountInt - (flowCountInt / 6))
        }        
        formatCode += '<br /><span class="m3"></span>' + flowCountHex + '<span class="annotation">//水流传感(报' + flowCountInt + '升,校正' + reviseFlowCount + '升)</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(2) + '<span class="annotation">//电磁阀 0:关闭 1:打开</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(2) + '<span class="annotation">//信道误码率</span>'
        formatCode += '<br /><span class="m3"></span>' + getCodeStr(2) + '<span class="annotation">//信号强度指示</span>'
        //扩展字段 
        var extCount = getCodeStr(4)    
        formatCode += '<br /><span class="m3"></span>' + extCount + '<span class="annotation">//扩展信息数量</span>'
        for(var i = 0; i < extCount; i++) {
            var extLength = 0
            if(i == 0) {
                extLength = 10
            }else if(i == 1) {
                extLength = 16
            }else if(i == 2) {
                extLength = 24
            }else if(i == 3) {
                extLength = 48
            }else if(i == 4) {
                extLength = 16
            }else if(i == 5) {
                extLength = 12
            }
            var extStr = getCodeStr(extLength)
            var extContentLength = parseInt(extStr.substring(4,8), 16) * 2
            var extContent = extStr.substr(-extContentLength)
            console.log(extContent)
            var remarkStr = ''
            if(i == 0) {
                remarkStr = parseInt(extContent, 16) + ' 用水时状态:0:正常 不响(1logo5秒+闪红 2logo5秒+长红)3:只响  响(4logo5秒+闪红 5logo5秒+长红)'
            }else if(i == 1) {
                remarkStr = parseInt(extContent, 16) + ' 超长用水报警阀值(单位:秒)';
            }else if(i == 2) {
                var flowStr = extStr.substring(8,32)            
                remarkStr = parseInt(extContent, 16) + ' 设备累积水流脉冲量 ' + parseInt(flowStr, 16) / 1515 + '升'
            }else if(i == 3) {
                remarkStr = parseInt(extContent, 16) + ' SIMICCID'
            }else if(i == 4) {
                remarkStr = parseInt(extContent, 16) + ' TDS值'
            }else if(i == 5) {
                remarkStr = parseInt(extContent, 16) + ' 水压传感ADC值'
            }
            formatCode += '<br /><span class="m3"></span>' + extStr + '<span class="annotation">//' + remarkStr + '</span>'
        }
    }
    formatCode += '<br /><span class="m1"></span>' + getCodeStr(4)
    formatCode += '<br /><span></span>' + getCodeStr(2)    
    return formatCode
}

function getCodeStr(i) {
    var codeStr = code.substr(index, i)
    index += i
    return codeStr
}

function getAlarmStr(code) {
    var alarmStr = ''
    var alarmCode = parseInt(code, 16).toString(2).padStart(8, '0')
    alarmStr += alarmCode + ' : '  
    var isAlarm = false
    var alarmReverseArr = alarmCode.split('').reverse()
    for(i = 0; i < alarmReverseArr.length; i++) {        
        if(alarmReverseArr[i] == 1) {
            isAlarm = true
            switch(i) {
                case 0:
                    alarmStr += '漏水报警 '
                    break;
                case 1:
                    alarmStr += '低电报警 '
                    break;
                case 2:
                    alarmStr += '打开电磁阀 '
                    break;
                case 3:
                    alarmStr += '一键报障'
                    break;
            }            
        }
    }
    if(!isAlarm) {
        alarmStr += '无报警'
    }
    return alarmStr
}
<p id="show"></p>
#show {
    color: white;
}
.m1 {
    margin-left:20px;
}
.m2 {
    margin-left:40px;
}
.m3 {
    margin-left:60px;
}
.m4 {
    margin-left:80px;
}
.annotation {
    color: #888;
    margin-left: 10px;
}