comunika_gsm 0.1.0 → 0.1.1

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: 568dc5d37841896c35d14728c73eb3cdec519bf3
4
- data.tar.gz: 42ebbba6ae081b8a197e40d59bc0a1dda984c2de
3
+ metadata.gz: 28460a08eeb3f50c8dbd9877f380f67b92f74fe5
4
+ data.tar.gz: b8b85e09297e5d3b2762e456dbe1b7e5e65df057
5
5
  SHA512:
6
- metadata.gz: 09e376be6b8382c7d9764ff8cb2aad917f6636c4b305cde15836a9f968cb35b90745362441dece1b1dd42c68913339ba80096fd022b90671de9d66c12783d7df
7
- data.tar.gz: e9db3624809f468ad50a949f0a0a979deffad074028876fd3f014d8984420e158a62bf0564b2953f0269e90978e28929065c8b70c5325309e646776fa77f4941
6
+ metadata.gz: 85fd3a28f8c6828a45a5be191d2e8b27c65aedf9f317308990921eab07615516a1a457c775bb21d10a52395039f27eb27ff905ad5ec6cf1acec488cf1ef2f8da
7
+ data.tar.gz: 973889bd1e78d0d65d6ec7577e140490193e38cb9e9d6c68532ff835f3f7ec279dc3dfb10a0e81154db19e5ed283957927d68485dd6a3cad73adf41284b28680
@@ -1,6 +1,6 @@
1
1
  module ComunikaGsm
2
2
  class GSM
3
- attr_accessor :status
3
+ attr_reader :status
4
4
  def initialize(params)
5
5
  return nil if params.empty?
6
6
  begin
@@ -8,10 +8,12 @@ module ComunikaGsm
8
8
  @@port.read_timeout = 1000 ## Set timeout of command
9
9
 
10
10
  @@debug = params[:debug]
11
+ @status = false
11
12
 
12
- return nil unless check_port ## Send command AT to modem
13
+ cmd("ATE0\r\n") ## Set echo off
14
+ return unless cmd("AT\r\n").eql?("OK") ## Test if running AT ok
15
+ cmd("AT+CMGF=0\r\n") ## Set PDU mode
13
16
  @status = true
14
- load_modem
15
17
  rescue Errno::ENOENT
16
18
  @status = false
17
19
  end
@@ -33,22 +35,26 @@ module ComunikaGsm
33
35
  buffer
34
36
  end
35
37
 
38
+ def close
39
+ @@port.close
40
+ end
36
41
 
37
- private
38
- ## Load modem from send sms ##
39
- def load_modem
40
- cmd("ATE0\r\n") ## Echo off events
41
- cmd("AT+CMGF=0\r\n") ## Set PDU mode
42
+ def imei
43
+ cmd("AT+CGSN\r\n")
42
44
  end
43
45
 
44
- def check_port
45
- cmd("AT\r\n").eql?("OK")
46
+ def iccid
47
+ cmd("AT+CRSM=176,12258,0,0,10\r\n")
46
48
  end
47
49
 
48
- public
50
+ def provider
51
+ cmd("AT+COPS?\r\n")
52
+ end
53
+
54
+
49
55
  def normalize(cmd,res)
50
56
  case cmd.gsub(/\r\n/,'')
51
- when 'AT'
57
+ when 'AT' || 'ATE0'
52
58
  res.scan(/\r\n(\S+)\r\n/)[0].first unless res.empty?
53
59
  when 'AT+COPS?'
54
60
  res.scan(/\"(.*?)\"/)[0].first
@@ -0,0 +1,94 @@
1
+ module ComunikaGsm
2
+ module Device
3
+ #TODO run methed of the usb_modeswith
4
+ @@devices = []
5
+
6
+ def self.ports
7
+ ports = %x{ls /dev | grep ttyUSB*}.split(/\n/)
8
+ end
9
+
10
+ ## Get all devices intances
11
+ def self.all
12
+ @@devices
13
+ end
14
+
15
+ # Initialize devices
16
+ def self.load(params={})
17
+ threads = []
18
+ id = 0
19
+ self.ports.each_with_index do |port,idx|
20
+ threads << Thread.new{
21
+ gsm = GSM.new(:port => port, :debug => params[:debug])
22
+ if gsm.status
23
+ imei = gsm.imei
24
+ iccid = gsm.iccid
25
+ provider = gsm.provider
26
+
27
+ unless @@devices.find {|d| d.imei == imei}
28
+ @@devices << Modem.new(id: id += 1 ,:gsm => gsm, :imei => imei, :iccid => iccid, :provider => provider, :port => port)
29
+ end
30
+ else
31
+ g.close
32
+ end
33
+
34
+ Thread.current.kill
35
+ }
36
+ end
37
+
38
+ while threads.count > 0
39
+ threads.delete_if{|t| !t.alive? }
40
+ end
41
+
42
+ @@devices
43
+ end
44
+
45
+ class Modem
46
+ attr_accessor :id,:port, :imei, :iccid, :provider, :gsm, :total
47
+ def initialize(params)
48
+ @id = params[:id]; @port = params[:port]; @imei = params[:imei]; @gsm = params[:gsm]; @total = params[:total] || 0
49
+ end
50
+
51
+ def send_sms(msg)
52
+ return {id: nil, status: "ERROR", code: "304"} if msg[:number].length == 0
53
+ return {id: nil, status: "ERROR", code: "304"} if msg[:number].length < 11
54
+ return {id: nil, status: "ERROR", code: "503"} if msg[:message].length == 0
55
+
56
+ ## GENERATE PDU TO MESSAGE ##
57
+ pdu = PDU.encode(:number => msg[:number].prepend("+55"), :smsc => msg[:smsc], :message => msg[:message])
58
+
59
+ # cmd("AT+CMGS=\"#{options[:number]}\"\r")
60
+ # res = cmd("#{options[:message][0..160]}#{26.chr}")
61
+ @gsm.cmd("AT+CMGS=#{pdu.size}\r")
62
+ res = @gsm.cmd("#{pdu.body}#{26.chr}")
63
+
64
+ sleep 3
65
+ while res.length == 0
66
+ res = @gsm.wait
67
+ end
68
+
69
+ if res.include?('+CMGS')
70
+ res = res.scan(/\+(\S+)\: (\d+)\r\n/)
71
+ status = 'OK'
72
+ code = "-1"
73
+ id = res.first[1]
74
+ elsif res.include?('+CMS')
75
+ res = res.scan(/\+CMS (\S+)\: (\d+)/).first
76
+ status = 'ERROR'
77
+ code = res[1]
78
+ id = nil
79
+ end
80
+ @total += 1
81
+ {:id => id, :code => code, :status => status}
82
+ end
83
+
84
+ def messages
85
+ sms = @gsm.cmd("AT+CMGL=4\r\n")
86
+ msgs = sms.scan(/\+CMGL\:\s*?(\d+),\s*?(\d+),.*?\,s*?(\d+)\r\n(.*)/)
87
+
88
+ ## IDS: 0 - ID, 1 -- ,2 - size, 3 - PDU
89
+ msgs.collect!{ |m| PDU::PDUDecode.new(connection: @gsm, id: m[0], size: m[2], pdu: m[3].chomp).decode }# rescue nil
90
+ end
91
+ end
92
+
93
+ end
94
+ end
@@ -1,7 +1,8 @@
1
1
  module ComunikaGsm
2
2
  module SMS
3
3
  class Provider
4
- attr_reader :gsm, :total
4
+ attr_reader :gsm
5
+ attr_accessor :total
5
6
  def initialize(port,debug=false)
6
7
  @gsm = GSM.new(:port => port, :debug => debug)
7
8
  @total = 0
@@ -49,6 +50,3 @@ module ComunikaGsm
49
50
  end
50
51
  end
51
52
  end
52
-
53
- ## TODO create method reader sms and remove
54
- ## .sub(/(\d+)\D+(\d+)\D+(\d+)/, '\1/\2/20\3')
@@ -1,3 +1,3 @@
1
1
  module ComunikaGsm
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/comunika_gsm.rb CHANGED
@@ -6,6 +6,7 @@ require "comunika_gsm/version"
6
6
  require "comunika_gsm/gsm"
7
7
  require "comunika_gsm/sms"
8
8
  require "comunika_gsm/pdu"
9
+ require "comunika_gsm/modem"
9
10
 
10
11
 
11
12
  module ComunikaGsm
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: comunika_gsm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jefferson Silva
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-16 00:00:00.000000000 Z
11
+ date: 2017-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -77,6 +77,7 @@ files:
77
77
  - lib/comunika_gsm/gsm.rb
78
78
  - lib/comunika_gsm/js/pdu.js
79
79
  - lib/comunika_gsm/js/pdu.min.js
80
+ - lib/comunika_gsm/modem.rb
80
81
  - lib/comunika_gsm/pdu.rb
81
82
  - lib/comunika_gsm/sms.rb
82
83
  - lib/comunika_gsm/version.rb