ecobee 0.3.1 → 0.3.2
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/lib/ecobee.rb +4 -1
 - data/lib/ecobee/http.rb +2 -0
 - data/lib/ecobee/token.rb +41 -26
 - data/lib/ecobee/version.rb +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 575fc2d302100473a36bfa0f69baa2e526411299
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: e51eddbffa9c14644f42b50c593e364ee29af2f0
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: a69f91e5d21bdefd5bee37ee9ad4972b673a7c8c70a03479f5ac97ef4db283f75f426b11e2898e8d02470ff852f7566755be5f658a6928ce05732d66de54070c
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: c4905da53e6d28f7744008caa34267224f945e3b60396c87190b2b3d8a4af4b1c33267d5514b5b7b816c0cc17fc0a20eb573f8e72f1c101d4fd56182c379fc87
         
     | 
    
        data/lib/ecobee.rb
    CHANGED
    
    | 
         @@ -14,6 +14,8 @@ module Ecobee 
     | 
|
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
              class AuthError < HTTPError ; end
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
      
 17 
     | 
    
         
            +
              class RetryAuthError < AuthError ; end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       17 
19 
     | 
    
         
             
              API_HOST = 'api.ecobee.com'
         
     | 
| 
       18 
20 
     | 
    
         
             
              API_PORT = 443
         
     | 
| 
       19 
21 
     | 
    
         
             
              API_URI_BASE= "https://#{API_HOST}:#{API_PORT}"
         
     | 
| 
         @@ -40,7 +42,8 @@ module Ecobee 
     | 
|
| 
       40 
42 
     | 
    
         | 
| 
       41 
43 
     | 
    
         
             
              MAX_LOG_LENGTH = 1200
         
     | 
| 
       42 
44 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
               
     | 
| 
      
 45 
     | 
    
         
            +
              AUTH_PAD = 30
         
     | 
| 
      
 46 
     | 
    
         
            +
              REFRESH_PAD = 240
         
     | 
| 
       44 
47 
     | 
    
         | 
| 
       45 
48 
     | 
    
         
             
              SCOPES = [:smartWrite, :smartRead]
         
     | 
| 
       46 
49 
     | 
    
         
             
              DEFAULT_SCOPE = SCOPES[1]
         
     | 
    
        data/lib/ecobee/http.rb
    CHANGED
    
    
    
        data/lib/ecobee/token.rb
    CHANGED
    
    | 
         @@ -7,7 +7,6 @@ module Ecobee 
     | 
|
| 
       7 
7 
     | 
    
         
             
                            :callbacks,
         
     | 
| 
       8 
8 
     | 
    
         
             
                            :http,
         
     | 
| 
       9 
9 
     | 
    
         
             
                            :pin,
         
     | 
| 
       10 
     | 
    
         
            -
                            :refresh_token,
         
     | 
| 
       11 
10 
     | 
    
         
             
                            :result,
         
     | 
| 
       12 
11 
     | 
    
         
             
                            :status,
         
     | 
| 
       13 
12 
     | 
    
         
             
                            :scope,
         
     | 
| 
         @@ -51,11 +50,12 @@ module Ecobee 
     | 
|
| 
       51 
50 
     | 
    
         
             
                end
         
     | 
| 
       52 
51 
     | 
    
         | 
| 
       53 
52 
     | 
    
         
             
                def access_token
         
     | 
| 
      
 53 
     | 
    
         
            +
                 config_load if access_token_expired?
         
     | 
| 
       54 
54 
     | 
    
         
             
                 if @access_token
         
     | 
| 
       55 
55 
     | 
    
         
             
                   if access_token_expired?
         
     | 
| 
       56 
56 
     | 
    
         
             
                     if @refresh_token
         
     | 
| 
       57 
57 
     | 
    
         
             
                       @http.log "access_token: refreshing #{@access_token}, #{@access_token_expire}, #{Time.now.to_i}"
         
     | 
| 
       58 
     | 
    
         
            -
                        
     | 
| 
      
 58 
     | 
    
         
            +
                       refresh_access_token_wrapper
         
     | 
| 
       59 
59 
     | 
    
         
             
                     else
         
     | 
| 
       60 
60 
     | 
    
         
             
                       @http.log "access_token: token_register"
         
     | 
| 
       61 
61 
     | 
    
         
             
                       token_register 
         
     | 
| 
         @@ -90,6 +90,7 @@ module Ecobee 
     | 
|
| 
       90 
90 
     | 
    
         
             
                end
         
     | 
| 
       91 
91 
     | 
    
         | 
| 
       92 
92 
     | 
    
         
             
                def config_load
         
     | 
| 
      
 93 
     | 
    
         
            +
                  # TODO: track file mod time & last_read to avoid excessive rereads
         
     | 
| 
       93 
94 
     | 
    
         
             
                  config = config_read_our_section
         
     | 
| 
       94 
95 
     | 
    
         
             
                  if @callbacks[:load].respond_to? :call
         
     | 
| 
       95 
96 
     | 
    
         
             
                    config = @callbacks[:load].call(config)
         
     | 
| 
         @@ -116,34 +117,44 @@ module Ecobee 
     | 
|
| 
       116 
117 
     | 
    
         
             
                  "enter the PIN #{@pin || ''}"
         
     | 
| 
       117 
118 
     | 
    
         
             
                end
         
     | 
| 
       118 
119 
     | 
    
         | 
| 
       119 
     | 
    
         
            -
                def refresh_access_token
         
     | 
| 
      
 120 
     | 
    
         
            +
                def refresh_access_token(retries: 0)
         
     | 
| 
       120 
121 
     | 
    
         
             
                  arg = sprintf("?grant_type=refresh_token&refresh_token=%s&client_id=%s",
         
     | 
| 
       121 
     | 
    
         
            -
                                 
     | 
| 
      
 122 
     | 
    
         
            +
                                refresh_token,
         
     | 
| 
       122 
123 
     | 
    
         
             
                                @app_key)
         
     | 
| 
       123 
124 
     | 
    
         
             
                  result = @http.post(arg: arg,
         
     | 
| 
       124 
125 
     | 
    
         
             
                                      no_auth: true,
         
     | 
| 
       125 
126 
     | 
    
         
             
                                      resource_prefix: 'token',
         
     | 
| 
       126 
127 
     | 
    
         
             
                                      validate_status: false)
         
     | 
| 
       127 
128 
     | 
    
         
             
                  if result.key? 'error'
         
     | 
| 
      
 129 
     | 
    
         
            +
                    if retries > 0 && result['error'] == 'invalid_grant'
         
     | 
| 
      
 130 
     | 
    
         
            +
                      raise Ecobee::RetryAuthError.new
         
     | 
| 
      
 131 
     | 
    
         
            +
                    end
         
     | 
| 
       128 
132 
     | 
    
         
             
                    @access_token, @access_token_expire, @pin, @scope, @refresh_token = nil
         
     | 
| 
       129 
133 
     | 
    
         
             
                    config_save
         
     | 
| 
       130 
     | 
    
         
            -
                    raise Ecobee::AuthError.new(
         
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
                    )
         
     | 
| 
      
 134 
     | 
    
         
            +
                    raise Ecobee::AuthError.new("Result Error: (%s) %s" % [
         
     | 
| 
      
 135 
     | 
    
         
            +
                                                result['error'],
         
     | 
| 
      
 136 
     | 
    
         
            +
                                                result['error_description']])
         
     | 
| 
       134 
137 
     | 
    
         
             
                  else
         
     | 
| 
       135 
     | 
    
         
            -
                     
     | 
| 
       136 
     | 
    
         
            -
                    @access_token_expire = Time.now.to_i + result['expires_in']
         
     | 
| 
       137 
     | 
    
         
            -
                    @pin = nil
         
     | 
| 
       138 
     | 
    
         
            -
                    @refresh_token = result['refresh_token']
         
     | 
| 
       139 
     | 
    
         
            -
                    @scope = result['scope']
         
     | 
| 
       140 
     | 
    
         
            -
                    @token_type = result['token_type']
         
     | 
| 
       141 
     | 
    
         
            -
                    @status = :ready
         
     | 
| 
       142 
     | 
    
         
            -
                    config_save
         
     | 
| 
       143 
     | 
    
         
            -
                    @access_token
         
     | 
| 
      
 138 
     | 
    
         
            +
                    result_load_to_memory result
         
     | 
| 
       144 
139 
     | 
    
         
             
                  end 
         
     | 
| 
       145 
140 
     | 
    
         
             
                end
         
     | 
| 
       146 
141 
     | 
    
         | 
| 
      
 142 
     | 
    
         
            +
                def refresh_access_token_wrapper
         
     | 
| 
      
 143 
     | 
    
         
            +
                  retries = 3
         
     | 
| 
      
 144 
     | 
    
         
            +
                  retries.times do |attempt|
         
     | 
| 
      
 145 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 146 
     | 
    
         
            +
                      refresh_access_token(retries: retries - attempt)
         
     | 
| 
      
 147 
     | 
    
         
            +
                    rescue Ecobee::RetryAuthError.new
         
     | 
| 
      
 148 
     | 
    
         
            +
                      sleep 10
         
     | 
| 
      
 149 
     | 
    
         
            +
                    end
         
     | 
| 
      
 150 
     | 
    
         
            +
                  end
         
     | 
| 
      
 151 
     | 
    
         
            +
                end
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                def refresh_token
         
     | 
| 
      
 154 
     | 
    
         
            +
                  config_load
         
     | 
| 
      
 155 
     | 
    
         
            +
                  @refresh_token
         
     | 
| 
      
 156 
     | 
    
         
            +
                end
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
       147 
158 
     | 
    
         
             
                def register_callback(type, *callback, &block)
         
     | 
| 
       148 
159 
     | 
    
         
             
                  if block_given?
         
     | 
| 
       149 
160 
     | 
    
         
             
                    puts "Registering #{type}"
         
     | 
| 
         @@ -205,18 +216,22 @@ module Ecobee 
     | 
|
| 
       205 
216 
     | 
    
         
             
                      )
         
     | 
| 
       206 
217 
     | 
    
         
             
                    end
         
     | 
| 
       207 
218 
     | 
    
         
             
                  else
         
     | 
| 
       208 
     | 
    
         
            -
                     
     | 
| 
       209 
     | 
    
         
            -
                    @access_token = result['access_token']
         
     | 
| 
       210 
     | 
    
         
            -
                    @token_type = result['token_type']
         
     | 
| 
       211 
     | 
    
         
            -
                    @access_token_expire = Time.now.to_i + result['expires_in']
         
     | 
| 
       212 
     | 
    
         
            -
                    @refresh_token = result['refresh_token']
         
     | 
| 
       213 
     | 
    
         
            -
                    @scope = result['scope']
         
     | 
| 
       214 
     | 
    
         
            -
                    @pin = nil
         
     | 
| 
       215 
     | 
    
         
            -
                    config_save
         
     | 
| 
       216 
     | 
    
         
            -
                    @access_token
         
     | 
| 
      
 219 
     | 
    
         
            +
                    result_load_to_memory result
         
     | 
| 
       217 
220 
     | 
    
         
             
                  end
         
     | 
| 
       218 
221 
     | 
    
         
             
                end
         
     | 
| 
       219 
222 
     | 
    
         | 
| 
      
 223 
     | 
    
         
            +
                def result_load_to_memory(result)
         
     | 
| 
      
 224 
     | 
    
         
            +
                  @status = :ready
         
     | 
| 
      
 225 
     | 
    
         
            +
                  @access_token = result['access_token']
         
     | 
| 
      
 226 
     | 
    
         
            +
                  @access_token_expire = Time.now.to_i + result['expires_in']
         
     | 
| 
      
 227 
     | 
    
         
            +
                  @pin = nil
         
     | 
| 
      
 228 
     | 
    
         
            +
                  @refresh_token = result['refresh_token']
         
     | 
| 
      
 229 
     | 
    
         
            +
                  @scope = result['scope']
         
     | 
| 
      
 230 
     | 
    
         
            +
                  @token_type = result['token_type']
         
     | 
| 
      
 231 
     | 
    
         
            +
                  config_save
         
     | 
| 
      
 232 
     | 
    
         
            +
                  @access_token
         
     | 
| 
      
 233 
     | 
    
         
            +
                end
         
     | 
| 
      
 234 
     | 
    
         
            +
             
     | 
| 
       220 
235 
     | 
    
         
             
                def config_load_to_memory(config)
         
     | 
| 
       221 
236 
     | 
    
         
             
                  @app_key ||= config['app_key']
         
     | 
| 
       222 
237 
     | 
    
         
             
                  if !@access_token
         
     | 
    
        data/lib/ecobee/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: ecobee
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.3. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.3.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Rob Zwissler
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2016-08- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-08-21 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     |