cassia-ruby 1.0.0
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 +7 -0
- data/.circleci/config.yml +50 -0
- data/.env.sample +3 -0
- data/.gitignore +12 -0
- data/.ruby-version +1 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +79 -0
- data/LICENSE.txt +21 -0
- data/README.md +377 -0
- data/Rakefile +2 -0
- data/bin/console +17 -0
- data/bin/setup +8 -0
- data/cassia-ruby.gemspec +38 -0
- data/lib/cassia/access_controller.rb +111 -0
- data/lib/cassia/api.rb +39 -0
- data/lib/cassia/characteristic.rb +14 -0
- data/lib/cassia/configuration.rb +9 -0
- data/lib/cassia/default_logger.rb +11 -0
- data/lib/cassia/device.rb +14 -0
- data/lib/cassia/requests/close_ap_state.rb +31 -0
- data/lib/cassia/requests/close_connection_state.rb +38 -0
- data/lib/cassia/requests/close_notify.rb +38 -0
- data/lib/cassia/requests/close_scan.rb +38 -0
- data/lib/cassia/requests/combined_sse.rb +27 -0
- data/lib/cassia/requests/connect_device.rb +38 -0
- data/lib/cassia/requests/connect_local.rb +44 -0
- data/lib/cassia/requests/disconnect_device.rb +36 -0
- data/lib/cassia/requests/disconnect_local.rb +33 -0
- data/lib/cassia/requests/discover_all_char.rb +33 -0
- data/lib/cassia/requests/discover_all_services.rb +33 -0
- data/lib/cassia/requests/discover_all_services_and_chars.rb +33 -0
- data/lib/cassia/requests/discover_char_of_service.rb +34 -0
- data/lib/cassia/requests/discover_descriptor_of_char.rb +34 -0
- data/lib/cassia/requests/get_all_routers_status.rb +33 -0
- data/lib/cassia/requests/get_connected_devices_router.rb +34 -0
- data/lib/cassia/requests/get_token.rb +34 -0
- data/lib/cassia/requests/open_ap_state.rb +31 -0
- data/lib/cassia/requests/open_connection_state.rb +38 -0
- data/lib/cassia/requests/open_notify.rb +38 -0
- data/lib/cassia/requests/open_scan.rb +50 -0
- data/lib/cassia/requests/switch_autoselect.rb +37 -0
- data/lib/cassia/requests/write_char_by_handle.rb +35 -0
- data/lib/cassia/response_handlers/close_ap_state.rb +31 -0
- data/lib/cassia/response_handlers/close_connection_state.rb +32 -0
- data/lib/cassia/response_handlers/close_notify.rb +32 -0
- data/lib/cassia/response_handlers/close_scan.rb +32 -0
- data/lib/cassia/response_handlers/connect_device.rb +29 -0
- data/lib/cassia/response_handlers/connect_local.rb +32 -0
- data/lib/cassia/response_handlers/disconnect_device.rb +28 -0
- data/lib/cassia/response_handlers/disconnect_local.rb +31 -0
- data/lib/cassia/response_handlers/discover_all_char.rb +33 -0
- data/lib/cassia/response_handlers/discover_all_services.rb +33 -0
- data/lib/cassia/response_handlers/discover_all_services_and_chars.rb +41 -0
- data/lib/cassia/response_handlers/discover_char_of_service.rb +37 -0
- data/lib/cassia/response_handlers/discover_descriptor_of_char.rb +23 -0
- data/lib/cassia/response_handlers/get_all_routers_status.rb +32 -0
- data/lib/cassia/response_handlers/get_connected_devices_router.rb +33 -0
- data/lib/cassia/response_handlers/get_token.rb +29 -0
- data/lib/cassia/response_handlers/open_ap_state.rb +31 -0
- data/lib/cassia/response_handlers/open_connection_state.rb +32 -0
- data/lib/cassia/response_handlers/open_notify.rb +32 -0
- data/lib/cassia/response_handlers/open_scan.rb +32 -0
- data/lib/cassia/response_handlers/switch_autoselect.rb +29 -0
- data/lib/cassia/response_handlers/write_char_by_handle.rb +28 -0
- data/lib/cassia/router.rb +75 -0
- data/lib/cassia/ruby/version.rb +5 -0
- data/lib/cassia/service.rb +13 -0
- data/lib/cassia.rb +82 -0
- metadata +252 -0
data/cassia-ruby.gemspec
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "cassia/ruby/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "cassia-ruby"
|
8
|
+
spec.version = Cassia::Ruby::VERSION
|
9
|
+
spec.authors = ["adelinewang679"]
|
10
|
+
spec.email = ["adelinewang679@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = "a ruby api client for the cassia router api"
|
13
|
+
spec.description = "a ruby api client for the cassia router api"
|
14
|
+
spec.homepage = "https://github.com/iteratelabs/cassia-ruby.git"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
|
18
|
+
# Specify which files should be added to the gem when it is released.
|
19
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
20
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
21
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
22
|
+
end
|
23
|
+
spec.bindir = "exe"
|
24
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
|
+
spec.require_paths = ["lib"]
|
26
|
+
|
27
|
+
spec.add_dependency "faraday"
|
28
|
+
spec.add_dependency "faraday_middleware"
|
29
|
+
spec.add_dependency "virtus"
|
30
|
+
spec.add_dependency "ld-eventsource"
|
31
|
+
|
32
|
+
spec.add_development_dependency "bundler", "~> 2.0"
|
33
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
34
|
+
spec.add_development_dependency "rspec"
|
35
|
+
spec.add_development_dependency "pry"
|
36
|
+
spec.add_development_dependency "dotenv"
|
37
|
+
spec.add_development_dependency "vcr"
|
38
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module Cassia
|
2
|
+
class AccessController
|
3
|
+
include Virtus.model
|
4
|
+
|
5
|
+
attribute :access_token, String
|
6
|
+
attribute :error, String
|
7
|
+
attribute :error_description, String
|
8
|
+
attribute :autoselect_switch, Integer, default: 0
|
9
|
+
attribute :connected_devices, Array[Cassia::Device], default: []
|
10
|
+
attribute :routers, Array[Cassia::Router], default: []
|
11
|
+
attribute :sse
|
12
|
+
|
13
|
+
def get_token
|
14
|
+
Cassia::Requests::GetToken.new(self).perform
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_all_routers_status
|
18
|
+
Cassia::Requests::GetAllRoutersStatus.new(self).perform
|
19
|
+
end
|
20
|
+
|
21
|
+
def switch_autoselect(flag: )
|
22
|
+
Cassia::Requests::SwitchAutoselect.new(self, flag: flag).perform
|
23
|
+
end
|
24
|
+
|
25
|
+
def open_scan(aps: , chip: nil, active: nil, filter_name: nil, filter_mac: nil, filter_uuid: nil)
|
26
|
+
Cassia::Requests::OpenScan.new(self, aps: aps, chip: chip, active: active, filter_name: filter_name, filter_mac: filter_mac, filter_uuid: filter_uuid).perform
|
27
|
+
end
|
28
|
+
|
29
|
+
def close_scan(aps: )
|
30
|
+
Cassia::Requests::CloseScan.new(self, aps: aps).perform
|
31
|
+
end
|
32
|
+
|
33
|
+
def connect_device(aps: '*', device_mac: )
|
34
|
+
Cassia::Requests::ConnectDevice.new(self, aps: aps, device_mac: device_mac).perform
|
35
|
+
end
|
36
|
+
|
37
|
+
def disconnect_device(device_mac: )
|
38
|
+
Cassia::Requests::DisconnectDevice.new(self, device_mac: device_mac).perform
|
39
|
+
end
|
40
|
+
|
41
|
+
def open_notify(aps: )
|
42
|
+
Cassia::Requests::OpenNotify.new(self, aps: aps).perform
|
43
|
+
end
|
44
|
+
|
45
|
+
def close_notify(aps: )
|
46
|
+
Cassia::Requests::CloseNotify.new(self, aps: aps).perform
|
47
|
+
end
|
48
|
+
|
49
|
+
def open_connection_state(aps: )
|
50
|
+
Cassia::Requests::OpenConnectionState.new(self, aps: aps).perform
|
51
|
+
end
|
52
|
+
|
53
|
+
def close_connection_state(aps: )
|
54
|
+
Cassia::Requests::CloseConnectionState.new(self, aps: aps).perform
|
55
|
+
end
|
56
|
+
|
57
|
+
def open_ap_state
|
58
|
+
Cassia::Requests::OpenApState.new(self).perform
|
59
|
+
end
|
60
|
+
|
61
|
+
def close_ap_state
|
62
|
+
Cassia::Requests::CloseApState.new(self).perform
|
63
|
+
end
|
64
|
+
|
65
|
+
def combined_sse
|
66
|
+
combined_sse = Cassia::Requests::CombinedSse.new(self)
|
67
|
+
|
68
|
+
self.sse = SSE::Client.new("#{ac_url}#{combined_sse.path}", headers: combined_sse.headers) do |client|
|
69
|
+
yield(client)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def discover_all_services(router: , device_mac: )
|
74
|
+
Cassia::Requests::DiscoverAllServices.new(self, router: router, device_mac: device_mac).perform
|
75
|
+
end
|
76
|
+
|
77
|
+
def discover_all_char(router: , device_mac: )
|
78
|
+
Cassia::Requests::DiscoverAllChar.new(self, router: router, device_mac: device_mac).perform
|
79
|
+
end
|
80
|
+
|
81
|
+
def discover_char_of_service(router: , device_mac: , service_uuid: )
|
82
|
+
Cassia::Requests::DiscoverCharOfService.new(self, router: router, device_mac: device_mac, service_uuid: service_uuid).perform
|
83
|
+
end
|
84
|
+
|
85
|
+
def discover_descriptor_of_char(router: , device_mac: , char_uuid: )
|
86
|
+
Cassia::Requests::DiscoverDescriptorOfChar.new(self, router: router, device_mac: device_mac, char_uuid: char_uuid).perform
|
87
|
+
end
|
88
|
+
|
89
|
+
def discover_all_services_and_chars(router: , device_mac: )
|
90
|
+
Cassia::Requests::DiscoverAllServicesAndChars.new(self, router: router, device_mac: device_mac).perform
|
91
|
+
end
|
92
|
+
|
93
|
+
def write_char_by_handle(router: , device_mac:, handle: , value: )
|
94
|
+
Cassia::Requests::WriteCharByHandle.new(self, router: router, device_mac: device_mac, handle: handle, value: value).perform
|
95
|
+
end
|
96
|
+
|
97
|
+
def open_char_notification(router: , device_mac: , handle: )
|
98
|
+
Cassia::Requests::WriteCharByHandle.new(self, router: router, device_mac: device_mac, handle: handle, value: "0100").perform
|
99
|
+
end
|
100
|
+
|
101
|
+
def close_char_notification(router: , device_mac: , handle: )
|
102
|
+
Cassia::Requests::WriteCharByHandle.new(self, router: router, device_mac: device_mac, handle: handle, value: "0000").perform
|
103
|
+
end
|
104
|
+
|
105
|
+
private
|
106
|
+
|
107
|
+
def ac_url
|
108
|
+
Cassia.configuration.ac_url
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/lib/cassia/api.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Cassia
|
2
|
+
class Api
|
3
|
+
def post(request)
|
4
|
+
connection.post do |req|
|
5
|
+
req.url request.path
|
6
|
+
req.headers = request.headers
|
7
|
+
req.body = request.body
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def get(request)
|
12
|
+
connection.get do |req|
|
13
|
+
req.url request.path
|
14
|
+
req.headers = request.headers
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def delete(request)
|
19
|
+
connection.delete do |req|
|
20
|
+
req.url request.path
|
21
|
+
req.headers = request.headers
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def connection
|
28
|
+
@connection ||= Faraday.new(url: ac_url) do |faraday|
|
29
|
+
faraday.response :logger, Cassia.logger, bodies: true
|
30
|
+
faraday.response :json, :content_type => /\bjson$/
|
31
|
+
faraday.adapter Faraday.default_adapter
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def ac_url
|
36
|
+
Cassia.configuration.ac_url
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Cassia
|
2
|
+
class Characteristic
|
3
|
+
include Virtus.model
|
4
|
+
attribute :uuid, String
|
5
|
+
attribute :properties, Integer
|
6
|
+
attribute :handle, Integer
|
7
|
+
attribute :descriptors, Array
|
8
|
+
attribute :notification_on, Boolean
|
9
|
+
|
10
|
+
def ==(other)
|
11
|
+
return self.uuid == other.uuid && self.properties == other.properties && self.handle == other.handle && self.descriptors == other.descriptors
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Cassia
|
2
|
+
class Device
|
3
|
+
include Virtus.model
|
4
|
+
attribute :mac, String
|
5
|
+
attribute :type, String
|
6
|
+
attribute :bdaddrs
|
7
|
+
attribute :chipId, Integer
|
8
|
+
attribute :handle, String
|
9
|
+
attribute :name, String
|
10
|
+
attribute :connectionState, String
|
11
|
+
attribute :services, Array[Cassia::Service]
|
12
|
+
attribute :characteristics, Array[Cassia::Characteristic]
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class CloseApState
|
4
|
+
def initialize(access_controller)
|
5
|
+
@access_controller = access_controller
|
6
|
+
end
|
7
|
+
|
8
|
+
def path
|
9
|
+
'/api/aps/ap-state/close'
|
10
|
+
end
|
11
|
+
|
12
|
+
def headers
|
13
|
+
{
|
14
|
+
'Authorization' => "Bearer #{access_token}",
|
15
|
+
'Content-Type' => "application/json"
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def perform
|
20
|
+
Cassia::ResponseHandlers::CloseApState.new(@access_controller).handle(Cassia.api.get(self))
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def access_token
|
26
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
27
|
+
@access_controller.access_token
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class CloseConnectionState
|
4
|
+
def initialize(access_controller, aps: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@aps = aps
|
7
|
+
end
|
8
|
+
|
9
|
+
def path
|
10
|
+
'/api/aps/connection-state/close'
|
11
|
+
end
|
12
|
+
|
13
|
+
def body
|
14
|
+
{
|
15
|
+
'aps' => @aps
|
16
|
+
}.to_json
|
17
|
+
end
|
18
|
+
|
19
|
+
def headers
|
20
|
+
{
|
21
|
+
'Authorization' => "Bearer #{access_token}",
|
22
|
+
'Content-Type' => "application/json"
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def perform
|
27
|
+
Cassia::ResponseHandlers::CloseConnectionState.new(@access_controller, aps: @aps).handle(Cassia.api.post(self))
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def access_token
|
33
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
34
|
+
@access_controller.access_token
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class CloseNotify
|
4
|
+
def initialize(access_controller, aps: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@aps = aps
|
7
|
+
end
|
8
|
+
|
9
|
+
def path
|
10
|
+
'/api/aps/notify/close'
|
11
|
+
end
|
12
|
+
|
13
|
+
def body
|
14
|
+
{
|
15
|
+
'aps' => @aps
|
16
|
+
}.to_json
|
17
|
+
end
|
18
|
+
|
19
|
+
def headers
|
20
|
+
{
|
21
|
+
'Authorization' => "Bearer #{access_token}",
|
22
|
+
'Content-Type' => "application/json"
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def perform
|
27
|
+
Cassia::ResponseHandlers::CloseNotify.new(@access_controller, aps: @aps).handle(Cassia.api.post(self))
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def access_token
|
33
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
34
|
+
@access_controller.access_token
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class CloseScan
|
4
|
+
def initialize(access_controller, aps: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@aps = aps
|
7
|
+
end
|
8
|
+
|
9
|
+
def path
|
10
|
+
'/api/aps/scan/close'
|
11
|
+
end
|
12
|
+
|
13
|
+
def body
|
14
|
+
{
|
15
|
+
'aps' => @aps
|
16
|
+
}.to_json
|
17
|
+
end
|
18
|
+
|
19
|
+
def headers
|
20
|
+
{
|
21
|
+
'Authorization' => "Bearer #{access_token}",
|
22
|
+
'Content-Type' => "application/json"
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def perform
|
27
|
+
Cassia::ResponseHandlers::CloseScan.new(@access_controller, aps: @aps).handle(Cassia.api.post(self))
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def access_token
|
33
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
34
|
+
@access_controller.access_token
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class CombinedSse
|
4
|
+
def initialize(access_controller)
|
5
|
+
@access_controller = access_controller
|
6
|
+
end
|
7
|
+
|
8
|
+
def path
|
9
|
+
"/api/aps/events"
|
10
|
+
end
|
11
|
+
|
12
|
+
def headers
|
13
|
+
{
|
14
|
+
'Authorization' => "Bearer #{access_token}",
|
15
|
+
'Content-Type' => "application/json"
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def access_token
|
22
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
23
|
+
@access_controller.access_token
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class ConnectDevice
|
4
|
+
def initialize(access_controller, aps: '*', device_mac: nil)
|
5
|
+
@access_controller = access_controller
|
6
|
+
@aps = aps
|
7
|
+
@device_mac = device_mac
|
8
|
+
end
|
9
|
+
|
10
|
+
def path
|
11
|
+
'/api/aps/connections/connect'
|
12
|
+
end
|
13
|
+
|
14
|
+
def body
|
15
|
+
{ 'aps' => @aps,
|
16
|
+
'devices' => [@device_mac] }.to_json
|
17
|
+
end
|
18
|
+
|
19
|
+
def headers
|
20
|
+
{
|
21
|
+
'Authorization' => "Bearer #{access_token}",
|
22
|
+
'Content-Type' => "application/json"
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def perform
|
27
|
+
Cassia::ResponseHandlers::ConnectDevice.new(@access_controller).handle(Cassia.api.post(self))
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def access_token
|
33
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
34
|
+
@access_controller.access_token
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class ConnectLocal
|
4
|
+
def initialize(access_controller, router: , device_mac: nil, type: 'random', timeout: '5000', auto: '0', discovergatt: '1')
|
5
|
+
@access_controller = access_controller
|
6
|
+
@router = router
|
7
|
+
@device_mac = device_mac
|
8
|
+
@type = type
|
9
|
+
@timeout = timeout
|
10
|
+
@auto = auto
|
11
|
+
@discovergatt = discovergatt
|
12
|
+
end
|
13
|
+
|
14
|
+
def path
|
15
|
+
"/api/gap/nodes/#{@device_mac}/connection?mac=#{@router.mac}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def body
|
19
|
+
{ 'type' => @type,
|
20
|
+
'timeout' => @timeout,
|
21
|
+
'auto' => @auto,
|
22
|
+
'discovergatt' => @discovergatt }.to_json
|
23
|
+
end
|
24
|
+
|
25
|
+
def headers
|
26
|
+
{
|
27
|
+
'Authorization' => "Bearer #{access_token}",
|
28
|
+
'Content-Type' => "application/json"
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def perform
|
33
|
+
Cassia::ResponseHandlers::ConnectLocal.new(@access_controller, router: @router, device_mac: @device_mac).handle(Cassia.api.post(self))
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def access_token
|
39
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
40
|
+
@access_controller.access_token
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class DisconnectDevice
|
4
|
+
def initialize(access_controller, device_mac: nil)
|
5
|
+
@access_controller = access_controller
|
6
|
+
@device_mac = device_mac
|
7
|
+
end
|
8
|
+
|
9
|
+
def path
|
10
|
+
'/api/aps/connections/disconnect'
|
11
|
+
end
|
12
|
+
|
13
|
+
def body
|
14
|
+
{ 'devices' => [@device_mac] }.to_json
|
15
|
+
end
|
16
|
+
|
17
|
+
def headers
|
18
|
+
{
|
19
|
+
'Authorization' => "Bearer #{access_token}",
|
20
|
+
'Content-Type' => "application/json"
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def perform
|
25
|
+
Cassia::ResponseHandlers::DisconnectDevice.new(@access_controller).handle(Cassia.api.post(self))
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def access_token
|
31
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
32
|
+
@access_controller.access_token
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class DisconnectLocal
|
4
|
+
def initialize(access_controller, router: , device_mac: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@router = router
|
7
|
+
@device_mac = device_mac
|
8
|
+
end
|
9
|
+
|
10
|
+
def path
|
11
|
+
"/api/gap/nodes/#{@device_mac}/connection?mac=#{@router.mac}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def headers
|
15
|
+
{
|
16
|
+
'Authorization' => "Bearer #{access_token}",
|
17
|
+
'Content-Type' => "application/json"
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def perform
|
22
|
+
Cassia::ResponseHandlers::DisconnectLocal.new(@access_controller, router: @router, device_mac: @device_mac).handle(Cassia.api.delete(self))
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def access_token
|
28
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
29
|
+
@access_controller.access_token
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class DiscoverAllChar
|
4
|
+
def initialize(access_controller, router: , device_mac: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@router = router
|
7
|
+
@device_mac = device_mac
|
8
|
+
end
|
9
|
+
|
10
|
+
def path
|
11
|
+
"/api/gatt/nodes/#{@device_mac}/characteristics?mac=#{@router.mac}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def headers
|
15
|
+
{
|
16
|
+
'Authorization' => "Bearer #{access_token}",
|
17
|
+
'Content-Type' => "application/json"
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def perform
|
22
|
+
Cassia::ResponseHandlers::DiscoverAllChar.new(@access_controller, router: @router, device_mac: @device_mac).handle(Cassia.api.get(self))
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def access_token
|
28
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
29
|
+
@access_controller.access_token
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class DiscoverAllServices
|
4
|
+
def initialize(access_controller, router: , device_mac: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@router = router
|
7
|
+
@device_mac = device_mac
|
8
|
+
end
|
9
|
+
|
10
|
+
def path
|
11
|
+
"/api/gatt/nodes/#{@device_mac}/services?mac=#{@router.mac}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def headers
|
15
|
+
{
|
16
|
+
'Authorization' => "Bearer #{access_token}",
|
17
|
+
'Content-Type' => "application/json"
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def perform
|
22
|
+
Cassia::ResponseHandlers::DiscoverAllServices.new(@access_controller, router: @router, device_mac: @device_mac).handle(Cassia.api.get(self))
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def access_token
|
28
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
29
|
+
@access_controller.access_token
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Cassia
|
2
|
+
module Requests
|
3
|
+
class DiscoverAllServicesAndChars
|
4
|
+
def initialize(access_controller, router: , device_mac: )
|
5
|
+
@access_controller = access_controller
|
6
|
+
@router = router
|
7
|
+
@device_mac = device_mac
|
8
|
+
end
|
9
|
+
|
10
|
+
def path
|
11
|
+
"/api/gatt/nodes/#{@device_mac}/services/characteristics/descriptors?mac=#{@router.mac}"
|
12
|
+
end
|
13
|
+
|
14
|
+
def headers
|
15
|
+
{
|
16
|
+
'Authorization' => "Bearer #{access_token}",
|
17
|
+
'Content-Type' => "application/json"
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def perform
|
22
|
+
Cassia::ResponseHandlers::DiscoverAllServicesAndChars.new(@access_controller, router: @router, device_mac: @device_mac).handle(Cassia.api.get(self))
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def access_token
|
28
|
+
@access_controller.get_token if @access_controller.access_token.nil?
|
29
|
+
@access_controller.access_token
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|