summaryrefslogtreecommitdiff
path: root/power-logger.rb
diff options
context:
space:
mode:
authorpks <pks@pks.rocks>2021-05-16 18:23:12 +0200
committerpks <pks@pks.rocks>2021-05-16 18:23:12 +0200
commit8a89176b2b563ad20c21eea6f31cef01c46582dc (patch)
tree7e9f0a44e9d52d6ed2e957ca4b524b2fa3b61f6c /power-logger.rb
parent899ba88b76a2f01b1bab87fbb960c2277435c521 (diff)
restart
Diffstat (limited to 'power-logger.rb')
-rwxr-xr-xpower-logger.rb122
1 files changed, 0 insertions, 122 deletions
diff --git a/power-logger.rb b/power-logger.rb
deleted file mode 100755
index 827451f..0000000
--- a/power-logger.rb
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/env ruby
-
-# FIXME
-$LOAD_PATH << "/home/pks/.local/lib/ruby/gems/json-2.3.1/lib/"
-$LOAD_PATH << "/home/pks/.local/lib/ruby/gems/mqtt-0.5.0/lib/"
-$LOAD_PATH << "/home/pks/.local/lib/ruby/gems/optimist-3.0.1/lib/"
-$LOAD_PATH << "/home/pks/.local/lib/ruby/gems/sqlite3-1.4.2/lib/"
-$LOAD_PATH << "/home/pks/.local/lib/ruby/gems/zipf-1.2.6/lib/"
-
-require 'json'
-require 'mqtt'
-require 'optimist'
-require 'sqlite3'
-require 'time'
-require 'zipf'
-
-def shutdown
- STDERR.write "Shutting down ...\n"
- $db.close
- $logfile.close
- STDERR.write "Done!\n"
- exit
-end
-
-Signal.trap("INT") { shutdown }
-Signal.trap("TERM") { shutdown }
-
-def db_open_or_new filename
- if File.exists? filename
- $db = SQLite3::Database.open filename
- else
- $db = SQLite3::Database.new filename
- $db.execute <<-SQL
- create table power_log(
- id INTEGER PRIMARY KEY,
- timestamp DATETIME,
- device_name TEXT,
- device_location TEXT,
- total FLOAT,
- total_start_time DATETIME
- );
- SQL
- $db.execute <<-SQL
- create table power_meter(
- id INTEGER PRIMARY KEY,
- timestamp DATETIME,
- total FLOAT
- );
- SQL
- end
-end
-
-def db_execute sql, data
- 3.times {
- begin
- $db.execute sql, data
- break
- rescue SQLite3::BusyException
- STDERR.write "DB busy, skipping data point '#{d.to_s}'\n"
- sleep 1
- end
- }
-end
-
-def parse_topic topic
- parts = topic.split "/"
- else
- _, device_name, _, device_location_1, device_location_2, _ = parts
- end
- device_location = [device_location_1, device_location_2]
- return device_name, device_location
-end
-
-def parse_message message
- return JSON.parse message
-end
-
-def insert_power device_name, device_location, data
- if data.has_key? "ENERGY"
- timestamp = Time.parse(data["Time"]).utc.to_i
- total_start_time = Time.parse(data["ENERGY"]["TotalStartTime"]).utc.to_i
- db_execute \
- "INSERT INTO power(timestamp, device_name, device_location_primary, device_location_secondary, total, total_start_time) VALUES(?,?,?,?,?,?)", \
- [timestamp, device_name, device_location[0], device_location[1], data["ENERGY"]["Total"], total_start_time]
- end
-end
-
-def main
- options = Optimist::options do
- opt :host, "MQTT hostname", :type => :string, :default => 'localhost', :short => '-h'
- opt :port, "MQTT port", :type => :int, :default => 1883, :short => '-p'
- opt :db, "SQLite3 database file", :type => :string, :required => true, :short => '-d'
- opt :log, "Logfile", :type => :string, :required => true, :short => '-l'
- end
-
- db_open_or_new options[:db]
-
- $logfile = WriteFile.new options[:log]
-
- $mqtt_client = MQTT::Client.connect(
- :host => options[:host],
- :port => options[:port],
- :ssl => false)
- $mqtt_client.subscribe '#'
-
- $mqtt_client.get do |topic,message|
- begin
- puts "#{topic}\t#{message}
- #device_name, device_location = parse_topic topic
- #data = parse_message message
- #insert_power device_name, device_location, data
- #$logfile.write "#{topic}\t#{message}\n"
- rescue => exception
- $logfile.write "[Ignoring]\t#{topic}\t#{message}\n"
- end
- end
-
- shutdown
-end
-
-
-main