green_eye_monitor 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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