class GreenButtonClasses::IntervalBlock

Attributes

meter_reading[RW]

Public Instance Methods

additional_rules() click to toggle source
# File lib/greenbutton/gb_classes.rb, line 270
def additional_rules
  [
    Rule.new(:start_time, './/interval/start', :unix_time),
    Rule.new(:duration, './/interval/duration', :integer)
  ]
end
average_interval_value() click to toggle source
# File lib/greenbutton/gb_classes.rb, line 311
def average_interval_value
  total/n_readings
end
doc() click to toggle source
# File lib/greenbutton/gb_classes.rb, line 277
def doc
  self.meter_reading.doc
end
end_time() click to toggle source
# File lib/greenbutton/gb_classes.rb, line 281
def end_time
  self.start_time + self.duration
end
n_readings() click to toggle source
# File lib/greenbutton/gb_classes.rb, line 315
def n_readings
  @entry_xml.xpath('.//IntervalReading').length
end
power_of_ten_multiplier() click to toggle source
# File lib/greenbutton/gb_classes.rb, line 285
def power_of_ten_multiplier
  self.meter_reading.reading_type.power_of_ten_multiplier
end
pre_rule_assignment(parent) click to toggle source
# File lib/greenbutton/gb_classes.rb, line 266
def pre_rule_assignment(parent)
  self.meter_reading = parent
end
reading_at_time(time) click to toggle source
# File lib/greenbutton/gb_classes.rb, line 289
def reading_at_time(time)
  if (time >= self.start_time) && (time < end_time)
    @entry_xml.xpath('.//IntervalReading').each do |interval_reading|
       intervalReading = IntervalReading.new(interval_reading)
       if (intervalReading.start_time <= time) && (intervalReading.end_time > time)
         return intervalReading
       end
    end   
  end
end
sum(starttime=nil, endtime=nil) click to toggle source
# File lib/greenbutton/gb_classes.rb, line 319
def sum(starttime=nil, endtime=nil)
  starttime = starttime.nil? ? self.start_time : starttime.utc
  endtime = endtime.nil? ? self.end_time : endtime.utc
  sum = 0
  @entry_xml.xpath('.//IntervalReading').each do |interval_reading|
    intervalReading = IntervalReading.new(interval_reading)
    if intervalReading.start_time >= starttime && intervalReading.start_time < endtime
      if intervalReading.end_time <= endtime
        sum += intervalReading.value
      else
        ratio = (intervalReading.end_time.to_i - endtime.to_i)/intervalReading.duration
        sum += ratio*intervalReading.value
        break
      end
    end
  end
  sum*10**power_of_ten_multiplier  
end
total() click to toggle source
# File lib/greenbutton/gb_classes.rb, line 304
def total
  if @total.nil?
    @total = sum
  end
  @total
end
value_at_time(time) click to toggle source
# File lib/greenbutton/gb_classes.rb, line 300
def value_at_time(time)
  reading_at_time(time).value*10**power_of_ten_multiplier
end