summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scarecrow.rb70
1 files changed, 62 insertions, 8 deletions
diff --git a/scarecrow.rb b/scarecrow.rb
index ef3b694..b4fadf9 100644
--- a/scarecrow.rb
+++ b/scarecrow.rb
@@ -1,23 +1,67 @@
require 'sinatra'
require 'mqtt'
+require 'sqlite3'
+require 'date'
+require 'dm-core'
+require 'dm-timestamps'
+require 'dm-validations'
+require 'dm-migrations'
set :public_folder, File.dirname(__FILE__) + '/public'
set :bind, '::'
+DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/scarecrow.sqlite")
+
+class Temperature
+ include DataMapper::Resource
+ property :id, Serial
+ property :timestamp, DateTime
+ property :value, Float
+end
+
+class Humidity
+ include DataMapper::Resource
+ property :id, Serial
+ property :timestamp, DateTime
+ property :value, Float
+end
def init
+ DataMapper.auto_migrate!
+ DataMapper.auto_upgrade!
Thread.new do
MQTT::Client.connect('192.168.0.16') do |c|
- c.get('humidity') do |topic,message|
- puts "#{topic}: #{message}"
+ c.subscribe('temperature', 'humidity')
+ loop do
+ while !c.queue_empty? do
+ topic, message = c.get
+ handle_msg(topic, message)
+ end
+ sleep 1
end
end
end
- Thread.new do
- MQTT::Client.connect('192.168.0.16') do |c|
- c.get('temperature') do |topic,message|
- puts "#{topic}: #{message}"
- end
- end
+end
+
+def handle_msg(topic, msg)
+ puts "#{topic}: #{msg}"
+ if topic == "humidity"
+ handle_humidity_msg(msg)
+ elsif topic == "temperature"
+ handle_temp_message(msg)
+ end
+end
+
+def handle_humidity_msg(msg)
+ humidity = Humidity.create(timestamp: DateTime.now, value: msg)
+ humidity.errors.each do |error|
+ puts error
+ end
+end
+
+def handle_temp_message(msg)
+ temp = Temperature.create(timestamp: DateTime.now, value: msg)
+ temp.errors.each do |error|
+ puts error
end
end
@@ -25,4 +69,14 @@ get '/' do
send_file File.join(settings.public_folder, 'index.html')
end
+get '/temperature' do
+ temp = Temperature.last[:value]
+ return "#{temp}"
+end
+
+get '/humidity' do
+ temp = Humidity.last[:value]
+ "#{temp}"
+end
+
init