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 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