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 +4 -4
- data/lib/comunika_gsm/gsm.rb +18 -12
- data/lib/comunika_gsm/modem.rb +94 -0
- data/lib/comunika_gsm/sms.rb +2 -4
- data/lib/comunika_gsm/version.rb +1 -1
- data/lib/comunika_gsm.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28460a08eeb3f50c8dbd9877f380f67b92f74fe5
|
4
|
+
data.tar.gz: b8b85e09297e5d3b2762e456dbe1b7e5e65df057
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85fd3a28f8c6828a45a5be191d2e8b27c65aedf9f317308990921eab07615516a1a457c775bb21d10a52395039f27eb27ff905ad5ec6cf1acec488cf1ef2f8da
|
7
|
+
data.tar.gz: 973889bd1e78d0d65d6ec7577e140490193e38cb9e9d6c68532ff835f3f7ec279dc3dfb10a0e81154db19e5ed283957927d68485dd6a3cad73adf41284b28680
|
data/lib/comunika_gsm/gsm.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module ComunikaGsm
|
2
2
|
class GSM
|
3
|
-
|
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
|
-
|
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
|
-
|
38
|
-
|
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
|
45
|
-
cmd("AT\r\n")
|
46
|
+
def iccid
|
47
|
+
cmd("AT+CRSM=176,12258,0,0,10\r\n")
|
46
48
|
end
|
47
49
|
|
48
|
-
|
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
|
data/lib/comunika_gsm/sms.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module ComunikaGsm
|
2
2
|
module SMS
|
3
3
|
class Provider
|
4
|
-
attr_reader :gsm
|
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')
|
data/lib/comunika_gsm/version.rb
CHANGED
data/lib/comunika_gsm.rb
CHANGED
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.
|
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-
|
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
|