Опрос счетчика DDS238-1 ZN

rule "POWER Опросить электросчетчики и считать показатели"
when
    Time cron "*/3 * * * * ?" 
then
    if (alarmPowerOff.state == ON) return;
        var String[] bytes 
        var String output = sendHttpGetRequest("http://192.168.1.6/sec/?uart_tx=010300000012&mode=rs485")
        Thread.sleep(100)
        if (output == "Done"){
                output = sendHttpGetRequest("http://192.168.1.6/sec/?uart_rx=1&mode=rs485")
                if (output.indexOf("CRC Error") == -1){
                        //01|03|24|00|02|3b|88|00|00|00|00|00|00|00|00|00|00|00|00|00|00|00|00|00|02|3b|88|08|b7|01|03|02|21|00|c0|03|ad|13|89
                        // 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 
                        bytes = output.split("\\|")
                        sysSens_PowMeterCounter.postUpdate(Integer.parseInt(bytes.get(3) + bytes.get(4) + bytes.get(5) + bytes.get(6), 16) as Number / 100)
                        sysSens_PowMeterVoltage.postUpdate(Integer.parseInt(bytes.get(27) + bytes.get(28),  16) as Number / 10)
                        sysSens_PowMeterCurrent.postUpdate(Integer.parseInt(bytes.get(29) + bytes.get(30),  16) as Number / 100)
                        sysSens_PowMeterPowerLoad.postUpdate(Math.abs(Integer.parseInt(bytes.get(31) + bytes.get(32),  16).shortValue) as Number )
                        sysSens_PowMeterReactPowerLoad.postUpdate(Integer.parseInt(bytes.get(33) + bytes.get(34), 16) as Number )
                        sysSens_PowMeterPFactor.postUpdate(Integer.parseInt(bytes.get(35) + bytes.get(36), 16) as Number / 1000)
                        sysSens_PowMeterFreq.postUpdate(Integer.parseInt(bytes.get(37) + bytes.get(38), 16) as Number / 100)
                } //else {logError("   ---> Power", "Ошибка датчика 'sysSens_PowMeterCounter' - " + output)}
        } else { logError("   ---> Power", "Ошибка датчика 'sysSens_PowMeterCounter' - " + output)}

        //---------------------------------------------------------------------------------------------------------------------------------
        //sysSens_WashPowMeterCnt
        output = sendHttpGetRequest("http://192.168.1.6/sec/?uart_tx=020300000012&mode=rs485")
        Thread.sleep(100)
        if (output == "Done"){
                output = sendHttpGetRequest("http://192.168.1.6/sec/?uart_rx=1&mode=rs485")
                if (output.indexOf("CRC Error") == -1){
                        bytes = output.split("\\|")
                        sysSens_WashPowMeterCnt.postUpdate(Integer.parseInt(bytes.get(3) + bytes.get(4) + bytes.get(5) + bytes.get(6), 16) as Number / 100)  
                        sysSens_WashPowMeterW.postUpdate(Math.abs(Integer.parseInt(bytes.get(31) + bytes.get(32), 16).shortValue) as Number)
                } //else { logError("   ---> Power", "Ошибка датчика 'sysSens_WashPowMeterCnt' - " + output) }
        } else { logError("   ---> Power", "Ошибка датчика 'sysSens_WashPowMeterCnt' - " + output)}
        
        //---------------------------------------------------------------------------------------------------------------------------------
        //sysSens_DishPowMeterCnt
        output = sendHttpGetRequest("http://192.168.1.6/sec/?uart_tx=030300000012&mode=rs485")
        Thread.sleep(100)
        if (output == "Done"){
                output = sendHttpGetRequest("http://192.168.1.6/sec/?uart_rx=1&mode=rs485")
                if (output.indexOf("CRC Error") == -1){
                        bytes = output.split("\\|")
                        sysSens_DishPowMeterCnt.postUpdate(Integer.parseInt(bytes.get(3) + bytes.get(4) + bytes.get(5) + bytes.get(6), 16) as Number / 100)  
                        sysSens_DishPowMeterW.postUpdate(Math.abs(Integer.parseInt(bytes.get(31) + bytes.get(32), 16).shortValue()) as Number)
                } //else {logError("   ---> Power", "Ошибка датчика 'sysSens_DishPowMeterCnt' - " + output)}
        } else { logError("   ---> Power", "Ошибка датчика 'sysSens_DishPowMeterCnt' - " + output)}
        
        //---------------------------------------------------------------------------------------------------------------------------------
        //sysSens_OvenPowMeterCnt
        output = sendHttpGetRequest("http://192.168.1.6/sec/?uart_tx=040300000012&mode=rs485")
        Thread.sleep(100)
        if (output == "Done"){
                output = sendHttpGetRequest("http://192.168.1.6/sec/?uart_rx=1&mode=rs485")
                Thread.sleep(20)
                if (output.indexOf("CRC Error") == -1){
                        bytes = output.split("\\|")
                        sysSens_OvenPowMeterCnt.postUpdate(Integer.parseInt(bytes.get(3) + bytes.get(4) + bytes.get(5) + bytes.get(6), 16) as Number / 100)  
                        sysSens_OvenPowMeterW.postUpdate(Math.abs(Integer.parseInt(bytes.get(31) + bytes.get(32), 16).shortValue) as Number)
                } //else {logError("   ---> Power", "Ошибка датчика 'sysSens_OvenPowMeterCnt' - " + output)}
        } else { logError("   ---> Power", "Ошибка датчика 'sysSens_OvenPowMeterCnt' - " + output)}
end

Источник: martiniman » 05 фев 2022, 15:49