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 +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +5 -0
- data/exe/green_eye_monitor +21 -10
- data/green_eye_monitor.gemspec +1 -0
- data/lib/green_eye_monitor/client.rb +6 -6
- data/lib/green_eye_monitor/packet/bin_net_base.rb +60 -7
- data/lib/green_eye_monitor/version.rb +1 -1
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1cb9382f227f92a98dcc439bc7176ef5c4003147
|
4
|
+
data.tar.gz: 0f4d9dc2d207d4553a535670a3b0fc9f7ee80366
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 695e3d2ea31df523c48057939184afd5abd2382fae5d3ac22f145ef34c26fb1111ce3f6c555dfbbccc3655a612bde5bd542d611164c063b4140d97f6170dcd5d
|
7
|
+
data.tar.gz: 31d1778a2c5977ea7da9858fdcecf3949fd5ff5556298e53de48a085553b8f64d218749e4d9e488137ab7225ede4fbd4f5f80a1c9141a97139e9662e0c936c67
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
data/exe/green_eye_monitor
CHANGED
@@ -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
|
data/green_eye_monitor.gemspec
CHANGED
@@ -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
|
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.
|
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
|