phaserunner 0.2.0 → 0.2.2

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: d15301c00ce626cfbfe825e9ddabb0a4fe99e3c0
4
- data.tar.gz: 8e561d503383ab68fb93f395861df4634fdeb4c3
3
+ metadata.gz: a2f46afec661bbb08bb41df2e8e68328fde4dc81
4
+ data.tar.gz: c3510f359bd9f0056cd60f952ae5034c8ba986f0
5
5
  SHA512:
6
- metadata.gz: 1bdb4df97315254801d4914bf5ba277f4461a298ccadf668917a3503bcb1689b13f0931b4c3b1745583cfc7599c846a81b1903db13830e0aa08266eac8bcfcf8
7
- data.tar.gz: 9efd67d37f23468fc41913b092f54f97f52b6424dd6355ad18c5b465a666348a4f690004c3437d17be9595ea3b8da9b3096f7a9186421aa1c647ea9456c581cc
6
+ metadata.gz: 5c8b871c2747b949df465c823aa289e76bf33b941bea4833b8d1b503016bc10ddafeb3164b94e328c483437a66bac426300f02de424d1cb30dc1638cca68869a
7
+ data.tar.gz: a23c73c8500f3d30cec1708264629376d06ac14508a7c57f2bfcc0503004abc7ed8a4f5810ad5c296fd60cc1d76b888a2172863e19b7e2222ef57a2e478e5de7
@@ -0,0 +1,23 @@
1
+ --- !ruby/object:RDoc::Options
2
+ encoding: UTF-8
3
+ static_path: []
4
+ rdoc_include:
5
+ - "."
6
+ - "/Users/rberger/Documents/Trike/bike-pi/phaserunner"
7
+ charset: UTF-8
8
+ exclude:
9
+ hyperlink_all: false
10
+ line_numbers: false
11
+ locale:
12
+ locale_dir: locale
13
+ locale_name:
14
+ main_page:
15
+ markup: markdown
16
+ output_decoration: true
17
+ page_dir:
18
+ show_hash: false
19
+ tab_width: 8
20
+ template_stylesheets: []
21
+ title:
22
+ visibility: :protected
23
+ webcvs:
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ education, socio-economic status, nationality, personal appearance, race,
10
+ religion, or sexual identity and orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at _rberger at ibd dot com_. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72
+
73
+ [homepage]: https://www.contributor-covenant.org
74
+
@@ -0,0 +1,136 @@
1
+ # phaserunner
2
+
3
+ Read values from the Grin PhaseRunner Controller for logging
4
+
5
+ [![Gem Version Badge](https://badge.fury.io/rb/phaserunner.svg)](https://badge.fury.io/rb/phaserunner)
6
+
7
+ ## Getting Started
8
+
9
+ These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.
10
+
11
+ ### Prerequisites
12
+
13
+ * Ruby ~2.4 or ~2.5
14
+ * Bundler
15
+
16
+ Bundler / Gemspec automatically pulls in all the dependencies
17
+
18
+ ### Installing for doing development
19
+
20
+ The usual Ruby install from github
21
+
22
+ ```
23
+ git clone git@github.com:rberger/phaserunner.git
24
+ cd phaserunner
25
+ bundle install
26
+ ```
27
+
28
+ ### Usage
29
+
30
+ To get help:
31
+
32
+ ```
33
+ bundle exec exe/phaserunner help
34
+ NAME
35
+ phaserunner - Read values from the Grin PhaseRunner Controller primarily for logging
36
+
37
+ SYNOPSIS
38
+ phaserunner [global options] command [command options] [arguments...]
39
+
40
+ VERSION
41
+ 0.2.0
42
+
43
+ GLOBAL OPTIONS
44
+ -t, --tty=arg - Serial (USB) device (default: /dev/ttyUSB0)
45
+ -b, --baudrate=arg - Serial port baudrate (default: 115200)
46
+ -s, --slave_id=arg - Modbus slave ID (default: 1)
47
+ -d, --dictionary_file=arg - Path to json file that contains Grin Modbus Dictionary (default:
48
+ /Users/rberger/.rvm/gems/ruby-2.4.1/gems/asi_bod-0.1.5/BODm.json)
49
+ -l, --loop_count=arg - Loop the command n times (default: forever)
50
+ --version - Display the program version
51
+ -q, --[no-]quiet - Do not output to stdout
52
+ --help - Show this message
53
+
54
+ COMMANDS
55
+ help - Shows a list of commands or help for one command
56
+ read_register - Read a single or multiple adjacent registers from and address
57
+ log - Logs interesting Phaserunner registers to stdout and file
58
+ ```
59
+
60
+ ### Phaserunner Registers logged
61
+
62
+ At this time the scaling factors are __NOT__ applied to the log output.
63
+
64
+ |Name|Index|Desc|Scale|Units|
65
+ |---|---|---|---|---|
66
+ |Timestamp | | ISO 8601 Timestamp| 1 | Time |
67
+ |Faults| 258 | Faults Bitmap|1|Bitmap
68
+ |Controller Temperature|259|Base plate temperature|1|deg Celsius|
69
+ |Vehicle Speed|260|Calculated vehicle speed|256|Km/hour|
70
+ |Motor Temperature|261|Motor temperature |1|deg Celsius|
71
+ |Motor Current|262|Motor peak current |32|Amps|
72
+ |Motor RPM|263|Motor speed |1|RPM|
73
+ |Motor Speed|264|Motor speed|40.96|% of rated rpm|
74
+ |Battery Voltage|265|Measured battery voltage|32|Volts|
75
+ |Battery Current|266|Measured battery amperage|32|Amps|
76
+ |Battery State of Charge|267|Remaining battery capacity|32|%|
77
+ |Battery Power|268|Calculated battery output power|1|Watts|
78
+ |Last Fault|269|Last Fault Bitmap|1|Bitmap|
79
+ |Throttle Voltage|270|Filtered throttle voltage|4096|Volts|
80
+ |Brake 1 Voltage|271|Filtered brake 1 voltage|4096|Volts|
81
+ |Brake 2 Voltage|272|Filtered brake 2 voltage|4096|Volts|
82
+ |Raw Controller Temperature Sensor Voltage|273|Unfiltered controller temperature sensor voltage|4096|Volts|
83
+ |Digital Inputs|276|Digital Inputs Bitmap|1|Bitmap|
84
+ |Warnings|277|Warnings Bitmap|1|Bitmap|
85
+ |Phase A Current|282|Measured motor phase A current|32|Amps|
86
+ |Phase B Current|283|Calculated motor phase B current|32|Amps|
87
+ |Phase C Current|284|Measured motor phase C current|32|Amps|
88
+ |Phase A Voltage|285|Measured instantaneous motor phase A voltage|32|Volts|
89
+ |Phase B Voltage|286|Measured instantaneous motor phase B voltage|32|Volts|
90
+ |Phase C Voltage|287|Measured instantaneous motor phase C voltage|32|Volts|
91
+ |Motor Input Power|334|Motor input power in Watts|1|W|
92
+ |Torque Command|335|Requested motor torque from sensors before rate limiting|4096|pu|
93
+ |Torque Reference|336|Requested motor torque after rate limiting|4096|pu|
94
+ |Speed (Ref/Limit) Command|337|Speed limit in local mode|4096|pu|
95
+
96
+ ## Running the tests
97
+
98
+ Unfortunately there are no real tests (yet, Pull Requests Welcome!)
99
+
100
+ ## Deployment
101
+
102
+ Deploy as usual. If you are not doing it from a git clone just want to install from Rubygems:
103
+
104
+ ```
105
+ gem install phaserunner
106
+ ```
107
+
108
+ ## Built With
109
+
110
+ * [Ruby](https://www.ruby-lang.org/) - Language
111
+ * [Bundler](http://bundler.io) - Package / Dependency Management
112
+ * [asi_bod](https://rubygems.org/gems/asi_bod) - Grin Phaserunner / [Accelerated System](http://accelerated-systems.com) Register Defs
113
+ * [Grin Tech Phaserunner](http://www.ebikes.ca/product-info/phaserunner.html) - Controller were interfacing to
114
+
115
+ ## Contributing
116
+
117
+ Bug reports and pull requests are welcome on GitHub at https://github.com/rberger/rmodbus_cli.
118
+
119
+
120
+ ### Code of Conduct in Contriubing
121
+
122
+ This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Code of Conduct](CODE_OF_CONDUCT.md).
123
+
124
+ ## Versioning
125
+
126
+ We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/rberger/phaserunner/tags).
127
+
128
+ ## Authors
129
+
130
+ * **[Robert Berger](https://github.com/rberger)**
131
+
132
+ ## License and Copyright
133
+
134
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE.txt) file for details
135
+
136
+ * Copyright (c) 2018 Robert J. Berger
@@ -6,11 +6,21 @@ module Phaserunner
6
6
  # Methods for communicating with the Modbus interface to the Phaserunner
7
7
  class Modbus
8
8
 
9
+ # Struct to represent a run length encode set of registers
10
+ RegistersRunLength = Struct.new(:start, :count)
11
+
9
12
  # Returns the path to the default BODm.json file
10
13
  def self.default_file_path
11
14
  AsiBod::Bod.default_file_path
12
15
  end
13
16
 
17
+ # Build up an array of RegistersRunLength structs that represent the ranges
18
+ # of registers to log
19
+ register_list = [RegistersRunLength.new(258, 18)]
20
+ register_list << RegistersRunLength.new(276, 2)
21
+ register_list << RegistersRunLength.new(282, 6)
22
+ register_list << RegistersRunLength.new(334, 4)
23
+
14
24
  DEFAULTS = {
15
25
  tty: '/dev/ttyUSB0',
16
26
  baudrate: 115200,
@@ -18,6 +28,7 @@ module Phaserunner
18
28
  dictionary_file: default_file_path,
19
29
  loop_count: :forever,
20
30
  quiet: false,
31
+ register_list: register_list,
21
32
  registers_start_address: 258,
22
33
  registers_count: 15,
23
34
  registers_misc: [276, 277, 334]
@@ -31,11 +42,10 @@ module Phaserunner
31
42
  attr_reader :quiet
32
43
 
33
44
  # The registers of interest for logging
34
- # First a range
35
- attr_reader :registers_start_address
36
- attr_reader :registers_count
37
- # Sparse Registers of interest
38
- attr_reader :registers_misc
45
+ # @paramds [Array<RegistersRunLength>] register_list
46
+ # @option register_list [Integer] :start Starting register Index
47
+ # @option register_list [Integer] :count Number of registers to return
48
+ attr_reader :register_list
39
49
 
40
50
  # Contains the Grin Phaesrunner Modbus Dictionary
41
51
  # @params [Hash<Integer, Hash>] dict The Dictionary with a key for each register address
@@ -101,27 +111,22 @@ module Phaserunner
101
111
  end
102
112
  end
103
113
 
104
- # More optimized data fetch. Gets an address range + misc individual addresses
105
- # @param start_address [Integer] Initial address of the range. Optional, has a default
106
- # @param count [Integer] Count of addresses in range. Optional, has a default
107
- # @param misc_addresses [Array<Integer>] List of misc individual addresses. Optional, has a default
114
+ # More optimized data fetch. Gets an array of address range structs
115
+ # @param register_list [Array<RegistersRunLength] Register ranges to log. Optional, has a default
108
116
  # @return [Array<Integer>] List of the register values in the order requested
109
- def bulk_log_data(start_address = registers_start_address,
110
- count = registers_count,
111
- misc_addresses = registers_misc)
112
- read_raw_range(start_address, count) + read_addresses(misc_addresses)
117
+ def bulk_log_data(registers = register_list)
118
+ registers.map do |reg|
119
+ read_raw_range(reg.start, reg.count)
120
+ end
113
121
  end
114
122
 
115
123
  # Get the headers for the bulk_log data
116
- # @param start_address [Integer] Initial address of the range. Optional, has a default
117
- # @param count [Integer] Count of addresses in range. Optional, has a default
118
- # @param misc_addresses [Array<Integer>] List of misc individual addresses. Optional, has a default
124
+ # @param register_list [Array<RegistersRunLength] Register ranges to log. Optional, has a default
119
125
  # @return [Array<String>] Array of the headers
120
- def bulk_log_header(start_address = registers_start_address,
121
- count = registers_count,
122
- misc_addresses = registers_misc)
123
- range_address_header(start_address, count) +
124
- bulk_addresses_header(misc_addresses)
126
+ def bulk_log_header(registers = register_list)
127
+ registers.map do |reg|
128
+ range_address_header(reg.start, reg.count)
129
+ end
125
130
  end
126
131
  end
127
132
  end
@@ -1,3 +1,3 @@
1
1
  module Phaserunner
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.2'
3
3
  end
@@ -23,8 +23,8 @@ Gem::Specification.new do |spec|
23
23
  spec.required_ruby_version = '~> 2'
24
24
 
25
25
  spec.has_rdoc = true
26
- spec.extra_rdoc_files = ['README.rdoc', 'phaserunner.rdoc']
27
- spec.rdoc_options << '--title' << 'phaserunner' << '--main' << 'README.rdoc' << '-ri'
26
+ spec.extra_rdoc_files = ['README.md']
27
+ spec.rdoc_options << '--title' << 'phaserunner' << '--main' << 'README.md' << '-ri'
28
28
 
29
29
  spec.add_runtime_dependency 'gli', '~> 2.17'
30
30
  spec.add_runtime_dependency 'rmodbus', '~> 1.3'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phaserunner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert J. Berger
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-05 00:00:00.000000000 Z
11
+ date: 2018-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli
@@ -158,13 +158,14 @@ executables:
158
158
  - phaserunner
159
159
  extensions: []
160
160
  extra_rdoc_files:
161
- - README.rdoc
162
- - phaserunner.rdoc
161
+ - README.md
163
162
  files:
164
163
  - ".gitignore"
164
+ - ".rdoc_options"
165
+ - CODE-OF-CONDUCT.md
165
166
  - Gemfile
166
167
  - LICENSE.txt
167
- - README.rdoc
168
+ - README.md
168
169
  - Rakefile
169
170
  - exe/phaserunner
170
171
  - lib/phaserunner.rb
@@ -184,7 +185,7 @@ rdoc_options:
184
185
  - "--title"
185
186
  - phaserunner
186
187
  - "--main"
187
- - README.rdoc
188
+ - README.md
188
189
  - "-ri"
189
190
  require_paths:
190
191
  - lib
@@ -1,50 +0,0 @@
1
- == NAME
2
- phaserunner - Read values from the Grin PhaseRunner Controller for logging
3
-
4
- {<img src="https://badge.fury.io/rb/phaserunner.svg" alt="Gem Version" />}[https://badge.fury.io/rb/phaserunner]
5
-
6
- == SYNOPSIS
7
- phaserunner [global options] command [command options] [arguments...]
8
- phaserunner [global options] log [command options]
9
-
10
- == VERSION
11
- 0.1.0
12
-
13
- == GLOBAL OPTIONS
14
- -t, --tty=arg - Serial (USB) device (default: /dev/ttyUSB0)
15
- -b, --baudrate=arg - Serial port baudrate (default: 115200)
16
- -s, --slave_id=arg - Modbus slave ID (default: 1)
17
- -d, --dictionary_file=arg - Path to json file that contains Grin Modbus Dictionary (default: /Users/rberger/.rvm/gems/ruby-2.4.1/gems/asi_bod-0.1.4/BODm.json)
18
- -l, --loop=arg - Loop the command n times (default: 10)
19
- --version - Display the program version
20
- --help - Show this message
21
-
22
- == COMMANDS
23
- help - Shows a list of commands or help for one command
24
- read_register - Read a single or multiple adjacent registers from and address
25
- log - Logs a range plus bulk sparse set of registers with multiple addresses to stdout and file
26
-
27
- === Attributes that are Logged
28
-
29
- * Timestamp
30
- * Phaserunner Faults ()
31
- * Phaserunner Controller Temperature (deg Celsius)
32
- * Phaserunner Vehicle Speed (Km/hour)
33
- * Phaserunner Motor Temperature (deg Celsius)
34
- * Phaserunner Motor Current (Amps)
35
- * Phaserunner Motor RPM (RPM)
36
- * Phaserunner Motor Speed (% of rated rpm)
37
- * Phaserunner Battery Voltage (Volts)
38
- * Phaserunner Battery Current (Amps)
39
- * Phaserunner Battery State of Charge (%)
40
- * Phaserunner Battery Power (Watts)
41
- * Phaserunner Last Fault ()
42
- * Phaserunner Warnings ()
43
- * Phaserunner Motor Input Power (W)
44
-
45
- == License and Copyright
46
-
47
- * Copyright (c) 2018 Robert J. Berger
48
- * License: MIT
49
-
50
- :include:phaserunner.rdoc