cycle_analyst_logger 0.1.1 → 0.2.0

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: 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: []