aws_iot_device 0.1.5 → 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 +4 -4
- data/.gitignore +2 -0
- data/README.md +155 -148
- data/aws_iot_device.gemspec +11 -11
- data/codeclimate.yml +6 -0
- data/lib/aws_iot_device.rb +2 -1
- data/lib/aws_iot_device/mqtt_adapter.rb +1 -2
- data/lib/aws_iot_device/mqtt_adapter/client.rb +74 -6
- data/lib/aws_iot_device/mqtt_adapter/paho_mqtt_adapter.rb +207 -0
- data/lib/aws_iot_device/mqtt_adapter/ruby_mqtt_adapter.rb +10 -4
- data/lib/aws_iot_device/mqtt_shadow_client.rb +1 -0
- data/lib/aws_iot_device/mqtt_shadow_client/mqtt_manager.rb +133 -67
- data/lib/aws_iot_device/mqtt_shadow_client/shadow_action_manager.rb +229 -146
- data/lib/aws_iot_device/mqtt_shadow_client/shadow_client.rb +78 -20
- data/lib/aws_iot_device/mqtt_shadow_client/shadow_topic_manager.rb +51 -26
- data/lib/aws_iot_device/mqtt_shadow_client/topic_builder.rb +15 -30
- data/lib/aws_iot_device/version.rb +1 -1
- data/samples/config_shadow.rb +72 -0
- data/samples/mqtt_client_samples/mqtt_client_samples.rb +7 -59
- data/samples/shadow_action_samples/sample_shadow_action_update.rb +7 -61
- data/samples/shadow_client_samples/samples_shadow_client_block.rb +25 -0
- data/samples/shadow_client_samples/samples_shadow_client_delete.rb +9 -58
- data/samples/shadow_client_samples/samples_shadow_client_description.rb +64 -0
- data/samples/shadow_client_samples/samples_shadow_client_get.rb +11 -62
- data/samples/shadow_client_samples/samples_shadow_client_getting_started.rb +22 -0
- data/samples/shadow_client_samples/samples_shadow_client_update.rb +7 -58
- data/samples/shadow_topic_samples/sample_topic_manager.rb +10 -61
- metadata +71 -16
- data/lib/aws_iot_device/mqtt_adapter/mqtt_adapter.rb +0 -139
@@ -4,47 +4,72 @@ module AwsIotDevice
|
|
4
4
|
module MqttShadowClient
|
5
5
|
class ShadowTopicManager
|
6
6
|
|
7
|
-
def initialize(mqtt_manager)
|
8
|
-
if mqtt_manager.nil?
|
9
|
-
|
10
|
-
|
7
|
+
def initialize(mqtt_manager, shadow_name)
|
8
|
+
raise ArgumentError, "topic manager should be initialized with a mqtt_manager but was undefined" if mqtt_manager.nil?
|
9
|
+
raise ArgumentError, "topic manager should be initialize with a mqtt mmanager but was undefined" if shadow_name.nil?
|
10
|
+
|
11
11
|
@mqtt_manager = mqtt_manager
|
12
12
|
@sub_unsub_mutex = Mutex.new()
|
13
|
+
@topic = TopicBuilder.new(shadow_name)
|
14
|
+
@timeout = mqtt_manager.mqtt_operation_timeout_s
|
13
15
|
end
|
14
16
|
|
15
|
-
def
|
16
|
-
@mqtt_manager.
|
17
|
+
def shadow_topic_publish(action, payload)
|
18
|
+
@mqtt_manager.publish(@topic.get_topic_general(action), payload, false, 0)
|
17
19
|
end
|
18
20
|
|
19
|
-
def
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
def shadow_topic_subscribe(shadow_name, shadow_action, callback=nil)
|
25
|
-
@sub_unsub_mutex.synchronize(){
|
26
|
-
topic = TopicBuilder.new(shadow_name, shadow_action)
|
27
|
-
if topic.is_delta?(shadow_action)
|
28
|
-
@mqtt_manager.subscribe(topic.get_topic_delta, 0, callback)
|
21
|
+
def shadow_topic_subscribe(action, callback=nil)
|
22
|
+
@sub_unsub_mutex.synchronize() {
|
23
|
+
@subacked = false
|
24
|
+
if @topic.is_delta?(action)
|
25
|
+
@mqtt_manager.subscribe(@topic.get_topic_delta, 0, callback)
|
29
26
|
else
|
30
|
-
@mqtt_manager.
|
31
|
-
@mqtt_manager.subscribe(topic.get_topic_rejected, 0, callback)
|
27
|
+
@mqtt_manager.subscribe_bunch([@topic.get_topic_accepted(action), 1, callback], [@topic.get_topic_rejected(action), 1, callback])
|
32
28
|
end
|
33
29
|
}
|
34
|
-
sleep 2
|
35
30
|
end
|
36
|
-
|
37
|
-
def shadow_topic_unsubscribe(
|
31
|
+
|
32
|
+
def shadow_topic_unsubscribe(action)
|
38
33
|
@sub_unsub_mutex.synchronize(){
|
39
|
-
|
40
|
-
if topic.is_delta?(
|
41
|
-
@mqtt_manager.unsubscribe(topic.get_topic_delta)
|
34
|
+
@unsubacked = false
|
35
|
+
if @topic.is_delta?(action)
|
36
|
+
@mqtt_manager.unsubscribe(@topic.get_topic_delta)
|
42
37
|
else
|
43
|
-
@mqtt_manager.
|
44
|
-
@mqtt_manager.unsubscribe(topic.get_topic_rejected)
|
38
|
+
@mqtt_manager.unsubscribe_bunch(@topic.get_topic_accepted(action), @topic.get_topic_rejected(action))
|
45
39
|
end
|
46
40
|
}
|
47
41
|
end
|
42
|
+
|
43
|
+
def retrieve_action(topic)
|
44
|
+
res = nil
|
45
|
+
ACTION_NAME.each do |action|
|
46
|
+
if topic[0] == @topic.get_topic_accepted(action)
|
47
|
+
res = action.to_sym
|
48
|
+
break
|
49
|
+
end
|
50
|
+
end
|
51
|
+
res
|
52
|
+
end
|
53
|
+
|
54
|
+
def paho_client?
|
55
|
+
@mqtt_manager.paho_client?
|
56
|
+
end
|
57
|
+
|
58
|
+
def on_suback=(callback)
|
59
|
+
@mqtt_manager.on_suback = callback
|
60
|
+
end
|
61
|
+
|
62
|
+
def on_suback(&block)
|
63
|
+
@mqtt_manager.on_suback(&block)
|
64
|
+
end
|
65
|
+
|
66
|
+
def on_unsuback=(callback)
|
67
|
+
@mqtt_manager.on_unsuback = callback
|
68
|
+
end
|
69
|
+
|
70
|
+
def on_unsuback(&block)
|
71
|
+
@mqtt_manager.on_unsuback(&block)
|
72
|
+
end
|
48
73
|
end
|
49
74
|
end
|
50
75
|
end
|
@@ -1,45 +1,30 @@
|
|
1
1
|
module AwsIotDevice
|
2
2
|
module MqttShadowClient
|
3
3
|
class TopicBuilder
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
unless ACTION_NAME.include?(action_name)
|
8
|
-
raise "action_name_error: unreconized action_name \"#{action_name}\""
|
9
|
-
end
|
10
|
-
|
11
|
-
if shadow_name.nil?
|
12
|
-
raise "shadow_name_error: shadow_name is required but undefined"
|
13
|
-
|
14
|
-
end
|
15
|
-
|
4
|
+
def initialize(shadow_name)
|
5
|
+
raise ArgumentError, "topic_builder initialization, shadow_name is required but undefined" if shadow_name.nil?
|
6
|
+
|
16
7
|
@shadow_name = shadow_name
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
if is_delta?(action_name)
|
21
|
-
@topic_delta = "$aws/things/#{shadow_name}/shadow/update/delta"
|
22
|
-
else
|
23
|
-
@topic_general = "$aws/things/#{shadow_name}/shadow/#{action_name}"
|
24
|
-
@topic_accepted = "$aws/things/#{shadow_name}/shadow/#{action_name}/accepted"
|
25
|
-
@topic_rejected = "$aws/things/#{shadow_name}/shadow/#{action_name}/rejected"
|
26
|
-
end
|
8
|
+
|
9
|
+
@topic_delta = "$aws/things/#{shadow_name}/shadow/update/delta"
|
10
|
+
@topic_general = "$aws/things/#{shadow_name}/shadow/"
|
27
11
|
end
|
28
12
|
|
29
|
-
def is_delta?(
|
30
|
-
|
13
|
+
def is_delta?(action)
|
14
|
+
action == ACTION_NAME[3]
|
31
15
|
end
|
32
16
|
|
33
|
-
def get_topic_general
|
34
|
-
|
17
|
+
def get_topic_general(action)
|
18
|
+
raise ArgumentError, "topic_builder, get topic, unreconized action_name \"#{action}\"" unless ACTION_NAME.include?(action)
|
19
|
+
@topic_general + action
|
35
20
|
end
|
36
21
|
|
37
|
-
def get_topic_accepted
|
38
|
-
|
22
|
+
def get_topic_accepted(action)
|
23
|
+
get_topic_general(action) + "/accepted"
|
39
24
|
end
|
40
25
|
|
41
|
-
def get_topic_rejected
|
42
|
-
|
26
|
+
def get_topic_rejected(action)
|
27
|
+
get_topic_general(action) + "/rejected"
|
43
28
|
end
|
44
29
|
|
45
30
|
def get_topic_delta
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
options = {}
|
4
|
+
|
5
|
+
OptionParser.new do |opts|
|
6
|
+
opts.banner = "Basic usage basic_greeting.rb -c \"YOUR_CERTIFICATE_PATH\" -k \"YOUR_KEY_FILE_PATH\" -ca \"YOUR_ROOT_CA_PATH -H \"YOUR_ENDPOINT\" -p 8883 -t \"YOUR THING NAME\"\n"
|
7
|
+
|
8
|
+
opts.separator ""
|
9
|
+
opts.separator "Common options"
|
10
|
+
opts.on_tail("-h", "--help", "--usage", "Show this message") do
|
11
|
+
puts opts
|
12
|
+
exit
|
13
|
+
end
|
14
|
+
|
15
|
+
opts.on("-H", "--host [END_POINT]", "The endpoint where you want to connect") do |host|
|
16
|
+
options[:host] = host
|
17
|
+
end
|
18
|
+
|
19
|
+
opts.on("-p", "--port [MQTT_PORT]", "The port used for the connection Default is 8883") do |port|
|
20
|
+
options[:port] = port
|
21
|
+
end
|
22
|
+
|
23
|
+
opts.on("-c", "--cert [CERT_FILE_PATH]", "The path to the certificate file of the private key.") do |cert|
|
24
|
+
options[:cert] = cert
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on("-k", "--key [KEY_FILE_PATH]", "The path to private key file that would be used for encryption") do |key|
|
28
|
+
options[:key] = key
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.on("-a", "--root_ca [ROOT_CA_PATH]", "The path to the authority certification file") do |root_ca|
|
32
|
+
options[:root_ca] = root_ca
|
33
|
+
end
|
34
|
+
|
35
|
+
opts.on("-t", "--thing [THING_NAME]", "The Thing name on which the action would be done") do |thing|
|
36
|
+
options[:things] = thing
|
37
|
+
end
|
38
|
+
end.parse!(ARGV)
|
39
|
+
|
40
|
+
@host = options[:host]
|
41
|
+
@port = options[:port] || 8883
|
42
|
+
@certificate_path = options[:cert]
|
43
|
+
@private_key_path = options[:key]
|
44
|
+
@root_ca_path = options[:root_ca]
|
45
|
+
@thing = options[:things]
|
46
|
+
|
47
|
+
def setting_mqtt_client
|
48
|
+
mqtt_client = AwsIotDevice::MqttShadowClient::MqttManager.new(host: @host,
|
49
|
+
port: @port,
|
50
|
+
ssl: true)
|
51
|
+
mqtt_client.config_ssl_context(@root_ca_path, @private_key_path, @certificate_path)
|
52
|
+
mqtt_client.connect
|
53
|
+
mqtt_client
|
54
|
+
end
|
55
|
+
|
56
|
+
def setting_topic_manager(mqtt_client)
|
57
|
+
topic_manager = AwsIotDevice::MqttShadowClient::ShadowTopicManager.new(mqtt_client, @thing)
|
58
|
+
end
|
59
|
+
|
60
|
+
def setting_action_manager(mqtt_client)
|
61
|
+
action_manager = AwsIotDevice::MqttShadowClient::ShadowActionManager.new(@thing, mqtt_client, false)
|
62
|
+
action_manager
|
63
|
+
end
|
64
|
+
|
65
|
+
def setting_shadow
|
66
|
+
shadow_client = AwsIotDevice::MqttShadowClient::ShadowClient.new
|
67
|
+
shadow_client.configure_endpoint(@host, @port)
|
68
|
+
shadow_client.configure_credentials(@root_ca_path, @private_key_path, @certificate_path)
|
69
|
+
shadow_client.create_shadow_handler_with_name(@thing, true)
|
70
|
+
shadow_client.connect
|
71
|
+
shadow_client
|
72
|
+
end
|
@@ -1,61 +1,11 @@
|
|
1
|
-
|
2
|
-
require 'optparse'
|
3
|
-
|
4
|
-
options = {}
|
5
|
-
|
6
|
-
OptionParser.new do |opts|
|
7
|
-
opts.banner = "Basic usage basic_greeting.rb -c \"YOUR_CERTIFICATE_PATH\" -k \"YOUR_KEY_FILE_PATH\" -ca \"YOUR_ROOT_CA_PATH -H \"YOUR_ENDPOINT\" -p 8883\n"
|
8
|
-
|
9
|
-
opts.separator ""
|
10
|
-
opts.separator "Common options"
|
11
|
-
opts.on_tail("-h", "--help", "--usage", "Show this message") do
|
12
|
-
puts opts
|
13
|
-
exit
|
14
|
-
end
|
15
|
-
|
16
|
-
opts.on("-H", "--host [END_POINT]", "The endpoint where you want to connect") do |host|
|
17
|
-
options[:host] = host
|
18
|
-
end
|
19
|
-
|
20
|
-
opts.on("-p", "--port [MQTT_PORT]", "The port used for the connection Default is 8883") do |port|
|
21
|
-
options[:port] = port
|
22
|
-
end
|
23
|
-
|
24
|
-
opts.on("-c", "--cert [CERT_FILE_PATH]", "The path to the certificate file of the private key.") do |cert|
|
25
|
-
options[:cert] = cert
|
26
|
-
end
|
27
|
-
|
28
|
-
opts.on("-k", "--key [KEY_FILE_PATH]", "The path to private key file that would be used for encryption") do |key|
|
29
|
-
options[:key] = key
|
30
|
-
end
|
31
|
-
|
32
|
-
opts.on("-a", "--root_ca [ROOT_CA_PATH]", "The path to the authority certification file") do |root_ca|
|
33
|
-
options[:root_ca] = root_ca
|
34
|
-
end
|
35
|
-
end.parse!(ARGV)
|
36
|
-
|
37
|
-
|
38
|
-
host = options[:host]
|
39
|
-
port = options[:port] || 8883
|
40
|
-
cert_file_path = options[:cert]
|
41
|
-
key_file_path = options[:key]
|
42
|
-
ca_file_path = options[:root_ca]
|
43
|
-
|
44
|
-
client = AwsIotDevice::MqttShadowClient::MqttManager.new(host: host,
|
45
|
-
port: port,
|
46
|
-
ssl: true,
|
47
|
-
cert_file: cert_file_path,
|
48
|
-
key_file: key_file_path,
|
49
|
-
ca_file: ca_file_path)
|
1
|
+
$:.unshift(File.expand_path("../../../samples", __FILE__))
|
50
2
|
|
51
|
-
|
3
|
+
require 'aws_iot_device'
|
4
|
+
require 'config_shadow'
|
52
5
|
|
53
|
-
|
54
|
-
client2.ssl = true
|
55
|
-
client2.config_ssl_context(ca_file_path, key_file_path, cert_file_path)
|
6
|
+
client = setting_mqtt_client
|
56
7
|
|
57
|
-
|
58
|
-
client2.connect()
|
8
|
+
client2 = setting_mqtt_client
|
59
9
|
|
60
10
|
callback = Proc.new do |message|
|
61
11
|
p " Client1 catch message event"
|
@@ -72,12 +22,10 @@ end
|
|
72
22
|
client.subscribe("topic_2", 0, callback)
|
73
23
|
client2.subscribe("topic_1", 0,callback2)
|
74
24
|
|
75
|
-
|
76
25
|
puts "# STARTING EXAMPLE #"
|
77
|
-
sleep 2
|
78
26
|
client.publish("topic_1", "Hello Sir. My name is client 1. How do you do? ")
|
79
|
-
sleep 2
|
80
27
|
client2.publish("topic_2", "Hello Mister Client 1. My name is client 2. How do you do?")
|
28
|
+
sleep 1
|
81
29
|
|
82
30
|
2.times do
|
83
31
|
client.publish("topic_1", "How do you do?")
|
@@ -85,6 +33,6 @@ client2.publish("topic_2", "Hello Mister Client 1. My name is client 2. How do y
|
|
85
33
|
client2.publish("topic_2", "How do you do?")
|
86
34
|
sleep 1
|
87
35
|
end
|
88
|
-
|
36
|
+
sleep 2
|
89
37
|
client.disconnect
|
90
38
|
client2.disconnect
|
@@ -1,76 +1,22 @@
|
|
1
|
-
|
2
|
-
require 'optparse'
|
3
|
-
|
4
|
-
options = {}
|
5
|
-
|
6
|
-
OptionParser.new do |opts|
|
7
|
-
opts.banner = "Basic usage basic_greeting.rb -c \"YOUR_CERTIFICATE_PATH\" -k \"YOUR_KEY_FILE_PATH\" -ca \"YOUR_ROOT_CA_PATH -H \"YOUR_ENDPOINT\" -p 8883\n"
|
8
|
-
opts.separator ""
|
9
|
-
opts.separator "Common options"
|
10
|
-
opts.on_tail("-h", "--help", "--usage", "Show this message") do
|
11
|
-
puts opts
|
12
|
-
exit
|
13
|
-
end
|
14
|
-
|
15
|
-
opts.on("-H", "--host [END_POINT]", "The endpoint where you want to connect") do |host|
|
16
|
-
options[:host] = host
|
17
|
-
end
|
18
|
-
|
19
|
-
opts.on("-p", "--port [MQTT_PORT]", "The port used for the connection Default is 8883") do |port|
|
20
|
-
options[:port] = port
|
21
|
-
end
|
22
|
-
|
23
|
-
opts.on("-c", "--cert [CERT_FILE_PATH]", "The path to the certificate file of the private key.") do |cert|
|
24
|
-
options[:cert] = cert
|
25
|
-
end
|
26
|
-
|
27
|
-
opts.on("-k", "--key [KEY_FILE_PATH]", "The path to private key file that would be used for encryption") do |key|
|
28
|
-
options[:key] = key
|
29
|
-
end
|
30
|
-
|
31
|
-
opts.on("-a", "--root_ca [ROOT_CA_PATH]", "The path to the authority certification file") do |root_ca|
|
32
|
-
options[:root_ca] = root_ca
|
33
|
-
end
|
34
|
-
|
35
|
-
opts.on("-t", "--thing [THING_NAME]", "The Thing name on which the action would be done") do |thing|
|
36
|
-
options[:things] = thing
|
37
|
-
end
|
38
|
-
end.parse!(ARGV)
|
1
|
+
$:.unshift(File.expand_path("../../../samples", __FILE__))
|
39
2
|
|
40
|
-
|
41
|
-
|
42
|
-
port = options[:port] || 8883
|
43
|
-
cert_file_path = options[:cert]
|
44
|
-
key_file_path = options[:key]
|
45
|
-
ca_file_path = options[:root_ca]
|
46
|
-
thing = options[:things]
|
47
|
-
|
48
|
-
mqtt_client = AwsIotDevice::MqttShadowClient::MqttManager.new(host: host,
|
49
|
-
port: port,
|
50
|
-
ssl: true,
|
51
|
-
cert_file: cert_file_path,
|
52
|
-
key_file: key_file_path,
|
53
|
-
ca_file: ca_file_path)
|
54
|
-
|
55
|
-
mqtt_client.connect
|
3
|
+
require 'aws_iot_device'
|
4
|
+
require 'config_shadow'
|
56
5
|
|
57
6
|
filter_callback = Proc.new do |message|
|
58
7
|
puts "Executing the specific callback for topic: #{message.topic}\n##########################################\n"
|
59
8
|
end
|
60
9
|
|
61
|
-
|
62
|
-
|
63
|
-
topic_manager = AwsIotDevice::MqttShadowClient::ShadowTopicManager.new(mqtt_client)
|
64
|
-
|
65
|
-
client = AwsIotDevice::MqttShadowClient::ShadowActionManager.new(thing, topic_manager, false)
|
10
|
+
mqtt_client = setting_mqtt_client
|
11
|
+
client = setting_action_manager(mqtt_client)
|
66
12
|
|
67
13
|
client.register_shadow_delta_callback(filter_callback)
|
14
|
+
timeout = 5
|
68
15
|
|
69
16
|
n = 1
|
70
|
-
|
71
17
|
5.times do
|
72
18
|
json_payload = "{\"state\":{\"desired\":{\"property\":\"RubySDK\",\"count\":#{n}}}}"
|
73
|
-
client.shadow_update(json_payload,
|
19
|
+
client.shadow_update(json_payload, timeout, filter_callback)
|
74
20
|
n += 1
|
75
21
|
end
|
76
22
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
$:.unshift(File.expand_path("../../../samples", __FILE__))
|
2
|
+
|
3
|
+
require 'aws_iot_device'
|
4
|
+
require 'config_shadow'
|
5
|
+
|
6
|
+
filter_callback = Proc.new do |message|
|
7
|
+
puts "Executing the specific callback for topic: #{message.topic}\n##########################################\n"
|
8
|
+
end
|
9
|
+
|
10
|
+
my_shadow_client = setting_shadow
|
11
|
+
|
12
|
+
my_shadow_client.connect do |client|
|
13
|
+
|
14
|
+
puts "##### Starting test_shadow_client_get ######"
|
15
|
+
client.get_shadow(4, filter_callback)
|
16
|
+
|
17
|
+
puts "##### Starting test_shadow_client_get ######"
|
18
|
+
client.get_shadow(4) do
|
19
|
+
puts "CALLED FROM BLOCK"
|
20
|
+
end
|
21
|
+
|
22
|
+
puts "##### Starting test_shadow_client_get ######"
|
23
|
+
client.get_shadow(4, filter_callback)
|
24
|
+
sleep 5
|
25
|
+
end
|
@@ -1,73 +1,24 @@
|
|
1
|
-
|
2
|
-
require 'optparse'
|
3
|
-
|
4
|
-
options = {}
|
5
|
-
|
6
|
-
OptionParser.new do |opts|
|
7
|
-
opts.banner = "Basic usage basic_greeting.rb -c \"YOUR_CERTIFICATE_PATH\" -k \"YOUR_KEY_FILE_PATH\" -ca \"YOUR_ROOT_CA_PATH -H \"YOUR_ENDPOINT\" -p 8883\n"
|
8
|
-
|
9
|
-
opts.separator ""
|
10
|
-
opts.separator "Common options"
|
11
|
-
opts.on_tail("-h", "--help", "--usage", "Show this message") do
|
12
|
-
puts opts
|
13
|
-
exit
|
14
|
-
end
|
15
|
-
|
16
|
-
opts.on("-H", "--host [END_POINT]", "The endpoint where you want to connect") do |host|
|
17
|
-
options[:host] = host
|
18
|
-
end
|
19
|
-
|
20
|
-
opts.on("-p", "--port [MQTT_PORT]", "The port used for the connection Default is 8883") do |port|
|
21
|
-
options[:port] = port
|
22
|
-
end
|
23
|
-
|
24
|
-
opts.on("-c", "--cert [CERT_FILE_PATH]", "The path to the certificate file of the private key.") do |cert|
|
25
|
-
options[:cert] = cert
|
26
|
-
end
|
27
|
-
|
28
|
-
opts.on("-k", "--key [KEY_FILE_PATH]", "The path to private key file that would be used for encryption") do |key|
|
29
|
-
options[:key] = key
|
30
|
-
end
|
31
|
-
|
32
|
-
opts.on("-a", "--root_ca [ROOT_CA_PATH]", "The path to the authority certification file") do |root_ca|
|
33
|
-
options[:root_ca] = root_ca
|
34
|
-
end
|
35
|
-
|
36
|
-
opts.on("-t", "--thing [THING_NAME]", "The Thing name on which the action would be done") do |thing|
|
37
|
-
options[:things] = thing
|
38
|
-
end
|
39
|
-
end.parse!(ARGV)
|
40
|
-
|
41
|
-
|
42
|
-
host = options[:host]
|
43
|
-
port = options[:port] || 8883
|
44
|
-
certificate_path = options[:cert]
|
45
|
-
private_key_path = options[:key]
|
46
|
-
root_ca_path = options[:root_ca]
|
47
|
-
thing = options[:things]
|
1
|
+
$:.unshift(File.expand_path("../../../samples", __FILE__))
|
48
2
|
|
49
|
-
|
50
|
-
|
51
|
-
my_shadow_client.configure_credentials(root_ca_path, private_key_path, certificate_path)
|
52
|
-
|
53
|
-
my_shadow_client.connect
|
54
|
-
|
55
|
-
my_shadow_client.create_shadow_handler_with_name(thing ,false)
|
3
|
+
require 'aws_iot_device'
|
4
|
+
require 'config_shadow'
|
56
5
|
|
57
6
|
filter_callback = Proc.new do |message|
|
58
7
|
puts "Executing the specific callback for topic: #{message.topic}\n##########################################\n"
|
59
8
|
end
|
60
9
|
|
61
|
-
|
10
|
+
my_shadow_client = setting_shadow
|
62
11
|
|
12
|
+
n = 1
|
63
13
|
3.times do
|
64
14
|
puts "Start shadow_delete\n"
|
65
|
-
my_shadow_client.delete_shadow(
|
15
|
+
my_shadow_client.delete_shadow(5, filter_callback)
|
16
|
+
sleep 0.01
|
66
17
|
json_payload = '{"state":{"desired":{"property":"RubySDK"}}}'
|
67
|
-
my_shadow_client.update_shadow(json_payload,
|
18
|
+
my_shadow_client.update_shadow(json_payload, 5)
|
68
19
|
n += 1
|
69
20
|
end
|
70
21
|
|
71
|
-
sleep
|
22
|
+
sleep 2
|
72
23
|
|
73
24
|
my_shadow_client.disconnect
|