#!/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