Fewer no grid charge months
This commit is contained in:
@@ -3,8 +3,8 @@ EASY_ENERGY_TARIFFS = {}
|
|||||||
|
|
||||||
class Cost
|
class Cost
|
||||||
|
|
||||||
|
attr_accessor :max_charge_kwh
|
||||||
attr_reader :battery, :max_charge_kwh, :entsoe
|
attr_reader :battery, :entsoe
|
||||||
|
|
||||||
def initialize(battery_capacity=10.0, max_charge=5.0)
|
def initialize(battery_capacity=10.0, max_charge=5.0)
|
||||||
@entsoe = Entsoe.new
|
@entsoe = Entsoe.new
|
||||||
@@ -161,8 +161,8 @@ class Cost
|
|||||||
# charge battery with return_kwh
|
# charge battery with return_kwh
|
||||||
return_kwh -= battery.charge(return_kwh)
|
return_kwh -= battery.charge(return_kwh)
|
||||||
|
|
||||||
if lowest_hour.eql?(formatted_hour) # lowest_hour = "" if small difference between high/low
|
if (lowest_hour.eql?(formatted_hour) || entsoe.price_at(formatted_hour) < 0) # lowest_hour = "" if small difference between high/low
|
||||||
# charge battery during lowest hour
|
# charge battery during lowest hour, or when prices are negative
|
||||||
usage_kwh += battery.charge(max_charge_kwh)
|
usage_kwh += battery.charge(max_charge_kwh)
|
||||||
else
|
else
|
||||||
# if during expensive hours || more than <max_charge_kwh> kwh then discharge_battery
|
# if during expensive hours || more than <max_charge_kwh> kwh then discharge_battery
|
||||||
@@ -197,7 +197,7 @@ class Cost
|
|||||||
oxxio_rate,
|
oxxio_rate,
|
||||||
oxxio_cost]
|
oxxio_cost]
|
||||||
|
|
||||||
p "%s,%s,%s,%s,%s,%s,%s,%03f,%s,%s,%s,%s,%s" % (one_hour[0..7] + one_hour[8..12].map{|c| format_cost(c)})
|
p "%s,%s,%s,%s,%s,%s,%s,%0.02f,%s,%s,%s,%s,%s" % (one_hour[0..7] + one_hour[8..12].map{|c| format_cost(c)})
|
||||||
result << one_hour
|
result << one_hour
|
||||||
|
|
||||||
hour_start = hour_start.advance(:hours => 1)
|
hour_start = hour_start.advance(:hours => 1)
|
||||||
|
|||||||
@@ -10,12 +10,14 @@ class Entsoe
|
|||||||
|
|
||||||
URL = 'https://transparency.entsoe.eu'
|
URL = 'https://transparency.entsoe.eu'
|
||||||
|
|
||||||
|
attr_accessor :no_grid_charge_months
|
||||||
attr_reader :storage_cost
|
attr_reader :storage_cost
|
||||||
|
|
||||||
def initialize(api_key = "c2287e07-0c26-4950-b430-22b7f75a8f2e")
|
def initialize(api_key = "c2287e07-0c26-4950-b430-22b7f75a8f2e")
|
||||||
@api_key = api_key
|
@api_key = api_key
|
||||||
@kwh_prices = {}
|
@kwh_prices = {}
|
||||||
@storage_cost = 0.05 # how much does it cost to store 1 kwh in battery
|
@storage_cost = 0.05 # how much does it cost to store 1 kwh in battery
|
||||||
|
@no_grid_charge_months = [5,6,7] # months where we assume there is enough surplus from sun power
|
||||||
end
|
end
|
||||||
|
|
||||||
def price_at(formatted_hour)
|
def price_at(formatted_hour)
|
||||||
@@ -42,8 +44,8 @@ class Entsoe
|
|||||||
sorted_prices = prices_at(date).to_a.sort_by(&:last) # sort according to price
|
sorted_prices = prices_at(date).to_a.sort_by(&:last) # sort according to price
|
||||||
highest_hour = sorted_prices.last[0]
|
highest_hour = sorted_prices.last[0]
|
||||||
|
|
||||||
# From Apr-Oct: do not charge; every hour that has cost > 0 is a high_hour
|
# Some months: do not charge; every hour that has cost > 0 is a high_hour
|
||||||
if [4,5,6,7,8,9,10].include?(date.month)
|
if @no_grid_charge_months.include?(date.month)
|
||||||
lowest_hour = "" # effectively no charging from grid
|
lowest_hour = "" # effectively no charging from grid
|
||||||
high_hours = sorted_prices.select{|p| p[1] > 0}.to_h.keys
|
high_hours = sorted_prices.select{|p| p[1] > 0}.to_h.keys
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user