ow 0.0.1 → 0.1.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.
- 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
|