ewelink 2.2.2 → 2.3.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 +4 -4
- data/VERSION +1 -1
- data/lib/ewelink/api.rb +36 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d17e40d48a819572e83369500edbe6295a991626c3333ce4ff0765876f25ed51
|
4
|
+
data.tar.gz: 9caca646a1355592a276e5e4595ab486e407ecaecb105a9e7134028ecab4cb42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e8a2717428e2b57c7a30a7d4e9a1658032b1155a2f9bd2ba9b8b0cb2309748d248f24d66babfbe2212af9d8096e6be18ebdc3c60d799654571526edff1204d5
|
7
|
+
data.tar.gz: 9b9e517a3c8629d6a69b8195cab906d12f8f4d4231ab22311083deb75e5db97b02ec9c13a8509710017bb17cfcf1750c46919f52b393b73a0d453c423f120153
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.3.0
|
data/lib/ewelink/api.rb
CHANGED
@@ -11,6 +11,7 @@ module Ewelink
|
|
11
11
|
URL = 'https://#{region}-api.coolkit.cc:8080'
|
12
12
|
UUID_NAMESPACE = 'e25750fb-3710-41af-b831-23224f4dd609';
|
13
13
|
VERSION = 8
|
14
|
+
WEB_SOCKET_CHECK_AUTHENTICATION_TIMEOUT = 30.seconds
|
14
15
|
WEB_SOCKET_PING_TOLERANCE_FACTOR = 1.5
|
15
16
|
SWITCH_STATUS_CHANGE_CHECK_TIMEOUT = 2.seconds
|
16
17
|
WEB_SOCKET_WAIT_INTERVAL = 0.2.seconds
|
@@ -24,7 +25,10 @@ module Ewelink
|
|
24
25
|
@phone_number = phone_number.presence.try(:strip)
|
25
26
|
@web_socket_authenticated_api_keys = Set.new
|
26
27
|
@web_socket_switches_statuses = {}
|
27
|
-
|
28
|
+
|
29
|
+
raise(Error.new(':email or :phone_number must be specified')) if email.blank? && phone_number.blank?
|
30
|
+
|
31
|
+
start_web_socket_authentication_check_thread
|
28
32
|
end
|
29
33
|
|
30
34
|
def press_rf_bridge_button!(uuid)
|
@@ -301,16 +305,30 @@ module Ewelink
|
|
301
305
|
end
|
302
306
|
|
303
307
|
def send_to_web_socket(message)
|
304
|
-
if web_socket_outdated_ping?
|
305
|
-
Ewelink.logger.warn(self.class.name) { 'WebSocket ping is outdated' }
|
306
|
-
reload
|
307
|
-
end
|
308
308
|
web_socket.send(message)
|
309
309
|
rescue => e
|
310
310
|
reload
|
311
311
|
raise Error.new(e)
|
312
312
|
end
|
313
313
|
|
314
|
+
def start_web_socket_authentication_check_thread
|
315
|
+
raise Error.new('WebSocket authentication check must only be started once') if @web_socket_authentication_check_thread.present?
|
316
|
+
|
317
|
+
@web_socket_authentication_check_thread = Thread.new do
|
318
|
+
loop do
|
319
|
+
Ewelink.logger.debug(self.class.name) { 'Checking if WebSocket is authenticated' }
|
320
|
+
begin
|
321
|
+
web_socket_wait_for(-> { web_socket_authenticated? }, initialize_web_socket: true) do
|
322
|
+
Ewelink.logger.debug(self.class.name) { 'WebSocket is authenticated' }
|
323
|
+
end
|
324
|
+
rescue => e
|
325
|
+
Ewelink.logger.error(self.class.name) { e }
|
326
|
+
end
|
327
|
+
sleep(WEB_SOCKET_CHECK_AUTHENTICATION_TIMEOUT)
|
328
|
+
end
|
329
|
+
end
|
330
|
+
end
|
331
|
+
|
314
332
|
def start_web_socket_ping_thread(interval)
|
315
333
|
@last_web_socket_pong_at = Time.now
|
316
334
|
@web_socket_ping_interval = interval
|
@@ -330,14 +348,24 @@ module Ewelink
|
|
330
348
|
end
|
331
349
|
|
332
350
|
def web_socket
|
351
|
+
if web_socket_outdated_ping?
|
352
|
+
Ewelink.logger.warn(self.class.name) { 'WebSocket ping is outdated' }
|
353
|
+
reload
|
354
|
+
end
|
355
|
+
|
333
356
|
synchronize(:web_socket) do
|
334
357
|
next @web_socket if @web_socket
|
335
358
|
|
359
|
+
# Initializes caches before opening WebSocket: important in order to
|
360
|
+
# NOT cumulate requests Timeouts from #web_socket_wait_for.
|
361
|
+
api_keys
|
362
|
+
web_socket_url
|
363
|
+
|
364
|
+
Ewelink.logger.debug(self.class.name) { "Opening WebSocket to #{web_socket_url.inspect}" }
|
365
|
+
|
336
366
|
@web_socket_thread = Thread.new do
|
337
367
|
EventMachine.run do
|
338
|
-
|
339
|
-
|
340
|
-
@web_socket = Faye::WebSocket::Client.new('wss://as-pconnect3.coolkit.cc:8080/api/ws')
|
368
|
+
@web_socket = Faye::WebSocket::Client.new(web_socket_url)
|
341
369
|
|
342
370
|
@web_socket.on(:close) do |event|
|
343
371
|
Ewelink.logger.debug(self.class.name) { 'WebSocket closed' }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ewelink
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexis Toulotte
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|