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 CHANGED
@@ -18,7 +18,34 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
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 "ow/version"
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
- # Your code goes here...
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
@@ -0,0 +1,13 @@
1
+ require 'ow/parser'
2
+
3
+ module Ow
4
+ module Device
5
+ def self.included(base)
6
+ types[base.name.split("::").last] = base
7
+ end
8
+
9
+ def self.types
10
+ @types ||= {}
11
+ end
12
+ end
13
+ end
@@ -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
@@ -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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Ow
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
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", "> 0")
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,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ParserTest>
3
+ <AnElement>Cookies!</AnElement>
4
+ <AnotherElement>Unicorns!</AnotherElement>
5
+ </ParserTest>
@@ -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
@@ -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
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
2
+
3
+ require "minitest/autorun"
4
+ require "ox"
5
+
6
+ def fixture_path
7
+ File.expand_path("../fixtures", __FILE__)
8
+ end
9
+
10
+ def fixture(file)
11
+ Ox.load_file(fixture_path + "/" + file)
12
+ end
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.1
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-24 00:00:00.000000000 Z
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: '0'
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: '0'
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
- homepage: ''
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