I have this big long rule that worked in openHAB 2.2 but now fails in the latest 2.3. At least one problem is;
var Number battery_soc = new Integer(result.substring(1,result.indexOf(']')))
Since I never get to the next line.
The full rule:
rule "Outback JSON parsing"
when
Item Outback_Dev_status changed
then
logInfo("LOCK", "Outback JSON - Locking")
lock.lock()
try {
logInfo("Testing", "Starting Testing")
var String json = Outback_Dev_status.state.toString
logInfo("Testing", "Testing 1: " + json)
var String result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)].SOC", json)
logInfo("Testing", "Testing 2: " + result)
var Number battery_soc = new Integer(result.substring(1,result.indexOf(']')))
logInfo("Testing", "Testing 3: " + battery_soc)
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)].Batt_V", json)
var Number battery_voltage = new Double(result.substring(1,result.indexOf(']')))
logInfo("Testing", "Testing" + battery_voltage)
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)].Batt_temp", json)
var Number battery_temp = new Integer(result.replaceAll("[^\\d.-]", ""))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)].Shunt_A_I", json)
var Number shunt_a_amps = new Double(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)].Shunt_B_I", json)
var Number shunt_b_amps = new Double(result.substring(1,result.indexOf(']')))
var Number shunt_total_amps = shunt_a_amps + shunt_b_amps
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)].In_kWh_today", json)
var Number today_in_kwh = new Double(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)].Out_kWh_today", json)
var Number today_out_kwh = new Double(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==5)].Out_I", json)
var Number charge_a_amps = new Double(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==6)].Out_I", json)
var Number charge_b_amps = new Double(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==7)].Out_I", json)
var Number charge_c_amps = new Double(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==8)].Out_I", json)
var Number charge_d_amps = new Double(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==5)].Out_kWh", json)
var Number charge_a_kwh = new Double(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==6)].Out_kWh", json)
var Number charge_b_kwh = new Double(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==7)].Out_kWh", json)
var Number charge_c_kwh = new Double(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==8)].Out_kWh", json)
var Number charge_d_kwh = new Double(result.substring(1,result.indexOf(']')))
var Number charge_a_watts = charge_a_amps * battery_voltage
var Number charge_b_watts = charge_b_amps * battery_voltage
var Number charge_c_watts = charge_c_amps * battery_voltage
var Number charge_d_watts = charge_d_amps * battery_voltage
var Number total_watts = charge_a_watts + charge_b_watts + charge_c_watts + charge_d_watts
var Number today_solar_kwh = charge_a_kwh + charge_b_kwh + charge_c_kwh + charge_d_kwh
postUpdate(Battery_Charge, battery_soc)
postUpdate(Battery_Voltage, battery_voltage)
postUpdate(Battery_Temp, battery_temp * 1.8 + 32)
postUpdate(Solar_Charge_A_Watts, charge_a_watts)
postUpdate(Solar_Charge_B_Watts, charge_b_watts)
postUpdate(Solar_Charge_C_Watts, charge_c_watts)
postUpdate(Solar_Charge_D_Watts, charge_d_watts)
postUpdate(Solar_Total_Watts, total_watts)
postUpdate(Shunt_A_Amps, shunt_a_amps)
postUpdate(Shunt_B_Amps, shunt_b_amps)
postUpdate(Shunt_Total_Amps, shunt_total_amps)
postUpdate(Today_In_kWh, today_in_kwh)
postUpdate(Today_Out_kWh, today_out_kwh)
postUpdate(Today_Solar_kWh, today_solar_kwh)
// Low Battery voltage generator start
if (battery_voltage <= 43) {
sendCommand(Battery_Low, ON)
if (Generator_Auto.state == OFF && Generator_Failed.state == OFF) {
sendMail("8323303810@mms.att.net", "Battery", "Battery voltage at " + battery_voltage + " volts!!!," + " load at " + Inverter_Total_Watts.state + " watts")
sendCommand(Generator_Auto, ON)
Thread::sleep(45000) // Let Generator spool up
}
}
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].VAC_out_L1", json)
var Number a_l1_voltage = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].Buy_I_L1", json)
var Number a_l1_buy_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].Sell_I_L1", json)
var Number a_l1_sell_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].Inv_I_L1", json)
var Number a_l1_inv_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].VAC_out_L2", json)
var Number a_l2_voltage = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].Buy_I_L2", json)
var Number a_l2_buy_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].Sell_I_L2", json)
var Number a_l2_sell_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].Inv_I_L2", json)
var Number a_l2_inv_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].AC_mode", json)
var String a_ac_mode = new String(result.replaceAll("[^a-zA-Z ]", ""))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].INV_mode", json)
var String a_inverter_mode = new String(result.replaceAll("[^a-zA-Z ]", ""))
var Number a_l1_buy_watts = a_l1_voltage * a_l1_buy_amps
var Number a_l2_buy_watts = a_l1_voltage * a_l2_buy_amps
var Number buy_a_watts = a_l1_buy_watts + a_l2_buy_watts
var Number a_l1_sell_watts = a_l1_voltage * a_l1_sell_amps
var Number a_l2_sell_watts = a_l1_voltage * a_l2_sell_amps
var Number sell_a_watts = a_l1_sell_watts + a_l2_sell_watts
var Number a_l1_watts = a_l1_voltage * a_l1_inv_amps
var Number a_l2_watts = a_l2_voltage * a_l2_inv_amps
var Number inverter_a_watts = a_l1_watts + a_l2_watts
postUpdate(Buy_A_Watts, buy_a_watts)
postUpdate(Sell_A_Watts, sell_a_watts)
postUpdate(Inverter_A_Watts, inverter_a_watts)
postUpdate(AC_Mode_A, a_ac_mode)
postUpdate(Inverter_Mode_A, a_inverter_mode)
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].VAC_out_L1", json)
var Number b_l1_voltage = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].Buy_I_L1", json)
var Number b_l1_buy_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].Sell_I_L1", json)
var Number b_l1_sell_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].Inv_I_L1", json)
var Number b_l1_inv_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].VAC_out_L2", json)
var Number b_l2_voltage = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].Buy_I_L2", json)
var Number b_l2_buy_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].Sell_I_L2", json)
var Number b_l2_sell_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].Inv_I_L2", json)
var Number b_l2_inv_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].AC_mode", json)
var String b_ac_mode = new String(result.replaceAll("[^a-zA-Z ]", ""))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].INV_mode", json)
var String b_inverter_mode = new String(result.replaceAll("[^a-zA-Z ]", ""))
var Number b_l1_buy_watts = b_l1_voltage * b_l1_buy_amps
var Number b_l2_buy_watts = b_l1_voltage * b_l2_buy_amps
var Number buy_b_watts = b_l1_buy_watts + b_l2_buy_watts
var Number b_l1_sell_watts = b_l1_voltage * b_l1_sell_amps
var Number b_l2_sell_watts = b_l1_voltage * b_l2_sell_amps
var Number sell_b_watts = b_l1_sell_watts + b_l2_sell_watts
var Number b_l1_watts = b_l1_voltage * b_l1_inv_amps
var Number b_l2_watts = b_l2_voltage * b_l2_inv_amps
var Number inverter_b_watts = b_l1_watts + b_l2_watts
postUpdate(Buy_B_Watts, buy_b_watts)
postUpdate(Sell_B_Watts, sell_b_watts)
postUpdate(Inverter_B_Watts, inverter_b_watts)
postUpdate(AC_Mode_B, b_ac_mode)
postUpdate(Inverter_Mode_B, b_inverter_mode)
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].VAC_out_L1", json)
var Number c_l1_voltage = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].Buy_I_L1", json)
var Number c_l1_buy_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].Sell_I_L1", json)
var Number c_l1_sell_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].Inv_I_L1", json)
var Number c_l1_inv_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].VAC_out_L2", json)
var Number c_l2_voltage = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].Buy_I_L2", json)
var Number c_l2_buy_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].Sell_I_L2", json)
var Number c_l2_sell_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].Inv_I_L2", json)
var Number c_l2_inv_amps = new Integer(result.substring(1,result.indexOf(']')))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].AC_mode", json)
var String c_ac_mode = new String(result.replaceAll("[^a-zA-Z ]", ""))
result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].INV_mode", json)
var String c_inverter_mode = new String(result.replaceAll("[^a-zA-Z ]", ""))
var Number c_l1_buy_watts = c_l1_voltage * c_l1_buy_amps
var Number c_l2_buy_watts = c_l1_voltage * c_l2_buy_amps
var Number buy_c_watts = c_l1_buy_watts + c_l2_buy_watts
var Number c_l1_sell_watts = c_l1_voltage * c_l1_sell_amps
var Number c_l2_sell_watts = c_l1_voltage * c_l2_sell_amps
var Number sell_c_watts = c_l1_sell_watts + c_l2_sell_watts
var Number c_l1_watts = c_l1_voltage * c_l1_inv_amps
var Number c_l2_watts = c_l2_voltage * c_l2_inv_amps
var Number inverter_c_watts = c_l1_watts + c_l2_watts
postUpdate(Buy_C_Watts, buy_c_watts)
postUpdate(Sell_C_Watts, sell_c_watts)
postUpdate(Inverter_C_Watts, inverter_c_watts)
postUpdate(AC_Mode_C, c_ac_mode)
postUpdate(Inverter_Mode_C, c_inverter_mode)
var Number buy_total = buy_a_watts + buy_b_watts + buy_c_watts
postUpdate(Buy_Total_Watts, buy_total)
var Number sell_total = sell_a_watts + sell_b_watts + sell_c_watts
postUpdate(Sell_Total_Watts, sell_total)
var Number inverter_total = inverter_a_watts + inverter_b_watts + inverter_c_watts
postUpdate(Inverter_Total_Watts, inverter_total)
// LIFX Power Monitor
var solar_color = (total_watts / 45) + 100
sendCommand(Solar_Color, solar_color+",100,15")
}
catch(Throwable t) {
logError("Error", "Some bad stuff happened in my outback rule: " + t.toString)
}
finally {
lock.unlock()
logInfo("LOCK", "Outback JSON - Unlocked")
}
end