ewelink 1.2.0 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 21968b7bb562eb3c32f0011a501ea3978fabd5ba3cc50164854e7a544c607f09
4
- data.tar.gz: cdedc7c05271d76f5f38317b3276bae9c24c7380877e97988c0aea9f048d88fa
3
+ metadata.gz: 9f2548dd14bcfce1ce4cacb1a2768687d88e15bb4dae14223cadccd61176ab3d
4
+ data.tar.gz: 995f4281dd22f168ffe90dc2f072209bd25b13487bb171d5dbcc4efc94380811
5
5
  SHA512:
6
- metadata.gz: ddd38e7e100f20ce2a96edcf3e2c3a3ac1c2945c0ad49e93aeeb3ecf943d08db03756afb4847c28c55a7601f952a13abe1034858f66ba46ec8e6359523a2b696
7
- data.tar.gz: fb913f0ae36bf7f72bb27c8af1e863deb55b8309f23a79dc799e677c2f5706671a7a7b2efdff1ad8a7bfeec46c6ffc23774564738a12ad4dc20ebf1f2f1fd2f8
6
+ metadata.gz: 74821997ef9c625b2506ebda9229ddac0605f7e4dda4ac836c60974fa6d17a2ebcb9cfd306947c60d958409e5277b6d2ebe1189effef32f91730bfa0be2a9883
7
+ data.tar.gz: 0d1999216c2006a5f70102190196a9c890ef9ab0c9aa6464402f8c843a51c8211852c560e62778d901eb91bf19f331f1008dd500b998cb59daf6ebe72477e5b1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.0
1
+ 1.3.0
@@ -36,7 +36,7 @@ module Ewelink
36
36
  'ts' => Time.now.to_i,
37
37
  'version' => VERSION,
38
38
  }
39
- http_request(:post, '/api/user/device/status', body: JSON.generate(params), headers: authentication_headers)
39
+ rest_request(:post, '/api/user/device/status', body: JSON.generate(params), headers: authentication_headers)
40
40
  true
41
41
  end
42
42
  end
@@ -90,7 +90,7 @@ module Ewelink
90
90
  'ts' => Time.now.to_i,
91
91
  'version' => VERSION,
92
92
  }
93
- response = http_request(:get, '/api/user/device/status', headers: authentication_headers, query: params)
93
+ response = rest_request(:get, '/api/user/device/status', headers: authentication_headers, query: params)
94
94
  response['params']['switch'] == 'on'
95
95
  end
96
96
 
@@ -129,7 +129,7 @@ module Ewelink
129
129
  'ts' => Time.now.to_i,
130
130
  'version' => VERSION,
131
131
  }
132
- http_request(:post, '/api/user/device/status', body: JSON.generate(params), headers: authentication_headers)
132
+ rest_request(:post, '/api/user/device/status', body: JSON.generate(params), headers: authentication_headers)
133
133
  true
134
134
  end
135
135
 
@@ -156,7 +156,7 @@ module Ewelink
156
156
  params['phoneNumber'] = phone_number
157
157
  end
158
158
  body = JSON.generate(params)
159
- response = http_request(:post, '/api/user/login', { body: body, headers: { 'Authorization' => "Sign #{Base64.encode64(OpenSSL::HMAC.digest('SHA256', APP_SECRET, body))}" } })
159
+ response = rest_request(:post, '/api/user/login', { body: body, headers: { 'Authorization' => "Sign #{Base64.encode64(OpenSSL::HMAC.digest('SHA256', APP_SECRET, body))}" } })
160
160
  raise(Error.new('Authentication token not found')) if response['at'].blank?
161
161
  response['at'].tap { Ewelink.logger.debug(self.class.name) { 'Authentication token found' } }
162
162
  end
@@ -173,7 +173,7 @@ module Ewelink
173
173
  'ts' => Time.now.to_i,
174
174
  'version' => VERSION,
175
175
  }
176
- response = http_request(:get, '/api/user/device', headers: authentication_headers, query: params)
176
+ response = rest_request(:get, '/api/user/device', headers: authentication_headers, query: params)
177
177
  response['devicelist'].tap { |devices| Ewelink.logger.debug(self.class.name) { "Found #{devices.size} device(s)" } }
178
178
  end
179
179
  end
@@ -195,7 +195,7 @@ module Ewelink
195
195
  @region ||= DEFAULT_REGION
196
196
  end
197
197
 
198
- def http_request(method, path, options = {})
198
+ def rest_request(method, path, options = {})
199
199
  url = "#{URL.gsub('#{region}', region)}#{path}"
200
200
  method = method.to_s.upcase
201
201
  headers = (options[:headers] || {}).reverse_merge('Content-Type' => 'application/json')
@@ -205,7 +205,7 @@ module Ewelink
205
205
  if response['error'] == 301 && response['region'].present?
206
206
  @region = response['region']
207
207
  Ewelink.logger.debug(self.class.name) { "Switched to region #{region.inspect}" }
208
- return http_request(method, path, options)
208
+ return rest_request(method, path, options)
209
209
  end
210
210
  remove_instance_variable(:@authentication_token) if instance_variable_defined?(:@authentication_token) && [401, 403].include?(response['error'])
211
211
  raise(Error.new("#{method} #{url}: #{response['error']} #{response['msg']}".strip)) if response['error'].present? && response['error'] != 0
@@ -9,13 +9,14 @@ module Ewelink
9
9
  options[:turn_switches_on_uuids].each { |uuid| api.turn_switch!(uuid, :on) }
10
10
  options[:turn_switches_off_uuids].each { |uuid| api.turn_switch!(uuid, :off) }
11
11
  options[:press_rf_bridge_buttons_uuids].each { |uuid| api.press_rf_bridge_button!(uuid) }
12
+ puts(JSON.pretty_generate(options[:switch_status_uuids].map { |uuid| [uuid, api.switch_on?(uuid) ? 'on' : 'off'] }.to_h))
12
13
  end
13
14
 
14
15
  private
15
16
 
16
17
  def options
17
18
  @options ||= begin
18
- options = { press_rf_bridge_buttons_uuids: [], turn_switches_off_uuids: [], turn_switches_on_uuids: [] }
19
+ options = { press_rf_bridge_buttons_uuids: [], turn_switches_off_uuids: [], turn_switches_on_uuids: [], switch_status_uuids: [] }
19
20
  parser = OptionParser.new do |opts|
20
21
  opts.banner = 'Manage eWeLink smart home devices'
21
22
  opts.version = File.read(File.expand_path('../../VERSION', __dir__)).strip
@@ -46,6 +47,9 @@ module Ewelink
46
47
  opts.on('--press-rf-bridge-button BUTTON_UUID', 'Press RF 433MHz bridge button with specified UUID') do |uuid|
47
48
  options[:press_rf_bridge_buttons_uuids] << uuid
48
49
  end
50
+ opts.on('--switch-status SWITCH_UUID', 'Displays switch status of specified UUID') do |uuid|
51
+ options[:switch_status_uuids] << uuid
52
+ end
49
53
  opts.on('-v', '--verbose', 'Verbose mode') do
50
54
  Ewelink.logger.level = :debug
51
55
  end
@@ -61,7 +65,7 @@ module Ewelink
61
65
  STDERR.puts(parser.summarize)
62
66
  exit(1)
63
67
  end
64
- if [:list_switches, :list_rf_bridge_buttons, :turn_switches_on_uuids, :turn_switches_off_uuids, :press_rf_bridge_buttons_uuids].map { |action| options[action] }.all?(&:blank?)
68
+ if [:list_switches, :list_rf_bridge_buttons, :turn_switches_on_uuids, :turn_switches_off_uuids, :press_rf_bridge_buttons_uuids, :switch_status_uuids].map { |action| options[action] }.all?(&:blank?)
65
69
  STDERR.puts('An action must be specified (listing switches, press RF bridge button, etc.)')
66
70
  STDERR.puts(parser.summarize)
67
71
  exit(1)
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: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexis Toulotte
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-18 00:00:00.000000000 Z
11
+ date: 2020-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -109,7 +109,7 @@ homepage: https://github.com/alexistoulotte/ewelink
109
109
  licenses:
110
110
  - MIT
111
111
  metadata: {}
112
- post_install_message:
112
+ post_install_message:
113
113
  rdoc_options: []
114
114
  require_paths:
115
115
  - lib
@@ -125,7 +125,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  requirements: []
127
127
  rubygems_version: 3.0.3
128
- signing_key:
128
+ signing_key:
129
129
  specification_version: 4
130
130
  summary: Manage eWeLink devices
131
131
  test_files: []