summaryrefslogtreecommitdiff
path: root/weather-db-from-old-log
blob: 3efa4b1dc883a9104aec234c43a9d265e1013d56 (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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/env ruby

require 'sqlite3'

# Berlin
#$device_id_to_handle = {
#  "b7:01" => "outside",
#  "ca:01" => "outside",
#  "d5:01" => "outside",
#  "f4:01" => "outside",
#  "1d:01" => "inside",
#  "1f:01" => "inside",
#  "37:01" => "inside",
#  "38:01" => "inside",
#  "9c:01" => "inside",
#  "cb:01" => "inside"
#}

# Heidenheim
$device_id_to_handle = {
  "58:02" => "outside",
  "62:02" => "outside",
  "07:01" => "inside"
}

def db_execute s, d
  begin
    $db.execute(s, d)
    rescue SQLite3::BusyException
      sleep 3
      begin
        $db.execute(s, d)
      rescue SQLite3::BusyException
        STDERR.write "DB busy, skipping data point '#{d.to_s}'\n"
      end
  end
end

def db_insert timestamp, handle, temperature, humidity
  db_execute("INSERT INTO weather(timestamp, handle, temperature, humidity) VALUES(?,?,?,?)", 
             [timestamp, handle, temperature, humidity])
end


$db = SQLite3::Database.new("weather.db")

$db.execute <<-SQL
          create table weather(
           id INTEGER PRIMARY KEY,
           timestamp DATETIME,
           handle TEXT,
           temperature FLOAT,
           humidity FLOAT
         );
        SQL

while line = STDIN.gets
  parts = line.split "\t"
  log_entry_type = parts.first.split("::")[1]
  if log_entry_type == "temp"
    data = {}
    parts.each { |i|
      key, value = i.split "::"
      data[key] = value
    }
    data["timestamp"] = data["timestamp"].to_i
    data["temperature"] = data["temperature"].to_f
    data["humidity"] = data["humidity"].to_f

    handle = $device_id_to_handle[data["device_id"]]
    if handle
      db_insert \
        data["timestamp"], \
        handle, \
        data["temperature"], \
        data["humidity"]
    end
  end
end

$db.close