hap_client 0.0.2 → 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
  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