Issue moving from openHab 2.2 to latest 2.3 - String index out of range: -2

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

What do your logs show?

2018-05-12 15:21:12.044 [INFO ] [.eclipse.smarthome.model.script.LOCK] - Outback JSON - Locking
2018-05-12 15:21:12.045 [INFO ] [lipse.smarthome.model.script.Testing] - Starting Testing
2018-05-12 15:21:12.047 [INFO ] [lipse.smarthome.model.script.Testing] - Testing 1: {"devstatus": {
"Sys_Time": 1526135109,
"Sys_Batt_V": 52.6,
"ports": [
{ "Port": 1, "Dev": "GS","Type": "60Hz","Inv_I_L1": 6,"Chg_I_L1": 0,"Buy_I_L1": 15,"Sell_I_L1": 0,"VAC1_in_L1": 119,"VAC2_in_L1": 0,"VAC_out_L1": 117,"Inv_I_L2": 6,"Chg_I_L2": 0,"Buy_I_L2": 17,"Sell_I_L2": 0,"VAC1_in_L2": 117,"VAC2_in_L2": 0,"VAC_out_L2": 118,"AC_Input": "Grid","Batt_V": 52.0,"AC_mode": "AC USE","INV_mode": "Offsetting","Warn": ["none"],"Error": ["none"],"AUX": "disabled","RELAY": "disabled"},
{ "Port": 2, "Dev": "GS","Type": "60Hz","Inv_I_L1": 3,"Chg_I_L1": 0,"Buy_I_L1": 17,"Sell_I_L1": 0,"VAC1_in_L1": 119,"VAC2_in_L1": 0,"VAC_out_L1": 118,"Inv_I_L2": 3,"Chg_I_L2": 0,"Buy_I_L2": 20,"Sell_I_L2": 0,"VAC1_in_L2": 117,"VAC2_in_L2": 0,"VAC_out_L2": 117,"AC_Input": "Grid","Batt_V": 51.6,"AC_mode": "AC USE","INV_mode": "Offsetting","Warn": ["none"],"Error": ["none"],"AUX": "disabled","RELAY": "disabled"},
{ "Port": 3, "Dev": "GS","Type": "60Hz","Inv_I_L1": 0,"Chg_I_L1": 0,"Buy_I_L1": 20,"Sell_I_L1": 0,"VAC1_in_L1": 121,"VAC2_in_L1": 0,"VAC_out_L1": 120,"Inv_I_L2": 0,"Chg_I_L2": 0,"Buy_I_L2": 22,"Sell_I_L2": 0,"VAC1_in_L2": 120,"VAC2_in_L2": 0,"VAC_out_L2": 120,"AC_Input": "Grid","Batt_V": 52.0,"AC_mode": "AC DROP","INV_mode": "Off","Warn": ["none"],"Error": ["none"],"AUX": "disabled","RELAY": "disabled"},
{ "Port": 5, "Dev": "CC","Type": "FM80","Out_I": 9.9,"In_I": 5,"Batt_V": 53.0,"In_V": 92.0,"Out_kWh": 16.4,"Out_AH": 305,"CC_mode": "Bulk  ","Error": ["none"],"Aux_mode": "Manual","AUX": "disabled"},
{ "Port": 6, "Dev": "CC","Type": "FM80","Out_I": 9.8,"In_I": 5,"Batt_V": 53.0,"In_V": 103.4,"Out_kWh": 16.9,"Out_AH": 314,"CC_mode": "Bulk  ","Error": ["none"],"Aux_mode": "Manual","AUX": "disabled"},
{ "Port": 7, "Dev": "CC","Type": "FM80","Out_I": 16.4,"In_I": 10,"Batt_V": 53.1,"In_V": 85.8,"Out_kWh": 12.1,"Out_AH": 225,"CC_mode": "Bulk  ","Error": ["none"],"Aux_mode": "Manual","AUX": "disabled"},
{ "Port": 8, "Dev": "CC","Type": "FM60/80","Out_I": 9.9,"In_I": 6,"Batt_V": 52.9,"In_V": 85.0,"Out_kWh": 9.0,"Out_AH": 167,"CC_mode": "Bulk  ","Error": ["none"],"Aux_mode": "Manual","AUX": "disabled"},
{ "Port": 10, "Dev": "FNDC","Enabled": ["A","B"],"Shunt_A_I":  -51.1,"Shunt_A_AH": -12,"Shunt_A_kWh": -0.620,"Shunt_B_I":  47.8,"Shunt_B_AH": 11,"Shunt_B_kWh":  0.630,"SOC": 99,"Min_SOC": 99,"Days_since_full": 0.3,"CHG_parms_met": false,"In_AH_today": 1039,"Out_AH_today": 1020,"In_kWh_today":  55.100,"Out_kWh_today":  54.000,"Net_CFC_AH": -1,"Net_CFC_kWh": -0.030,"Batt_V": 52.6,"Batt_temp": "23 C","Aux_mode": "auto","AUX": "disabled"}
]}}
2018-05-12 15:21:12.048 [INFO ] [lipse.smarthome.model.script.Testing] - Testing 2: 99
2018-05-12 15:21:12.050 [ERROR] [eclipse.smarthome.model.script.Error] - Some bad stuff happened in my outback rule: java.lang.StringIndexOutOfBoundsException: String index out of range: -2
2018-05-12 15:21:12.050 [INFO ] [.eclipse.smarthome.model.script.LOCK] - Outback JSON - Unlocked

@sipvoip
Time for Github I think