Error executing the transformation 'JSONPATH': An error occured while transforming JSON expression

I think you need $.device... and $.current... (note the . after the $)

This has been working fine all the way to openHAB 2.3.

You rock my world, this fixed my issues with openHAB 2.3.

Can you post you rule that work now, please?
I am interested, this will come up again for someone else

Sure;

rule "Outback JSON parsing"
when
        Item Outback_Dev_status changed
then  
  //logInfo("LOCK", "Outback JSON - Locking")
  lock.lock()
  try {
    var String json = Outback_Dev_status.state.toString
    var String result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)].SOC", json)
    var Number battery_soc = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)].Batt_V", json)
    var Number battery_voltage = new Double(result.replaceAll("[^\\d.-]", ""))
    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.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)].Shunt_B_I", json)
    var Number shunt_b_amps = new Double(result.replaceAll("[^\\d.-]", ""))
    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.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==10)].Out_kWh_today", json)
    var Number today_out_kwh = new Double(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==5)].Out_I", json)
    var Number charge_a_amps = new Double(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==6)].Out_I", json)
    var Number charge_b_amps = new Double(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==7)].Out_I", json)
    var Number charge_c_amps = new Double(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==8)].Out_I", json)
    var Number charge_d_amps = new Double(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==5)].Out_kWh", json)
    var Number charge_a_kwh = new Double(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==6)].Out_kWh", json)
    var Number charge_b_kwh = new Double(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==7)].Out_kWh", json)
    var Number charge_c_kwh = new Double(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==8)].Out_kWh", json)
    var Number charge_d_kwh = new Double(result.replaceAll("[^\\d.-]", ""))
    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.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].Buy_I_L1", json)
    var Number a_l1_buy_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].Sell_I_L1", json)
    var Number a_l1_sell_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].Inv_I_L1", json)
    var Number a_l1_inv_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].VAC_out_L2", json)
    var Number a_l2_voltage = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].Buy_I_L2", json)
    var Number a_l2_buy_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].Sell_I_L2", json)
    var Number a_l2_sell_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)].Inv_I_L2", json)
    var Number a_l2_inv_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    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.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].Buy_I_L1", json)
    var Number b_l1_buy_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].Sell_I_L1", json)
    var Number b_l1_sell_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].Inv_I_L1", json)
    var Number b_l1_inv_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].VAC_out_L2", json)
    var Number b_l2_voltage = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].Buy_I_L2", json)
    var Number b_l2_buy_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].Sell_I_L2", json)
    var Number b_l2_sell_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)].Inv_I_L2", json)
    var Number b_l2_inv_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    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.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].Buy_I_L1", json)
    var Number c_l1_buy_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].Sell_I_L1", json)
    var Number c_l1_sell_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].Inv_I_L1", json)
    var Number c_l1_inv_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].VAC_out_L2", json)
    var Number c_l2_voltage = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].Buy_I_L2", json)
    var Number c_l2_buy_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].Sell_I_L2", json)
    var Number c_l2_sell_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    result = transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)].Inv_I_L2", json)
    var Number c_l2_inv_amps = new Integer(result.replaceAll("[^\\d.-]", ""))
    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
1 Like