I am looking for direction on how to best implement the following;

I want to be able to calculate the consumption of oil I use for heating from a known value (my oil tank). I have a device that is turned “on” when my boiler runs and in another automation system I would take the daily runtime (in hours) of this device and multiple it by the burn rate of my burner which is .85 gallons an hour. I would then take this “gallon-used” value and subtract it from the “tank-gallons” value. This would then give me the remaining “new-tank-gallons” value which would be saved as the new value of “tank-gallons” to be subtracted from the new day.

So as an example, if starting from a full tanks, the logic would look like this.

275 “tank-gallons” - “gallons-used” which is (runtime of device y for the past 24 hours x .85)

this would be the new value for “new-tank-gallons”

“new-tank gallons” would be saved as the new value of “tank-gallons” until the next days usage.

When I get an oil delivery, I would set the value of “tank-gallons” back to 275.

Thanks in advance for any help in coming up with a solution for this.

I use the following vb script to perform this currently.

Sub Main(parm as object)

dim tank = 824 'device reference for virtual tank level

dim oilburned = 924 'device reference for Gallon Used Prio Day

dim heating = 735 'Device reference for thermostat operating state

dim rate = .832 'Gallons per hour burned original .85

dim zwave = 1 'Multiplier for fine tunning

dim runtimer = “Heating” 'name of hs timer

dim heatcycles = “Heat Cycles” 'name of hs counter tracking 3 minute MOT

dim gallonsold = hs.DeviceValueEx(tank) 'Read in current gallons

dim gallons

dim gallonsUsed

dim gallonsUsedToday

dim gallonsnew

gallonsUsed = (hs.TimerValue(runtimer).totalhours * zwave) * rate

gallonsUsedToday = math.round(gallonsUsed,2)

gallons = gallonsold - gallonsUsedToday

gallonsnew = math.round(gallons,2)

hs.WriteLog (“Info”, “Number of gallons used today " + gallonsUsedToday.ToString + " Gallons.”)

hs.WriteLog (“Info”, “Old Gallons Value " + gallonsold.ToString + " Gallons.")

hs.TimerReset(runtimer)

hs.CounterReset(heatcycles)

hs.TriggerEvent(“Stop heat timer”)

hs.SetDeviceValueByRef(tank, gallons, True)

hs.SetDeviceString(tank, gallons.ToString + " Gallons", True)

hs.SetDeviceValueByRef(oilburned, gallonsUsedToday, True)

hs.SetDeviceString(oilburned, gallonsUsedToday.ToString + " Gallons", True)

hs.WriteLog (“Info”, “Update heating oil to " + gallons.ToString + " Gallons.”)

End Sub