lora-rb 0.11.0 → 0.12.0

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
  SHA1:
3
- metadata.gz: fa20e294270b6a37671b7d98b8afe2d70f19ea1f
4
- data.tar.gz: 5510af9e4a7d1a0ffe716531ae595a4680812905
3
+ metadata.gz: b03ccb7f68a985497bf5b56243bae9fb9a2fec4c
4
+ data.tar.gz: 8f28fc05ec5d849056c9820285f687720e960e05
5
5
  SHA512:
6
- metadata.gz: 76a047649347b811eb85fa7e8f1728208b1c404c318fc75360421dab2011e245a4b4ffd51344ffb237daac85ff8e1eb08999e3769865a3406b2e1a2532ff39d3
7
- data.tar.gz: d7400a832dabe4cb4d2bc69917048be49d12406886e36fd55ad90136efc0d38cac7bb75d019bce2fe5c4408d245bbab0b0505058f8cfbb7d984b6c91b58f86b4
6
+ metadata.gz: 5c60b0f7b8460c1d215b00be34815a58028036f4499bdd6d999cd1db7eef4a54043fc2fcd143b26aea274ab933dcbd1447a9739f008ca73a85777d5057702ec3
7
+ data.tar.gz: 061beb001e41389bb4eb0ad7149382b495b743a7d4414ec1f56e6235b561639d11ccc158d36aee48619d8b98ffdcc17c46d8b820ae2364ac39c58473803eba1d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ v0.12.0 [☰](https://bitbucket.org/fractalgarden/loriot-rb/branches/compare/v0.11.0..v0.12.0) August 25th, 2017
2
+ ------------------------------
3
+ * Mqtt:
4
+ * send_cmd doesn't use thread anymore. Now it subscribes each topics then read data,
5
+ ones for each downlink_response_urls
6
+ * added timeout to the configuration params
7
+ * read_data now has a timeout after which it raises a Timeout::Error. Listen, on the other hand, doesn't have it.
8
+ * read_data and listen now can use subscribed topics. To do that, set topic argument to nil
9
+ * downlink_response_urls now is an array, before it was an hash
10
+
1
11
  v0.11.0 [☰](https://bitbucket.org/fractalgarden/loriot-rb/branches/compare/v0.10.0..v0.11.0) August 10th, 2017
2
12
  ------------------------------
3
13
  * Mqtt:
data/README.md CHANGED
@@ -198,11 +198,24 @@ This is an example provided using mqtt protocol and the provider A2a:
198
198
 
199
199
  Using MQTT, by default the param wait_response is true. This means after publishing a message it waits the response
200
200
  on dedicated topic.
201
+
202
+ ```ruby
203
+ config.downlink_response_urls = [
204
+ { name: :queued, url: 'reply/{clientid}/id/{requestid}'},
205
+ # { name: :transmitted, url: '/sub/v1/users/{username}/apps/{appid}/devices/{deveui}/events/downlink' }
206
+ # { name: :confirmed, url: nil },
207
+ ]
208
+ ```
209
+
210
+ For each downlink urls, a subscription is performed. Then, after the publication, a reading is made for each one.
211
+ If you expect more than one response in the same topic, add it with url=nil to not subscribe it newly
212
+
201
213
  If you dont want to wait the response you just set that param to false.
202
214
 
203
215
  ```ruby
204
216
  lora.send_cmd(eui: 'Insert here your device eui',
205
217
  data: 'f0a1b3ff',
218
+ confirmed: false,
206
219
  wait_response: false)
207
220
  ```
208
221
 
data/lib/config/config.rb CHANGED
@@ -12,10 +12,13 @@ LoraRb.configure do |config|
12
12
  config.port = 8883
13
13
  config.uplink_url = '/sub/v1/users/{username}/apps/{appid}/devices/+/uplink/+'
14
14
  config.downlink_url = '/api/v1/users/{username}/apps/{appid}/devices/{deveui}/downlink/post/reply/{clientid}/id/{requestid}'
15
- config.downlink_response_urls = {
16
- queued: 'reply/{clientid}/id/{requestid}',
17
- transmitted: '/sub/v1/users/{username}/apps/{appid}/devices/{deveui}/events/downlink'
18
- }
15
+ config.timeout = 10.0
16
+ # If you expect more than one response in a topic, add an item with url=nil to not subscribe it newly
17
+ config.downlink_response_urls = [
18
+ { name: :queued, url: 'reply/{clientid}/id/{requestid}'},
19
+ # { name: :transmitted, url: '/sub/v1/users/{username}/apps/{appid}/devices/{deveui}/events/downlink' }
20
+ # { name: :confirmed, url: nil },
21
+ ]
19
22
  config.ssl = true
20
23
  config.ssl_file = 'ssl_certificates/mqtt_ca.crt'
21
24
  end
@@ -2,7 +2,8 @@ module LoraRb
2
2
  class Configuration
3
3
  # attr_writer :allow_sign_up
4
4
 
5
- attr_accessor :protocol, :host, :port, :uplink_url, :downlink_url, :downlink_response_urls, :ssl, :ssl_file, :env
5
+ attr_accessor :protocol, :host, :port, :uplink_url, :downlink_url, :downlink_response_urls, :ssl, :ssl_file, :env,
6
+ :timeout
6
7
 
7
8
  def initialize
8
9
  @protocol = nil
@@ -14,6 +15,7 @@ module LoraRb
14
15
  @ssl = nil # True if uses tls
15
16
  @ssl_file = nil # The certificate's path
16
17
  @env = 'development'
18
+ @timeout = 10.0
17
19
  end
18
20
 
19
21
  end
data/lib/lora-rb/base.rb CHANGED
@@ -20,8 +20,8 @@ class LoraClient
20
20
  username: LoraRb::Settings.username,
21
21
  password: LoraRb::Settings.password,
22
22
  ssl: LoraRb.configuration.ssl,
23
- ssl_file: LoraRb.configuration.ssl_file
24
- }.merge(options)
23
+ ssl_file: LoraRb.configuration.ssl_file,
24
+ timeout: LoraRb.configuration.timeout }.merge(options)
25
25
  @debug = options[:debug]
26
26
  @token = options[:token]
27
27
  @appid = options[:appid]
@@ -39,6 +39,7 @@ module LoraRb
39
39
  { debug: options[:debug] })
40
40
 
41
41
  @downlink_url = merge_tags_to_url(options[:downlink_url])
42
+ @timeout = options[:timeout]
42
43
  @wait_response = options.has_key?(:wait_response) ? options[:wait_response] : true
43
44
  {'hello' => 'Lora-Rb: Ready to start!'}
44
45
  end
@@ -71,11 +72,13 @@ module LoraRb
71
72
 
72
73
  puts "#{Time.now} publish #{h_request.to_json} to #{publish_url}" if options[:debug]
73
74
 
74
-
75
75
  responses = []
76
- thr_responses = []
76
+ # thr_response = nil
77
77
  if options[:wait_response]
78
- @downlink_response_urls.each do |name, response_url|
78
+ @downlink_response_urls.each do |dru_hash|
79
+ name, response_url = dru_hash[:name], dru_hash[:url]
80
+ next unless response_url
81
+
79
82
  # response_topic = "reply/#{@client_id}/id/#{request_id}"
80
83
  response_topic = merge_tags_to_url(response_url,
81
84
  username: @username,
@@ -83,13 +86,8 @@ module LoraRb
83
86
  deveui: options[:eui],
84
87
  clientid: @client_id,
85
88
  requestid: request_id)
86
- puts " [x] Starting thread #{name} to wait response on topic #{response_topic} ..." if options[:debug] == :full
87
- thr_responses << Thread.new do
88
- response_topic, response_message = sub_read_data(topic: response_topic)
89
- response = { name: name, topic: response_topic, json: response_message }
90
- puts " [x] End thread with response #{response} " if options[:debug] == :full
91
- responses << response
92
- end
89
+ puts " [x] Subscribing response #{response_topic}" if options[:debug] == :full
90
+ @client.subscribe(response_topic)
93
91
  end
94
92
  end
95
93
 
@@ -97,31 +95,54 @@ module LoraRb
97
95
 
98
96
  if options[:wait_response]
99
97
  # Waiting for all the responses
100
- thr_responses.each { |thr_response| thr_response.join }
98
+ # thr_responses.each { |thr_response| thr_response.join }
99
+ # thr_response.join
100
+ @downlink_response_urls.each do |dru_hash|
101
+ response_topic, response_message = sub_read_data(topic: nil)
102
+ response = { topic: response_topic, json: response_message }
103
+ puts " [x] Found response #{response} " if options[:debug] == :full
104
+ responses << response
105
+ end
101
106
  end
102
107
  responses
103
108
  end
104
109
 
105
110
  # Receive the payload from the network
111
+ # There is a timeout. Use this method only to retrieve data from the queue. If you have to waiting data
112
+ # please use listen.
106
113
  def sub_read_data(options={})
107
- topic = options[:topic] || @topic
108
- puts " [x] Reading topic #{topic}..." if options[:debug]
109
- topic, message = @client.get(topic.dup)
114
+ topic = options.has_key?(:topic) ? options[:topic] : @topic
115
+ if topic
116
+ topic = topic.dup
117
+ puts " [x] Reading topic #{topic}..." if options[:debug]
118
+ end
119
+
120
+ message = nil
121
+ begin
122
+ Timeout.timeout(options[:timeout] || @timeout) do
123
+ topic, message = @client.get(topic)
124
+ end
125
+ rescue Timeout::Error
126
+ message = {error: 'Timeout'}.to_json
127
+ end
128
+
110
129
  message = JSON.parse(message)
111
130
  if message.respond_to? '[]'
112
131
  message['eui'] ||= get_eui_from_topic(topic)
113
132
  message['port'] ||= get_port_from_topic(topic)
114
133
  end
115
- puts " [x] #{topic}: #{message}" if options[:debug]
116
134
  return topic, message
117
135
  end
118
136
 
119
137
  # Waiting for message in the queue
120
138
  def sub_listen(options={}, &block)
121
- topic = options[:topic] || @topic
122
- puts " [*] Waiting for messages in #{topic}. To exit press CTRL+C" if options[:debug]
139
+ topic = options.has_key?(:topic) ? options[:topic] : @topic
140
+ if topic
141
+ topic = topic.dup
142
+ puts " [*] Waiting for messages in #{topic}. To exit press CTRL+C" if options[:debug]
143
+ end
123
144
 
124
- @client.get(topic.dup) do |topic, message|
145
+ @client.get(topic) do |topic, message|
125
146
  # Block is executed for every message received
126
147
  puts " [x] #{topic}: #{message}" if options[:debug]
127
148
  message = JSON.parse(message)
@@ -7,12 +7,12 @@ module LoraRb
7
7
  # Show tips on usage
8
8
  def merge_tags_to_url(url, tags={}, options={})
9
9
  url = url.dup
10
- puts "merge_tags_to_url: #{url}" if options[:debug]
10
+ puts "merge_tags_to_url: #{url}" if options[:debug] == :full
11
11
  tags.each do |tag, value|
12
- puts " replace {#{tag}} with #{value}" if options[:debug]
12
+ puts " replace {#{tag}} with #{value}" if options[:debug] == :full
13
13
  url.gsub!("{#{tag}}", value.to_s)
14
14
  end
15
- puts "merge_tags_to_url: completed #{url}" if options[:debug]
15
+ puts "merge_tags_to_url: completed #{url}" if options[:debug] == :full
16
16
  url
17
17
  end
18
18
  end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module LoraRb
2
2
  def self.version
3
- "0.11.0"
3
+ "0.12.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lora-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Mastrodonato