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 +4 -4
- data/lib/hap_client/parser.rb +4 -0
- data/lib/hap_client/request.rb +36 -17
- data/lib/hap_client/version.rb +1 -1
- data/lib/hap_client.rb +77 -24
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06df4fc89f6507b7c23e719dda77142ffaa4d49362af671659f1c4a0308218cc
|
4
|
+
data.tar.gz: 5b76e602105df2387c5290420d085bb8dd7d5bc6a0edd4eb38c10540021c9c58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af58a2db3e43f5a67f14cbd00ab45e96f9daa0ade9112d0f217232d0ba4fb5a0de22d26ec32d8c1c6d3cb8a3ba8b8cc220ecc7a374b0da77e977005f5336d5d1
|
7
|
+
data.tar.gz: 961526453a5f82f3b19825c36f6275a742cb782e0975629949aa57805169348dc78d48b9c7fcc081e8cc826af53348cdd84e34033dcf65501fb2984a9a417f4a
|
data/lib/hap_client/parser.rb
CHANGED
data/lib/hap_client/request.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/hap_client/version.rb
CHANGED
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(
|
36
|
-
|
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
|
-
|
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
|
-
|
49
|
-
|
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
|
-
|
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
|
-
|
131
|
+
if data[:accessories]
|
132
|
+
@services = data[:accessories][0][:services]
|
96
133
|
|
97
|
-
|
98
|
-
|
134
|
+
@services.each do |service|
|
135
|
+
@values[service[:type]] = {}
|
136
|
+
@ids[service[:iid]] = {}
|
99
137
|
|
100
|
-
|
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]
|