obd 0.0.1
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.
- data/README.markdown +0 -0
- data/lib/obd.rb +10 -0
- data/lib/obd/command.rb +73 -0
- data/lib/obd/connection.rb +44 -0
- data/lib/obd/response.rb +18 -0
- metadata +60 -0
data/README.markdown
ADDED
File without changes
|
data/lib/obd.rb
ADDED
data/lib/obd/command.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
module OBD
|
2
|
+
class Command
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.format_result command, result
|
9
|
+
if is_command?(command) && result != "NO DATA"
|
10
|
+
pids[command.to_sym].call h(result)
|
11
|
+
else
|
12
|
+
result
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.to_hex command
|
17
|
+
if is_command? command
|
18
|
+
"01%02x" % pids.keys.index(command.to_sym)
|
19
|
+
else
|
20
|
+
command
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.is_command? command
|
25
|
+
pids.keys.include? command.to_sym
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.pids
|
29
|
+
{
|
30
|
+
pids_supported_1: lambda {|x| x.to_s(2).split('').each_with_index.map{|b,i| pids.keys[i] if b == '1'}},
|
31
|
+
monitor_status_since_clear: lambda {|x| x.to_s},
|
32
|
+
freeze_dtc: lambda {|x| x.to_s},
|
33
|
+
fuel_system_status: lambda {|x| x.to_s},
|
34
|
+
calculated_engine_load: lambda {|x| "%0.2f" % (x * 100.0 / 255.0) + '%'},
|
35
|
+
engine_coolent_temperature: lambda {|x| "%0.2f" % (x * 1.8 - 104) + '*F'},
|
36
|
+
short_term_fuel_trim_bank_1: lambda {|x| "%0.2f" % (x * 0.78125 - 100) + '%'},
|
37
|
+
long_term_fuel_trim_bank_1: lambda {|x| "%0.2f" % (x * 0.78125 - 100) + '%'},
|
38
|
+
short_term_fuel_trim_bank_2: lambda {|x| "%0.2f" % (x * 0.78125 - 100) + '%'},
|
39
|
+
long_term_fuel_trim_bank_2: lambda {|x| "%0.2f" % (x * 0.78125 - 100) + '%'},
|
40
|
+
fuel_pressure: lambda {|x| "%0.2f" % (x * 3 * 0.145) + 'psi'},
|
41
|
+
intake_manifold_absolute_pressure: lambda {|x| "%0.2f" % (x * 0.145) + 'psi'},
|
42
|
+
engine_rpm: lambda {|x| "%0.2f" % (x / 4.0) + 'rpm'},
|
43
|
+
vehicle_speed: lambda {|x| "%0.2f" % (x * 0.621371192) + 'mph'},
|
44
|
+
timing_advance: lambda {|x| "%0.2f" % (x / 2.0 - 64) + '*'},
|
45
|
+
intake_air_temperature: lambda {|x| "%0.2f" % (x * 1.8 - 104) + '*F'},
|
46
|
+
maf_air_flow_rate: lambda {|x| "%0.2f" % (x / 100.0) + 'grams/sec'},
|
47
|
+
throttle_position: lambda {|x| "%0.2f" % (x * 100 / 255.0) + '%'},
|
48
|
+
commanded_secondary_air_status: lambda {|x| x}, # bit encoded
|
49
|
+
oxygen_sensors_present: lambda {|x| x}, # [A0..A3] == Bank 1,Sensors 1-4.[A4..A7]
|
50
|
+
bank_1_sensor_1_oxygen_sensor_voltage: lambda {|x| x},
|
51
|
+
bank_1_sensor_2_oxygen_sensor_voltage: lambda {|x| x},
|
52
|
+
bank_1_sensor_3_oxygen_sensor_voltage: lambda {|x| x},
|
53
|
+
bank_1_sensor_4_oxygen_sensor_voltage: lambda {|x| x},
|
54
|
+
bank_2_sensor_1_oxygen_sensor_voltage: lambda {|x| x},
|
55
|
+
bank_2_sensor_2_oxygen_sensor_voltage: lambda {|x| x},
|
56
|
+
bank_2_sensor_3_oxygen_sensor_voltage: lambda {|x| x},
|
57
|
+
bank_2_sensor_4_oxygen_sensor_voltage: lambda {|x| x},
|
58
|
+
obd_standards_vehicle_conforms_to: lambda {|x| x}, # bit encoded
|
59
|
+
oxygen_sensors_present_2: lambda {|x| x}, # complicated...
|
60
|
+
aux_input_status: lambda {|x| (x == 1).inspect}, # Power Take Off (PTO) status is active?
|
61
|
+
run_time_since_engine_start: lambda {|x| x}, # seconds
|
62
|
+
pids_supported_2: lambda {|x| x.to_s(2).split('').each_with_index.map{|b,i| pids.keys[i+33] if b == '1'}}, # bit encoded
|
63
|
+
distance_traveled_with_mil_on: lambda {|x| x.to_s + 'km'}
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.h response
|
68
|
+
response[4..-1].to_i(16)
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module OBD
|
2
|
+
class Connection
|
3
|
+
def initialize port, baud = 9600
|
4
|
+
@port = port
|
5
|
+
@baud = baud
|
6
|
+
|
7
|
+
connect
|
8
|
+
end
|
9
|
+
|
10
|
+
def voltage
|
11
|
+
send("AT RV")
|
12
|
+
end
|
13
|
+
|
14
|
+
def connect
|
15
|
+
@serial_port = SerialPort.new @port, @baud # , data_bits: 8, stop_bits: 1, parity: SerialPort::NONE
|
16
|
+
@serial_port.read_timeout = 5000
|
17
|
+
read
|
18
|
+
send("AT E0") # turn echo off
|
19
|
+
send("AT L0") # turn linefeeds off
|
20
|
+
send("AT S0") # turn spaces off
|
21
|
+
send("AT AT2") # respond to commands faster
|
22
|
+
send("AT SP 00") # automatically select protocol
|
23
|
+
end
|
24
|
+
|
25
|
+
def [] command
|
26
|
+
OBD::Command.format_result(command, send(OBD::Command.to_hex(command)))
|
27
|
+
end
|
28
|
+
|
29
|
+
def send data
|
30
|
+
write data
|
31
|
+
read
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def read
|
37
|
+
return @serial_port.gets("\r\r>").to_s.chomp("\r\r>")
|
38
|
+
end
|
39
|
+
|
40
|
+
def write data
|
41
|
+
@serial_port.write data.to_s + "\r"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/obd/response.rb
ADDED
metadata
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: obd
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jeff Peterson
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-05-16 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: serialport
|
16
|
+
requirement: &70153807947280 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70153807947280
|
25
|
+
description: A Ruby API that interfaces with ELM327 compatible devices over serial.
|
26
|
+
email: jeff@petersonj.com
|
27
|
+
executables: []
|
28
|
+
extensions: []
|
29
|
+
extra_rdoc_files: []
|
30
|
+
files:
|
31
|
+
- README.markdown
|
32
|
+
- lib/obd.rb
|
33
|
+
- lib/obd/command.rb
|
34
|
+
- lib/obd/connection.rb
|
35
|
+
- lib/obd/response.rb
|
36
|
+
homepage: http://petersonj.com/obd
|
37
|
+
licenses: []
|
38
|
+
post_install_message:
|
39
|
+
rdoc_options: []
|
40
|
+
require_paths:
|
41
|
+
- lib
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
requirements: []
|
55
|
+
rubyforge_project:
|
56
|
+
rubygems_version: 1.8.13
|
57
|
+
signing_key:
|
58
|
+
specification_version: 3
|
59
|
+
summary: A Ruby OBD-II API
|
60
|
+
test_files: []
|