helium-ruby 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +31 -0
  3. data/.csslintrc +2 -0
  4. data/.eslintignore +1 -0
  5. data/.eslintrc +213 -0
  6. data/.gitignore +0 -1
  7. data/.rubocop.yml +1156 -0
  8. data/CONTRIBUTING.md +33 -0
  9. data/LICENSE.txt +23 -17
  10. data/README.md +58 -47
  11. data/Rakefile +14 -0
  12. data/bin/console +8 -0
  13. data/docs/Helium.html +131 -0
  14. data/docs/Helium/Client.html +493 -0
  15. data/docs/Helium/Client/Http.html +428 -0
  16. data/docs/Helium/Client/Organizations.html +251 -0
  17. data/docs/Helium/Client/Sensors.html +543 -0
  18. data/docs/Helium/Client/Users.html +185 -0
  19. data/docs/Helium/Cursor.html +305 -0
  20. data/docs/Helium/DataPoint.html +707 -0
  21. data/docs/Helium/Organization.html +632 -0
  22. data/docs/Helium/Sensor.html +820 -0
  23. data/docs/Helium/User.html +563 -0
  24. data/docs/Helium/Utils.html +183 -0
  25. data/docs/_index.html +226 -0
  26. data/docs/class_list.html +51 -0
  27. data/docs/css/common.css +1 -0
  28. data/docs/css/full_list.css +58 -0
  29. data/docs/css/style.css +474 -0
  30. data/docs/file.README.html +266 -0
  31. data/docs/file_list.html +56 -0
  32. data/docs/frames.html +17 -0
  33. data/docs/index.html +266 -0
  34. data/docs/js/app.js +243 -0
  35. data/docs/js/full_list.js +216 -0
  36. data/docs/js/jquery.js +4 -0
  37. data/docs/method_list.html +475 -0
  38. data/docs/top-level-namespace.html +112 -0
  39. data/helium-ruby.gemspec +2 -0
  40. data/lib/helium.rb +1 -1
  41. data/lib/helium/client.rb +0 -16
  42. data/lib/helium/client/http.rb +50 -9
  43. data/lib/helium/client/sensors.rb +51 -28
  44. data/lib/helium/cursor.rb +54 -0
  45. data/lib/helium/data_point.rb +3 -3
  46. data/lib/helium/sensor.rb +9 -0
  47. data/lib/helium/version.rb +1 -1
  48. metadata +63 -3
  49. data/lib/helium/timeseries.rb +0 -35
@@ -0,0 +1,266 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ File: README
8
+
9
+ &mdash; Documentation by YARD 0.9.3
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "README";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="file_list.html"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+ <span class="title">File: README</span>
41
+
42
+ </div>
43
+
44
+ <div id="search">
45
+
46
+ <a class="full_list_link" id="class_list_link"
47
+ href="class_list.html">
48
+
49
+ <svg width="24" height="24">
50
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
51
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
52
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
53
+ </svg>
54
+ </a>
55
+
56
+ </div>
57
+ <div class="clear"></div>
58
+ </div>
59
+
60
+ <iframe id="search_frame" src="file_list.html"></iframe>
61
+
62
+ <div id="content"><div id='filecontents'><h1>helium-ruby</h1>
63
+
64
+ <p><a href="https://travis-ci.org/helium/helium-ruby"><img src="https://travis-ci.org/helium/helium-ruby.svg?branch=master" alt="Build Status"></a>
65
+ <a href="https://coveralls.io/github/helium/helium-ruby?branch=master"><img src="https://coveralls.io/repos/github/helium/helium-ruby/badge.svg?branch=master" alt="Coverage Status"></a>
66
+ <a href="https://codeclimate.com/github/helium/helium-ruby"><img src="https://codeclimate.com/github/helium/helium-ruby/badges/gpa.svg" alt="Code Climate"></a>
67
+ <a href="https://badge.fury.io/rb/helium-ruby"><img src="https://badge.fury.io/rb/helium-ruby.svg" alt="Gem Version"></a></p>
68
+
69
+ <p>A Ruby gem for building applications with the Helium API. <a href="https://www.helium.com/">Helium</a> 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 <a href="https://docs.helium.com/">the Helium docs</a>.</p>
70
+
71
+ <h2>Installation</h2>
72
+
73
+ <p>Add this line to your application&#39;s Gemfile:</p>
74
+
75
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_gem'>gem</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>helium-ruby</span><span class='tstring_end'>&#39;</span></span>
76
+ </code></pre>
77
+
78
+ <p>And then execute:</p>
79
+
80
+ <pre class="code ruby"><code class="ruby">$ bundle
81
+ </code></pre>
82
+
83
+ <p>Or install it yourself as:</p>
84
+
85
+ <pre class="code ruby"><code class="ruby">$ gem install helium-ruby
86
+ </code></pre>
87
+
88
+ <h2>Usage</h2>
89
+
90
+ <h3>Setup</h3>
91
+
92
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>helium</span><span class='tstring_end'>&#39;</span></span>
93
+
94
+ <span class='id identifier rubyid_client'>client</span> <span class='op'>=</span> <span class='const'>Helium</span><span class='op'>::</span><span class='const'>Client</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>api_key:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>&lt;Your API Key&gt;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
95
+ </code></pre>
96
+
97
+ <h3>Users</h3>
98
+
99
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_user'>user</span>
100
+ <span class='comment'># =&gt; #&lt;Helium::User:0x007fd58198d9e8 @id=&quot;dev-accounts@helium.co&quot;, @name=&quot;HeliumDevAccount Demo&quot;, @email=&quot;dev-accounts@helium.co&quot;, @created_at=&quot;2014-10-29T21:38:52Z&quot;, @updated_at=&quot;2015-08-06T18:21:32.186374Z&quot;&gt;
101
+ </span></code></pre>
102
+
103
+ <h3>Organizations</h3>
104
+
105
+ <h4>Get the current organization</h4>
106
+
107
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_organization'>organization</span>
108
+ <span class='comment'># =&gt; #&lt;Helium::Organization:0x007fd3d94b1b08 @client=&lt;Helium::Client @debug=true&gt;, @id=&quot;dev-accounts@helium.co&quot;, @name=&quot;dev-accounts@helium.co&quot;, @timezone=&quot;UTC&quot;, @created_at=&quot;2015-09-10T20:50:18.183896Z&quot;, @updated_at=&quot;2015-09-10T20:50:18.183896Z&quot;&gt;
109
+ </span></code></pre>
110
+
111
+ <h4>Get all users associated with the current organization</h4>
112
+
113
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_organization'>organization</span><span class='period'>.</span><span class='id identifier rubyid_users'>users</span>
114
+ <span class='comment'># =&gt; [
115
+ </span><span class='comment'># [0] #&lt;Helium::User:0x007fd3d9449490 @client=&lt;Helium::Client @debug=true&gt;, @id=&quot;tom@helium.com&quot;, @name=&quot;Tom Santero&quot;, @email=&quot;tom@helium.com&quot;, @created_at=&quot;2015-01-21T16:39:31.397048Z&quot;, @updated_at=&quot;2015-02-12T20:42:22.674452Z&quot;&gt;,
116
+ </span><span class='comment'># [1] #&lt;Helium::User:0x007fd3d94492d8 @client=&lt;Helium::Client @debug=true&gt;, @id=&quot;dev-accounts@helium.co&quot;, @name=&quot;HeliumDevAccount Demo&quot;, @email=&quot;dev-accounts@helium.co&quot;, @created_at=&quot;2014-10-29T21:38:52Z&quot;, @updated_at=&quot;2015-08-06T18:21:32.186374Z&quot;&gt;
117
+ </span><span class='comment'># ]
118
+ </span></code></pre>
119
+
120
+ <h3>Sensors</h3>
121
+
122
+ <h4>Get all Sensors</h4>
123
+
124
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_sensors'>sensors</span>
125
+ <span class='comment'># =&gt; [#&lt;Helium::Sensor:0x007f89acdd1318 @id=&quot;08bab58b-d095-4c7c-912c-1f8024d91d95&quot;, @name=&quot;Marc&#39;s Isotope&quot;, @mac=&quot;6081f9fffe00019b&quot;, @ports=[&quot;t&quot;, &quot;b&quot;], @created_at=&quot;2015-08-06T17:28:11.614107Z&quot;, @updated_at=&quot;2016-05-30T22:36:50.810716Z&quot;&gt;, ...]
126
+ </span></code></pre>
127
+
128
+ <h4>Get a Sensor by id</h4>
129
+
130
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_sensor'>sensor</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>08bab58b-d095-4c7c-912c-1f8024d91d95</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
131
+ <span class='comment'># =&gt; #&lt;Helium::Sensor:0x007f89acdb1b58 @id=&quot;08bab58b-d095-4c7c-912c-1f8024d91d95&quot;, @name=&quot;Marc&#39;s Isotope&quot;, @mac=&quot;6081f9fffe00019b&quot;, @ports=[&quot;t&quot;, &quot;b&quot;], @created_at=&quot;2015-08-06T17:28:11.614107Z&quot;, @updated_at=&quot;2016-05-30T22:36:50.810716Z&quot;&gt;
132
+ </span></code></pre>
133
+
134
+ <h3>Timeseries</h3>
135
+
136
+ <h4>Get Timeseries data for a sensor</h4>
137
+
138
+ <p>Timeseries data is paginated by the Helium API which by default, returns pages of 1000 data points. When you call <code>.timeseries</code> on a sensor, you get back a <code>Helium::Cursor</code> object, which is an <code>Enumerable</code> object that handles paging through this data automatically.</p>
139
+
140
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_sensor'>sensor</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_sensor'>sensor</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>08bab58b-d095-4c7c-912c-1f8024d91d95</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
141
+ <span class='id identifier rubyid_timeseries'>timeseries</span> <span class='op'>=</span> <span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='lparen'>(</span><span class='label'>port:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>t</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>start_time:</span> <span class='const'>DateTime</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>2016-08-01</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='comma'>,</span> <span class='label'>end_time:</span> <span class='const'>DateTime</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>2016-08-16</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='rparen'>)</span>
142
+ <span class='comment'># =&gt; #&lt;Helium::Cursor:0x007f9b02a25798 @path=&quot;/sensor/aba370be-837d-4b41-bee5-686b0069d874/timeseries&quot;, @klass=Helium::DataPoint, @options={&quot;page[size]&quot;=&gt;1000, &quot;filter[port]&quot;=&gt;&quot;t&quot;, &quot;filter[start]&quot;=&gt;&quot;2016-08-01T00:00:00Z&quot;, &quot;filter[end]&quot;=&gt;&quot;2016-08-16T00:00:00Z&quot;}, @collection=[], @next_link=nil, @is_last=false&gt;
143
+ </span></code></pre>
144
+
145
+ <h4>Working with data points</h4>
146
+
147
+ <p>A <code>Helium::Cursor</code> is a collection of <code>Helium::DataPoint</code>s which can iterated over using the usual <code>Object#Enumerable</code> methods:</p>
148
+
149
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_sensor'>sensor</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_sensor'>sensor</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>08bab58b-d095-4c7c-912c-1f8024d91d95</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
150
+
151
+ <span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='period'>.</span><span class='id identifier rubyid_take'>take</span><span class='lparen'>(</span><span class='int'>1000</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_data_point'>data_point</span><span class='op'>|</span>
152
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_data_point'>data_point</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span>
153
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_data_point'>data_point</span><span class='period'>.</span><span class='id identifier rubyid_timestamp'>timestamp</span>
154
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_data_point'>data_point</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span>
155
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_data_point'>data_point</span><span class='period'>.</span><span class='id identifier rubyid_port'>port</span>
156
+ <span class='kw'>end</span>
157
+
158
+ <span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
159
+ <span class='comment'># =&gt; #&lt;Helium::DataPoint:0x007f9b0407f340 @id=&quot;6c115c10-323e-4756-ae1c-fc69982eb397&quot;, @timestamp=&quot;2016-08-15T23:55:42.2Z&quot;, @value=22.590084, @port=&quot;t&quot;&gt;
160
+ </span></code></pre>
161
+
162
+ <p>Since pagination happens automatically, <strong>it&#39;s strongly recommended to define a start and end time,</strong> otherwise enumerating over the collection may take a very long time.</p>
163
+
164
+ <h4>Filtering Timeseries data</h4>
165
+
166
+ <p>Timeseries data can be filtered by port type and start/end time:</p>
167
+
168
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='period'>.</span><span class='id identifier rubyid_take'>take</span><span class='lparen'>(</span><span class='int'>1000</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_collect'>collect</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:port</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span>
169
+ <span class='comment'># =&gt; [
170
+ </span><span class='comment'># [0] &quot;b&quot;,
171
+ </span><span class='comment'># [1] &quot;l&quot;,
172
+ </span><span class='comment'># [2] &quot;h&quot;,
173
+ </span><span class='comment'># [3] &quot;p&quot;,
174
+ </span><span class='comment'># [4] &quot;t&quot;,
175
+ </span><span class='comment'># [5] &quot;_se&quot;,
176
+ </span><span class='comment'># [6] &quot;m&quot;
177
+ </span><span class='comment'># ]
178
+ </span>
179
+ <span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='lparen'>(</span><span class='label'>port:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>t</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_take'>take</span><span class='lparen'>(</span><span class='int'>1000</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_collect'>collect</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:port</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span>
180
+ <span class='comment'># =&gt; [
181
+ </span><span class='comment'># [0] &quot;t&quot;
182
+ </span><span class='comment'># ]
183
+ </span>
184
+ <span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='lparen'>(</span><span class='label'>start_time:</span> <span class='const'>DateTime</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>2016-08-01</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='comma'>,</span> <span class='label'>end_time:</span> <span class='const'>DateTime</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>2016-08-02</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_take'>take</span><span class='lparen'>(</span><span class='int'>1000</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_collect'>collect</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:timestamp</span><span class='rparen'>)</span>
185
+ <span class='comment'># =&gt; [
186
+ </span><span class='comment'># [0] #&lt;DateTime: 2016-08-01T23:55:29+00:00 ((2457602j,86129s,802000000n),+0s,2299161j)&gt;,
187
+ </span><span class='comment'># [1] #&lt;DateTime: 2016-08-01T23:55:29+00:00 ((2457602j,86129s,61000000n),+0s,2299161j)&gt;,
188
+ </span><span class='comment'># [2] #&lt;DateTime: 2016-08-01T23:55:29+00:00 ((2457602j,86129s,60000000n),+0s,2299161j)&gt;,
189
+ </span><span class='comment'># [3] #&lt;DateTime: 2016-08-01T23:55:29+00:00 ((2457602j,86129s,59000000n),+0s,2299161j)&gt;,
190
+ </span><span class='comment'># [4] #&lt;DateTime: 2016-08-01T23:54:45+00:00 ((2457602j,86085s,544000000n),+0s,2299161j)&gt;,
191
+ </span></code></pre>
192
+
193
+ <h4>Timeseries Aggregations</h4>
194
+
195
+ <p>In addition to returning the raw data points, Helium can return timeseries data aggregated into buckets.</p>
196
+
197
+ <p>For example, if you wanted to display a graph of a sensor&#39;s temperature min, max and average readings grouped by day, you could do the following:</p>
198
+
199
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_data_points'>data_points</span> <span class='op'>=</span> <span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='lparen'>(</span><span class='label'>port:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>t</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>aggtype:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>min,max,avg</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>aggsize:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1d</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
200
+ <span class='comment'># =&gt; #&lt;Helium::Cursor:0x007f9b0413a708 @path=&quot;/sensor/aba370be-837d-4b41-bee5-686b0069d874/timeseries&quot;, @klass=Helium::DataPoint, @options={&quot;page[size]&quot;=&gt;1000, &quot;filter[port]&quot;=&gt;&quot;t&quot;, &quot;agg[type]&quot;=&gt;&quot;min,max,avg&quot;, &quot;agg[size]&quot;=&gt;&quot;1d&quot;}, @collection=[], @next_link=nil, @is_last=false&gt;
201
+ </span>
202
+ <span class='id identifier rubyid_data_points'>data_points</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_min'>min</span>
203
+ <span class='comment'># =&gt; 21.47564
204
+ </span>
205
+ <span class='id identifier rubyid_data_points'>data_points</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_max'>max</span>
206
+ <span class='comment'># =&gt; 24.145264
207
+ </span>
208
+ <span class='id identifier rubyid_data_points'>data_points</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_avg'>avg</span>
209
+ <span class='comment'># =&gt; 22.2916633036437
210
+ </span></code></pre>
211
+
212
+ <p>A full list of aggregation types and sizes can be found here: <a href="https://docs.helium.com/docs/timeseries#aggregations">https://docs.helium.com/docs/timeseries#aggregations</a>.</p>
213
+
214
+ <h2>Development</h2>
215
+
216
+ <p>After checking out the repo, run <code>bin/setup</code> to install dependencies. Then, run <code>rake spec</code> to run the tests. You can also run <code>bin/console</code> for an interactive prompt that will allow you to experiment.</p>
217
+
218
+ <p>To install this gem onto your local machine, run <code>bundle exec rake install</code>. To release a new version, update the version number in <code>version.rb</code>, and then run <code>bundle exec rake release</code>, which will create a git tag for the version, push git commits and tags, and push the <code>.gem</code> file to <a href="https://rubygems.org">rubygems.org</a>.</p>
219
+
220
+ <h3>Roadmap</h3>
221
+
222
+ <p>We&#39;re working toward a v1.0.0 release, which will represent a feature-complete implementation of the Helium API. You can check the progress here: <a href="https://github.com/helium/helium-ruby/milestone/1">https://github.com/helium/helium-ruby/milestone/1</a>.</p>
223
+
224
+ <p>Until the v1.0.0 release, the functionality of this gem is subject to change. To prevent breaking changes, you should use the pessimistic version constraint operator (<code>~&gt;</code>) in your Gemfile to lock your helium-ruby version to the current minor release. This will allow updates to patch versions.</p>
225
+
226
+ <h2>Contributing</h2>
227
+
228
+ <p>We value contributions from the community and will do everything we can go get them reviewed in a timely fashion. If you have code to send our way or a bug to report:</p>
229
+
230
+ <ul>
231
+ <li><p>Contributing Code: If you have new code or a bug fix, fork this repo, create a logically-named branch, and submit a PR against this repo. Include a write up of the PR with details on what it does.</p></li>
232
+ <li><p>Reporting Bugs: Open an issue against this repo with as much detail as you can. At the very least you&#39;ll include steps to reproduce the problem.</p></li>
233
+ </ul>
234
+
235
+ <p>This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the <a href="http://contributor-covenant.org">Contributor Covenant</a> Code of Conduct.</p>
236
+
237
+ <p>Above all, thank you for taking the time to be a part of the Helium community.</p>
238
+
239
+ <h3>Running specs with Guard</h3>
240
+
241
+ <p>To receive system notifications of test status, install <code>terminal-notifier</code>:</p>
242
+
243
+ <pre class="code ruby"><code class="ruby">$ brew install terminal-notifier
244
+ </code></pre>
245
+
246
+ <p>Then run Guard with:</p>
247
+
248
+ <pre class="code ruby"><code class="ruby">$ bundle exec guard
249
+ </code></pre>
250
+
251
+ <p>When you modify any of the files in <code>lib/</code>, all specs will run. When you modify a spec file, just that file will be run. You can press <code>Enter</code> at the guard prompt to run all tests as well.</p>
252
+
253
+ <h2>License</h2>
254
+
255
+ <p>The gem is available as open source under the terms of the <a href="https://github.com/helium/helium-ruby/blob/master/LICENSE.txt">BSD License</a>.</p>
256
+ </div></div>
257
+
258
+ <div id="footer">
259
+ Generated on Thu Aug 18 10:50:33 2016 by
260
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
261
+ 0.9.3 (ruby-2.3.1).
262
+ </div>
263
+
264
+ </div>
265
+ </body>
266
+ </html>
@@ -0,0 +1,56 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
5
+ <meta charset="utf-8" />
6
+
7
+ <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
8
+
9
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
10
+
11
+
12
+
13
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
14
+
15
+ <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
16
+
17
+
18
+ <title>File List</title>
19
+ <base id="base_target" target="_parent" />
20
+ </head>
21
+ <body>
22
+ <div id="content">
23
+ <div class="fixed_header">
24
+ <h1 id="full_list_header">File List</h1>
25
+ <div id="full_list_nav">
26
+
27
+ <span><a target="_self" href="class_list.html">
28
+ Classes
29
+ </a></span>
30
+
31
+ <span><a target="_self" href="method_list.html">
32
+ Methods
33
+ </a></span>
34
+
35
+ <span><a target="_self" href="file_list.html">
36
+ Files
37
+ </a></span>
38
+
39
+ </div>
40
+
41
+ <div id="search">Search: <input type="text" /></div>
42
+ </div>
43
+
44
+ <ul id="full_list" class="file">
45
+
46
+
47
+ <li id="object_README" class="odd">
48
+ <div class="item"><span class="object_link"><a href="index.html" title="README">README</a></span></div>
49
+ </li>
50
+
51
+
52
+
53
+ </ul>
54
+ </div>
55
+ </body>
56
+ </html>
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Documentation by YARD 0.9.3</title>
6
+ </head>
7
+ <script type="text/javascript" charset="utf-8">
8
+ var match = unescape(window.location.hash).match(/^#!(.+)/);
9
+ var name = match ? match[1] : 'index.html';
10
+ name = name.replace(/^(\w+):\/\//, '').replace(/^\/\//, '');
11
+ window.top.location = name;
12
+ </script>
13
+ <noscript>
14
+ <h1>Oops!</h1>
15
+ <h2>YARD requires JavaScript!</h2>
16
+ </noscript>
17
+ </html>
@@ -0,0 +1,266 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ File: README
8
+
9
+ &mdash; Documentation by YARD 0.9.3
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "README";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+ <span class="title">File: README</span>
41
+
42
+ </div>
43
+
44
+ <div id="search">
45
+
46
+ <a class="full_list_link" id="class_list_link"
47
+ href="class_list.html">
48
+
49
+ <svg width="24" height="24">
50
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
51
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
52
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
53
+ </svg>
54
+ </a>
55
+
56
+ </div>
57
+ <div class="clear"></div>
58
+ </div>
59
+
60
+ <iframe id="search_frame" src="class_list.html"></iframe>
61
+
62
+ <div id="content"><div id='filecontents'><h1>helium-ruby</h1>
63
+
64
+ <p><a href="https://travis-ci.org/helium/helium-ruby"><img src="https://travis-ci.org/helium/helium-ruby.svg?branch=master" alt="Build Status"></a>
65
+ <a href="https://coveralls.io/github/helium/helium-ruby?branch=master"><img src="https://coveralls.io/repos/github/helium/helium-ruby/badge.svg?branch=master" alt="Coverage Status"></a>
66
+ <a href="https://codeclimate.com/github/helium/helium-ruby"><img src="https://codeclimate.com/github/helium/helium-ruby/badges/gpa.svg" alt="Code Climate"></a>
67
+ <a href="https://badge.fury.io/rb/helium-ruby"><img src="https://badge.fury.io/rb/helium-ruby.svg" alt="Gem Version"></a></p>
68
+
69
+ <p>A Ruby gem for building applications with the Helium API. <a href="https://www.helium.com/">Helium</a> 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 <a href="https://docs.helium.com/">the Helium docs</a>.</p>
70
+
71
+ <h2>Installation</h2>
72
+
73
+ <p>Add this line to your application&#39;s Gemfile:</p>
74
+
75
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_gem'>gem</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>helium-ruby</span><span class='tstring_end'>&#39;</span></span>
76
+ </code></pre>
77
+
78
+ <p>And then execute:</p>
79
+
80
+ <pre class="code ruby"><code class="ruby">$ bundle
81
+ </code></pre>
82
+
83
+ <p>Or install it yourself as:</p>
84
+
85
+ <pre class="code ruby"><code class="ruby">$ gem install helium-ruby
86
+ </code></pre>
87
+
88
+ <h2>Usage</h2>
89
+
90
+ <h3>Setup</h3>
91
+
92
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>helium</span><span class='tstring_end'>&#39;</span></span>
93
+
94
+ <span class='id identifier rubyid_client'>client</span> <span class='op'>=</span> <span class='const'>Helium</span><span class='op'>::</span><span class='const'>Client</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>api_key:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>&lt;Your API Key&gt;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
95
+ </code></pre>
96
+
97
+ <h3>Users</h3>
98
+
99
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_user'>user</span>
100
+ <span class='comment'># =&gt; #&lt;Helium::User:0x007fd58198d9e8 @id=&quot;dev-accounts@helium.co&quot;, @name=&quot;HeliumDevAccount Demo&quot;, @email=&quot;dev-accounts@helium.co&quot;, @created_at=&quot;2014-10-29T21:38:52Z&quot;, @updated_at=&quot;2015-08-06T18:21:32.186374Z&quot;&gt;
101
+ </span></code></pre>
102
+
103
+ <h3>Organizations</h3>
104
+
105
+ <h4>Get the current organization</h4>
106
+
107
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_organization'>organization</span>
108
+ <span class='comment'># =&gt; #&lt;Helium::Organization:0x007fd3d94b1b08 @client=&lt;Helium::Client @debug=true&gt;, @id=&quot;dev-accounts@helium.co&quot;, @name=&quot;dev-accounts@helium.co&quot;, @timezone=&quot;UTC&quot;, @created_at=&quot;2015-09-10T20:50:18.183896Z&quot;, @updated_at=&quot;2015-09-10T20:50:18.183896Z&quot;&gt;
109
+ </span></code></pre>
110
+
111
+ <h4>Get all users associated with the current organization</h4>
112
+
113
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_organization'>organization</span><span class='period'>.</span><span class='id identifier rubyid_users'>users</span>
114
+ <span class='comment'># =&gt; [
115
+ </span><span class='comment'># [0] #&lt;Helium::User:0x007fd3d9449490 @client=&lt;Helium::Client @debug=true&gt;, @id=&quot;tom@helium.com&quot;, @name=&quot;Tom Santero&quot;, @email=&quot;tom@helium.com&quot;, @created_at=&quot;2015-01-21T16:39:31.397048Z&quot;, @updated_at=&quot;2015-02-12T20:42:22.674452Z&quot;&gt;,
116
+ </span><span class='comment'># [1] #&lt;Helium::User:0x007fd3d94492d8 @client=&lt;Helium::Client @debug=true&gt;, @id=&quot;dev-accounts@helium.co&quot;, @name=&quot;HeliumDevAccount Demo&quot;, @email=&quot;dev-accounts@helium.co&quot;, @created_at=&quot;2014-10-29T21:38:52Z&quot;, @updated_at=&quot;2015-08-06T18:21:32.186374Z&quot;&gt;
117
+ </span><span class='comment'># ]
118
+ </span></code></pre>
119
+
120
+ <h3>Sensors</h3>
121
+
122
+ <h4>Get all Sensors</h4>
123
+
124
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_sensors'>sensors</span>
125
+ <span class='comment'># =&gt; [#&lt;Helium::Sensor:0x007f89acdd1318 @id=&quot;08bab58b-d095-4c7c-912c-1f8024d91d95&quot;, @name=&quot;Marc&#39;s Isotope&quot;, @mac=&quot;6081f9fffe00019b&quot;, @ports=[&quot;t&quot;, &quot;b&quot;], @created_at=&quot;2015-08-06T17:28:11.614107Z&quot;, @updated_at=&quot;2016-05-30T22:36:50.810716Z&quot;&gt;, ...]
126
+ </span></code></pre>
127
+
128
+ <h4>Get a Sensor by id</h4>
129
+
130
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_sensor'>sensor</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>08bab58b-d095-4c7c-912c-1f8024d91d95</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
131
+ <span class='comment'># =&gt; #&lt;Helium::Sensor:0x007f89acdb1b58 @id=&quot;08bab58b-d095-4c7c-912c-1f8024d91d95&quot;, @name=&quot;Marc&#39;s Isotope&quot;, @mac=&quot;6081f9fffe00019b&quot;, @ports=[&quot;t&quot;, &quot;b&quot;], @created_at=&quot;2015-08-06T17:28:11.614107Z&quot;, @updated_at=&quot;2016-05-30T22:36:50.810716Z&quot;&gt;
132
+ </span></code></pre>
133
+
134
+ <h3>Timeseries</h3>
135
+
136
+ <h4>Get Timeseries data for a sensor</h4>
137
+
138
+ <p>Timeseries data is paginated by the Helium API which by default, returns pages of 1000 data points. When you call <code>.timeseries</code> on a sensor, you get back a <code>Helium::Cursor</code> object, which is an <code>Enumerable</code> object that handles paging through this data automatically.</p>
139
+
140
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_sensor'>sensor</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_sensor'>sensor</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>08bab58b-d095-4c7c-912c-1f8024d91d95</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
141
+ <span class='id identifier rubyid_timeseries'>timeseries</span> <span class='op'>=</span> <span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='lparen'>(</span><span class='label'>port:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>t</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>start_time:</span> <span class='const'>DateTime</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>2016-08-01</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='comma'>,</span> <span class='label'>end_time:</span> <span class='const'>DateTime</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>2016-08-16</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='rparen'>)</span>
142
+ <span class='comment'># =&gt; #&lt;Helium::Cursor:0x007f9b02a25798 @path=&quot;/sensor/aba370be-837d-4b41-bee5-686b0069d874/timeseries&quot;, @klass=Helium::DataPoint, @options={&quot;page[size]&quot;=&gt;1000, &quot;filter[port]&quot;=&gt;&quot;t&quot;, &quot;filter[start]&quot;=&gt;&quot;2016-08-01T00:00:00Z&quot;, &quot;filter[end]&quot;=&gt;&quot;2016-08-16T00:00:00Z&quot;}, @collection=[], @next_link=nil, @is_last=false&gt;
143
+ </span></code></pre>
144
+
145
+ <h4>Working with data points</h4>
146
+
147
+ <p>A <code>Helium::Cursor</code> is a collection of <code>Helium::DataPoint</code>s which can iterated over using the usual <code>Object#Enumerable</code> methods:</p>
148
+
149
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_sensor'>sensor</span> <span class='op'>=</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_sensor'>sensor</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>08bab58b-d095-4c7c-912c-1f8024d91d95</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
150
+
151
+ <span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='period'>.</span><span class='id identifier rubyid_take'>take</span><span class='lparen'>(</span><span class='int'>1000</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_data_point'>data_point</span><span class='op'>|</span>
152
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_data_point'>data_point</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span>
153
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_data_point'>data_point</span><span class='period'>.</span><span class='id identifier rubyid_timestamp'>timestamp</span>
154
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_data_point'>data_point</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span>
155
+ <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid_data_point'>data_point</span><span class='period'>.</span><span class='id identifier rubyid_port'>port</span>
156
+ <span class='kw'>end</span>
157
+
158
+ <span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span>
159
+ <span class='comment'># =&gt; #&lt;Helium::DataPoint:0x007f9b0407f340 @id=&quot;6c115c10-323e-4756-ae1c-fc69982eb397&quot;, @timestamp=&quot;2016-08-15T23:55:42.2Z&quot;, @value=22.590084, @port=&quot;t&quot;&gt;
160
+ </span></code></pre>
161
+
162
+ <p>Since pagination happens automatically, <strong>it&#39;s strongly recommended to define a start and end time,</strong> otherwise enumerating over the collection may take a very long time.</p>
163
+
164
+ <h4>Filtering Timeseries data</h4>
165
+
166
+ <p>Timeseries data can be filtered by port type and start/end time:</p>
167
+
168
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='period'>.</span><span class='id identifier rubyid_take'>take</span><span class='lparen'>(</span><span class='int'>1000</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_collect'>collect</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:port</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span>
169
+ <span class='comment'># =&gt; [
170
+ </span><span class='comment'># [0] &quot;b&quot;,
171
+ </span><span class='comment'># [1] &quot;l&quot;,
172
+ </span><span class='comment'># [2] &quot;h&quot;,
173
+ </span><span class='comment'># [3] &quot;p&quot;,
174
+ </span><span class='comment'># [4] &quot;t&quot;,
175
+ </span><span class='comment'># [5] &quot;_se&quot;,
176
+ </span><span class='comment'># [6] &quot;m&quot;
177
+ </span><span class='comment'># ]
178
+ </span>
179
+ <span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='lparen'>(</span><span class='label'>port:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>t</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_take'>take</span><span class='lparen'>(</span><span class='int'>1000</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_collect'>collect</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:port</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_uniq'>uniq</span>
180
+ <span class='comment'># =&gt; [
181
+ </span><span class='comment'># [0] &quot;t&quot;
182
+ </span><span class='comment'># ]
183
+ </span>
184
+ <span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='lparen'>(</span><span class='label'>start_time:</span> <span class='const'>DateTime</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>2016-08-01</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='comma'>,</span> <span class='label'>end_time:</span> <span class='const'>DateTime</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>2016-08-02</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_take'>take</span><span class='lparen'>(</span><span class='int'>1000</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_collect'>collect</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:timestamp</span><span class='rparen'>)</span>
185
+ <span class='comment'># =&gt; [
186
+ </span><span class='comment'># [0] #&lt;DateTime: 2016-08-01T23:55:29+00:00 ((2457602j,86129s,802000000n),+0s,2299161j)&gt;,
187
+ </span><span class='comment'># [1] #&lt;DateTime: 2016-08-01T23:55:29+00:00 ((2457602j,86129s,61000000n),+0s,2299161j)&gt;,
188
+ </span><span class='comment'># [2] #&lt;DateTime: 2016-08-01T23:55:29+00:00 ((2457602j,86129s,60000000n),+0s,2299161j)&gt;,
189
+ </span><span class='comment'># [3] #&lt;DateTime: 2016-08-01T23:55:29+00:00 ((2457602j,86129s,59000000n),+0s,2299161j)&gt;,
190
+ </span><span class='comment'># [4] #&lt;DateTime: 2016-08-01T23:54:45+00:00 ((2457602j,86085s,544000000n),+0s,2299161j)&gt;,
191
+ </span></code></pre>
192
+
193
+ <h4>Timeseries Aggregations</h4>
194
+
195
+ <p>In addition to returning the raw data points, Helium can return timeseries data aggregated into buckets.</p>
196
+
197
+ <p>For example, if you wanted to display a graph of a sensor&#39;s temperature min, max and average readings grouped by day, you could do the following:</p>
198
+
199
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_data_points'>data_points</span> <span class='op'>=</span> <span class='id identifier rubyid_sensor'>sensor</span><span class='period'>.</span><span class='id identifier rubyid_timeseries'>timeseries</span><span class='lparen'>(</span><span class='label'>port:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>t</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>aggtype:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>min,max,avg</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>aggsize:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1d</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
200
+ <span class='comment'># =&gt; #&lt;Helium::Cursor:0x007f9b0413a708 @path=&quot;/sensor/aba370be-837d-4b41-bee5-686b0069d874/timeseries&quot;, @klass=Helium::DataPoint, @options={&quot;page[size]&quot;=&gt;1000, &quot;filter[port]&quot;=&gt;&quot;t&quot;, &quot;agg[type]&quot;=&gt;&quot;min,max,avg&quot;, &quot;agg[size]&quot;=&gt;&quot;1d&quot;}, @collection=[], @next_link=nil, @is_last=false&gt;
201
+ </span>
202
+ <span class='id identifier rubyid_data_points'>data_points</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_min'>min</span>
203
+ <span class='comment'># =&gt; 21.47564
204
+ </span>
205
+ <span class='id identifier rubyid_data_points'>data_points</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_max'>max</span>
206
+ <span class='comment'># =&gt; 24.145264
207
+ </span>
208
+ <span class='id identifier rubyid_data_points'>data_points</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='period'>.</span><span class='id identifier rubyid_avg'>avg</span>
209
+ <span class='comment'># =&gt; 22.2916633036437
210
+ </span></code></pre>
211
+
212
+ <p>A full list of aggregation types and sizes can be found here: <a href="https://docs.helium.com/docs/timeseries#aggregations">https://docs.helium.com/docs/timeseries#aggregations</a>.</p>
213
+
214
+ <h2>Development</h2>
215
+
216
+ <p>After checking out the repo, run <code>bin/setup</code> to install dependencies. Then, run <code>rake spec</code> to run the tests. You can also run <code>bin/console</code> for an interactive prompt that will allow you to experiment.</p>
217
+
218
+ <p>To install this gem onto your local machine, run <code>bundle exec rake install</code>. To release a new version, update the version number in <code>version.rb</code>, and then run <code>bundle exec rake release</code>, which will create a git tag for the version, push git commits and tags, and push the <code>.gem</code> file to <a href="https://rubygems.org">rubygems.org</a>.</p>
219
+
220
+ <h3>Roadmap</h3>
221
+
222
+ <p>We&#39;re working toward a v1.0.0 release, which will represent a feature-complete implementation of the Helium API. You can check the progress here: <a href="https://github.com/helium/helium-ruby/milestone/1">https://github.com/helium/helium-ruby/milestone/1</a>.</p>
223
+
224
+ <p>Until the v1.0.0 release, the functionality of this gem is subject to change. To prevent breaking changes, you should use the pessimistic version constraint operator (<code>~&gt;</code>) in your Gemfile to lock your helium-ruby version to the current minor release. This will allow updates to patch versions.</p>
225
+
226
+ <h2>Contributing</h2>
227
+
228
+ <p>We value contributions from the community and will do everything we can go get them reviewed in a timely fashion. If you have code to send our way or a bug to report:</p>
229
+
230
+ <ul>
231
+ <li><p>Contributing Code: If you have new code or a bug fix, fork this repo, create a logically-named branch, and submit a PR against this repo. Include a write up of the PR with details on what it does.</p></li>
232
+ <li><p>Reporting Bugs: Open an issue against this repo with as much detail as you can. At the very least you&#39;ll include steps to reproduce the problem.</p></li>
233
+ </ul>
234
+
235
+ <p>This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the <a href="http://contributor-covenant.org">Contributor Covenant</a> Code of Conduct.</p>
236
+
237
+ <p>Above all, thank you for taking the time to be a part of the Helium community.</p>
238
+
239
+ <h3>Running specs with Guard</h3>
240
+
241
+ <p>To receive system notifications of test status, install <code>terminal-notifier</code>:</p>
242
+
243
+ <pre class="code ruby"><code class="ruby">$ brew install terminal-notifier
244
+ </code></pre>
245
+
246
+ <p>Then run Guard with:</p>
247
+
248
+ <pre class="code ruby"><code class="ruby">$ bundle exec guard
249
+ </code></pre>
250
+
251
+ <p>When you modify any of the files in <code>lib/</code>, all specs will run. When you modify a spec file, just that file will be run. You can press <code>Enter</code> at the guard prompt to run all tests as well.</p>
252
+
253
+ <h2>License</h2>
254
+
255
+ <p>The gem is available as open source under the terms of the <a href="https://github.com/helium/helium-ruby/blob/master/LICENSE.txt">BSD License</a>.</p>
256
+ </div></div>
257
+
258
+ <div id="footer">
259
+ Generated on Thu Aug 18 10:50:33 2016 by
260
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
261
+ 0.9.3 (ruby-2.3.1).
262
+ </div>
263
+
264
+ </div>
265
+ </body>
266
+ </html>