lifx_dash 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- M2Q0MTdjYWZlZmM1MzQ0ZGE5MWY3YTJmMjM3NmVhNzdmNzZiZmZlMg==
5
- data.tar.gz: !binary |-
6
- OWVhMDk4N2JhNGIwYmNmODg0YTlhYzU2NjczNWYzZmYzOWMxMzVlMg==
2
+ SHA1:
3
+ metadata.gz: cfe674982a9903633e0576f45dfd2f9e598cd9cb
4
+ data.tar.gz: 533b6ad256a945e13505484568345faa7d60d0d2
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZDc3ZjhlYzhjNmExYmU5ZGEyNGM4OTE4MGZkMTMzYTBhMTZmMzEwMTE4ZjNj
10
- MmY5MTFkNzBjN2Y3YjE4NzcyODEyMjdiMjUxY2I5ZDcxMzdmNjljNDA2Mjk4
11
- MzY5ZDlkNTFkZDRjZDMxOGVhYTgyMDJkMDJlZDE3MGNhYjdlYjY=
12
- data.tar.gz: !binary |-
13
- ZmZlZmQ5MDAwYjgwN2Q1MGU0MWFmODY5YTdiNTIxYmE1ODFjNTlhODlmMzM1
14
- Y2Y2OGFiZWQ3MDEzNmE2YzBlYjQ4ZTE2ZDFlZGJiM2E1ZWM4YWM5ZDBhMjIw
15
- MDdmMDhkYzU0ZDZjNTcxNDk3MjAyNzljZTBjZWYxYzc4ZmI2ZDc=
6
+ metadata.gz: 9c443ecea091c19c9f41a48cd3c7ac29f5f371982a8bdd18cbca99f8be00201822f7b0c5164911b9a1998d848f3474894c08c8828339472bfcf5234b8ed9ce6b
7
+ data.tar.gz: 388b2c610cbc1d6f1b27f3fcb1a98506482b18933fdf79ffd9760980a64298aa1a84bd6b21453f7b676fbd6fd5ab856afbbbb5d800e4f8ba6e1e91bfa88d4302
@@ -5,10 +5,10 @@ before_install:
5
5
  - gem update --system
6
6
  - gem --version
7
7
  rvm:
8
- - 2.0.0
9
8
  - 2.1.10
10
- - 2.2.5
11
- - 2.3.1
9
+ - 2.2.7
10
+ - 2.3.4
11
+ - 2.4.1
12
12
  - ruby-head
13
13
  matrix:
14
14
  allow_failures:
data/README.md CHANGED
@@ -49,8 +49,9 @@ The `lifx_dash` command will now be available in your PATH.
49
49
 
50
50
  ### Dash Button Setup
51
51
 
52
- Follow Amazon's Dash button setup steps, but **stop** before choosing any
53
- particular product to purchase. If necessary, you can [factory
52
+ Follow Amazon's Dash button setup steps, but **stop** before choosing a product
53
+ to purchase. Pressing the button should pulse white while connecting to wi-fi,
54
+ then flash orange. If necessary, you can [factory
54
55
  reset](https://www.amazon.com/gp/help/customer/display.html?nodeId=201746400)
55
56
  your button and start the setup from scratch.
56
57
 
@@ -58,21 +59,12 @@ Next use the `snoop` command to determine the button's MAC address:
58
59
 
59
60
  $ sudo lifx_dash snoop -i en0
60
61
 
61
- This will listen on network interface 'en0' for ARP packets from any Dash
62
- button. Take a note of the MAC address that's logged when you press. To list
63
- network interfaces on your machine use:
62
+ This will listen on network interface 'en0' for Dash button packets. Take a note
63
+ of the MAC address that's logged when you press. To list network interfaces on
64
+ your machine use:
64
65
 
65
- $ ifconfig
66
- # or
67
66
  $ ifconfig -l
68
67
 
69
- #### Snooping Tips
70
-
71
- Wait for the network to quiet down, before pressing the button, since other
72
- devices may respond with ARP packets of their own when you press. Take care to
73
- choose the MAC address from the ARP packet that occurs only once from a single
74
- MAC address.
75
-
76
68
  ### LIFX Bulb Setup
77
69
 
78
70
  Create a [personal token](https://cloud.lifx.com/settings) for the LIFX HTTP
@@ -160,12 +152,12 @@ take a moment and check it hasn't already been raised (and possibly closed).
160
152
 
161
153
  This gem uses the [PacketFu](https://rubygems.org/gems/packetfu) gem (and
162
154
  [libpcap](https://sourceforge.net/projects/libpcap/) under the hood) to monitor
163
- data packets on your network. This packet stream is filtered by
164
- [ARP](https://en.wikipedia.org/wiki/Address_Resolution_Protocol) packets (sent
165
- when a device attempts to identify itself). Amazon Dash buttons do this on every
166
- press.
155
+ data packets on your network. This packet stream filters
156
+ [ARP](https://en.wikipedia.org/wiki/Address_Resolution_Protocol) packets and
157
+ DHCP packets (sent from 0.0.0.0). Older buttons use the ARP method, while newer
158
+ buttons issue DHCP packets.
167
159
 
168
- When an ARP packet is detected with a known source MAC address, the LIFX HTTP
160
+ When a valid packet is detected with a known source MAC address, the LIFX HTTP
169
161
  API [toggle-power](https://api.developer.lifx.com/docs/toggle-power) endpoint is
170
162
  requested, with a selector and authorization header.
171
163
 
@@ -186,11 +178,11 @@ CI](https://travis-ci.org/matthutchinson/lifx_dash). Read the [contributing
186
178
  guidelines](https://github.com/matthutchinson/lifx_dash/blob/master/CONTRIBUTING.md)
187
179
  for more details.
188
180
 
189
- This project is intended to be a safe, welcoming space for
190
- collaboration, and contributors are expected to adhere to the [Contributor
181
+ This project is intended to be a safe, welcoming space for collaboration, and
182
+ contributors are expected to adhere to the [Contributor
191
183
  Covenant](http://contributor-covenant.org) code of conduct. See
192
- [here](https://github.com/mroth/lolcommits/blob/master/CODE_OF_CONDUCT.md) for
193
- more details.
184
+ [here](https://github.com/matthutchinson/lifx_dash/blob/master/CODE_OF_CONDUCT.md)
185
+ for more details.
194
186
 
195
187
  ## Development
196
188
 
@@ -35,11 +35,8 @@ end
35
35
 
36
36
 
37
37
  desc "Listen for Dash button presses on the network and show packet information"
38
- long_desc "Monitor the sepcified network interface for any Dash button ARP
39
- packets and log the device MAC address to stdout. Wait for the network to quiet
40
- down, before pressing the button, since other devices may respond with ARP
41
- packets of their own when you press. Take care to choose the MAC address from
42
- the ARP packet that occurs only once from a single MAC address."
38
+ long_desc "Monitor the sepcified network interface for valid Dash button packets
39
+ and log the device MAC address to stdout."
43
40
  command :snoop do |c|
44
41
  c.desc "Network Interface"
45
42
  c.default_value CONFIG["iface"] || "en0"
@@ -52,7 +49,7 @@ end
52
49
 
53
50
  desc "Listen for a Dash button press, and the toggle selected lights"
54
51
  long_desc "Monitor the sepcified network interface, filtered by a Dash button
55
- MAC address. If a valid ARP packet is detected, the LIFX lights (identified by
52
+ MAC address. If a valid packet is detected, the LIFX lights (identified by
56
53
  the selector) will be toggled using the LIFX HTTP API (v1). You can optionally
57
54
  pass a LIFX bulb selector (the bulb ID), or choose to daemonize the `monitor`
58
55
  process.
@@ -3,6 +3,16 @@ require "packetfu"
3
3
  module LifxDash
4
4
  class Capturer
5
5
 
6
+ # Berkeley Packet filter for Amazon Dash buttons
7
+ #
8
+ # - older dash buttons issue an ARP packet from 0.0.0.0
9
+ # - newer buttons broadcast a DHCP request from 0.0.0.0
10
+ # - use the following bfp in WireShark to snoop for raw packets
11
+ # - (arp or (udp.srcport == 68 and udp.dstport == 67)) and ip.src == 0.0.0.0
12
+ # - for more details see https://github.com/ide/dash-button/issues/36
13
+ #
14
+ PACKET_FILTER = "(arp or (udp and src port 68 and dst port 67)) and src host 0.0.0.0"
15
+
6
16
  attr_reader :iface
7
17
 
8
18
  def initialize(network_iface_id)
@@ -12,25 +22,22 @@ module LifxDash
12
22
  def listen(&block)
13
23
  # examine packets on the stream
14
24
  capturer.stream.each do |packet|
15
- pkt = PacketFu::ARPPacket.parse(packet)
16
- # parse packet header
17
- mac = PacketFu::EthHeader.str2mac(pkt.eth_src)
18
- # valid ARP pkt when opcode is 1
19
- if pkt.arp_opcode == 1
25
+ pkt = PacketFu::IPPacket.parse(packet)
26
+ # only consider the first packet sent
27
+ if pkt.ip_id == 1
28
+ mac = PacketFu::EthHeader.str2mac(pkt.eth_src)
20
29
  block.call(pkt, mac) if block
21
30
  end
22
31
  end
23
32
  end
24
33
 
25
-
26
34
  private
27
-
28
35
  def capturer
29
- # filter and capture ARP packets on network interface
36
+ # capture (and filter) packets on network interface
30
37
  @capturer ||= PacketFu::Capture.new(
31
38
  iface: @iface,
32
39
  start: true,
33
- filter: "arp"
40
+ filter: PACKET_FILTER
34
41
  )
35
42
  end
36
43
  end
@@ -9,8 +9,6 @@ module LifxDash
9
9
 
10
10
  def run
11
11
  puts "Snooping for dash button packets on #{iface} ... press [CTRL-c] to stop\n\n"
12
- puts " * wait for the network to quiet down, before pressing the button"
13
- puts " * you might get more than 1 ARP packet when pressing, use the MAC address that occurs once\n\n"
14
12
 
15
13
  LifxDash::Capturer.new(iface).listen do |pkt, mac|
16
14
  LOGGER.info "possible Dash button press from MAC address: #{mac} -- pkt summary: #{pkt.peek}"
@@ -1,3 +1,3 @@
1
1
  module LifxDash
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  .\" generated with Ronn/v0.7.3
2
2
  .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "LIFX_DASH" "1" "June 2016" "" ""
4
+ .TH "LIFX_DASH" "1" "June 2017" "" ""
5
5
  .
6
6
  .SH "NAME"
7
7
  \fBlifx_dash\fR \- Toggle LIFX lights with an Amazon Dash button
@@ -31,10 +31,13 @@ A \fBconfig\fR command also exists, allowing you to set default options for \fBm
31
31
  \fBlifx_dash\fR requires at least one LIFX bulb, and any Amazon Dash button\. You will also need a wifi network and root access to sniff packets on your network adaptor\.
32
32
  .
33
33
  .P
34
- Follow Amazon\'s Dash button setup steps, but \fBstop\fR before choosing any particular product to purchase\. You aill also need a free LIFX API token from here: \fIhttps://cloud\.lifx\.com/settings\fR
34
+ Follow Amazon\'s Dash button setup steps, but \fBstop\fR before choosing a product to purchase\. Pressing the button should pulse white while connecting to wi\-fi, then flash orange\. If necessary, you can factory reset \fIhttps://www\.amazon\.com/gp/help/customer/display\.html?nodeId=201746400\fR your button and start the setup from scratch\.
35
+ .
36
+ .P
37
+ You will also need a free LIFX API token from here: \fIhttps://cloud\.lifx\.com/settings\fR
35
38
  .
36
39
  .SH "OPTIONS"
37
- The snoop command has one optional flag, the network interface to listen on\.
40
+ The snoop command has one optional flag \- the network interface to listen on\.
38
41
  .
39
42
  .IP "\(bu" 4
40
43
  \fB\-i\fR, \fB\-\-iface=arg\fR: Network Interface (default: en0)
@@ -42,9 +45,6 @@ The snoop command has one optional flag, the network interface to listen on\.
42
45
  .IP "" 0
43
46
  .
44
47
  .P
45
- Wait for the network to quiet down, before pressing the button, since other devices may respond with ARP packets of their own when you press\. Take care to choose the MAC address from the ARP packet that occurs only once from a single MAC address\.
46
- .
47
- .P
48
48
  The \fBmonitor\fR command accepts the following flags, both a mac address and api token are required\.
49
49
  .
50
50
  .IP "\(bu" 4
@@ -106,24 +106,24 @@ selector, or choose to daemonize the <code>monitor</code> process.</p>
106
106
  will also need a wifi network and root access to sniff packets on your network
107
107
  adaptor.</p>
108
108
 
109
- <p>Follow Amazon's Dash button setup steps, but <strong>stop</strong> before choosing any
110
- particular product to purchase. You aill also need a free LIFX API token from
111
- here: <a href="https://cloud.lifx.com/settings" data-bare-link="true">https://cloud.lifx.com/settings</a></p>
109
+ <p>Follow Amazon's Dash button setup steps, but <strong>stop</strong> before choosing a product
110
+ to purchase. Pressing the button should pulse white while connecting to wi-fi,
111
+ then flash orange. If necessary, you can <a href="https://www.amazon.com/gp/help/customer/display.html?nodeId=201746400">factory
112
+ reset</a>
113
+ your button and start the setup from scratch.</p>
114
+
115
+ <p>You will also need a free LIFX API token from here:
116
+ <a href="https://cloud.lifx.com/settings" data-bare-link="true">https://cloud.lifx.com/settings</a></p>
112
117
 
113
118
  <h2 id="OPTIONS">OPTIONS</h2>
114
119
 
115
- <p>The snoop command has one optional flag, the network interface to listen on.</p>
120
+ <p>The snoop command has one optional flag - the network interface to listen on.</p>
116
121
 
117
122
  <ul>
118
123
  <li><code>-i</code>, <code>--iface=arg</code>: Network Interface (default: en0)</li>
119
124
  </ul>
120
125
 
121
126
 
122
- <p>Wait for the network to quiet down, before pressing the button, since other
123
- devices may respond with ARP packets of their own when you press. Take care to
124
- choose the MAC address from the ARP packet that occurs only once from a single
125
- MAC address.</p>
126
-
127
127
  <p>The <code>monitor</code> command accepts the following flags, both a mac address and api
128
128
  token are required.</p>
129
129
 
@@ -208,7 +208,7 @@ by any arguments passed on the command line.</p>
208
208
 
209
209
  <ol class='man-decor man-foot man foot'>
210
210
  <li class='tl'></li>
211
- <li class='tc'>June 2016</li>
211
+ <li class='tc'>June 2017</li>
212
212
  <li class='tr'>lifx_dash(1)</li>
213
213
  </ol>
214
214
 
@@ -29,21 +29,21 @@ A `config` command also exists, allowing you to set default options for
29
29
  will also need a wifi network and root access to sniff packets on your network
30
30
  adaptor.
31
31
 
32
- Follow Amazon's Dash button setup steps, but **stop** before choosing any
33
- particular product to purchase. You aill also need a free LIFX API token from
34
- here: [https://cloud.lifx.com/settings](https://cloud.lifx.com/settings)
32
+ Follow Amazon's Dash button setup steps, but **stop** before choosing a product
33
+ to purchase. Pressing the button should pulse white while connecting to wi-fi,
34
+ then flash orange. If necessary, you can [factory
35
+ reset](https://www.amazon.com/gp/help/customer/display.html?nodeId=201746400)
36
+ your button and start the setup from scratch.
37
+
38
+ You will also need a free LIFX API token from here:
39
+ [https://cloud.lifx.com/settings](https://cloud.lifx.com/settings)
35
40
 
36
41
  ## OPTIONS
37
42
 
38
- The snoop command has one optional flag, the network interface to listen on.
43
+ The snoop command has one optional flag - the network interface to listen on.
39
44
 
40
45
  * `-i`, `--iface=arg`: Network Interface (default: en0)
41
46
 
42
- Wait for the network to quiet down, before pressing the button, since other
43
- devices may respond with ARP packets of their own when you press. Take care to
44
- choose the MAC address from the ARP packet that occurs only once from a single
45
- MAC address.
46
-
47
47
  The `monitor` command accepts the following flags, both a mac address and api
48
48
  token are required.
49
49
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lifx_dash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Hutchinson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-02 00:00:00.000000000 Z
11
+ date: 2017-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli
@@ -42,133 +42,134 @@ dependencies:
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: ronn
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rdoc
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: minitest
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ! '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: webmock
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ! '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ! '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: aruba
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ! '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ! '>='
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: simplecov
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ! '>='
143
+ - - ">="
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ! '>='
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: coveralls
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ! '>='
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ! '>='
164
+ - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
- description: ! " A command line tool to listen for Amazon Dash button presses and
168
- toggle LIFX\n lights ON and OFF (via the LIFX HTTP API). With options to configure:
169
- the Dash\n MAC address, network interface and LIFX bulb selector. Inspired by Ted\n
170
- \ Benson's hack (http://tinyurl.com/zba3da2). Root access is required for\n network
171
- packet sniffing.\n"
167
+ description: |2
168
+ A command line tool to listen for Amazon Dash button presses and toggle LIFX
169
+ lights ON and OFF (via the LIFX HTTP API). With options to configure: the Dash
170
+ MAC address, network interface and LIFX bulb selector. Inspired by Ted
171
+ Benson's hack (http://tinyurl.com/zba3da2). Root access is required for
172
+ network packet sniffing.
172
173
  email:
173
174
  - matt@hiddenloop.com
174
175
  executables:
@@ -178,10 +179,10 @@ extra_rdoc_files:
178
179
  - README.md
179
180
  - LICENSE.txt
180
181
  files:
181
- - .coveralls.yml
182
- - .gitignore
183
- - .simplecov
184
- - .travis.yml
182
+ - ".coveralls.yml"
183
+ - ".gitignore"
184
+ - ".simplecov"
185
+ - ".travis.yml"
185
186
  - CHANGELOG.md
186
187
  - CODE_OF_CONDUCT.md
187
188
  - CONTRIBUTING.md
@@ -211,21 +212,21 @@ metadata:
211
212
  allowed_push_host: https://rubygems.org
212
213
  post_install_message:
213
214
  rdoc_options:
214
- - --title
215
+ - "--title"
215
216
  - lifx_dash
216
- - --main
217
+ - "--main"
217
218
  - README.md
218
- - -ri
219
+ - "-ri"
219
220
  require_paths:
220
221
  - lib
221
222
  required_ruby_version: !ruby/object:Gem::Requirement
222
223
  requirements:
223
- - - ! '>='
224
+ - - ">="
224
225
  - !ruby/object:Gem::Version
225
226
  version: 2.0.0
226
227
  required_rubygems_version: !ruby/object:Gem::Requirement
227
228
  requirements:
228
- - - ! '>='
229
+ - - ">="
229
230
  - !ruby/object:Gem::Version
230
231
  version: '0'
231
232
  requirements:
@@ -234,7 +235,7 @@ requirements:
234
235
  - one or more LIFX bulbs
235
236
  - root access
236
237
  rubyforge_project:
237
- rubygems_version: 2.5.1
238
+ rubygems_version: 2.6.11
238
239
  signing_key:
239
240
  specification_version: 4
240
241
  summary: Toggle LIFX lights with an Amazon Dash button