summaryrefslogtreecommitdiff
path: root/power-meter
blob: 9ffd7c644a07ae61c71f0bdf72c57880dd892430 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env ruby

require 'sqlite3'

def main
  db = SQLite3::Database.new ARGV[0]
  devices =  db.execute "select distinct device_location_primary, device_location_secondary FROM power"
  devices.reject! { |i| not ["office", "living_room", "guest_restroom", "kitchen", "bedroom_2"].include? i[0] }
  start_date = Date.new(2020,9,01).to_time.to_i
  end_date = Date.new(2020,9,30).to_time.to_i
  totals = {}
  totals.default = 0.0
  devices.sort_by{|i| i[0] }.each { |device|
    first = db.execute "select TOTAL, TIMESTAMP from power WHERE TIMESTAMP >= #{start_date} and TIMESTAMP <= #{end_date} AND DEVICE_LOCATION_PRIMARY = '#{device[0]}' AND DEVICE_LOCATION_SECONDARY = '#{device[1]}' ORDER BY TIMESTAMP ASC LIMIT 1"
    last = db.execute "select TOTAL, TIMESTAMP from power WHERE TIMESTAMP >= #{start_date} and TIMESTAMP <= #{end_date} AND DEVICE_LOCATION_PRIMARY = '#{device[0]}' AND DEVICE_LOCATION_SECONDARY = '#{device[1]}' ORDER BY TIMESTAMP DESC LIMIT 1"
    if first.size > 0 and last.size > 0
      puts "#{Time.at(first[0][1])} --- #{Time.at(last[0][1])}"
      puts "#{first[0][0]} ::: #{last[0][0]}"
      kwh = last[0][0] - first[0][0]
      puts "#{device.join '/'}: #{kwh.round 0} kW/h"
      puts
      totals[device[0]] += kwh
    end
  }
  puts "=== TOTAL: #{totals.values.inject(:+).round 0} kW/h ==="
  puts "\nBy Room"
  puts "-------"
  totals.each_key { |k|
    puts "  #{k}: #{totals[k].round 0} kW/h"
  }
  db.close
end


main