lifx-lan 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/lib/lifx/lan/light.rb +20 -0
- data/lib/lifx/lan/light_target.rb +55 -1
- data/lib/lifx/lan/protocol/multi_zone.rb +90 -0
- data/lib/lifx/lan/protocol/tile.rb +96 -0
- data/lib/lifx/lan/protocol/type.rb +15 -97
- data/lib/lifx/lan/transport/udp.rb +1 -1
- data/lib/lifx/lan/version.rb +1 -1
- data/lib/lifx-lan.rb +1 -1
- data/lifx-lan.gemspec +1 -1
- data/spec/spec_helper.rb +1 -1
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fc244c5415dfac35bff4c8c80184c4940d89cfec2c5fb6dbf047d710f942283a
|
4
|
+
data.tar.gz: b775bf867f79b919fafd741ebe2adaed14700f3f99bb8d876644cb7b2fc19f66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d71cc69208fbf7f8750814903751e5069c9c8a27103aebc6615b48129a350d91674efe675ce8e01f25218744b5cc8c18f8574b194dee29c686641bf017b4cbbe
|
7
|
+
data.tar.gz: a34bd68e7efdd872f5b82876f73b62f51d220d3bf0fa65b7749d4c2bd4627778c5a986c69e951e0c9bfcc49e1511328546ad2e437b20b2be1e03c911d4801147
|
data/lib/lifx/lan/light.rb
CHANGED
@@ -334,6 +334,26 @@ module LIFX
|
|
334
334
|
context.tags_for_device(self)
|
335
335
|
end
|
336
336
|
|
337
|
+
def location
|
338
|
+
send_message!(Protocol::Device::GetLocation.new,
|
339
|
+
wait_for: Protocol::Device::StateLocation) do |payload|
|
340
|
+
{
|
341
|
+
location: payload.location,
|
342
|
+
label: payload.label
|
343
|
+
}
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
def group
|
348
|
+
send_message!(Protocol::Device::GetGroup.new,
|
349
|
+
wait_for: Protocol::Device::StateGroup) do |payload|
|
350
|
+
{
|
351
|
+
group: payload.group,
|
352
|
+
label: payload.label
|
353
|
+
}
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
337
357
|
# Returns whether the light is a gateway
|
338
358
|
# @api private
|
339
359
|
def gateway?
|
@@ -10,7 +10,7 @@ module LIFX
|
|
10
10
|
# @param color [Color] The color to be set
|
11
11
|
# @param duration: [Numeric] Transition time in seconds
|
12
12
|
# @return [Light, LightCollection] self for chaining
|
13
|
-
def set_color(color, duration: LIFX::Config.default_duration)
|
13
|
+
def set_color(color, duration: LIFX::LAN::Config.default_duration)
|
14
14
|
send_message(Protocol::Light::SetColor.new(
|
15
15
|
color: color.to_hsbk,
|
16
16
|
duration: (duration * MSEC_PER_SEC).to_i,
|
@@ -19,6 +19,60 @@ module LIFX
|
|
19
19
|
self
|
20
20
|
end
|
21
21
|
|
22
|
+
# Attempts to set multiple zones on the light(s) to `color` asynchronously.
|
23
|
+
# This method cannot guarantee that the message was received.
|
24
|
+
# @param color [Color] The color to be set
|
25
|
+
# @param start_index [Numeric] The index of the first zone to be set
|
26
|
+
# @param end_index [Numeric] The index of the last zone to be set
|
27
|
+
# @param duration: [Numeric] Transition time in seconds
|
28
|
+
# @return [Light, LightCollection] self for chaining
|
29
|
+
def set_multizone_color(color, start_index: 0, end_index: 7, duration: LIFX::LAN::Config.default_duration)
|
30
|
+
send_message(Protocol::MultiZone::SetColorZones.new(
|
31
|
+
start_index: start_index,
|
32
|
+
end_index: end_index,
|
33
|
+
color: color.to_hsbk,
|
34
|
+
duration: (duration * MSEC_PER_SEC).to_i,
|
35
|
+
apply: 1,
|
36
|
+
))
|
37
|
+
self
|
38
|
+
end
|
39
|
+
|
40
|
+
# Attempts to set every pixel on the tile(s) to `colors` asynchronously.
|
41
|
+
# This method cannot guarantee that the message was received.
|
42
|
+
# @param colors [Array<Color>] The 64 Colors to be set as a 1-d array
|
43
|
+
# @param tile_start_index [Numeric] The index of the first tile to be set
|
44
|
+
# @param length [Numeric] The number of tiles to set starting from the index
|
45
|
+
# @param duration: [Numeric] Transition time in seconds
|
46
|
+
# @return [Light, LightCollection] self for chaining
|
47
|
+
def set_tile_colors(colors, tile_start_index: 0, length: 1, duration: LIFX::LAN::Config.default_duration)
|
48
|
+
send_message(Protocol::Tile::SetTileState64.new(
|
49
|
+
colors: colors.map(&:to_hsbk),
|
50
|
+
tile_start_index: tile_start_index,
|
51
|
+
tile_length: [length, 1].min,
|
52
|
+
x: 0,
|
53
|
+
y: 0,
|
54
|
+
width: 8,
|
55
|
+
duration: (duration * MSEC_PER_SEC).to_i
|
56
|
+
))
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [Numeric] Number of zones supported
|
61
|
+
def zone_count
|
62
|
+
send_message!(Protocol::MultiZone::GetColorZones.new(start_index: 0, end_index: 0),
|
63
|
+
wait_for: Protocol::MultiZone::StateZone) do |payload|
|
64
|
+
payload.total_zones
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# @return [Hash] Raw tile info
|
69
|
+
def tile_info
|
70
|
+
send_message!(Protocol::Tile::GetDeviceChain.new,
|
71
|
+
wait_for: Protocol::Tile::StateDeviceChain) do |payload|
|
72
|
+
payload
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
22
76
|
# Attempts to apply a waveform to the light(s) asynchronously.
|
23
77
|
# @note Don't use this directly.
|
24
78
|
# @api private
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require "lifx/lan/protocol/light"
|
2
|
+
|
3
|
+
module LIFX
|
4
|
+
module LAN
|
5
|
+
module Protocol
|
6
|
+
# @api private
|
7
|
+
module MultiZone
|
8
|
+
module ApplicationRequest
|
9
|
+
NO_APPLY = 0 # Don't apply the requested changes until a message with APPLY or APPLY_ONLY is sent.
|
10
|
+
APPLY = 1 # Apply the changes immediately and apply any pending changes.
|
11
|
+
APPLY_ONLY = 2 # Ignore the requested changes in this message and only apply pending changes.
|
12
|
+
end
|
13
|
+
|
14
|
+
# #####
|
15
|
+
# Extended Multizone requests: Unsupported by LIFX Z gen 1
|
16
|
+
# #####
|
17
|
+
|
18
|
+
# Change all the zones on your device in one message
|
19
|
+
class SetExtendedColorZones < Payload
|
20
|
+
endian :little
|
21
|
+
|
22
|
+
uint32 :duration # Transition duration in milliseconds
|
23
|
+
uint8 :apply # ApplicationRequest
|
24
|
+
uint16 :start_index # Zone we start applying the colors from. The first zone is 0.
|
25
|
+
uint8 :colors_count # Number of colors from colors will be applied sequentially from index
|
26
|
+
array :colors, :initial_length => 82 do
|
27
|
+
hsbk
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Ask the device to return a StateExtendedColorZones
|
32
|
+
class GetExtendedColorZones < Payload
|
33
|
+
endian :little
|
34
|
+
end
|
35
|
+
|
36
|
+
# StateExtendedColorZones
|
37
|
+
class StateExtendedColorZones < Payload
|
38
|
+
endian :little
|
39
|
+
|
40
|
+
uint16 :total_zones
|
41
|
+
uint16 :start_index
|
42
|
+
uint8 :colors_count
|
43
|
+
array :colors, :initial_length => 82 do
|
44
|
+
hsbk
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
# #####
|
50
|
+
# All LIFX Z and LIFX Beam products supported:
|
51
|
+
# #####
|
52
|
+
|
53
|
+
class SetColorZones < Payload
|
54
|
+
endian :little
|
55
|
+
|
56
|
+
uint8 :start_index
|
57
|
+
uint8 :end_index
|
58
|
+
hsbk :color
|
59
|
+
uint32 :duration # Transition duration in milliseconds
|
60
|
+
uint8 :apply # ApplicationRequest
|
61
|
+
end
|
62
|
+
|
63
|
+
class GetColorZones < Payload
|
64
|
+
endian :little
|
65
|
+
|
66
|
+
uint8 :start_index
|
67
|
+
uint8 :end_index
|
68
|
+
end
|
69
|
+
|
70
|
+
class StateZone < Payload
|
71
|
+
endian :little
|
72
|
+
|
73
|
+
uint8 :total_zones
|
74
|
+
uint8 :color_index
|
75
|
+
hsbk :color
|
76
|
+
end
|
77
|
+
|
78
|
+
class StateMultiZone < Payload
|
79
|
+
endian :little
|
80
|
+
|
81
|
+
uint8 :total_zones
|
82
|
+
uint8 :start_index
|
83
|
+
array :colors, :initial_length => 8 do
|
84
|
+
hsbk
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require "lifx/lan/protocol/light"
|
2
|
+
|
3
|
+
module LIFX
|
4
|
+
module LAN
|
5
|
+
module Protocol
|
6
|
+
# @api private
|
7
|
+
module Tile
|
8
|
+
class Tile < Payload
|
9
|
+
endian :little
|
10
|
+
|
11
|
+
# 55 bytes
|
12
|
+
int16 :accel_meas_x # Gravity measurements for determining orientation
|
13
|
+
int16 :accel_meas_y # Gravity measurements for determining orientation
|
14
|
+
int16 :accel_meas_z # Gravity measurements for determining orientation
|
15
|
+
int16 :reserved_0 #
|
16
|
+
float :user_x # Position of the tile relative to the chain
|
17
|
+
float :user_y # Position of the tile relative to the chain
|
18
|
+
uint8 :width # Number of pixels that are on each axis of the tile
|
19
|
+
uint8 :height # Number of pixels that are on each axis of the tile
|
20
|
+
uint8 :reserved_1 #
|
21
|
+
uint32 :device_version_vendor # Same as in Device::StateVersion
|
22
|
+
uint32 :device_version_product # Same as in Device::StateVersion
|
23
|
+
uint32 :device_version_version # Same as in Device::StateVersion
|
24
|
+
uint64 :firmware_build # Same as in Device::StateHostFirmware
|
25
|
+
uint64 :reserved_2 #
|
26
|
+
uint16 :firmware_version_minor # Same as in Device::StateHostFirmware
|
27
|
+
uint16 :firmware_version_major # Same as in Device::StateHostFirmware
|
28
|
+
uint32 :reserved_3 #
|
29
|
+
end
|
30
|
+
|
31
|
+
class GetDeviceChain < Payload
|
32
|
+
endian :little
|
33
|
+
end
|
34
|
+
|
35
|
+
class StateDeviceChain < Payload
|
36
|
+
endian :little
|
37
|
+
|
38
|
+
uint8 :start_index
|
39
|
+
array :tile_devices, :initial_length => 5 do
|
40
|
+
tile
|
41
|
+
end
|
42
|
+
uint8 :total_count
|
43
|
+
end
|
44
|
+
|
45
|
+
# Read this before using: https://lan.developer.lifx.com/v2.0/docs/tile-control
|
46
|
+
class SetUserPosition < Payload
|
47
|
+
endian :little
|
48
|
+
|
49
|
+
uint8 :tile_index
|
50
|
+
uint16 :reserved
|
51
|
+
float :user_x
|
52
|
+
float :user_y
|
53
|
+
end
|
54
|
+
|
55
|
+
class GetTileState64 < Payload
|
56
|
+
endian :little
|
57
|
+
|
58
|
+
uint8 :tile_start_index
|
59
|
+
uint8 :tile_length
|
60
|
+
uint8 :reserved
|
61
|
+
uint8 :x
|
62
|
+
uint8 :y
|
63
|
+
uint8 :width
|
64
|
+
end
|
65
|
+
|
66
|
+
class StateTileState64 < Payload
|
67
|
+
endian :little
|
68
|
+
|
69
|
+
uint8 :tile_index
|
70
|
+
uint8 :reserved
|
71
|
+
uint8 :x
|
72
|
+
uint8 :y
|
73
|
+
uint8 :width
|
74
|
+
array :colors, :initial_length => 64 do
|
75
|
+
hsbk
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class SetTileState64 < Payload
|
80
|
+
endian :little
|
81
|
+
|
82
|
+
uint8 :tile_start_index
|
83
|
+
uint8 :tile_length
|
84
|
+
uint8 :reserved
|
85
|
+
uint8 :x
|
86
|
+
uint8 :y
|
87
|
+
uint8 :width
|
88
|
+
uint32 :duration
|
89
|
+
array :colors, :initial_length => 64 do
|
90
|
+
hsbk
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -99,106 +99,24 @@ module LIFX
|
|
99
99
|
402 => Sensor::StateAmbientLight,
|
100
100
|
403 => Sensor::GetDimmerVoltage,
|
101
101
|
404 => Sensor::StateDimmerVoltage,
|
102
|
-
}
|
103
102
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
Device::SetTime => 5,
|
112
|
-
Device::StateTime => 6,
|
113
|
-
# Device::GetResetSwitch => 7,
|
114
|
-
# Device::StateResetSwitch => 8,
|
115
|
-
# Device::GetMeshInfo => 12,
|
116
|
-
# Device::StateMeshInfo => 13,
|
117
|
-
# Device::GetMeshFirmware => 14,
|
118
|
-
# Device::StateMeshFirmware => 15,
|
119
|
-
Device::GetHostInfo => 12,
|
120
|
-
Device::StateHostInfo => 13,
|
121
|
-
Device::GetHostFirmware => 14,
|
122
|
-
Device::StateHostFirmware => 15,
|
123
|
-
Device::GetWifiInfo => 16,
|
124
|
-
Device::StateWifiInfo => 17,
|
125
|
-
Device::GetWifiFirmware => 18,
|
126
|
-
Device::StateWifiFirmware => 19,
|
127
|
-
Device::GetPower => 20,
|
128
|
-
Device::SetPower => 21,
|
129
|
-
Device::StatePower => 22,
|
130
|
-
Device::GetLabel => 23,
|
131
|
-
Device::SetLabel => 24,
|
132
|
-
Device::StateLabel => 25,
|
133
|
-
Device::GetTags => 26,
|
134
|
-
Device::SetTags => 27,
|
135
|
-
Device::StateTags => 28,
|
136
|
-
Device::GetTagLabels => 29,
|
137
|
-
Device::SetTagLabels => 30,
|
138
|
-
Device::StateTagLabels => 31,
|
139
|
-
Device::GetVersion => 32,
|
140
|
-
Device::StateVersion => 33,
|
141
|
-
Device::GetInfo => 34,
|
142
|
-
Device::StateInfo => 35,
|
143
|
-
# Device::GetMcuRailVoltage => 36,
|
144
|
-
# Device::StateMcuRailVoltage => 37,
|
145
|
-
# Device::Reboot => 38,
|
146
|
-
Device::SetReboot => 38,
|
147
|
-
Device::StateReboot => 43,
|
148
|
-
Device::Acknowledgement => 45,
|
149
|
-
Device::SetFactoryReset => 46,
|
150
|
-
Device::StateFactoryReset => 47,
|
151
|
-
Device::GetLocation => 48,
|
152
|
-
Device::SetLocation => 49,
|
153
|
-
Device::StateLocation => 50,
|
154
|
-
Device::GetGroup => 51,
|
155
|
-
Device::SetGroup => 52,
|
156
|
-
Device::StateGroup => 53,
|
157
|
-
Device::GetOwner => 54,
|
158
|
-
Device::SetOwner => 55,
|
159
|
-
Device::StateOwner => 56,
|
160
|
-
Device::EchoRequest => 58,
|
161
|
-
Device::EchoResponse => 59,
|
103
|
+
510 => MultiZone::SetExtendedColorZones,
|
104
|
+
511 => MultiZone::GetExtendedColorZones,
|
105
|
+
512 => MultiZone::StateExtendedColorZones,
|
106
|
+
501 => MultiZone::SetColorZones,
|
107
|
+
502 => MultiZone::GetColorZones,
|
108
|
+
503 => MultiZone::StateZone,
|
109
|
+
506 => MultiZone::StateMultiZone,
|
162
110
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
Light::State => 107,
|
171
|
-
# Light::GetRailVoltage => 108,
|
172
|
-
# Light::StateRailVoltage => 109,
|
173
|
-
Light::GetTemperature => 110,
|
174
|
-
Light::StateTemperature => 111,
|
175
|
-
Light::GetPower => 116,
|
176
|
-
Light::SetPower => 117,
|
177
|
-
Light::StatePower => 118,
|
111
|
+
701 => Tile::GetDeviceChain,
|
112
|
+
702 => Tile::StateDeviceChain,
|
113
|
+
703 => Tile::SetUserPosition,
|
114
|
+
707 => Tile::GetTileState64,
|
115
|
+
711 => Tile::StateTileState64,
|
116
|
+
715 => Tile::SetTileState64,
|
117
|
+
}.freeze
|
178
118
|
|
179
|
-
|
180
|
-
Wan::ConnectKey => 202,
|
181
|
-
Wan::StateConnect => 203,
|
182
|
-
Wan::Sub => 204,
|
183
|
-
Wan::Unsub => 205,
|
184
|
-
Wan::StateSub => 206,
|
185
|
-
|
186
|
-
Wifi::Get => 301,
|
187
|
-
Wifi::Set => 302,
|
188
|
-
Wifi::State => 303,
|
189
|
-
# Wifi::GetAccessPoint => 304,
|
190
|
-
Wifi::GetAccessPoints => 304,
|
191
|
-
Wifi::SetAccessPoint => 305,
|
192
|
-
# Wifi::StateAccessPoint => 306,
|
193
|
-
Wifi::StateAccessPoints => 306,
|
194
|
-
Wifi::GetAccessPoint => 307,
|
195
|
-
Wifi::StateAccessPoint => 308,
|
196
|
-
|
197
|
-
Sensor::GetAmbientLight => 401,
|
198
|
-
Sensor::StateAmbientLight => 402,
|
199
|
-
Sensor::GetDimmerVoltage => 403,
|
200
|
-
Sensor::StateDimmerVoltage => 404,
|
201
|
-
}
|
119
|
+
CLASS_TO_TYPE_ID = TYPE_ID_TO_CLASS.invert.freeze
|
202
120
|
end
|
203
121
|
end
|
204
122
|
end
|
@@ -50,7 +50,7 @@ module LIFX
|
|
50
50
|
reader.bind(ip, port)
|
51
51
|
loop do
|
52
52
|
begin
|
53
|
-
bytes, (_, _, ip, _) = reader.recvfrom(
|
53
|
+
bytes, (_, _, ip, _) = reader.recvfrom(1280)
|
54
54
|
logger.debug("<- #{bytes.each_byte.map { |b| b.to_s(16).rjust(2, '0') }.join}")
|
55
55
|
message = Message.unpack(bytes)
|
56
56
|
logger.debug("<- Incoming message: #{message}")
|
data/lib/lifx/lan/version.rb
CHANGED
data/lib/lifx-lan.rb
CHANGED
@@ -10,7 +10,7 @@ require "lifx/lan/logging"
|
|
10
10
|
require "lifx/lan/thread"
|
11
11
|
|
12
12
|
require "lifx/lan/protocol/payload"
|
13
|
-
%w(device light sensor wan wifi message).each { |f| require "lifx/lan/protocol/#{f}" }
|
13
|
+
%w(device light sensor wan wifi message multi_zone tile).each { |f| require "lifx/lan/protocol/#{f}" }
|
14
14
|
require "lifx/lan/protocol/type"
|
15
15
|
require "lifx/lan/message"
|
16
16
|
require "lifx/lan/transport"
|
data/lifx-lan.gemspec
CHANGED
@@ -22,5 +22,5 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency "bindata", "~> 2.0"
|
23
23
|
spec.add_dependency "timers", "~> 1.0"
|
24
24
|
spec.add_dependency "configatron", "~> 3.0"
|
25
|
-
spec.add_development_dependency "bundler", "~>
|
25
|
+
spec.add_development_dependency "bundler", "~> 2"
|
26
26
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -16,7 +16,7 @@ shared_context 'integration', integration: true do
|
|
16
16
|
c.discover! do
|
17
17
|
c.tags.include?('_Test') && c.lights.with_tag('_Test').count > 0
|
18
18
|
end
|
19
|
-
rescue LIFX::Client::DiscoveryTimeout
|
19
|
+
rescue LIFX::LAN::Client::DiscoveryTimeout
|
20
20
|
raise "Could not find any lights with tag _Test in #{c.lights.inspect}"
|
21
21
|
end
|
22
22
|
c
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lifx-lan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jack Chen (chendo), Julian Cheal (juliancheal)
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bindata
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2'
|
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
|
-
version: '
|
68
|
+
version: '2'
|
69
69
|
description: A Ruby gem that allows easy interaction with LIFX devices.
|
70
70
|
email:
|
71
71
|
- julian.cheal+lifx-gem@lifx.co
|
@@ -108,8 +108,10 @@ files:
|
|
108
108
|
- lib/lifx/lan/protocol/light.rb
|
109
109
|
- lib/lifx/lan/protocol/message.rb
|
110
110
|
- lib/lifx/lan/protocol/metadata.rb
|
111
|
+
- lib/lifx/lan/protocol/multi_zone.rb
|
111
112
|
- lib/lifx/lan/protocol/payload.rb
|
112
113
|
- lib/lifx/lan/protocol/sensor.rb
|
114
|
+
- lib/lifx/lan/protocol/tile.rb
|
113
115
|
- lib/lifx/lan/protocol/type.rb
|
114
116
|
- lib/lifx/lan/protocol/wan.rb
|
115
117
|
- lib/lifx/lan/protocol/wifi.rb
|
@@ -149,7 +151,7 @@ homepage: https://github.com/juliancheal/lifx-lan
|
|
149
151
|
licenses:
|
150
152
|
- MIT
|
151
153
|
metadata: {}
|
152
|
-
post_install_message:
|
154
|
+
post_install_message:
|
153
155
|
rdoc_options: []
|
154
156
|
require_paths:
|
155
157
|
- lib
|
@@ -164,9 +166,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
166
|
- !ruby/object:Gem::Version
|
165
167
|
version: '0'
|
166
168
|
requirements: []
|
167
|
-
|
168
|
-
|
169
|
-
signing_key:
|
169
|
+
rubygems_version: 3.3.3
|
170
|
+
signing_key:
|
170
171
|
specification_version: 4
|
171
172
|
summary: A Ruby gem that allows easy interaction with LIFX devices. Handles discovery,
|
172
173
|
rate limiting, tags, gateway connections and provides an object-based API for interacting
|