green_eye_monitor 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 09b0535de2863db3b5f87effe6df03574c05e175
4
- data.tar.gz: 1ed78d617dd877f19d8290e50154fa467fa51135
3
+ metadata.gz: 1cb9382f227f92a98dcc439bc7176ef5c4003147
4
+ data.tar.gz: 0f4d9dc2d207d4553a535670a3b0fc9f7ee80366
5
5
  SHA512:
6
- metadata.gz: 016f16ef7c22fa7cf21f091c8f99f26f8d03235e3f279e1b2a11a8965a354bddaca570c5b83d68b1a6cab6d991bc33bc0dd2d6cd0dfe70dc0b9975bb0683350b
7
- data.tar.gz: 39d715c5f09ec09f91eea866f7b0ff5c98b5b7ad072197a62a8751f8119231e64e0a7627fbe17ef993f7f562c24fc17f19f1a2968c5ca97daea026dec6919f8b
6
+ metadata.gz: 695e3d2ea31df523c48057939184afd5abd2382fae5d3ac22f145ef34c26fb1111ce3f6c555dfbbccc3655a612bde5bd542d611164c063b4140d97f6170dcd5d
7
+ data.tar.gz: 31d1778a2c5977ea7da9858fdcecf3949fd5ff5556298e53de48a085553b8f64d218749e4d9e488137ab7225ede4fbd4f5f80a1c9141a97139e9662e0c936c67
data/.gitignore CHANGED
@@ -4,3 +4,4 @@
4
4
  /pkg/
5
5
  /spec/reports/
6
6
  /tmp/
7
+ /vendor
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ # 0.0.3 (20160515)
4
+
5
+ * Add functionality to derive watts based on previous packet (@johnf)
6
+ * Add table output to sample script
7
+
3
8
  # 0.0.2 (20160515)
4
9
 
5
10
  * Add command line serial port switch (@johnf)
@@ -6,6 +6,7 @@ require 'green_eye_monitor/client'
6
6
 
7
7
  require 'slop'
8
8
  require 'awesome_print'
9
+ require 'terminal-table'
9
10
 
10
11
  opts = Slop.parse do |o|
11
12
  o.bool '-d', '--debug', 'enable debug mode'
@@ -18,11 +19,6 @@ end
18
19
 
19
20
  client = GreenEyeMonitor::Client.new(:baud => 115_200, :serial_port => opts[:port], :debug => opts[:debug])
20
21
 
21
- # client.packet_format = :bin48_net_time
22
- # client.enable_realtime
23
-
24
- # exit
25
-
26
22
  puts '# Direct'
27
23
  puts "Serial: #{client.serial}"
28
24
  puts "Hertz: #{client.hertz}"
@@ -40,17 +36,32 @@ puts
40
36
  puts '# Bin32 Net Format'
41
37
  client.packet_format = :bin32_net
42
38
  data = client.send_one_packet
39
+ sleep(2)
40
+ data = client.send_one_packet(data)
43
41
 
44
42
  # ap data.snapshot
45
43
  puts "Serial: #{data.serial_number}"
46
44
  puts "Voltage: #{data.voltage}"
47
- puts
48
- puts "ABS Watt Seconds #{data.abs_watt_seconds[0, 5]}"
49
- puts "Polarised Watt Seconds #{data.polarised_watt_seconds[0, 5]}"
50
- puts "Current: #{data.current[0, 5]}"
51
-
52
45
  puts "Seconds: #{data.seconds}"
53
46
  puts "Pulse: #{data.pulse}"
54
47
  puts "Temperature: #{data.temperature}"
48
+ puts
49
+
50
+ rows = []
51
+ # rows << ['ABS Watt Seconds'] + data.abs_watt_seconds
52
+ # rows << ['Polarised Watt Seconds'] + data.polarised_watt_seconds
53
+ rows << ['ABS Watts'] + data.abs_watts
54
+ rows << ['VA'] + data.va
55
+ rows << ['Polarised Watts'] + data.polarised_watts
56
+ rows << ['Current'] + data.current
57
+ rows.each {|row| row.slice!(15..28)}
58
+ headings = [''] + (1..15).to_a + (30..32).to_a
59
+ puts Terminal::Table.new(:rows => rows, :headings => headings)
60
+ puts
61
+
62
+ puts "ABS Total: #{data.abs_watts.to_a[0..14].inject(:+)} vs #{data.abs_watts.to_a[28..31].inject(:+)}"
63
+ puts "Polarised Total: #{data.polarised_watts.to_a[0..24].inject(:+)} vs #{data.polarised_watts.to_a[28..31].inject(:+)}"
64
+ puts "VA Total: #{data.va.to_a[0..14].inject(:+)} vs #{data.va.to_a[28..31].inject(:+)}"
65
+ puts "Current Total: #{data.current.to_a[0..14].inject(:+)} vs #{data.current.to_a[28..31].inject(:+)}"
55
66
 
56
67
  # client.shell
@@ -22,6 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_dependency 'bindata'
23
23
  spec.add_dependency 'slop'
24
24
  spec.add_dependency 'awesome_print'
25
+ spec.add_dependency 'terminal-table'
25
26
 
26
27
  spec.add_development_dependency 'bundler'
27
28
  spec.add_development_dependency 'rake'
@@ -193,7 +193,7 @@ module GreenEyeMonitor
193
193
  end
194
194
 
195
195
  # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength
196
- def send_one_packet
196
+ def send_one_packet(old_packet = nil)
197
197
  pf = packet_format
198
198
  raise(Errors::NotImplemented, "Unimplemented packet format: #{pf}") unless IMPLEMENTED_FORMATS.include?(pf)
199
199
 
@@ -204,19 +204,19 @@ module GreenEyeMonitor
204
204
  read(:expect => /^.*<EOP>$/, :wait => true)
205
205
  when :bin48_net_time
206
206
  packet = read(:length => 625, :wait => true)
207
- Packet::Bin48NetTime.read(StringIO.new(packet))
207
+ Packet::Bin48NetTime.read(StringIO.new(packet), old_packet)
208
208
  when :bin48_net
209
209
  packet = read(:length => 619, :wait => true)
210
- Packet::Bin48Net.read(StringIO.new(packet))
210
+ Packet::Bin48Net.read(StringIO.new(packet), old_packet)
211
211
  when :bin48_abs
212
212
  packet = read(:length => 379, :wait => true)
213
- Packet::Bin48Abs.read(StringIO.new(packet))
213
+ Packet::Bin48Abs.read(StringIO.new(packet), old_packet)
214
214
  when :bin32_net
215
215
  packet = read(:length => 429, :wait => true)
216
- Packet::Bin32Net.read(StringIO.new(packet))
216
+ Packet::Bin32Net.read(StringIO.new(packet), old_packet)
217
217
  when :bin32_abs
218
218
  packet = read(:length => 269, :wait => true)
219
- Packet::Bin32Abs.read(StringIO.new(packet))
219
+ Packet::Bin32Abs.read(StringIO.new(packet), old_packet)
220
220
  end
221
221
  end
222
222
  # rubocop:enable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength
@@ -3,6 +3,15 @@ require 'bindata'
3
3
  module GreenEyeMonitor
4
4
  module Packet
5
5
  class BinNetBase < BinData::Record
6
+ attr_accessor :old_record
7
+
8
+ def self.read(data, old_record = nil)
9
+ packet = super(data)
10
+ packet.old_record = old_record
11
+
12
+ packet
13
+ end
14
+
6
15
  uint8 :header_a, :asserted_value => 0xFE
7
16
  uint8 :header_b, :asserted_value => 0xFF
8
17
  uint8 :header_c, :asserted_value => :version
@@ -38,13 +47,6 @@ module GreenEyeMonitor
38
47
 
39
48
  uint8 :checksum, :assert => lambda { calc_checksum(value) }
40
49
 
41
- def calc_checksum(checksum)
42
- calculated_checksum = (to_binary_s.bytes.inject(0, :+) - checksum) & 0xFF
43
-
44
- # TODO: why are we off by one?
45
- checksum == calculated_checksum + 1
46
- end
47
-
48
50
  def voltage
49
51
  raw_voltage / 10.0
50
52
  end
@@ -60,6 +62,57 @@ module GreenEyeMonitor
60
62
  def serial_number
61
63
  format('%03d%05d', device_id, serial)
62
64
  end
65
+
66
+ def va
67
+ current.map { |c| (c * voltage).to_i }
68
+ end
69
+
70
+ def abs_watts
71
+ if old_record
72
+ derive_watts(old_record.abs_watt_seconds, abs_watt_seconds, old_record.seconds, seconds)
73
+ else
74
+ [0] * abs_watt_seconds.size
75
+ end
76
+ end
77
+
78
+ def polarised_watts
79
+ if old_record
80
+ derive_watts(old_record.polarised_watt_seconds, polarised_watt_seconds, old_record.seconds, seconds)
81
+ else
82
+ [0] * abs_watt_seconds.size
83
+ end
84
+ end
85
+
86
+ private
87
+
88
+ def calc_checksum(checksum)
89
+ calculated_checksum = (to_binary_s.bytes.inject(0, :+) - checksum) & 0xFF
90
+
91
+ # TODO: why are we off by one?
92
+ checksum == calculated_checksum + 1
93
+ end
94
+
95
+ def derive_watts(prev_ws_values, curr_ws_values, prev_sec, cur_sec)
96
+ if prev_sec > cur_sec
97
+ sec_diff = 256^3 - prev_sec
98
+ sec_diff += cur_sec
99
+ else
100
+ sec_diff = cur_sec - prev_sec
101
+ end
102
+
103
+ prev_ws_values.zip(curr_ws_values).map do |prev_ws, curr_ws|
104
+ if prev_ws > curr_ws
105
+ ws_diff = 256^5 - prev_ws
106
+ ws_diff += curr_ws
107
+ else
108
+ ws_diff = curr_ws - prev_ws
109
+ end
110
+
111
+ watts = ws_diff / sec_diff
112
+
113
+ watts
114
+ end
115
+ end
63
116
  end
64
117
  end
65
118
  end
@@ -1,3 +1,3 @@
1
1
  module GreenEyeMonitor
2
- VERSION = '0.0.2'.freeze
2
+ VERSION = '0.0.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: green_eye_monitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Ferlito
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: terminal-table
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: bundler
71
85
  requirement: !ruby/object:Gem::Requirement