Tried the lock thing and it’s not fixing the problem.
2015-12-09 10:19:49.345 [INFO ] [runtime.busevents ] - Battery_Charge state updated to 68
2015-12-09 10:19:49.348 [INFO ] [runtime.busevents ] - Buy_Total_Watts state updated to 0
2015-12-09 10:19:49.371 [INFO ] [.openhab.model.script.`Testing] - Battery_Charged = 68
2015-12-09 10:19:49.431 [INFO ] [runtime.busevents ] - Generator_Start received command ON
2015-12-09 10:19:51.868 [INFO ] [runtime.busevents ] - Generator_Start state updated to ON
The rule started my generator but it was NOT less then or equal to 65.
import java.util.concurrent.locks.Lock
import java.util.concurrent.locks.ReentrantLock
var Lock lock = new ReentrantLock()
rule "Battery State Events"
when
Item Battery_Charge changed
then
lock.lock()
logInfo("`Testing", "Battery_Charged = " + Battery_Charge.state)
if (Battery_Charge.state <= 65) {
logInfo("`Testing", "(Inside if)Battery_Charged = " + Battery_Charge.state)
sendCommand(Battery_Low, ON)
sendMail("8323303810@mms.att.net", "Battery", "Battery SOC at " + Battery_Charge.state + "%" "Load at " + Inverter_Total_Watts.state + " watts")
if (Generator_Status.state == OPEN && Generator_Failed.state == OFF) {
sendCommand(Generator_Start, ON)
}
} else if (Battery_Low.state == ON) {
logInfo("`Testing", "(Inside else if)Battery_Charged = " + Battery_Charge.state)
sendCommand(Battery_Low, OFF)
}
if (Battery_Charge.state >= 90 && Generator_Override.state == OFF) {
sendCommand(Generator_Start, OFF)
}
lock.unlock()
end
It looks like based on the logs that “if (Battery_Charge.state <= 65)” is not triggering because I never saw the “logInfo(”`Testing", “(Inside if)Battery_Charged = " + Battery_Charge.state)” log line. But what I don’t understand is why the “if (Generator_Status.state == OPEN && Generator_Failed.state == OFF)” triggered when it is inside the “if (Battery_Charge.state <= 65)” that did not.
import java.lang.*
import org.openhab.core.library.types.*
import java.util.concurrent.locks.Lock
import java.util.concurrent.locks.ReentrantLock
var Lock lock = new ReentrantLock()
rule "Outback JSON parsing"
when
Item Outback_Dev_status changed
then
lock.lock()
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_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_Out_kWh, today_out_kwh)
postUpdate(Today_Solar_kWh, today_solar_kwh)
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_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_inv_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==1)][0].Inv_I_L2", 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_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(Inverter_A_Watts, inverter_a_watts)
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_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_inv_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==2)][0].Inv_I_L2", 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_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(Inverter_B_Watts, inverter_b_watts)
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_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_inv_amps = new Integer(transform("JSONPATH", "$.devstatus.ports[?(@.Port==3)][0].Inv_I_L2", 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_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(Inverter_C_Watts, inverter_c_watts)
postUpdate(Inverter_Total_Watts, inverter_a_watts + inverter_b_watts + inverter_c_watts)
postUpdate(Buy_Total_Watts, buy_a_watts + buy_b_watts + buy_c_watts)
lock.unlock()
end