class MideaAirCondition::Client
Client
for Midea AC server
Constants
- CLIENT_TYPE
- FORMAT
- LANGUAGE
- SERVER_URL
Attributes
debug[RW]
Public Class Methods
new(email, password, app_key:, app_id: 1017, src: 17)
click to toggle source
# File lib/client.rb, line 18 def initialize(email, password, app_key:, app_id: 1017, src: 17) @app_id = app_id @src = src @email = email @password = password @app_key = app_key @debug = false @security = Security.new(app_key: @app_key) @current = nil end
Public Instance Methods
appliance_list()
click to toggle source
# File lib/client.rb, line 43 def appliance_list response = api_request( 'appliance/list/get', homegroupId: default_home['id'] ) response['list'] end
appliance_transparent_send(appliance_id, data)
click to toggle source
# File lib/client.rb, line 51 def appliance_transparent_send(appliance_id, data) response = api_request( 'appliance/transparent/send', order: encode(@security.transcode(data).join(',')), funId: '0000', applianceId: appliance_id ) response = decode(response['reply']).split(',').map { |p| p.to_i & 0xff } response end
login()
click to toggle source
# File lib/client.rb, line 31 def login login_id = user_login_id_get['loginId'] encrypted_password = @security.encrypt_password(@password, login_id) @current = api_request( 'user/login', loginAccount: @email, password: encrypted_password ) @security.access_token = @current['accessToken'] end
new_packet_builder()
click to toggle source
# File lib/client.rb, line 64 def new_packet_builder PacketBuilder.new(@security) end
Private Instance Methods
api_home_list()
click to toggle source
# File lib/client.rb, line 118 def api_home_list api_request('homegroup/list/get') end
api_request(endpoint, **args)
click to toggle source
# File lib/client.rb, line 78 def api_request(endpoint, **args) args = { appId: @app_id, format: FORMAT, clientType: CLIENT_TYPE, language: LANGUAGE, src: @src, stamp: Time.now.strftime('%Y%m%d%H%M%S') }.merge(args) args[:sessionId] = @current['sessionId'] unless @current.nil? path = "/#{SERVER_URL.split('/').last}/#{endpoint}" args[:sign] = @security.sign(path, args) result = send_api_request(URI("#{SERVER_URL}/#{endpoint}"), args) result['result'] end
decode(data)
click to toggle source
# File lib/client.rb, line 74 def decode(data) @security.aes_decrypt(data, @security.data_key) end
default_home()
click to toggle source
# File lib/client.rb, line 112 def default_home @default_home ||= api_home_list['list'].select do |h| h['isDefault'].to_i == 1 end.first end
encode(data)
click to toggle source
# File lib/client.rb, line 70 def encode(data) @security.aes_encrypt(data, @security.data_key) end
log(data)
click to toggle source
# File lib/client.rb, line 122 def log(data) p data if @debug end
send_api_request(uri, args)
click to toggle source
# File lib/client.rb, line 95 def send_api_request(uri, args) Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http| request = Net::HTTP::Post.new(uri) request.set_form_data(args) result = JSON.parse(http.request(request).body) raise result['msg'] unless result['errorCode'] == '0' log(result['result']) result end end
user_login_id_get()
click to toggle source
# File lib/client.rb, line 108 def user_login_id_get api_request('user/login/id/get', loginAccount: @email) end