source: de.wigbels.ruby/hothotwrite/hhw.rb @ 9125727

Last change on this file since 9125727 was 9125727, checked in by njw <njw@…>, 9 years ago

Corrected calculation of year consumption

  • Property mode set to 100755
File size: 5.1 KB
Line 
1#!/usr/bin/ruby
2#
3# Author: Norbert Wigbels - foobla.wigbels.de/uber-foobla
4#
5# HotHotWrite receives data from HotHotRead and writes it to the dbms
6# Example of calling URL - http://www.wigbels.net/cgi-bin/hhw.rb?sensorid=1&data=23.4 &measuredat=2007-20-14
7
8
9#------------------------------------------
10# Tainted mode 0-4
11$SAFE=1
12
13#------------------------------------------
14require 'mysql'
15require 'cgi'
16require 'logger'
17require 'time'
18
19# Standard header
20print "Content-type: text/plain\n\n"
21
22# Date 14 07 2009
23day   = Time.now.strftime("%d")
24month = Time.now.strftime("%m")
25year  = Time.now.strftime("%Y")
26
27# CGI - GET-Parameter
28cgi        = CGI.new
29
30if cgi.has_key?('sensorid')
31  sensorid = Integer(cgi['sensorid'])
32end
33if cgi.has_key?('data')
34  data = Float(cgi['data'])
35end
36if cgi.has_key?('logyear')
37  logyear = Integer(cgi['logyear'])
38  yearbefore = logyear - 1
39end
40
41
42# Logger
43log = Logger.new(STDOUT)
44log.level = Logger::INFO
45
46
47begin
48  dbh = Mysql.real_connect("localhost", "hhw", "", "kraftwerk")
49
50  # data provided?, insert - no data select->display
51  if sensorid and data
52    dbh.query( %Q"insert into sensor (sensorid, data, measuredat) values (#{sensorid.to_s}, #{data.to_s}, now())" )
53    log.info("Inserted sensor: #{sensorid} with data: #{data}")
54  else
55    years = dbh.query( %Q"select count(distinct year(measuredat)) FROM sensor" )
56    put years
57    # Auswertung Gesamtes Jahr, Monat, Vergleich Vorjahr
58    myquery = %Q{ select sum(data), 'Liter Verbrauch in #{month}-#{logyear}' \
59                  from sensor \
60                  where year(measuredat) = '#{logyear}' and month(measuredat) = '#{month}'
61                  union
62                  select sum(data), 'Liter Verbrauch in #{month}-#{yearbefore}\n' \
63                  from sensor \
64                  where year(measuredat) = '#{yearbefore}' and month(measuredat) = '#{month}'
65                  union \
66                  select sum(data), 'Liter Gesamtverbrauch in #{logyear}' \
67                  from sensor \
68                  where year(measuredat) = '#{logyear}'
69                  union
70                  select sum(data), 'Liter Gesamtverbrauch in #{yearbefore}\n' \
71                  from sensor \
72                  where year(measuredat) = '#{yearbefore}'
73                  union
74                  select truncate(avg(data)/#{years},2), 'Durchschnittsverbrauch Gesamtjahr Liter/Tag' \
75                  from \
76                    (select sum(data) as data from sensor \
77                     group by month(measuredat), day(measuredat)) \
78                  as foo
79                  union
80                  select truncate(avg(data)/#{years},2), 'Durchschnittsverbrauch Sommmer Liter/Tag' \
81                  from \
82                    (select sum(data) as data from sensor \
83                     where month(measuredat) in (4,5,6,7,8,9) \
84                     group by month(measuredat), day(measuredat)) \
85                  as foo
86                  union
87                  select truncate(avg(data)/#{years},2), 'Durchschnittsverbrauch Winter Liter/Tag' \
88                  from \
89                    (select sum(data) as data from sensor \
90                     where month(measuredat) in (1,2,3,10,11,12) \
91                     group by month(measuredat), day(measuredat)) \
92                  as foo }                 
93    res = dbh.query( myquery )
94    while row = res.fetch_row do
95       printf "%s\t%s\n", row[0], row[1]
96    end
97    puts "\n\n"
98    # Auswertung Monat.
99    res = dbh.query( %Q{ select month(measuredat), '#{logyear}', sum(data) \
100                         from sensor \
101                         where year(measuredat) = '#{logyear}'\
102                         group by month(measuredat)
103                         order by month(measuredat) desc } )
104    puts "Datum\t\tVerbrauch (Liter)"
105    puts "======================================================================================================================================================="
106    while row = res.fetch_row do
107      chart = (row[2].to_i / 1200)
108      printf "%s-%s\t\t%s\t", row[0], row[1], row[2]
109      chart.times {print "#"}
110      print "\n"
111    end
112    puts "\n\n"
113    # Auswertung Jahr: Kummuliert nach Tagen, Monat.
114    res = dbh.query( %Q{ select day(measuredat), month(measuredat), '#{logyear}', sum(data) \
115                         from sensor \
116                         where year(measuredat) = '#{logyear}'\
117                         group by month(measuredat), day(measuredat) \
118                         order by month(measuredat) desc, day(measuredat) desc } )
119    puts "Datum\t\tVerbrauch (Liter)"
120    puts "======================================================================================================================================================="
121    while row = res.fetch_row do
122      chart = (row[3].to_i / 70)
123      printf "%s-%s-%s\t%s\t", row[0], row[1], row[2], row[3]
124      chart.times {print "#"}
125      print "\n"
126    end
127    res.free
128  end
129
130rescue Mysql::Error => e
131  log.fatal("Error code: #{e.errno}")
132  log.fatal("Error message: #{e.error}")
133  if e.respond_to?("sqlstate")
134    log.fatal("Error SQLSTATE: #{e.sqlstate}")
135  end
136ensure
137  # disconnect from server
138  dbh.close if dbh
139end
Note: See TracBrowser for help on using the repository browser.