hap_client 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1563b1509e5f1e6f88c06ecdf588fdd43c75dddb82e3b3dbeb1090d4bcc9146b
4
- data.tar.gz: e6968e093e0b00a77e4c046783dfecaa86aeefe2f10a5ecd224000e99d48cb33
3
+ metadata.gz: 06df4fc89f6507b7c23e719dda77142ffaa4d49362af671659f1c4a0308218cc
4
+ data.tar.gz: 5b76e602105df2387c5290420d085bb8dd7d5bc6a0edd4eb38c10540021c9c58
5
5
  SHA512:
6
- metadata.gz: 017ca3ba5512e19e51ddc1031f5f478d1cf40bf564593a06ddc0dded6cc25156ab6c9c2e0d53a38a11956b47118c427c285669767467ee7617faaa6af613c7b5
7
- data.tar.gz: 7ede4a9834f3d7e1fe4f66b2bd3ec9c83b4e9ff332a7fd82e415f3ee89a41e72e77fdb04efda19f73d52edb0b8415cac7c7b0129a85909d9eb93e08fdf3a06f1
6
+ metadata.gz: af58a2db3e43f5a67f14cbd00ab45e96f9daa0ade9112d0f217232d0ba4fb5a0de22d26ec32d8c1c6d3cb8a3ba8b8cc220ecc7a374b0da77e977005f5336d5d1
7
+ data.tar.gz: 961526453a5f82f3b19825c36f6275a742cb782e0975629949aa57805169348dc78d48b9c7fcc081e8cc826af53348cdd84e34033dcf65501fb2984a9a417f4a
@@ -9,6 +9,10 @@ module HAP
9
9
  def receive_data(data)
10
10
  if encryption_ready?
11
11
  data = decrypt(data)
12
+
13
+ if data.start_with?("EVENT/")
14
+ data.sub!("EVENT/","HTTP/")
15
+ end
12
16
  end
13
17
 
14
18
  @parser << data
@@ -4,6 +4,41 @@ module HAP
4
4
  module Request
5
5
  include EncryptionRequest
6
6
 
7
+ def init_request()
8
+ @req_queue = EM::Queue.new
9
+ @res_queue = EM::Queue.new
10
+
11
+ response_work = nil
12
+
13
+ request_work = Proc.new do |req|
14
+ if encryption_ready?
15
+ encrypt(req).each do |r|
16
+ if @socket.nil?
17
+ send_data(r)
18
+ else
19
+ @socket.write(r)
20
+ end
21
+ end
22
+ else
23
+ if @socket.nil?
24
+ send_data(req)
25
+ else
26
+ @socket.write(req)
27
+ end
28
+ end
29
+
30
+ init_parser()
31
+
32
+ @res_queue.pop(&response_work)
33
+ end
34
+
35
+ response_work = Proc.new do |res|
36
+ @req_queue.pop(&request_work)
37
+ end
38
+
39
+ @req_queue.pop(&request_work)
40
+ end
41
+
7
42
  def get(url)
8
43
  request("GET", url)
9
44
  end
@@ -46,23 +81,7 @@ module HAP
46
81
  req << data.to_s
47
82
  end
48
83
 
49
- if encryption_ready?
50
- encrypt(req).each do |r|
51
- if @socket.nil?
52
- send_data(r)
53
- else
54
- @socket.write(r)
55
- end
56
- end
57
- else
58
- if @socket.nil?
59
- send_data(req)
60
- else
61
- @socket.write(req)
62
- end
63
- end
64
-
65
- init_parser()
84
+ @req_queue.push(req)
66
85
  end
67
86
  end
68
87
  end
@@ -1,3 +1,3 @@
1
1
  module HapClient
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
data/lib/hap_client.rb CHANGED
@@ -16,6 +16,9 @@ module HAP
16
16
  @name = "Unknown Client"
17
17
  @mode = :init
18
18
  @values = {}
19
+ @ids = {}
20
+
21
+ init_request()
19
22
  init_log()
20
23
  end
21
24
 
@@ -23,35 +26,39 @@ module HAP
23
26
  info("Set Value #{aid}:#{iid} to #{value}")
24
27
  data = {
25
28
  "characteristics" => [{
26
- "aid" => aid,
27
- "iid" => iid,
28
- "value" => value
29
+ "aid" => aid.to_i,
30
+ "iid" => iid.to_i,
31
+ "value" => value.to_i
29
32
  }]
30
33
  }
31
34
 
32
35
  put("/characteristics", "application/hap+json", JSON.generate(data))
33
36
  end
34
37
 
35
- def subscribe(aid, iid)
36
- info("Subscribe to #{aid} #{iid}")
38
+ def subscribe(&block)
39
+ events = []
40
+ @values.each do |service|
41
+ service[1].each do |val|
42
+ value = val[1]
43
+ if value[:perms].include?("ev")
44
+ info("Subscribe to #{value[:aid]}:#{value[:iid]}")
45
+ events.push({
46
+ :aid => value[:aid],
47
+ :iid => value[:iid],
48
+ :ev => true
49
+ })
50
+ end
51
+ end
52
+ end
53
+
37
54
  data = {
38
- "characteristics" => [{
39
- "aid" => aid,
40
- "iid" => iid,
41
- "ev" => "true"
42
- }]
55
+ :characteristics => events
43
56
  }
44
57
 
45
58
  put("/characteristics", "application/hap+json", JSON.generate(data))
46
- end
47
59
 
48
- def subscribe_to_all()
49
- @values.each do |service|
50
- service.each do |val|
51
- if val[:perms].include?("ev")
52
- subscribe(val[:aid], val[:iid])
53
- end
54
- end
60
+ if block_given?
61
+ @callback = block
55
62
  end
56
63
  end
57
64
 
@@ -64,6 +71,27 @@ module HAP
64
71
  end
65
72
  end
66
73
 
74
+ def get_value(aid, iid)
75
+ @values[aid][iid][:value]
76
+ end
77
+
78
+ def get_type(aid, iid)
79
+ @ids[aid][iid]
80
+ end
81
+
82
+ def get_id(service_id, characteristic_id)
83
+ @services.each do |service|
84
+ if service[:type] == service_id
85
+ service[:characteristics].each do |char|
86
+ if char[:type] == characteristic_id
87
+ return char
88
+ end
89
+ end
90
+ end
91
+ end
92
+ return nil
93
+ end
94
+
67
95
  def to_s
68
96
  @name
69
97
  end
@@ -71,6 +99,8 @@ module HAP
71
99
  private
72
100
 
73
101
  def parse_message(data)
102
+ @res_queue.push(1)
103
+
74
104
  case @mode
75
105
  when :pair_setup
76
106
  pair_setup_parse(data)
@@ -90,19 +120,38 @@ module HAP
90
120
  end
91
121
 
92
122
  def parse_accessories(data)
93
- data = JSON.parse(data, :symbolize_names=>true)
123
+ begin
124
+ data = JSON.parse(data, :symbolize_names=>true)
125
+ rescue JSON::ParserError => e
126
+ error(e.inspect)
127
+ error(data)
128
+ return nil
129
+ end
94
130
 
95
- services = data[:accessories][0][:services]
131
+ if data[:accessories]
132
+ @services = data[:accessories][0][:services]
96
133
 
97
- services.each do |service|
98
- @values[service[:type]] = {}
134
+ @services.each do |service|
135
+ @values[service[:type]] = {}
136
+ @ids[service[:iid]] = {}
99
137
 
100
- parse_characteristics(service)
138
+ parse_characteristics(service)
139
+ end
140
+ elsif data[:characteristics]
141
+ parse_event(data)
142
+ init_parser
101
143
  end
102
144
 
103
145
  return data
104
146
  end
105
147
 
148
+ def parse_event(data)
149
+ val = data[:characteristics]
150
+ val.each do |value|
151
+ on_event(value[:aid], value[:iid], value[:value])
152
+ end
153
+ end
154
+
106
155
  def parse_characteristics(service)
107
156
  service[:characteristics].each do |char|
108
157
  val = char[:value]
@@ -110,9 +159,13 @@ module HAP
110
159
  @values[service[:type]][char[:type]] = {
111
160
  :aid => char[:aid],
112
161
  :iid => char[:iid],
113
- :perms => char[:perms},
162
+ :perms => char[:perms],
114
163
  :value => val
115
164
  }
165
+ @ids[char[:aid]][char[:iid]] = {
166
+ :service => service[:type],
167
+ :characteristic => char[:type]
168
+ }
116
169
 
117
170
  if service[:type] == "3E"
118
171
  case char[:type]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hap_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Bomholtz