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