I am working to migrate to OH2, and can’t seem to get JSONPATH to work right. My Rule is:
rule "Outback JSON parsing"
when
Item Outback_Dev_status changed
then
logInfo("Testing", "JSON - Locking")
lock.lock()
try {
var String json = Outback_Dev_status.state.toString
var Number battery_soc = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)][0].SOC", json))
var Number battery_voltage = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)][0].Batt_V", json))
var String battery_temp_string = new String(transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)][0].Batt_temp", json))
var Number battery_temp = new Integer(battery_temp_string.split(" ").get(0))
var Number shunt_a_amps = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)][0].Shunt_A_I", json))
var Number shunt_b_amps = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)][0].Shunt_B_I", json))
var Number shunt_total_amps = shunt_a_amps + shunt_b_amps
var Number today_in_kwh = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)][0].In_kWh_today", json))
var Number today_out_kwh = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)][0].Out_kWh_today", json))
var Number charge_a_amps = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==5)][0].Out_I", json))
var Number charge_b_amps = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==6)][0].Out_I", json))
var Number charge_c_amps = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==7)][0].Out_I", json))
var Number charge_d_amps = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==8)][0].Out_I", json))
var Number charge_a_kwh = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==5)][0].Out_kWh", json))
var Number charge_b_kwh = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==6)][0].Out_kWh", json))
var Number charge_c_kwh = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==7)][0].Out_kWh", json))
var Number charge_d_kwh = new Double(transform("JSONPATH", "$.devstatus.ports[?(@.Port==8)][0].Out_kWh", json))
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
}
}
var Number a_l1_voltage = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)][0].VAC_out_L1", json))
var Number a_l1_buy_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)][0].Buy_I_L1", json))
var Number a_l1_sell_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)][0].Sell_I_L1", json))
var Number a_l1_inv_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)][0].Inv_I_L1", json))
var Number a_l2_voltage = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)][0].VAC_out_L2", json))
var Number a_l2_buy_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)][0].Buy_I_L2", json))
var Number a_l2_sell_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)][0].Sell_I_L2", json))
var Number a_l2_inv_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)][0].Inv_I_L2", json))
var String a_ac_mode = new String(transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)][0].AC_mode", json))
var String a_inverter_mode = new String(transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)][0].INV_mode", json))
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)
var Number b_l1_voltage = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)][0].VAC_out_L1", json))
var Number b_l1_buy_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)][0].Buy_I_L1", json))
var Number b_l1_sell_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)][0].Sell_I_L1", json))
var Number b_l1_inv_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)][0].Inv_I_L1", json))
var Number b_l2_voltage = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)][0].VAC_out_L2", json))
var Number b_l2_buy_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)][0].Buy_I_L2", json))
var Number b_l2_sell_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)][0].Sell_I_L2", json))
var Number b_l2_inv_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)][0].Inv_I_L2", json))
var String b_ac_mode = new String(transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)][0].AC_mode", json))
var String b_inverter_mode = new String(transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)][0].INV_mode", json))
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)
var Number c_l1_voltage = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)][0].VAC_out_L1", json))
var Number c_l1_buy_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)][0].Buy_I_L1", json))
var Number c_l1_sell_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)][0].Sell_I_L1", json))
var Number c_l1_inv_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)][0].Inv_I_L1", json))
var Number c_l2_voltage = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)][0].VAC_out_L2", json))
var Number c_l2_buy_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)][0].Buy_I_L2", json))
var Number c_l2_sell_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)][0].Sell_I_L2", json))
var Number c_l2_inv_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)][0].Inv_I_L2", json))
var String c_ac_mode = new String(transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)][0].AC_mode", json))
var String c_inverter_mode = new String(transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)][0].INV_mode", json))
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 / 90) + 100
sendHttpGetRequest("http://localhost:8888/10.88.64.220/" + solar_color + "/100/8/3500")
logInfo("Power", "Solar: " + total_watts + ", Color: " + solar_color)
}
finally {
logInfo("Testing", "JSON - Ready to Unlock")
lock.unlock()
logInfo("Testing", "JSON - Unlocked")
}
end
This rules works fine in openHAB 1.8.3.