hiveline 0.0.1 → 0.0.3

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
  SHA1:
3
- metadata.gz: e74826756263ed6a1cfe2f288bd0b2f4bce40f6e
4
- data.tar.gz: 9cae527e6b04b298180bc4540a0bf0f7a32dc402
3
+ metadata.gz: c059e7ee5eddcd56423655cf5845b6bcc27c02a5
4
+ data.tar.gz: 325dbd20157ab085de429d24fe17ef49abca0db8
5
5
  SHA512:
6
- metadata.gz: b0c61bc41413c44da0380cd8b86dc4ce0ad56afe3771b1c9d4949caa50bb1525c87caddff999fc50502b4bdc31367b5ffa0d07b25c2386c6e8cdadedc6279b71
7
- data.tar.gz: c296db8126ca29c25f70bb74146f935073c26914f9b741d8bef475614a70dec4789d49320bb34e70d0393c11d494f4dff67d2a674be8371407d2e9176b6b97a3
6
+ metadata.gz: a7feb248a4d80217044dc2aaa86ff6e2fa817807b71dae85a48549f6f736f7a75eabaa96f5019cab4c98fddb7417a907d42be4c1d13234f19ff99b78f5e7ee15
7
+ data.tar.gz: 58bca2c3519cf2ead934391615126d29320922110d2ba02d8120152d15d7d27ff8fb98b5818c82a14baeaff816cbd952444d7c90e17be35ff0835e8c910379db
data/README.md CHANGED
@@ -28,8 +28,20 @@ $ hiveline -u <email> -p <password>
28
28
 
29
29
  ## Use
30
30
 
31
- Set the temperature to 20C
31
+ Get temperature
32
32
 
33
33
  ```bash
34
- $ hiveline 20
34
+ $ hiveline
35
+
36
+ Inside Temperature: 19.9°C
37
+ Weather in London: Cloudy With Light Rain (2.8°C)
38
+ ```
39
+
40
+ Set temperature
41
+
42
+ ```bash
43
+ $ hiveline 19 # Set temperature to 19°C
44
+
45
+ Setting temperature to 19°C
46
+ Successfully updated temperature. Set to 19°C
35
47
  ```
@@ -31,19 +31,43 @@ if password.nil?
31
31
  exit false
32
32
  end
33
33
 
34
- temp = ARGV.last
34
+ client = Hiveline::Client.new(username, password)
35
+
36
+ command = ARGV.last
37
+
38
+ def unknown_error
39
+ print "Something went wrong. Not sure what though because the API is not documented... maybe get up and go check your thermostat?\n"
40
+ end
35
41
 
36
42
  def numeric?(number)
37
43
  return true if number =~ /^\d+$/
38
44
  true if Float(number) rescue false
39
45
  end
40
46
 
41
- if temp.nil? or !numeric?(temp)
42
- print "Please supply a temperature. E.g. hiveline 21\n"
43
- exit false
44
- else
45
- temp = temp.to_i
47
+ def set_temperature(client, temp)
48
+ print "Setting temperature to #{temp}°C\n"
49
+ temperature = client.set_temperature(temp)
50
+ unless temperature.nil?
51
+ print "Successfully updated temperature. Set to #{temperature}°C\n"
52
+ else
53
+ unknown_error
54
+ end
46
55
  end
47
56
 
48
- client = Hiveline::Client.new(username, password)
49
- client.set_temperature temp
57
+ def lookup_temperature(client)
58
+ print "Retrieving temperature information\n"
59
+ environment = client.get_temperature
60
+ unless environment.nil?
61
+ print "Inside Temperature: #{environment["inside"]}°C\n"
62
+ print "Weather in #{environment["city"]}: #{environment['weather'].split('_').map{|e| e.capitalize}.join(" ")} (#{environment["outside"]}°C)\n"
63
+ else
64
+ unknown_error
65
+ end
66
+ end
67
+
68
+ if numeric?(command)
69
+ set_temperature(client, command)
70
+ exit
71
+ end
72
+
73
+ lookup_temperature(client)
@@ -1,54 +1,64 @@
1
+ require 'hiveline/version'
1
2
  require 'httparty'
2
3
  require 'json'
3
- require 'hiveline/version'
4
4
 
5
5
  module Hiveline
6
6
  class Client
7
- attr_accessor :username, :password, :hive_id
7
+ include HTTParty
8
+ attr_accessor :username, :password, :session
8
9
 
9
10
  def initialize(username, password)
10
11
  @username = username
11
12
  @password = password
12
- @id = retrieve_session
13
+ end
14
+
15
+ def session
16
+ @session ||= retrieve_session
13
17
  end
14
18
 
15
19
  def set_temperature(temp)
16
- print "Setting temperature to #{temp}C...\n"
17
20
  heating_url = "https://my.hivehome.com/heating/target"
18
- response = HTTParty.put(heating_url, {
21
+ id = self.session
22
+ response = self.class.put(heating_url, {
19
23
  body: {
20
24
  id:1,
21
25
  target:temp
22
26
  },
23
27
  headers: {
24
- "Cookie" => "hsid=#{@id}"
28
+ "Cookie" => "hsid=#{id}"
25
29
  },
26
30
  follow_redirects: false
27
31
  })
28
32
 
29
33
  if response.code == 200
30
- target = JSON.parse(response.body)["target"]
31
- print "Successfully updated temperature. Set to #{target}C\n"
34
+ JSON.parse(response.body)["target"]
32
35
  else
33
- print "Something went wrong. Not sure what, maybe get up and go check your thermostat?\n"
36
+ nil
34
37
  end
35
- response
36
38
  end
37
39
 
38
- private
39
-
40
- def login
41
- print "Authenticating credentials...\n"
42
- login_url = "https://my.hivehome.com/login"
43
- HTTParty.post(login_url, {
44
- body: {
45
- username: @username,
46
- password: @password
47
- },
40
+ def get_temperature
41
+ weather_url = "https://my.hivehome.com/weather"
42
+ response = self.class.get(weather_url, {
43
+ headers: {
44
+ "Cookie" => "hsid=#{self.session}",
45
+ "Content-Type" => "application/json"
46
+ },
48
47
  follow_redirects: false
49
48
  })
49
+ if response.code == 200
50
+ JSON.parse(response.body)
51
+ else
52
+ nil
53
+ end
50
54
  end
51
55
 
56
+ private
57
+
58
+ def retrieve_session
59
+ extract_session_id login
60
+ end
61
+
52
62
  def extract_session_id(response)
53
63
  id_attribute_regex = /^hsid=/
54
64
  set_cookie_header = response.headers["set-cookie"]
@@ -60,8 +70,15 @@ module Hiveline
60
70
  .gsub(id_attribute_regex, "")
61
71
  end
62
72
 
63
- def retrieve_session
64
- extract_session_id login
73
+ def login
74
+ login_url = "https://my.hivehome.com/login"
75
+ self.class.post(login_url, {
76
+ body: {
77
+ username: @username,
78
+ password: @password
79
+ },
80
+ follow_redirects: false
81
+ })
65
82
  end
66
83
  end
67
84
  end
@@ -1,3 +1,3 @@
1
1
  module Hiveline
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiveline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Blanchard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-29 00:00:00.000000000 Z
11
+ date: 2015-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.13.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.13.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.7'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.7'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
55
  description: The Hive API was reversed engineered via the Hive thermostat website
@@ -80,17 +80,17 @@ require_paths:
80
80
  - lib
81
81
  required_ruby_version: !ruby/object:Gem::Requirement
82
82
  requirements:
83
- - - ">="
83
+ - - '>='
84
84
  - !ruby/object:Gem::Version
85
85
  version: '0'
86
86
  required_rubygems_version: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - ">="
88
+ - - '>='
89
89
  - !ruby/object:Gem::Version
90
90
  version: '0'
91
91
  requirements: []
92
92
  rubyforge_project:
93
- rubygems_version: 2.2.2
93
+ rubygems_version: 2.4.3
94
94
  signing_key:
95
95
  specification_version: 4
96
96
  summary: A small Ruby script to change your Hive thermostat temperature through your