ow 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +28 -1
- data/lib/ow.rb +21 -2
- data/lib/ow/device.rb +13 -0
- data/lib/ow/devices/ds18b20.rb +24 -0
- data/lib/ow/devices/ds2423.rb +21 -0
- data/lib/ow/devices/ds2450.rb +41 -0
- data/lib/ow/devices/eds0068.rb +27 -0
- data/lib/ow/parser.rb +39 -0
- data/lib/ow/server.rb +42 -0
- data/lib/ow/version.rb +1 -1
- data/ow.gemspec +4 -2
- data/spec/fixtures/full.xml +212 -0
- data/spec/fixtures/parser_test.xml +5 -0
- data/spec/fixtures/server.xml +19 -0
- data/spec/ow/device_spec.rb +21 -0
- data/spec/ow/parser_spec.rb +47 -0
- data/spec/ow/server_spec.rb +13 -0
- data/spec/ow_spec.rb +28 -0
- data/spec/spec_helper.rb +12 -0
- metadata +47 -8
data/README.md
CHANGED
@@ -18,7 +18,34 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
require 'ow'
|
22
|
+
|
23
|
+
# Parse XML from file
|
24
|
+
server = Ow.parse_file('file.xml')
|
25
|
+
|
26
|
+
# Parse XML from string
|
27
|
+
server = Ow.parse("<?xml (...)")
|
28
|
+
|
29
|
+
server
|
30
|
+
=> #<Ow::Server:0x007fa1141c1648>
|
31
|
+
|
32
|
+
server.devices
|
33
|
+
=> [#<Ow::Devices::DS18B20:0x007fa1141b4c90,
|
34
|
+
#<Ow::Devices::DS2423:0x007fa1141a5ee8]
|
35
|
+
|
36
|
+
server.devices.first.temperature
|
37
|
+
=> "6.1875"
|
38
|
+
|
39
|
+
## To do
|
40
|
+
|
41
|
+
### Device definions
|
42
|
+
|
43
|
+
* Default conversion for element names (automatically convert to
|
44
|
+
snake-case).
|
45
|
+
* Type coercion for elements (temperatures should be float, not string,
|
46
|
+
etc.)
|
47
|
+
* Move common fields (Name, ROMId, etc.) to the Device module to avoid
|
48
|
+
duplication.
|
22
49
|
|
23
50
|
## Contributing
|
24
51
|
|
data/lib/ow.rb
CHANGED
@@ -1,5 +1,24 @@
|
|
1
|
-
require
|
1
|
+
Dir[File.join(File.dirname(__FILE__), 'ow', 'devices', '*.rb')].each { |file| require file }
|
2
|
+
|
3
|
+
require 'ow/device'
|
4
|
+
require 'ow/parser'
|
5
|
+
require 'ow/server'
|
6
|
+
require 'ow/version'
|
7
|
+
|
8
|
+
require 'ox'
|
2
9
|
|
3
10
|
module Ow
|
4
|
-
|
11
|
+
def self.parse_document(document)
|
12
|
+
Ow::Server.from_document(document.root)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.parse_file(filename)
|
16
|
+
document = Ox.load_file(filename)
|
17
|
+
parse_document(document)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.parse(string)
|
21
|
+
document = Ox.parse(string)
|
22
|
+
parse_document(document)
|
23
|
+
end
|
5
24
|
end
|
data/lib/ow/device.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "ow/device"
|
2
|
+
require "ow/parser"
|
3
|
+
|
4
|
+
module Ow
|
5
|
+
module Devices
|
6
|
+
class DS18B20
|
7
|
+
include Ow::Device
|
8
|
+
include Ow::Parser
|
9
|
+
|
10
|
+
element :Name, as: :name
|
11
|
+
element :Family, as: :family
|
12
|
+
element :ROMId, as: :rom_id
|
13
|
+
element :Health, as: :health
|
14
|
+
element :Channel, as: :channel
|
15
|
+
element :RawData, as: :raw_data
|
16
|
+
element :PrimaryValue, as: :primary_value
|
17
|
+
element :Temperature, as: :temperature
|
18
|
+
element :UserByte1, as: :user_byte_1
|
19
|
+
element :UserByte2, as: :user_byte_2
|
20
|
+
element :Resolution, as: :resolution
|
21
|
+
element :PowerSource, as: :power_source
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "ow/device"
|
2
|
+
require "ow/parser"
|
3
|
+
|
4
|
+
module Ow
|
5
|
+
module Devices
|
6
|
+
class DS2423
|
7
|
+
include Ow::Device
|
8
|
+
include Ow::Parser
|
9
|
+
|
10
|
+
element :Name, as: :name
|
11
|
+
element :Family, as: :family
|
12
|
+
element :ROMId, as: :rom_id
|
13
|
+
element :Health, as: :health
|
14
|
+
element :Channel, as: :channel
|
15
|
+
element :RawData, as: :raw_data
|
16
|
+
element :PrimaryValue, as: :primary_value
|
17
|
+
element :Counter_A, as: :counter_a
|
18
|
+
element :Counter_B, as: :counter_b
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require "ow/device"
|
2
|
+
require "ow/parser"
|
3
|
+
|
4
|
+
module Ow
|
5
|
+
module Devices
|
6
|
+
class DS2450
|
7
|
+
include Ow::Device
|
8
|
+
include Ow::Parser
|
9
|
+
|
10
|
+
element :Name, as: :name
|
11
|
+
element :Family, as: :family
|
12
|
+
element :ROMId, as: :rom_id
|
13
|
+
element :Health, as: :health
|
14
|
+
element :Channel, as: :channel
|
15
|
+
element :RawData, as: :raw_data
|
16
|
+
element :PrimaryValue, as: :primary_value
|
17
|
+
element :ChannelAConversionValue, as: :channel_a_conversion_value
|
18
|
+
element :ChannelAConversionResolution, as: :channel_a_conversion_resolution
|
19
|
+
element :ChannelAConversionRange, as: :channel_a_conversion_range
|
20
|
+
element :ChannelAOutputEnable, as: :channel_a_output_enable
|
21
|
+
element :ChannelAOutputControl, as: :channel_a_output_control
|
22
|
+
element :ChannelBConversionValue, as: :channel_b_conversion_value
|
23
|
+
element :ChannelBConversionResolution, as: :channel_b_conversion_resolution
|
24
|
+
element :ChannelBConversionRange, as: :channel_b_conversion_range
|
25
|
+
element :ChannelBOutputEnable, as: :channel_b_output_enable
|
26
|
+
element :ChannelBOutputControl, as: :channel_b_output_control
|
27
|
+
element :ChannelCConversionValue, as: :channel_c_conversion_value
|
28
|
+
element :ChannelCConversionResolution, as: :channel_c_conversion_resolution
|
29
|
+
element :ChannelCConversionRange, as: :channel_c_conversion_range
|
30
|
+
element :ChannelCOutputEnable, as: :channel_c_output_enable
|
31
|
+
element :ChannelCOutputControl, as: :channel_c_output_control
|
32
|
+
element :ChannelDConversionValue, as: :channel_d_conversion_value
|
33
|
+
element :ChannelDConversionResolution, as: :channel_d_conversion_resolution
|
34
|
+
element :ChannelDConversionRange, as: :channel_d_conversion_range
|
35
|
+
element :ChannelDOutputEnable, as: :channel_d_output_enable
|
36
|
+
element :ChannelDOutputControl, as: :channel_d_output_control
|
37
|
+
element :PowerOnReset, as: :power_on_reset
|
38
|
+
element :VCCControl, as: :vcc_control
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "ow/device"
|
2
|
+
require "ow/parser"
|
3
|
+
|
4
|
+
module Ow
|
5
|
+
module Devices
|
6
|
+
class EDS0068
|
7
|
+
include Ow::Device
|
8
|
+
include Ow::Parser
|
9
|
+
|
10
|
+
element :Name, as: :name
|
11
|
+
element :Family, as: :family
|
12
|
+
element :ROMId, as: :rom_id
|
13
|
+
element :Health, as: :health
|
14
|
+
element :Channel, as: :channel
|
15
|
+
element :RawData, as: :raw_data
|
16
|
+
element :PrimaryValue, as: :primary_value
|
17
|
+
element :Temperature, as: :temperature
|
18
|
+
element :Humidity, as: :humidity
|
19
|
+
element :DewPoint, as: :dew_point
|
20
|
+
element :Humidex, as: :humidex
|
21
|
+
element :HeatIndex, as: :heat_index
|
22
|
+
element :BarometricPressureMb, as: :barometric_pressure_mb
|
23
|
+
element :BarometricPressureHg, as: :barometric_pressure_hg
|
24
|
+
element :Light, as: :light
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/ow/parser.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Ow
|
2
|
+
module Parser
|
3
|
+
def self.included(base)
|
4
|
+
base.extend(ClassMethods)
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def element(name, options = {})
|
9
|
+
accessor_name = options.fetch(:as) { name }
|
10
|
+
|
11
|
+
@element_mapping ||= Hash.new
|
12
|
+
@element_mapping[name.to_s] = accessor_name
|
13
|
+
|
14
|
+
define_method(accessor_name.to_sym) do
|
15
|
+
instance_variable_get("@#{accessor_name}")
|
16
|
+
end
|
17
|
+
|
18
|
+
define_method("#{accessor_name}=".to_sym) do |value|
|
19
|
+
instance_variable_set("@#{accessor_name}", value)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def element_mapping
|
24
|
+
@element_mapping
|
25
|
+
end
|
26
|
+
|
27
|
+
def from_document(document)
|
28
|
+
obj = new
|
29
|
+
|
30
|
+
element_mapping.each do |element_name, accessor|
|
31
|
+
value = document.locate(element_name)[0].nodes[0]
|
32
|
+
obj.send("#{accessor}=", value)
|
33
|
+
end
|
34
|
+
|
35
|
+
obj
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/ow/server.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'ow/parser'
|
2
|
+
|
3
|
+
module Ow
|
4
|
+
class Server
|
5
|
+
include Ow::Parser
|
6
|
+
|
7
|
+
element :PollCount, as: :poll_count
|
8
|
+
element :DevicesConnected, as: :devices_connected
|
9
|
+
element :LoopTime, as: :loop_time
|
10
|
+
element :DevicesConnectedChannel1, as: :devices_connected_channel_1
|
11
|
+
element :DevicesConnectedChannel2, as: :devices_connected_channel_2
|
12
|
+
element :DevicesConnectedChannel3, as: :devices_connected_channel_3
|
13
|
+
element :DataErrorsChannel1, as: :data_errors_channel_1
|
14
|
+
element :DataErrorsChannel2, as: :data_errors_channel_2
|
15
|
+
element :DataErrorsChannel3, as: :data_errors_channel_3
|
16
|
+
element :VoltageChannel1, as: :voltage_channel_1
|
17
|
+
element :VoltageChannel2, as: :voltage_channel_2
|
18
|
+
element :VoltageChannel3, as: :voltage_channel_3
|
19
|
+
element :VoltagePower, as: :voltage_power
|
20
|
+
element :DeviceName, as: :device_name
|
21
|
+
element :HostName, as: :host_name
|
22
|
+
element :MACAddress, as: :mac_address
|
23
|
+
|
24
|
+
attr_accessor :devices
|
25
|
+
|
26
|
+
def initialize
|
27
|
+
@devices = Array.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.from_document(document)
|
31
|
+
server = super
|
32
|
+
|
33
|
+
Ow::Device.types.each do |name, device_class|
|
34
|
+
document.locate("owd_#{name}").map do |device_node|
|
35
|
+
server.devices << device_class.from_document(device_node)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
server
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/ow/version.rb
CHANGED
data/ow.gemspec
CHANGED
@@ -10,12 +10,14 @@ Gem::Specification.new do |gem|
|
|
10
10
|
gem.email = ["martin@masv.net"]
|
11
11
|
gem.description = %q{A Ruby parser for OW-SERVER XML files.}
|
12
12
|
gem.summary = %q{A Ruby parser for OW-SERVER XML files.}
|
13
|
-
gem.homepage = ""
|
13
|
+
gem.homepage = "https://github.com/masv/ow"
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($/)
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
|
-
gem.add_development_dependency("minitest", "
|
20
|
+
gem.add_development_dependency("minitest", "~> 4.7.2")
|
21
|
+
|
22
|
+
gem.add_dependency("ox", "~> 1.9.4")
|
21
23
|
end
|
@@ -0,0 +1,212 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<Devices-Detail-Response xmlns="http://www.embeddeddatasystems.com/schema/owserver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
3
|
+
<PollCount>1004011</PollCount>
|
4
|
+
<DevicesConnected>6</DevicesConnected>
|
5
|
+
<LoopTime>1.716</LoopTime>
|
6
|
+
<DevicesConnectedChannel1>3</DevicesConnectedChannel1>
|
7
|
+
<DevicesConnectedChannel2>0</DevicesConnectedChannel2>
|
8
|
+
<DevicesConnectedChannel3>3</DevicesConnectedChannel3>
|
9
|
+
<DataErrorsChannel1>15962</DataErrorsChannel1>
|
10
|
+
<DataErrorsChannel2>0</DataErrorsChannel2>
|
11
|
+
<DataErrorsChannel3>222</DataErrorsChannel3>
|
12
|
+
<VoltageChannel1>4.65</VoltageChannel1>
|
13
|
+
<VoltageChannel2>4.66</VoltageChannel2>
|
14
|
+
<VoltageChannel3>4.66</VoltageChannel3>
|
15
|
+
<VoltagePower>4.90</VoltagePower>
|
16
|
+
<DeviceName>OWServer_v2-Enet</DeviceName>
|
17
|
+
<HostName>OWSERVER1</HostName>
|
18
|
+
<MACAddress>01:23:45:67:89:0F</MACAddress>
|
19
|
+
<owd_DS18B20 Description="Programmable resolution thermometer">
|
20
|
+
<Name>DS18B20</Name>
|
21
|
+
<Family>28</Family>
|
22
|
+
<ROMId>030000042FE6D528</ROMId>
|
23
|
+
<Health>7</Health>
|
24
|
+
<Channel>3</Channel>
|
25
|
+
<RawData>63004B467FFF0D1028FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</RawData>
|
26
|
+
<PrimaryValue>6.1875 Deg C</PrimaryValue>
|
27
|
+
<Temperature Units="Centigrade">6.1875</Temperature>
|
28
|
+
<UserByte1 Writable="True">75</UserByte1>
|
29
|
+
<UserByte2 Writable="True">70</UserByte2>
|
30
|
+
<Resolution>12</Resolution>
|
31
|
+
<PowerSource>255</PowerSource>
|
32
|
+
</owd_DS18B20>
|
33
|
+
<owd_DS2423 Description="RAM with counters">
|
34
|
+
<Name>DS2423</Name>
|
35
|
+
<Family>1D</Family>
|
36
|
+
<ROMId>C600000009EC941D</ROMId>
|
37
|
+
<Health>7</Health>
|
38
|
+
<Channel>3</Channel>
|
39
|
+
<RawData>FB2665000000000069FD0000000000000000E8820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</RawData>
|
40
|
+
<PrimaryValue>6629115, 0</PrimaryValue>
|
41
|
+
<Counter_A>6629115</Counter_A>
|
42
|
+
<Counter_B>0</Counter_B>
|
43
|
+
</owd_DS2423>
|
44
|
+
<owd_EDS0068 Description="Temperature, Humidity, Barometric Pressure and Light Sensor">
|
45
|
+
<Name>EDS0068</Name>
|
46
|
+
<Family>7E</Family>
|
47
|
+
<ROMId>6400100000211D7E</ROMId>
|
48
|
+
<Health>7</Health>
|
49
|
+
<Channel>1</Channel>
|
50
|
+
<RawData>6800700176010F0051017001CC8E1F91EE000900000300405E6B170099C9160000402D0050007DD87DD87DD800803E0000000020030000000A00000000000A03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000201000000000000000000000000000000000000000000000000000000000000</RawData>
|
51
|
+
<PrimaryValue>23.3750 %RH</PrimaryValue>
|
52
|
+
<Temperature Units="Centigrade">23.0000</Temperature>
|
53
|
+
<Humidity Units="PercentRelativeHumidity">23.3750</Humidity>
|
54
|
+
<DewPoint Units="Centigrade">0.9375</DewPoint>
|
55
|
+
<Humidex>21.0625</Humidex>
|
56
|
+
<HeatIndex Units="Centigrade">23.0000</HeatIndex>
|
57
|
+
<BarometricPressureMb Units="Millibars">1009.850</BarometricPressureMb>
|
58
|
+
<BarometricPressureHg Units="InchesOfMercury">29.821</BarometricPressureHg>
|
59
|
+
<Light Units="Lux">9</Light>
|
60
|
+
<LED>1</LED>
|
61
|
+
<Relay>1</Relay>
|
62
|
+
<Counter1>1493401</Counter1>
|
63
|
+
<Counter2>1534814</Counter2>
|
64
|
+
<TemperatureHighAlarmState>0</TemperatureHighAlarmState>
|
65
|
+
<TemperatureLowAlarmState>0</TemperatureLowAlarmState>
|
66
|
+
<HumidityHighAlarmState>0</HumidityHighAlarmState>
|
67
|
+
<HumidityLowAlarmState>0</HumidityLowAlarmState>
|
68
|
+
<DewPointHighAlarmState>0</DewPointHighAlarmState>
|
69
|
+
<DewPointLowAlarmState>0</DewPointLowAlarmState>
|
70
|
+
<HumidexHighAlarmState>0</HumidexHighAlarmState>
|
71
|
+
<HumidexLowAlarmState>0</HumidexLowAlarmState>
|
72
|
+
<HeatIndexHighAlarmState>0</HeatIndexHighAlarmState>
|
73
|
+
<HeatIndexLowAlarmState>0</HeatIndexLowAlarmState>
|
74
|
+
<BarometricPressureMbHighAlarmState>0</BarometricPressureMbHighAlarmState>
|
75
|
+
<BarometricPressureMbLowAlarmState>0</BarometricPressureMbLowAlarmState>
|
76
|
+
<BarometricPressureHgHighAlarmState>0</BarometricPressureHgHighAlarmState>
|
77
|
+
<BarometricPressureHgLowAlarmState>0</BarometricPressureHgLowAlarmState>
|
78
|
+
<LightHighAlarmState>1</LightHighAlarmState>
|
79
|
+
<LightLowAlarmState>0</LightLowAlarmState>
|
80
|
+
<ClearAlarms Writable="True">-</ClearAlarms>
|
81
|
+
<TemperatureHighConditionalSearchState Writable="True">0</TemperatureHighConditionalSearchState>
|
82
|
+
<TemperatureLowConditionalSearchState Writable="True">0</TemperatureLowConditionalSearchState>
|
83
|
+
<HumidityHighConditionalSearchState Writable="True">0</HumidityHighConditionalSearchState>
|
84
|
+
<HumidityLowConditionalSearchState Writable="True">0</HumidityLowConditionalSearchState>
|
85
|
+
<DewPointHighConditionalSearchState Writable="True">0</DewPointHighConditionalSearchState>
|
86
|
+
<DewPointLowConditionalSearchState Writable="True">0</DewPointLowConditionalSearchState>
|
87
|
+
<HumidexHighConditionalSearchState Writable="True">0</HumidexHighConditionalSearchState>
|
88
|
+
<HumidexLowConditionalSearchState Writable="True">0</HumidexLowConditionalSearchState>
|
89
|
+
<HeatIndexHighConditionalSearchState Writable="True">0</HeatIndexHighConditionalSearchState>
|
90
|
+
<HeatIndexLowConditionalSearchState Writable="True">0</HeatIndexLowConditionalSearchState>
|
91
|
+
<BarometricPressureMbHighConditionalSearchState Writable="True">0</BarometricPressureMbHighConditionalSearchState>
|
92
|
+
<BarometricPressureMbLowConditionalSearchState Writable="True">0</BarometricPressureMbLowConditionalSearchState>
|
93
|
+
<BarometricPressureHgHighConditionalSearchState Writable="True">0</BarometricPressureHgHighConditionalSearchState>
|
94
|
+
<BarometricPressureHgLowConditionalSearchState Writable="True">0</BarometricPressureHgLowConditionalSearchState>
|
95
|
+
<LightHighConditionalSearchState Writable="True">1</LightHighConditionalSearchState>
|
96
|
+
<LightLowConditionalSearchState Writable="True">0</LightLowConditionalSearchState>
|
97
|
+
<TemperatureHighAlarmValue Units="Centigrade" Writable="True">45</TemperatureHighAlarmValue>
|
98
|
+
<TemperatureLowAlarmValue Units="Centigrade" Writable="True">0</TemperatureLowAlarmValue>
|
99
|
+
<HumidityHighAlarmValue Units="PercentRelativeHumidity" Writable="True">80</HumidityHighAlarmValue>
|
100
|
+
<HumidityLowAlarmValue Units="PercentRelativeHumidity" Writable="True">0</HumidityLowAlarmValue>
|
101
|
+
<DewPointHighAlarmValue Units="Centigrade" Writable="True">125</DewPointHighAlarmValue>
|
102
|
+
<DewPointLowAlarmValue Units="Centigrade" Writable="True">-40</DewPointLowAlarmValue>
|
103
|
+
<HumidexHighAlarmValue Writable="True">125</HumidexHighAlarmValue>
|
104
|
+
<HumidexLowAlarmValue Writable="True">-40</HumidexLowAlarmValue>
|
105
|
+
<HeatIndexHighAlarmValue Units="Centigrade" Writable="True">125</HeatIndexHighAlarmValue>
|
106
|
+
<HeatIndexLowAlarmValue Units="Centigrade" Writable="True">-40</HeatIndexLowAlarmValue>
|
107
|
+
<BarometricPressureMbHighAlarmValue Units="Millibars" Writable="True">2000.000</BarometricPressureMbHighAlarmValue>
|
108
|
+
<BarometricPressureMbLowAlarmValue Units="Millibars" Writable="True">0.000</BarometricPressureMbLowAlarmValue>
|
109
|
+
<BarometricPressureHgHighAlarmValue Units="InchesOfMercury" Writable="True">100.000</BarometricPressureHgHighAlarmValue>
|
110
|
+
<BarometricPressureHgLowAlarmValue Units="InchesOfMercury" Writable="True">0.000</BarometricPressureHgLowAlarmValue>
|
111
|
+
<LightHighAlarmValue Units="Lux" Writable="True">10</LightHighAlarmValue>
|
112
|
+
<LightLowAlarmValue Units="Lux" Writable="True">0</LightLowAlarmValue>
|
113
|
+
<LEDFunction Writable="True">2</LEDFunction>
|
114
|
+
<RelayFunction Writable="True">2</RelayFunction>
|
115
|
+
<LEDState Writable="True">1</LEDState>
|
116
|
+
<RelayState Writable="True">1</RelayState>
|
117
|
+
<Version>1.02</Version>
|
118
|
+
</owd_EDS0068>
|
119
|
+
<owd_DS2450 Description="Quad A/D Converter">
|
120
|
+
<Name>DS2450</Name>
|
121
|
+
<Family>20</Family>
|
122
|
+
<ROMId>7A0000000E038F20</ROMId>
|
123
|
+
<Health>7</Health>
|
124
|
+
<Channel>3</Channel>
|
125
|
+
<RawData>00BA00F400BE000C161A088D088D088D088D79D800FF00FF00FF00FFB6DB00000000000000005C5A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</RawData>
|
126
|
+
<PrimaryValue>3.705469V Chnl A</PrimaryValue>
|
127
|
+
<ChannelAConversionValue Units="Volts">3.705469</ChannelAConversionValue>
|
128
|
+
<ChannelAConversionResolution Units="Bits" Writable="True">8</ChannelAConversionResolution>
|
129
|
+
<ChannelAConversionRange Writable="True">1</ChannelAConversionRange>
|
130
|
+
<ChannelAOutputEnable Writable="True">0</ChannelAOutputEnable>
|
131
|
+
<ChannelAOutputControl Writable="True">0</ChannelAOutputControl>
|
132
|
+
<ChannelBConversionValue Units="Volts">4.860938</ChannelBConversionValue>
|
133
|
+
<ChannelBConversionResolution Units="Bits" Writable="True">8</ChannelBConversionResolution>
|
134
|
+
<ChannelBConversionRange Writable="True">1</ChannelBConversionRange>
|
135
|
+
<ChannelBOutputEnable Writable="True">0</ChannelBOutputEnable>
|
136
|
+
<ChannelBOutputControl Writable="True">0</ChannelBOutputControl>
|
137
|
+
<ChannelCConversionValue Units="Volts">3.785156</ChannelCConversionValue>
|
138
|
+
<ChannelCConversionResolution Units="Bits" Writable="True">8</ChannelCConversionResolution>
|
139
|
+
<ChannelCConversionRange Writable="True">1</ChannelCConversionRange>
|
140
|
+
<ChannelCOutputEnable Writable="True">0</ChannelCOutputEnable>
|
141
|
+
<ChannelCOutputControl Writable="True">0</ChannelCOutputControl>
|
142
|
+
<ChannelDConversionValue Units="Volts">0.239062</ChannelDConversionValue>
|
143
|
+
<ChannelDConversionResolution Units="Bits" Writable="True">8</ChannelDConversionResolution>
|
144
|
+
<ChannelDConversionRange Writable="True">1</ChannelDConversionRange>
|
145
|
+
<ChannelDOutputEnable Writable="True">0</ChannelDOutputEnable>
|
146
|
+
<ChannelDOutputControl Writable="True">0</ChannelDOutputControl>
|
147
|
+
<PowerOnReset Writable="True">1</PowerOnReset>
|
148
|
+
<VCCControl Writable="True">0</VCCControl>
|
149
|
+
</owd_DS2450>
|
150
|
+
<owd_DS2450 Description="Quad A/D Converter">
|
151
|
+
<Name>DS2450</Name>
|
152
|
+
<Family>20</Family>
|
153
|
+
<ROMId>6A0000000D81E120</ROMId>
|
154
|
+
<Health>7</Health>
|
155
|
+
<Channel>1</Channel>
|
156
|
+
<RawData>00A4000A0005004A301808BDCF9D088D088D98AF00FEFFFF00FF00FFB21400000000000000005C5A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</RawData>
|
157
|
+
<PrimaryValue>3.267187V Chnl A</PrimaryValue>
|
158
|
+
<ChannelAConversionValue Units="Volts">3.267187</ChannelAConversionValue>
|
159
|
+
<ChannelAConversionResolution Units="Bits" Writable="True">8</ChannelAConversionResolution>
|
160
|
+
<ChannelAConversionRange Writable="True">1</ChannelAConversionRange>
|
161
|
+
<ChannelAOutputEnable Writable="True">0</ChannelAOutputEnable>
|
162
|
+
<ChannelAOutputControl Writable="True">0</ChannelAOutputControl>
|
163
|
+
<ChannelBConversionValue Units="Volts">0.199219</ChannelBConversionValue>
|
164
|
+
<ChannelBConversionResolution Units="Bits" Writable="True">15</ChannelBConversionResolution>
|
165
|
+
<ChannelBConversionRange Writable="True">1</ChannelBConversionRange>
|
166
|
+
<ChannelBOutputEnable Writable="True">1</ChannelBOutputEnable>
|
167
|
+
<ChannelBOutputControl Writable="True">1</ChannelBOutputControl>
|
168
|
+
<ChannelCConversionValue Units="Volts">0.099609</ChannelCConversionValue>
|
169
|
+
<ChannelCConversionResolution Units="Bits" Writable="True">8</ChannelCConversionResolution>
|
170
|
+
<ChannelCConversionRange Writable="True">1</ChannelCConversionRange>
|
171
|
+
<ChannelCOutputEnable Writable="True">0</ChannelCOutputEnable>
|
172
|
+
<ChannelCOutputControl Writable="True">0</ChannelCOutputControl>
|
173
|
+
<ChannelDConversionValue Units="Volts">1.474219</ChannelDConversionValue>
|
174
|
+
<ChannelDConversionResolution Units="Bits" Writable="True">8</ChannelDConversionResolution>
|
175
|
+
<ChannelDConversionRange Writable="True">1</ChannelDConversionRange>
|
176
|
+
<ChannelDOutputEnable Writable="True">0</ChannelDOutputEnable>
|
177
|
+
<ChannelDOutputControl Writable="True">0</ChannelDOutputControl>
|
178
|
+
<PowerOnReset Writable="True">1</PowerOnReset>
|
179
|
+
<VCCControl Writable="True">0</VCCControl>
|
180
|
+
</owd_DS2450>
|
181
|
+
<owd_DS2450 Description="Quad A/D Converter">
|
182
|
+
<Name>DS2450</Name>
|
183
|
+
<Family>20</Family>
|
184
|
+
<ROMId>2900000014042320</ROMId>
|
185
|
+
<Health>7</Health>
|
186
|
+
<Channel>1</Channel>
|
187
|
+
<RawData>00A6C8AB00CC00FA6FC308BDCF9D088D088D98AF00FEFFFF00FF00FFB21400000000000000005C5A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</RawData>
|
188
|
+
<PrimaryValue>3.307031V Chnl A</PrimaryValue>
|
189
|
+
<ChannelAConversionValue Units="Volts">3.307031</ChannelAConversionValue>
|
190
|
+
<ChannelAConversionResolution Units="Bits" Writable="True">8</ChannelAConversionResolution>
|
191
|
+
<ChannelAConversionRange Writable="True">1</ChannelAConversionRange>
|
192
|
+
<ChannelAOutputEnable Writable="True">0</ChannelAOutputEnable>
|
193
|
+
<ChannelAOutputControl Writable="True">0</ChannelAOutputControl>
|
194
|
+
<ChannelBConversionValue Units="Volts">3.422204</ChannelBConversionValue>
|
195
|
+
<ChannelBConversionResolution Units="Bits" Writable="True">15</ChannelBConversionResolution>
|
196
|
+
<ChannelBConversionRange Writable="True">1</ChannelBConversionRange>
|
197
|
+
<ChannelBOutputEnable Writable="True">1</ChannelBOutputEnable>
|
198
|
+
<ChannelBOutputControl Writable="True">1</ChannelBOutputControl>
|
199
|
+
<ChannelCConversionValue Units="Volts">4.064063</ChannelCConversionValue>
|
200
|
+
<ChannelCConversionResolution Units="Bits" Writable="True">8</ChannelCConversionResolution>
|
201
|
+
<ChannelCConversionRange Writable="True">1</ChannelCConversionRange>
|
202
|
+
<ChannelCOutputEnable Writable="True">0</ChannelCOutputEnable>
|
203
|
+
<ChannelCOutputControl Writable="True">0</ChannelCOutputControl>
|
204
|
+
<ChannelDConversionValue Units="Volts">4.980469</ChannelDConversionValue>
|
205
|
+
<ChannelDConversionResolution Units="Bits" Writable="True">8</ChannelDConversionResolution>
|
206
|
+
<ChannelDConversionRange Writable="True">1</ChannelDConversionRange>
|
207
|
+
<ChannelDOutputEnable Writable="True">0</ChannelDOutputEnable>
|
208
|
+
<ChannelDOutputControl Writable="True">0</ChannelDOutputControl>
|
209
|
+
<PowerOnReset Writable="True">1</PowerOnReset>
|
210
|
+
<VCCControl Writable="True">0</VCCControl>
|
211
|
+
</owd_DS2450>
|
212
|
+
</Devices-Detail-Response>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<Devices-Detail-Response xmlns="http://www.embeddeddatasystems.com/schema/owserver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
3
|
+
<PollCount>1004011</PollCount>
|
4
|
+
<DevicesConnected>6</DevicesConnected>
|
5
|
+
<LoopTime>1.716</LoopTime>
|
6
|
+
<DevicesConnectedChannel1>3</DevicesConnectedChannel1>
|
7
|
+
<DevicesConnectedChannel2>0</DevicesConnectedChannel2>
|
8
|
+
<DevicesConnectedChannel3>3</DevicesConnectedChannel3>
|
9
|
+
<DataErrorsChannel1>15962</DataErrorsChannel1>
|
10
|
+
<DataErrorsChannel2>0</DataErrorsChannel2>
|
11
|
+
<DataErrorsChannel3>222</DataErrorsChannel3>
|
12
|
+
<VoltageChannel1>4.65</VoltageChannel1>
|
13
|
+
<VoltageChannel2>4.66</VoltageChannel2>
|
14
|
+
<VoltageChannel3>4.66</VoltageChannel3>
|
15
|
+
<VoltagePower>4.90</VoltagePower>
|
16
|
+
<DeviceName>OWServer_v2-Enet</DeviceName>
|
17
|
+
<HostName>OWSERVER1</HostName>
|
18
|
+
<MACAddress>01:23:45:67:89:0F</MACAddress>
|
19
|
+
</Devices-Detail-Response>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
require "ow/device"
|
3
|
+
|
4
|
+
class DSTEST1
|
5
|
+
include Ow::Device
|
6
|
+
end
|
7
|
+
|
8
|
+
module TestDevices
|
9
|
+
class DSTEST2
|
10
|
+
include Ow::Device
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe Ow::Device do
|
15
|
+
describe ".types" do
|
16
|
+
it "returns known device types" do
|
17
|
+
Ow::Device.types["DSTEST1"].must_equal DSTEST1
|
18
|
+
Ow::Device.types["DSTEST2"].must_equal TestDevices::DSTEST2
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
require "ow/parser"
|
3
|
+
|
4
|
+
class ParserTest
|
5
|
+
include Ow::Parser
|
6
|
+
|
7
|
+
element :AnElement
|
8
|
+
element :AnotherElement, as: :another_element
|
9
|
+
end
|
10
|
+
|
11
|
+
describe Ow::Parser do
|
12
|
+
describe ".element" do
|
13
|
+
it "defines reader for element value" do
|
14
|
+
ParserTest.new.must_respond_to :AnElement
|
15
|
+
end
|
16
|
+
|
17
|
+
it "defines reader for element value with custom name" do
|
18
|
+
ParserTest.new.must_respond_to :another_element
|
19
|
+
end
|
20
|
+
|
21
|
+
it "defines writer for element value" do
|
22
|
+
ParserTest.new.must_respond_to :AnElement=
|
23
|
+
end
|
24
|
+
|
25
|
+
it "defines writer for element value with custom name" do
|
26
|
+
ParserTest.new.must_respond_to :another_element=
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe ".element_mapping" do
|
31
|
+
it "returns a hash map of defined elements and accessors" do
|
32
|
+
ParserTest.element_mapping.must_equal({
|
33
|
+
"AnElement" => :AnElement,
|
34
|
+
"AnotherElement" => :another_element
|
35
|
+
})
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe ".from_document" do
|
40
|
+
let(:document) { fixture("parser_test.xml").root }
|
41
|
+
|
42
|
+
it "returns an object with values set" do
|
43
|
+
parsed = ParserTest.from_document(document)
|
44
|
+
parsed.AnElement.must_equal "Cookies!"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require 'ow/server'
|
3
|
+
|
4
|
+
describe Ow::Server do
|
5
|
+
describe ".from_document" do
|
6
|
+
let(:document) { fixture("server.xml").root }
|
7
|
+
|
8
|
+
it "returns a new server with parsed elements" do
|
9
|
+
server = Ow::Server.from_document(document)
|
10
|
+
server.host_name.must_equal "OWSERVER1"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/spec/ow_spec.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative './spec_helper'
|
2
|
+
require 'ow'
|
3
|
+
|
4
|
+
describe Ow do
|
5
|
+
describe ".parse_document" do
|
6
|
+
it "returns a new server" do
|
7
|
+
document = fixture('full.xml')
|
8
|
+
server = Ow.parse_document(document)
|
9
|
+
server.must_be_instance_of Ow::Server
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe ".parse_file" do
|
14
|
+
it "returns a new server" do
|
15
|
+
filename = fixture_path + '/full.xml'
|
16
|
+
server = Ow.parse_file(filename)
|
17
|
+
server.must_be_instance_of Ow::Server
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe ".parse" do
|
22
|
+
it "returns a new server" do
|
23
|
+
string = File.read(fixture_path + '/full.xml')
|
24
|
+
server = Ow.parse(string)
|
25
|
+
server.must_be_instance_of Ow::Server
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,24 +9,40 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 4.7.2
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 4.7.2
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: ox
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.9.4
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.9.4
|
30
46
|
description: A Ruby parser for OW-SERVER XML files.
|
31
47
|
email:
|
32
48
|
- martin@masv.net
|
@@ -40,9 +56,24 @@ files:
|
|
40
56
|
- README.md
|
41
57
|
- Rakefile
|
42
58
|
- lib/ow.rb
|
59
|
+
- lib/ow/device.rb
|
60
|
+
- lib/ow/devices/ds18b20.rb
|
61
|
+
- lib/ow/devices/ds2423.rb
|
62
|
+
- lib/ow/devices/ds2450.rb
|
63
|
+
- lib/ow/devices/eds0068.rb
|
64
|
+
- lib/ow/parser.rb
|
65
|
+
- lib/ow/server.rb
|
43
66
|
- lib/ow/version.rb
|
44
67
|
- ow.gemspec
|
45
|
-
|
68
|
+
- spec/fixtures/full.xml
|
69
|
+
- spec/fixtures/parser_test.xml
|
70
|
+
- spec/fixtures/server.xml
|
71
|
+
- spec/ow/device_spec.rb
|
72
|
+
- spec/ow/parser_spec.rb
|
73
|
+
- spec/ow/server_spec.rb
|
74
|
+
- spec/ow_spec.rb
|
75
|
+
- spec/spec_helper.rb
|
76
|
+
homepage: https://github.com/masv/ow
|
46
77
|
licenses: []
|
47
78
|
post_install_message:
|
48
79
|
rdoc_options: []
|
@@ -66,4 +97,12 @@ rubygems_version: 1.8.23
|
|
66
97
|
signing_key:
|
67
98
|
specification_version: 3
|
68
99
|
summary: A Ruby parser for OW-SERVER XML files.
|
69
|
-
test_files:
|
100
|
+
test_files:
|
101
|
+
- spec/fixtures/full.xml
|
102
|
+
- spec/fixtures/parser_test.xml
|
103
|
+
- spec/fixtures/server.xml
|
104
|
+
- spec/ow/device_spec.rb
|
105
|
+
- spec/ow/parser_spec.rb
|
106
|
+
- spec/ow/server_spec.rb
|
107
|
+
- spec/ow_spec.rb
|
108
|
+
- spec/spec_helper.rb
|