cycle_analyst_logger 0.1.1 → 0.2.0

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: 8478f82cab17da96da04e8c35ed5aa6750e64c0c
4
- data.tar.gz: 3af24ab892c6e44a41437e7fa102ea3353d3312c
3
+ metadata.gz: c14b7775ea0c3bb48e42d175c8848aa3098630e0
4
+ data.tar.gz: 48aee7dce5942646f3e9e6d10591ac4da3116d7b
5
5
  SHA512:
6
- metadata.gz: 20df1ddea9c110826aaa289fcee22a225754a396f3716fb7dd8aed38d50dcaac024931d0621e1a66c07040541175f320eb7a80313ecb3d44446b5516a8983edd
7
- data.tar.gz: 9d23d596fd87c9c8b598ee994ddf550e25a6067813c2d98e4f92c5849137aaa1827ce5e36d2978ab33bd9a192f455aeab5c3f72610fc4b9bdc8a2ed0fd9b7ad3
6
+ metadata.gz: a132b986dc5239b4a9b396bcd745b60710f8112fdd420ff66ffff5cf169e96e14ab3675951124ac581aafd89bf9a05c35c2fe53df8fe5b9e5f8c669887b78bd1
7
+ data.tar.gz: 035e128d2bd96f8df6a765e09bbd7a8595135ff11f904d8d3183af72aba7fbf968371289582002d523a344139fe4153f17ad145312d37302e2a73ace241c1a40
data/README.rdoc CHANGED
@@ -1,27 +1,30 @@
1
1
  = cycle_analyst_logger
2
2
 
3
3
  == NAME
4
- cycle_analyst_logger - Store the streaming data log output of a Grin Cycle Analyst V3
4
+ cycle_analyst_logger - Store the streaming data log output of a Grin Cycle Analyst V3 and optionally a Phaserunner
5
5
 
6
6
  == SYNOPSIS
7
7
  cycle_analyst_logger [global options] command [command options] [arguments...]
8
+ cycle_analyst_logger [global options] log [tty] [baudrate] [enable_phaserunner] [tty] [baudrate]
9
+
10
+ == VERSION
11
+ 0.2.0
8
12
 
9
13
  == GLOBAL OPTIONS
10
- -t, --tty=arg - Serial (USB) device (default: /dev/ttyUSB1)
11
- -b, --baudrate=arg - Serial port baudrate (default: 9600)
12
- --version - Display the program version
13
- -q, --[no-]quiet - Do not output to stdout
14
- --help - Show this message
14
+ -t, --tty_ca=arg - Cycle Analyst Serial (USB) device (default: /dev/ttyUSB1)
15
+ -b, --baud_ca=arg - Cycle Analyst Serial port baudrate (default: 9600)
16
+ --enable_phaserunner=arg - Get PhaseRunner Logs also (default: true)
17
+ --tty_pr=arg - Phaserunner Serial (USB) device (default: /dev/ttyUSB0)
18
+ --baud_pr=arg - Phaserunner Serial port baudrate (default: 115200)
19
+ -l, --loop_count=arg - How many lines to read (default: forever)
20
+ --version - Display the program version
21
+ -q, --[no-]quiet - Do not output to stdout
22
+ --help - Show this message
15
23
 
16
24
  == COMMANDS
17
25
  help - Shows a list of commands or help for one command
18
- log - Capture the logging output of the CA to a file
19
-
20
- === log - Capture the logging output of the CA to a file
21
- cycle_analyst_logger [global options] log [command options] [tty] [baudrate]
26
+ log - Capture the logging output of the Cycle Analyst and optionally Phaserunner to a file
22
27
 
23
- === COMMAND OPTIONS
24
- -l, --line_count=arg - How many lines to read (default: forever)
25
28
 
26
29
  :include:cycle_analyst_logger.rdoc
27
30
 
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Robert J. Berger"]
10
10
  spec.email = ["rberger@ibd.com"]
11
11
 
12
- spec.summary = %q{Read and store log output from the Grin Cycle Analyst}
13
- spec.description = %q{Read and store log output from the Grin Cycle Analyst}
12
+ spec.summary = %q{Read and store log output from the Grin Cycle Analyst and Phaserunner}
13
+ spec.description = %q{Read and store log output from the Grin Cycle Analyst and optionally Phaserunner}
14
14
  spec.homepage = "https://github.com/rberger/cycle_analyst_logger"
15
15
  spec.license = "MIT"
16
16
 
@@ -27,11 +27,12 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_runtime_dependency 'gli', '~> 2.17'
29
29
  spec.add_runtime_dependency 'serialport', '~> 1.3'
30
+ spec.add_runtime_dependency 'phaserunner', '~> 0.1', '>= 0.1.3'
30
31
 
31
32
  spec.add_development_dependency 'bundler', '~> 1.16'
32
33
  spec.add_development_dependency 'rake', '~> 10.0'
33
34
  spec.add_development_dependency 'rspec', '~> 3.0'
34
- spec.add_development_dependency 'rdoc'
35
+ spec.add_development_dependency 'rdoc', '~> 0', '>= 5.0.0'
35
36
  spec.add_development_dependency 'aruba', '~> 0.14'
36
37
  spec.add_development_dependency 'yard', '~> 0.9'
37
38
  end
@@ -1,22 +1,50 @@
1
- == cycle_analyst_logger - Describe your application here
1
+ == cycle_analyst_logger - Store the streaming data log output of a Grin Cycle Analyst V3 and optionally a Phaserunner
2
2
 
3
- v0.0.1
3
+ v0.2.0
4
4
 
5
5
  === Global Options
6
- === -b|--baudrate arg
6
+ === -b|--baud_ca arg
7
7
 
8
- Serial port baudrate
8
+ Cycle Analyst Serial port baudrate
9
9
 
10
10
  [Default Value] 9600
11
11
 
12
12
 
13
- === -t|--tty arg
13
+ === --baud_pr arg
14
14
 
15
- Serial (USB) device
15
+ Phaserunner Serial port baudrate
16
+
17
+ [Default Value] 115200
18
+
19
+
20
+ === --enable_phaserunner arg
21
+
22
+ Get PhaseRunner Logs also
23
+
24
+ [Default Value] true
25
+
26
+
27
+ === -l|--loop_count arg
28
+
29
+ How many lines to read
30
+
31
+ [Default Value] forever
32
+
33
+
34
+ === -t|--tty_ca arg
35
+
36
+ Cycle Analyst Serial (USB) device
16
37
 
17
38
  [Default Value] /dev/ttyUSB1
18
39
 
19
40
 
41
+ === --tty_pr arg
42
+
43
+ Phaserunner Serial (USB) device
44
+
45
+ [Default Value] /dev/ttyUSB0
46
+
47
+
20
48
  === --help
21
49
  Show this message
22
50
 
@@ -44,14 +72,6 @@ List commands one per line, to assist with shell completion
44
72
 
45
73
 
46
74
  ==== Command: <tt>log </tt>
47
- Capture the logging output of the CA to a file
48
-
49
-
50
- ===== Options
51
- ===== -l|--line_count arg
52
-
53
- How many lines to read
54
-
55
- [Default Value] forever
75
+ Capture the logging output of the Cycle Analyst and optionally Phaserunner to a file
56
76
 
57
77
 
@@ -1,13 +1,28 @@
1
1
  require 'time'
2
2
  require 'serialport'
3
+ require 'phaserunner'
3
4
 
4
5
  module CycleAnalystLogger
5
6
  class CycleAnalyst
7
+ # Cycle Analyst serial port Baudrate
6
8
  attr_reader :baudrate
9
+
10
+ # Cycle Analyst serial port name
7
11
  attr_reader :tty
12
+
13
+ # Hash that describes the names, values and units of the Cycle Analyst log data
8
14
  attr_reader :dict
15
+
16
+ # Handle from the SerialPort object
9
17
  attr_reader :serial_io
10
-
18
+
19
+ # If the phaeserunner should be read
20
+ attr_reader :enable_phaserunner
21
+
22
+ # Handle of the Phaserunner::Modbus object
23
+ attr_reader :phaserunner
24
+
25
+ # Hash definition that describes the names, values and units of the Cycle Analyst log data
11
26
  CA_DICT = {
12
27
  0 => {address: 0, name: "Amp Hours", units: "Ah", scale: 1},
13
28
  1 => { address: 1, name: "Volts", units: "V", scale: 1 },
@@ -25,45 +40,60 @@ module CycleAnalystLogger
25
40
  13 => { address: 12, name: "Limit Flags", units: "bit flags", scale: 1}
26
41
  }
27
42
 
43
+ # CycleAnalyst New
28
44
  def initialize(opts)
29
- @baudrate = opts[:baudrate]
30
- @tty = opts[:tty]
45
+ @baudrate = opts[:baud_ca]
46
+ @tty = opts[:tty_ca]
31
47
  @dict = CA_DICT
32
48
  @serial_io = SerialPort.new @tty, @baudrate, 8, 1
49
+ @enable_phaserunner = opts[:enable_phaserunner]
50
+ if @enable_phaserunner
51
+ @phaserunner = Phaserunner::Modbus.new(
52
+ tty: opts[:tty_pr], baudrate: opts[:baud_pr]
53
+ )
54
+ end
33
55
  end
34
56
 
57
+ # Forms the proper header line
58
+ # @return [String] of a printable CSV header line
35
59
  def logs_header
36
- dict.map do |(address, node)|
60
+ hdr = dict.map do |(address, node)|
37
61
  "#{node[:name]} (#{node[:units]})"
38
- end.join(",")
62
+ end
63
+ if enable_phaserunner
64
+ hdr += phaserunner.bulk_log_header.map { |name| "PR #{name}" }
65
+ end
66
+ hdr.join(',')
39
67
  end
40
68
 
69
+ # Converts a TSV string into an array
41
70
  def tsv2array(line)
42
- line.split("\t")
71
+ line.strip.split("\t")
43
72
  end
44
73
 
45
- # Get line from serial port and send to file
74
+ # Get line from Cycle Analyst serial port, optionally also the Phaserunner and send to stdout and file
46
75
  # @param output_fd [File] File Descriptor of the output file to write to. Don't write to file if nil
47
- # @param line_count [Integer, Symbol] Number of lines to output, or forever if :forever
76
+ # @param loop_count [Integer, Symbol] Number of lines to output, or forever if :forever
48
77
  # @param quite [Boolean] Don't output to stdout if true
49
- def get_logs(output_fd, line_count, quiet)
78
+ def get_logs(output_fd, loop_count, quiet)
50
79
  line_number = 0
51
80
  hdr = %Q(Timestamp,#{logs_header})
52
81
 
53
82
  puts hdr if not quiet
54
83
  output_fd.puts hdr if output_fd
55
84
 
56
- serial_io.each_line do |line|
57
- output_line = %Q(#{Time.now.utc.round(10).iso8601(6)},#{tsv2array(line).join(",")})
58
- puts output_line if not quiet
85
+ serial_io.each_line.with_index do |line, idx|
86
+ output = (
87
+ [Time.now.utc.round(10).iso8601(6)] +
88
+ tsv2array(line)
89
+ )
90
+ output += phaserunner.bulk_log_data if enable_phaserunner
91
+ output_line = output.flatten.join(',')
92
+
93
+ puts output_line unless quiet
59
94
  output_fd.puts output_line if output_fd
60
95
 
61
- # Determine if we go forever
62
- if (line_count != :forever)
63
- # If not, then quit when we reach count lines
64
- line_number +=1
65
- break if line_number >= line_count
66
- end
96
+ break if idx >= loop_count
67
97
  end
68
98
  end
69
99
  end
@@ -1,14 +1,23 @@
1
1
  require 'gli'
2
2
 
3
3
  module CycleAnalystLogger
4
+ # Handle Ctl-C exit
5
+ trap "SIGINT" do
6
+ puts "Exiting"
7
+ exit 130
8
+ end
4
9
 
5
10
  class Cli
6
- attr_reader :ca
11
+ attr_reader :cycle_analyst
12
+ attr_reader :enable_phaserunner
13
+ attr_reader :pr
14
+ attr_reader :quiet
15
+ attr_reader :loop_count
7
16
 
8
17
  include GLI::App
9
18
 
10
19
  def main
11
- program_desc 'Store the streaming data log output of a Grin Cycle Analyst V3'
20
+ program_desc 'Store the streaming data log output of a Grin Cycle Analyst V3 and optionally a Phaserunner'
12
21
 
13
22
  version CycleAnalystLogger::VERSION
14
23
 
@@ -16,30 +25,44 @@ module CycleAnalystLogger
16
25
  arguments :strict
17
26
  sort_help :manually
18
27
 
19
- desc 'Serial (USB) device'
28
+ desc 'Cycle Analyst Serial (USB) device'
20
29
  default_value '/dev/ttyUSB1'
21
30
  arg 'tty', :optional
22
- flag [:t, :tty]
31
+ flag [:t, :tty_ca]
23
32
 
24
- desc 'Serial port baudrate'
33
+ desc 'Cycle Analyst Serial port baudrate'
25
34
  default_value 9600
26
35
  arg 'baudrate', :optional
27
- flag [:b, :baudrate]
36
+ flag [:b, :baud_ca]
37
+
38
+ desc 'Get PhaseRunner Logs also'
39
+ default_value true
40
+ arg 'enable_phaserunner', :optional
41
+ flag [:enable_phaserunner]
42
+
43
+ desc 'Phaserunner Serial (USB) device'
44
+ default_value '/dev/ttyUSB0'
45
+ arg 'tty', :optional
46
+ flag [:tty_pr]
47
+
48
+ desc 'Phaserunner Serial port baudrate'
49
+ default_value 115200
50
+ arg 'baudrate', :optional
51
+ flag [:baud_pr]
52
+
53
+ desc "How many lines to read"
54
+ default_value :forever
55
+ flag [:l, :loop_count]
28
56
 
29
57
  desc 'Do not output to stdout'
30
58
  switch [:q, :quiet]
31
59
 
32
- desc 'Capture the logging output of the CA to a file'
60
+ desc 'Capture the logging output of the Cycle Analyst and optionally Phaserunner to a file'
33
61
  command :log do |log|
34
- log.desc "How many lines to read"
35
- log.default_value :forever
36
- log.flag [:l, :line_count]
37
-
38
62
  log.action do |global_options, options, args|
39
- quiet = global_options[:quiet]
40
- line_count = options[:line_count]
41
- output_fd = File.open("cycle_analyst.#{Time.now.strftime('%Y-%m-%d_%H-%M-%S')}.csv", 'w')
42
- ca.get_logs(output_fd, line_count, quiet)
63
+ filename = "cycle_analyst.#{Time.now.strftime('%Y-%m-%d_%H-%M-%S')}.csv"
64
+ output_fd = File.open(filename, 'w')
65
+ cycle_analyst.get_logs(output_fd, loop_count, quiet)
43
66
  end
44
67
  end
45
68
 
@@ -49,7 +72,15 @@ module CycleAnalystLogger
49
72
  # chosen command
50
73
  # Use skips_pre before a command to skip this block
51
74
  # on that command only
52
- @ca = CycleAnalyst.new(global)
75
+ @quiet = global[:quiet]
76
+ # Handle that loop_count can be :forever or an Integer
77
+ @loop_count = if global[:loop_count] == :forever
78
+ Float::INFINITY
79
+ else
80
+ global[:loop_count].to_i
81
+ end
82
+ @enable_phaserunner = global[:enable_phaserunner]
83
+ @cycle_analyst = CycleAnalyst.new(global)
53
84
  end
54
85
 
55
86
  post do |global,command,options,args|
@@ -1,3 +1,3 @@
1
1
  module CycleAnalystLogger
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cycle_analyst_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert J. Berger
@@ -38,6 +38,26 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: phaserunner
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.1'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 0.1.3
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '0.1'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 0.1.3
41
61
  - !ruby/object:Gem::Dependency
42
62
  name: bundler
43
63
  requirement: !ruby/object:Gem::Requirement
@@ -84,16 +104,22 @@ dependencies:
84
104
  name: rdoc
85
105
  requirement: !ruby/object:Gem::Requirement
86
106
  requirements:
87
- - - ">="
107
+ - - "~>"
88
108
  - !ruby/object:Gem::Version
89
109
  version: '0'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 5.0.0
90
113
  type: :development
91
114
  prerelease: false
92
115
  version_requirements: !ruby/object:Gem::Requirement
93
116
  requirements:
94
- - - ">="
117
+ - - "~>"
95
118
  - !ruby/object:Gem::Version
96
119
  version: '0'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 5.0.0
97
123
  - !ruby/object:Gem::Dependency
98
124
  name: aruba
99
125
  requirement: !ruby/object:Gem::Requirement
@@ -122,7 +148,8 @@ dependencies:
122
148
  - - "~>"
123
149
  - !ruby/object:Gem::Version
124
150
  version: '0.9'
125
- description: Read and store log output from the Grin Cycle Analyst
151
+ description: Read and store log output from the Grin Cycle Analyst and optionally
152
+ Phaserunner
126
153
  email:
127
154
  - rberger@ibd.com
128
155
  executables:
@@ -173,5 +200,5 @@ rubyforge_project:
173
200
  rubygems_version: 2.6.14
174
201
  signing_key:
175
202
  specification_version: 4
176
- summary: Read and store log output from the Grin Cycle Analyst
203
+ summary: Read and store log output from the Grin Cycle Analyst and Phaserunner
177
204
  test_files: []