sms_serial 0.1.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 +7 -0
- checksums.yaml.gz.sig +0 -0
- data/lib/sms_serial.rb +136 -0
- data.tar.gz.sig +0 -0
- metadata +91 -0
- metadata.gz.sig +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5d1a5742799fd294c5c48469b8e472694e71689a7f95d3696844e57c272029f8
|
4
|
+
data.tar.gz: 56affe24e953965e3e09a09a646ce20a6b46aa2d9a9dec3cae8e48513d253522
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a447a06a4979914eb2c21fa5c8b39ff8a7bc2e973800ce19c2355d7d4f3ab4a77ce638dca92f45b84981ba9310cad345f2b809e8ee656fb9c8586dd90825691b
|
7
|
+
data.tar.gz: af04aa79b699580d0895dc07c29fed3c0c255544a16074570be3cd468c0f4241691d7e5225e984068befa360784d00f48b0bd3f4e222e1b1ec8bd125e505bc5a
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data/lib/sms_serial.rb
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# file: sms_serial.rb
|
4
|
+
|
5
|
+
require 'c32'
|
6
|
+
require 'csv'
|
7
|
+
require 'time'
|
8
|
+
require "serialport"
|
9
|
+
|
10
|
+
|
11
|
+
class SmsSerialError < Exception
|
12
|
+
end
|
13
|
+
|
14
|
+
class SmsSerial
|
15
|
+
using ColouredText
|
16
|
+
|
17
|
+
|
18
|
+
def initialize(dev='/dev/ttyUSB0', callback: nil, debug: false)
|
19
|
+
|
20
|
+
@debug = debug
|
21
|
+
@sp = SerialPort.new dev, 115200
|
22
|
+
puts 'running ' + "SmsSerial".highlight
|
23
|
+
@buffer = []
|
24
|
+
|
25
|
+
@t = Thread.new {
|
26
|
+
|
27
|
+
Thread.current[:v] = []
|
28
|
+
|
29
|
+
loop do
|
30
|
+
|
31
|
+
message = @sp.read
|
32
|
+
if message.length > 0
|
33
|
+
|
34
|
+
if message =~ /^\+CMTI:/ then
|
35
|
+
callback.call(message.lines[2]) if callback
|
36
|
+
else
|
37
|
+
|
38
|
+
Thread.current[:v] << message
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
}
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
# count the number of SMS messages
|
47
|
+
#
|
48
|
+
def count()
|
49
|
+
|
50
|
+
puts 'inside count'.info if @debug
|
51
|
+
|
52
|
+
r = cmd 'CPMS?'
|
53
|
+
puts 'r: ' + r.inspect if @debug
|
54
|
+
total = r.lines[2].split(',')[1].to_i
|
55
|
+
puts ('message count: ' + total.to_s).debug if @debug
|
56
|
+
|
57
|
+
total
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
def delete(idx)
|
62
|
+
|
63
|
+
r = cmd 'CMD'
|
64
|
+
total = r.lines[2].split(',')[1].to_i
|
65
|
+
puts ('message count: ' + total.to_s).debug if @debug
|
66
|
+
|
67
|
+
total
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
def delete_all()
|
72
|
+
|
73
|
+
# format: [index, delflag]
|
74
|
+
# delflag 1 means delete all read messages
|
75
|
+
cmd 'CMGD=1,1'
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
def list_all()
|
80
|
+
|
81
|
+
n = count()
|
82
|
+
sleep 0.3
|
83
|
+
|
84
|
+
@sp.write %Q(AT+CMGL="ALL"\r\n)
|
85
|
+
n.times.map {r = read_buffer; parse_msg(r)}
|
86
|
+
|
87
|
+
if n < 1 then
|
88
|
+
r = read_buffer
|
89
|
+
[]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# read an SMS message
|
94
|
+
#
|
95
|
+
def read(idx=1)
|
96
|
+
|
97
|
+
r = cmd 'CMGR=' + idx.to_s
|
98
|
+
parse_msg r
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
# e.g. cmd 'cmgr=1'
|
105
|
+
#
|
106
|
+
def cmd(s)
|
107
|
+
|
108
|
+
@sp.write "AT+%s\r\n" % [s]
|
109
|
+
sleep 1.5 # give the command time to be processed by the SIM module
|
110
|
+
r = ''
|
111
|
+
r = read_buffer
|
112
|
+
|
113
|
+
return r
|
114
|
+
end
|
115
|
+
|
116
|
+
def read_buffer()
|
117
|
+
@t[:v].any? ? @t[:v].shift : ''
|
118
|
+
end
|
119
|
+
|
120
|
+
def parse_msg(r)
|
121
|
+
|
122
|
+
puts ('parse_msg r: ' + r.inspect).debug if @debug
|
123
|
+
return if r.empty?
|
124
|
+
heading = r.lines[2][/\+CMG[RL]: (?:\d+,)?(.*)/,1]
|
125
|
+
|
126
|
+
raise SmsSerialError, "Message not found" unless heading
|
127
|
+
|
128
|
+
a = CSV.parse(heading)
|
129
|
+
sender, sent = a.first.values_at(1,3)
|
130
|
+
msg = {header: {sender: sender, sent: Time.parse(sent)},
|
131
|
+
body: r.lines[4].rstrip}
|
132
|
+
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
data.tar.gz.sig
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sms_serial
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- James Robertson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
|
14
|
+
YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkwOTAyMjE1ODAyWhcN
|
15
|
+
MjAwOTAxMjE1ODAyWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
|
16
|
+
cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCsbDxb
|
17
|
+
FIwADjpFZt/Bgp5ltj0RtJKlO6a3Vzx+/Kgcya8YYnTbRhbXDqiyiDBsRKwiKh0E
|
18
|
+
HWheP29pZil8tTL60Uv1vjCwrCIekpM/M811sXY0CvHQjrOCHThbL0ypBbr+oxth
|
19
|
+
UggpD2ZG8YfyPUOtJYkgHVRu2DR03jrbwQgQ76yKVfcCLRNnuAs1rRq5lQ9sTd4R
|
20
|
+
V88M9UdQNcG9MTX2Mspl/sfRLTRSvWv15Dk6VYxirryBG5pfOkvznB1g7ErsQA9q
|
21
|
+
AEmuDESz3DtCXcoWgM8yhjjf3RSVsxg371cpI6fElefjaje8eoM41Kdq//X4B1yt
|
22
|
+
rA/Yg/1vb0owiPZqmfcHHDYuf+ruziepGUz7wIXjobNUYtsPQWgGlBSWZD12z4hi
|
23
|
+
y9LaJ8jSLrB+egZ/TaNjsauigfpjxHJ0Gh1mbNjkPzrcvFVcMmDx9BJbguCKqsw8
|
24
|
+
CyRZrbBJrucQVunfV76wNqrlkOdKBJGU+lBEdJdBA9FiMMNGZD3HSrgLxwcCAwEA
|
25
|
+
AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUfFuZv1Qb
|
26
|
+
lUPhFVB3GF3hpmSRnhQwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
27
|
+
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
28
|
+
BgkqhkiG9w0BAQsFAAOCAYEACodgyGnp+/NOhRi/bYBGBhbg/OVtBHp+IU94kNjN
|
29
|
+
IcDUifpSXtjAuCJbXrE4u4aupN21SJJ9rKt/VHTA0sIRur4qxSLngNWJLMiVa/Py
|
30
|
+
Y23LBH3peBAMqrM+yhA5Z8eqy7ienHPcF65Qh+Je3m+vjZF8ehZ1Y+Xd6PCHzmMd
|
31
|
+
bod+bbyxraIcQCoBYQ/9j+tJ4+P5POh4jAKBTWnsA+KUyovF7mzuI5VOgi7x1J0c
|
32
|
+
Awr7n4hE1oDJfNlfpFRnSAuHB2d8NQBriXcSyNlNkteBf4/+7U/e6cJO3smL4wY6
|
33
|
+
JemW2LIHSoRwniioSZmqQAAxvlr2m6589lW2mURVOxwR8y59Dog8Z8SFzx13d3tb
|
34
|
+
cveCJWQx1b1jHW+bSY2rsaLO3FUVDvdl+26W/cL89Zo3QWwEUr2Inz7LnT4FKPAo
|
35
|
+
EYzIL92BZpCZCtjvESIrEv5VJgAmyveQNNU5h8mCJUtl5niL+zFr9No3bLdleGKx
|
36
|
+
h+73cUmDE6yvcIa2oIkbUrre
|
37
|
+
-----END CERTIFICATE-----
|
38
|
+
date: 2019-09-02 00:00:00.000000000 Z
|
39
|
+
dependencies:
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: c32
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.2.0
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0.2'
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 0.2.0
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0.2'
|
60
|
+
description:
|
61
|
+
email: james@jamesrobertson.eu
|
62
|
+
executables: []
|
63
|
+
extensions: []
|
64
|
+
extra_rdoc_files: []
|
65
|
+
files:
|
66
|
+
- lib/sms_serial.rb
|
67
|
+
homepage: https://github.com/jrobertson/sms_serial
|
68
|
+
licenses:
|
69
|
+
- MIT
|
70
|
+
metadata: {}
|
71
|
+
post_install_message:
|
72
|
+
rdoc_options: []
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
requirements: []
|
86
|
+
rubygems_version: 3.0.1
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: Reads SMS messages from a serial connection to an Arduino compatible board
|
90
|
+
which uses an SMS module.
|
91
|
+
test_files: []
|
metadata.gz.sig
ADDED
Binary file
|