egauge 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,8 @@
1
- == 1.0.0 / 2012-03-02
1
+ == 1.0.1 / 2012-10-09
2
+
3
+ * Update each_with_timestamp to more useful each_row that includes step size the row represents in seconds
4
+ * Clarify code and docs that serial is the configuration serial number not the device serial number
5
+
6
+ == 1.0.0 / 2012-10-09
2
7
 
3
8
  * Initial revision
@@ -12,7 +12,7 @@ A set of classes to enable parsing and using data from eGauge meters as native R
12
12
 
13
13
  This gem facilitates interpreting incoming monitoring data and converting it into Ruby objects for easier
14
14
  manipulation. It handles parsing the xml data posted by eGauge devices, converting them into Ruby objects
15
- that can be manipulated with ease!
15
+ that can be manipulated more easily.
16
16
 
17
17
  To use:
18
18
 
@@ -23,7 +23,7 @@ To use:
23
23
  # the data posted to your server from the eGauge device
24
24
  >> data = EGauge::Data.parse(request.body.read)
25
25
 
26
- # Which device sent this data?
26
+ # What's the configuration serial number?
27
27
  >> data.serial
28
28
  => '0x37cdd096'
29
29
 
@@ -35,15 +35,15 @@ To use:
35
35
  >> data.row_count
36
36
  => 3
37
37
 
38
- # Check out a register
38
+ # Inspect one of the registers
39
39
  >> reg = data.registers.first
40
40
  >> reg.label
41
41
  => 'Solar'
42
42
  >> reg.type_code
43
43
  => 'P'
44
44
 
45
- # Get the data points from a given register, with timestamps
46
- >> reg.each_with_timestamp do |val, ts|
45
+ # Get the data points from a given register, with timestamps and seconds the value represents
46
+ >> reg.each_row do |ts, val, seconds|
47
47
  >> puts "#{ts}: #{val}"
48
48
  >> end
49
49
  2012-10-09 13:50:00 -0400: 51140761685
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.0.1
@@ -3,7 +3,7 @@ require 'nokogiri'
3
3
  module EGauge
4
4
  class Data
5
5
  # Attributes
6
- attr_reader :serial, :registers, :timestamp
6
+ attr_reader :config_serial, :registers, :timestamp
7
7
 
8
8
  # Parse XML and return an EGauge::Data object containing the data.
9
9
  # This will be the primary entry point for most uses of this gem.
@@ -18,7 +18,7 @@ module EGauge
18
18
  def initialize(xml)
19
19
  # Store off Nokogiri xml tree
20
20
  @xml = xml
21
- @serial = @xml.group['serial']
21
+ @config_serial = @xml.group['serial']
22
22
 
23
23
  # Get first data segment, which sets the register info for all data segments
24
24
  data = @xml.group.data
@@ -51,7 +51,7 @@ module EGauge
51
51
  end
52
52
 
53
53
  # Run each value in this register
54
- def each_with_timestamp
54
+ def each_row
55
55
  @xml.group.elements.each do |chunk|
56
56
  # Set up for running this data chunk - prep timestamp and increment step from source xml
57
57
  ts = EGauge::parse_time(chunk['time_stamp'])
@@ -60,17 +60,17 @@ module EGauge
60
60
  # Run each row in the chunk, and yield our results
61
61
  (chunk / './r').each do |row|
62
62
  vals = (row / './c').collect {|c| c.text.to_i}
63
- yield ts, vals
63
+ yield ts, vals, step
64
64
  ts += step
65
65
  end
66
66
  end
67
67
  end
68
68
 
69
- # Return results as a 2D array, like so: [ [timestamp1, [val1, val2...]], [timestamp2, [val1, val2,...], ... ]
69
+ # Return results as a 2D array, like so: [ [timestamp1, [val1, val2...], seconds1], [timestamp2, [val1, val2,...], seconds2], ... ]
70
70
  def to_a
71
71
  res = []
72
- each_with_timestamp do |ts, vals|
73
- res << [ts, vals]
72
+ each_row do |ts, vals, step|
73
+ res << [ts, vals, step]
74
74
  end
75
75
  res
76
76
  end
@@ -14,7 +14,7 @@ module EGauge
14
14
  end
15
15
 
16
16
  # Run each value in this register, yielding |timestamp, value| for each
17
- def each_with_timestamp
17
+ def each_row
18
18
  @data.xml.group.elements.each do |chunk|
19
19
  # Set up for running this data chunk - prep timestamp and increment step from source xml
20
20
  ts = EGauge::parse_time(chunk['time_stamp'])
@@ -23,17 +23,17 @@ module EGauge
23
23
  # Run each row in the chunk, and yield our results
24
24
  (chunk / './r').each do |row|
25
25
  val = (row / './c')[@index].text.to_i
26
- yield ts, val
26
+ yield ts, val, step
27
27
  ts += step
28
28
  end
29
29
  end
30
30
  end
31
31
 
32
- # Return results as a 2D array, like so: [ [timestamp1, val1], [timestamp2, val2], ... ]
32
+ # Return results as a 2D array, like so: [ [timestamp1, val1, seconds1], [timestamp2, val2, seconds2], ... ]
33
33
  def to_a
34
34
  res = []
35
- each_with_timestamp do |ts, val|
36
- res << [ts, val]
35
+ each_row do |ts, val, step|
36
+ res << [ts, val, step]
37
37
  end
38
38
  res
39
39
  end
@@ -12,8 +12,8 @@ describe EGauge::Data do
12
12
  group.should_not be_nil
13
13
  end
14
14
 
15
- it 'should provide the serial number' do
16
- @data1.serial.should == '0x37cdd096'
15
+ it 'should provide the configuration serial number' do
16
+ @data1.config_serial.should == '0x37cdd096'
17
17
  end
18
18
 
19
19
  it 'should provide the timestamp' do
@@ -35,10 +35,11 @@ describe EGauge::Data do
35
35
  end
36
36
 
37
37
  it 'should allow access to full row data' do
38
- @data1.each_with_timestamp do |ts, values|
38
+ @data1.each_row do |ts, values, step|
39
39
  ts.should be_a(Time)
40
40
  values.should be_a(Array)
41
41
  values.count.should == 3
42
+ step.should == 60
42
43
  end
43
44
  end
44
45
 
@@ -24,9 +24,10 @@ describe EGauge::Register do
24
24
 
25
25
  it 'should allow iterating over values with timestamps' do
26
26
  counter = 0
27
- @reg.each_with_timestamp do |ts, val|
27
+ @reg.each_row do |ts, val, step|
28
28
  val.should be_a(Integer)
29
29
  ts.should be_a(Time)
30
+ step.should == 60
30
31
  counter += 1
31
32
  end
32
33
  counter.should == 3
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: egauge
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: