helium-ruby 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 652e7ae9d3dda85ecf853683b0e83a1abcd0746a
4
- data.tar.gz: 38302545f4d2b850bc17afb890ba0efd16e6de92
3
+ metadata.gz: 7f6ff6d87571b6da6c446b1c0496ffa9dc47c68d
4
+ data.tar.gz: ef1feadb0d457c031d319592ff2e48b037da9938
5
5
  SHA512:
6
- metadata.gz: cf23c7d0f425d9106b54337aba35006cd95ad4a8ac89eb3ef776a2780ba0f46dfba63d68866e651600187c56d6c07e64ac1f7a78b6a0947d66c76f9da826f4a3
7
- data.tar.gz: ed941a33a010e4b567b39083ecca5a140a18bc9825632215135831cf66a956d8df63e6c4fe76efc24f00f32e8a5edd9cdf156b23b3fadd5d0037951740d5bdee
6
+ metadata.gz: 1e9dafbc98ae651fff679e89676048af1780a9a507f38305e2034955c623e58dcfe25a2af6c2cda41ab22e67934bc67278b96b5bd8ae1b3e932fb1d9f52bb93f
7
+ data.tar.gz: 56ba562ce5e1893c5faef95a8054b0464867309244bb2d71dcbbf2078a03120f0ebae5dc1f4b128d4a6ff9decc10ffb4365afd4d44fd4868ea43e68d94914e40
data/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  [![Build Status](https://travis-ci.org/helium/helium-ruby.svg?branch=master)](https://travis-ci.org/helium/helium-ruby)
4
4
  [![Coverage Status](https://coveralls.io/repos/github/helium/helium-ruby/badge.svg?branch=master)](https://coveralls.io/github/helium/helium-ruby?branch=master)
5
5
  [![Code Climate](https://codeclimate.com/github/helium/helium-ruby/badges/gpa.svg)](https://codeclimate.com/github/helium/helium-ruby)
6
+ [![Gem Version](https://badge.fury.io/rb/helium-ruby.svg)](https://badge.fury.io/rb/helium-ruby)
6
7
 
7
8
  A Ruby gem for building applications with the Helium API. [Helium](https://www.helium.com/) is an integrated platform of smart sensors, communication, edge and cloud compute that enables numerous sensing applications. For more information about the underlying REST API, check out [the Helium docs](https://docs.helium.com/).
8
9
 
@@ -130,14 +131,17 @@ sensor.timeseries(size: 10_000).length
130
131
  # => 10000
131
132
  ```
132
133
 
133
- The data points are sorted from most recent, to least recent. The `.previous` method on a `Helium::Timeseries` object will return a new `Helium::Timeseries` object with the next page of Timeseries data:
134
+ The data points are sorted from most recent, to least recent. The `.previous` method on a `Helium::Timeseries` object will return a new `Helium::Timeseries` object with the previous page of Timeseries data. Similarly, the `.next` method on a `Helium::Timeseries` object will return the next page of timeseries data, if it exists. If not, it will return `false`.
134
135
 
135
136
  ```ruby
136
137
  timeseries = sensor.timeseries
137
138
  # => #<Helium::Timeseries:0x007ff9e10d2c48 @data_points=[#<Helium::DataPoint:0x007ff9e10d2568 @id="3595e562-c065-442e-a3af-c6f43ddb1500", @timestamp="2016-08-10T13:21:49.866Z", @value=27, @port="l">, ...
138
139
 
139
- timeseries.previous
140
+ previous_timeseries = timeseries.previous
140
141
  # => #<Helium::Timeseries:0x007ff9dc141008 @data_points=[#<Helium::DataPoint:0x007ff9dc140f68 @id="1e4062cf-361d-415e-8c05-cd04954424d1", @timestamp="2016-08-10T13:11:49.353Z", @value=99804.15, @port="p">, ...
142
+
143
+ previous_timeseries.next
144
+ # =>
141
145
  ```
142
146
 
143
147
  If no previous data exists, the `.previous` method will return `false`.
@@ -147,6 +151,27 @@ sensor.timeseries.previous
147
151
  # => false
148
152
  ```
149
153
 
154
+ #### Timeseries Aggregations
155
+
156
+ In addition to returning the raw data points, Helium can return timeseries data aggregated into buckets.
157
+
158
+
159
+ For example, if you wanted to display a graph of a sensor's temperature min, max and average readings grouped by day, you could do the following:
160
+
161
+ ```ruby
162
+ data_points = sensor.timeseries(port: 't', aggtype: 'min,max,avg', aggsize: '1d')
163
+ # => #<Helium::Timeseries:0x007fe7038c2d18 @data_points=[#<Helium::DataPoint:0x007fe7038c2c00 @client=<Helium::Client @debug=true>, @id="a93e47f4-2fb2-4336-84c0-20f83ee2988e", @timestamp="2016-08-16T00:00:00Z", @value={"max"=>22.579952, "avg"=>22.1155383392857, "min"=>21.774511}, @port="agg(t)">, ...
164
+
165
+ data_points.first.min
166
+ # => 21.774511
167
+
168
+ data_points.first.max
169
+ # => 22.579952
170
+
171
+ data_points.first.avg
172
+ # => 22.1155383392857
173
+ ```
174
+
150
175
 
151
176
  ## Development
152
177
 
@@ -155,7 +180,7 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
155
180
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
156
181
 
157
182
  ### Roadmap
158
- - [ ] Timeseries Aggregations
183
+ - [X] Timeseries Aggregations
159
184
  - [ ] POST/PUT/DELETE users, orgs, sensors, timeseries
160
185
  - [ ] Ports
161
186
  - [ ] Labels
data/helium-ruby.gemspec CHANGED
@@ -40,4 +40,5 @@ Gem::Specification.new do |spec|
40
40
  spec.add_development_dependency "guard-rspec", "~> 4.7.3"
41
41
  spec.add_development_dependency "terminal-notifier-guard", "~> 1.7.0"
42
42
  spec.add_development_dependency "simplecov", "~> 0.12.0"
43
+ spec.add_development_dependency "human_time", "~> 0.2.0"
43
44
  end
@@ -19,7 +19,8 @@ module Helium
19
19
  request.run()
20
20
 
21
21
  if debug?
22
- puts "GET #{url} #{request.response.code} #{request.response.total_time}"
22
+ # TODO print request method dynamically, won't always be GET
23
+ puts "GET #{request.url} #{request.response.code} #{request.response.total_time}"
23
24
  # puts request.response.body
24
25
  end
25
26
 
@@ -19,12 +19,14 @@ module Helium
19
19
  return Sensor.new(client: self, params: sensor_data)
20
20
  end
21
21
 
22
- def sensor_timeseries(sensor, size: 1000, port: nil, start_time: nil, end_time: nil)
22
+ def sensor_timeseries(sensor, size: 1000, port: nil, start_time: nil, end_time: nil, aggtype: nil, aggsize: nil)
23
23
  options = {
24
- "page[size]" => size,
25
- "filter[port]" => port,
24
+ "page[size]" => size,
25
+ "filter[port]" => port,
26
26
  "filter[start]" => datetime_to_iso(start_time),
27
- "filter[end]" => datetime_to_iso(end_time)
27
+ "filter[end]" => datetime_to_iso(end_time),
28
+ "agg[type]" => aggtype,
29
+ "agg[size]" => aggsize
28
30
  }.delete_if { |key, value| value.to_s.empty? }
29
31
 
30
32
  response = get("/sensor/#{sensor.id}/timeseries", options: options)
@@ -13,5 +13,21 @@ module Helium
13
13
  def timestamp
14
14
  DateTime.parse(@timestamp)
15
15
  end
16
+
17
+ def ==(other)
18
+ self.id == other.id
19
+ end
20
+
21
+ def max
22
+ @value["max"]
23
+ end
24
+
25
+ def min
26
+ @value["min"]
27
+ end
28
+
29
+ def avg
30
+ @value["avg"]
31
+ end
16
32
  end
17
33
  end
data/lib/helium/sensor.rb CHANGED
@@ -20,12 +20,14 @@ module Helium
20
20
  DateTime.parse(@updated_at)
21
21
  end
22
22
 
23
- def timeseries(size: 1000, port: nil, start_time: nil, end_time: nil)
23
+ def timeseries(size: 1000, port: nil, start_time: nil, end_time: nil, aggtype: nil, aggsize: nil)
24
24
  @client.sensor_timeseries(self,
25
25
  size: size,
26
26
  port: port,
27
27
  start_time: start_time,
28
- end_time: end_time
28
+ end_time: end_time,
29
+ aggtype: aggtype,
30
+ aggsize: aggsize
29
31
  )
30
32
  end
31
33
  end
@@ -5,14 +5,17 @@ module Helium
5
5
 
6
6
  def_delegators :@data_points, :size, :length, :last
7
7
 
8
- attr_accessor :data_points, :previous_link
8
+ attr_accessor :data_points
9
9
 
10
- def initialize(client:, params:, links:)
10
+ def initialize(client:, params: [], links: {})
11
11
  @client = client
12
+
12
13
  @data_points = params.map { |data_point_params|
13
14
  DataPoint.new(client: client, params: data_point_params)
14
15
  }
16
+
15
17
  @previous_link = links["prev"]
18
+ @next_link = links["next"]
16
19
  end
17
20
 
18
21
  def each(&block)
@@ -23,5 +26,10 @@ module Helium
23
26
  return false if @previous_link.nil?
24
27
  @client.sensor_timeseries_by_link(@previous_link)
25
28
  end
29
+
30
+ def next
31
+ return false if @next_link.nil?
32
+ @client.sensor_timeseries_by_link(@next_link)
33
+ end
26
34
  end
27
35
  end
@@ -1,3 +1,3 @@
1
1
  module Helium
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: helium-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Allen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-15 00:00:00.000000000 Z
11
+ date: 2016-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: typhoeus
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
180
  version: 0.12.0
181
+ - !ruby/object:Gem::Dependency
182
+ name: human_time
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 0.2.0
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 0.2.0
181
195
  description: A Ruby gem for building applications with the Helium API
182
196
  email:
183
197
  - allenan@helium.com