lora-rb 0.5.0 → 0.6.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: b74cb1cacf8fcf8faaa5a3157968cfe1a0a35f3c
4
- data.tar.gz: 0eb50e5238019cea923f4815eb21d6d9e2219a10
3
+ metadata.gz: a328956e282ef7fc3fc65942183c4373d304850c
4
+ data.tar.gz: '049b381a5922987c282f21f39562416c76265ccb'
5
5
  SHA512:
6
- metadata.gz: a205809d83d84912b972778bf6328f9a1252b5145ca79bb5c6f4cde174644516abc79af6a0b8cb0adb4ec46d069e0d17ce2440d9ab8bd7f974260254907a1bad
7
- data.tar.gz: 3f2a2b319b69ae7bf047267814b69593b6b26147dc72e5ab527ba4ccac77809c2752751001d6805b4620930113b03fabb3f24f6f73bb4832e1852369b432e360
6
+ metadata.gz: 20ee3a2d4016d80b24b44b05f128c2c37791c712e9c925900615ef460aa2d753f474f7c952d68aa1a3e63bab4ce7dec1b0191abf8442a761943bf98687b78f02
7
+ data.tar.gz: dff6d02731671b3074e915f5ff224686c28ccd9b857286b56f2cbb4e6ffc12dd42df33765ed9ec49326488e511bff6a06e8e701ca3fe3cdd45817c7992e2982d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ v0.6.0 [☰](https://bitbucket.org/fractalgarden/loriot-rb/branches/compare/v0.5.0..v0.6.0) June 28th, 2017
2
+ ------------------------------
3
+ * Now support mqtt to get and receive data throught RabbitMQ
4
+ * Code cleaning
5
+
1
6
  v0.5.0 [☰](https://bitbucket.org/fractalgarden/loriot-rb/branches/compare/v0.4.0..v0.5.0) June 27th, 2017
2
7
  ------------------------------
3
8
  * Now support http push to send data with an internal http client (only send data, to receive you must have an http server)
data/lib/config/config.rb CHANGED
@@ -3,7 +3,9 @@ LoraRb.configure do |config|
3
3
  # config.protocol = :tls
4
4
  # config.host = 'eu1.loriot.io'
5
5
  # config.port = 737
6
- config.protocol = :http
7
- config.host = 'eu72.resiot.io'
6
+ # config.protocol = :http
7
+ config.protocol = :mqtt
8
+ # config.host = 'eu72.resiot.io'
9
+ config.host = 'localhost'
8
10
  config.port = 80
9
11
  end
data/lib/core/base.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'json'
2
+ require 'socket'
3
+ require 'openssl'
4
+ require 'http'
5
+ require 'bunny'
6
+
7
+ require_relative 'configuration'
8
+ require_relative 'configuration_dynamic'
9
+ require_relative 'protocol'
10
+ require_relative '../version'
@@ -0,0 +1,11 @@
1
+ # LoraRb methods
2
+ module LoraRb
3
+ # It contains protocols methods
4
+ class Protocol
5
+
6
+ # Show tips on usage
7
+ def self.supported_protocols
8
+ %w(tls http mqtt)
9
+ end
10
+ end
11
+ end
data/lib/lora-rb.rb CHANGED
@@ -13,13 +13,7 @@
13
13
  # You should have received a copy of the GNU General Public License
14
14
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
15
15
 
16
- require 'json'
17
- require 'socket'
18
- require 'openssl'
19
- require 'http'
20
-
21
- require_relative 'core/configuration'
22
- require_relative 'core/configuration_dynamic'
16
+ require_relative 'core/base'
23
17
 
24
18
  module LoraRb
25
19
  def self.root
@@ -27,7 +21,6 @@ module LoraRb
27
21
  end
28
22
  end
29
23
 
30
- require_relative 'version'
31
24
  require_relative 'lora-rb/base'
32
25
 
33
26
  unless defined?(Rails)
@@ -35,7 +28,7 @@ unless defined?(Rails)
35
28
 
36
29
  connection_protocol = LoraRb.configuration.protocol
37
30
  raise "Define your protocol in the configuration file!" unless connection_protocol
38
- raise "Connection protocol #{connection_protocol} not recognized!" unless %w(tls http).include?(connection_protocol.to_s)
31
+ raise "Connection protocol #{connection_protocol} not recognized!" unless LoraRb::Protocol.supported_protocols.include?(connection_protocol.to_s)
39
32
  require_relative "lora-rb/#{connection_protocol}/call"
40
33
  LoraClient.include LoraRb::Call
41
34
 
data/lib/lora-rb/base.rb CHANGED
@@ -54,14 +54,8 @@ class LoraClient
54
54
  def listen(options = {}, &block)
55
55
  options = { debug: @debug }.merge(options)
56
56
 
57
- puts "#{Time.now} Starting Listen #{@appid}" if options[:debug]
58
- response = nil
59
- begin
60
- response = read_data(options)
61
- block.call(response) if block
62
- end while response && !options[:test]
63
- # Return last response
64
- response
57
+ puts "#{Time.now} Starting Listen #{@appid}. To exit press CTRL+C" if options[:debug]
58
+ sub_listen(options)
65
59
  end
66
60
 
67
61
  # Close the secure connection with the cloud
@@ -37,6 +37,12 @@ module LoraRb
37
37
  raise('In http protocol, it expects data with an http server. Lora Network server must exec an http push ')
38
38
  end
39
39
 
40
+ # Waiting for messages
41
+ def sub_listen(options={})
42
+ raise('In http protocol, it expects data with an http server. Lora Network server must exec an http push ')
43
+ end
44
+
45
+ # Blank method. No need to close a connection with the http protocol
40
46
  def sub_quit
41
47
  end
42
48
 
@@ -0,0 +1,61 @@
1
+ # LoraRb calling methods
2
+ module LoraRb
3
+ # It contains all the methods for selecting the items
4
+ module Call
5
+
6
+ attr_reader :client
7
+
8
+ private
9
+
10
+ def sub_initialize(options={})
11
+ @connection = Bunny.new(hostname: options[:host])
12
+ @connection.start
13
+ @channel = @connection.create_channel
14
+ @queue = @channel.queue(options[:queue])
15
+ {'hello' => 'Lora-Rb: Ready to start!'}
16
+ end
17
+
18
+ # Send the request to device
19
+ def sub_send_cmd(options={})
20
+ str_request = "{\"cmd\":\"#{options[:cmd]}\",\"EUI\":\"#{options[:eui]}\",\"port\":#{options[:port]},\"confirmed\":#{options[:confirmed]},\"data\":\"#{options[:data]}\"} "
21
+ puts "#{Time.now} Cmq request: #{str_request}" if options[:debug]
22
+ response = @channel.default_exchange.publish(str_request, routing_key: @queue.name)
23
+ puts " [x] Sent '#{str_request}'" if options[:debug]
24
+ response
25
+ end
26
+
27
+ # Receive the payload from the network
28
+ def sub_read_data(options={})
29
+ delivery_info, metadata, payload = @queue.pop
30
+ puts " [x] Received #{delivery_info} #{metadata} #{payload}" if options[:debug]
31
+ end
32
+
33
+ # Waiting for message in the queue
34
+ def sub_listen(options={}, &block)
35
+ puts " [*] Waiting for messages in #{@queue.name}. To exit press CTRL+C" if options[:debug]
36
+ @queue.subscribe(block: true) do |delivery_info, properties, body|
37
+ puts " [x] Received #{body}" if options[:debug]
38
+ block.call(delivery_info, properties, body) if block
39
+ # cancel the consumer to exit
40
+ delivery_info.consumer.cancel
41
+ end
42
+ end
43
+
44
+ # Close the connection
45
+ def sub_quit
46
+ @connection.close
47
+ end
48
+
49
+ end
50
+ end
51
+
52
+ # Monkey patch since Bunny use the rails method .empty?
53
+ class NilClass
54
+ def empty?; true end
55
+ end
56
+ # Example
57
+ =begin
58
+ require 'lora-rb'
59
+ lora=LoraClient.new
60
+ lora.send_cmd(eui: 'BE7A00000000123C')
61
+ =end
@@ -65,6 +65,17 @@ module LoraRb
65
65
  JSON.parse(response)
66
66
  end
67
67
 
68
+ # Waiting for message
69
+ def sub_listen(options={}, &block)
70
+ response = nil
71
+ begin
72
+ response = sub_read_data(options)
73
+ puts " [x] Received #{response}" if options[:debug]
74
+ block.call(response) if block
75
+ end while response && !options[:test]
76
+ end
77
+
78
+ # Close the connection
68
79
  def sub_quit
69
80
  @ssl_socket.close
70
81
  end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module LoraRb
2
2
  def self.version
3
- "0.5.0"
3
+ "0.6.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.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Mastrodonato
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '2.0'
21
+ version: '2.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: '2.0'
28
+ version: '2.1'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: openssl
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -46,14 +46,28 @@ dependencies:
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '2.0'
49
+ version: '2.2'
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: '2.0'
56
+ version: '2.2'
57
+ - !ruby/object:Gem::Dependency
58
+ name: bunny
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '2.7'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '2.7'
57
71
  - !ruby/object:Gem::Dependency
58
72
  name: test-unit
59
73
  requirement: !ruby/object:Gem::Requirement
@@ -84,13 +98,16 @@ files:
84
98
  - lib/config/config.rb
85
99
  - lib/config/private.yml
86
100
  - lib/config/private_EXAMPLE.yml
101
+ - lib/core/base.rb
87
102
  - lib/core/configuration.rb
88
103
  - lib/core/configuration_dynamic.rb
104
+ - lib/core/protocol.rb
89
105
  - lib/generators/install_generator.rb
90
106
  - lib/lora-rb.rb
91
107
  - lib/lora-rb/base.rb
92
108
  - lib/lora-rb/help.rb
93
109
  - lib/lora-rb/http/call.rb
110
+ - lib/lora-rb/mqtt/call.rb
94
111
  - lib/lora-rb/tls/call.rb
95
112
  - lib/vendor/deep_symbolize.rb
96
113
  - lib/version.rb