huawei_e3131 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 32058e8460af5070abbd1621375c27b3e28c60fec86c7db11ba198eea8a8ea5d
4
+ data.tar.gz: 73e147775e5c17170bf2973ca5ff6b0beccba409b4bbb7a0618fef87439b05dc
5
+ SHA512:
6
+ metadata.gz: c76c3a135d7ad890b86b0ed28cb3a60c654521601170585ff949ff48039870b867374ef0e1ec14bbf7bcfae088290533ad48c06a8501b8832b77a38b310cfe36
7
+ data.tar.gz: 44c2b947854878232a77d8d78800f55eee4a0c4bf7c488db98837469874e4dad01032b70ddfef400b87a56758c70b41599a546e74801076d8affbe4e461b01cc
checksums.yaml.gz.sig ADDED
Binary file
data.tar.gz.sig ADDED
Binary file
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: huawei_e3131.rb
4
+
5
+ require 'rexle'
6
+ require 'rest_client'
7
+
8
+
9
+ # HOWTO: Switching the Huawei E3131 to network controller mode
10
+ #
11
+ # 1. Plug in the Huawei E3131 dongle
12
+ # 2. `sudo apt-get install sg3-utils`
13
+ # 3. `sudo /usr/bin/sg_raw /dev/sr0 11 06 20 00 00 00 00 00 01 00`
14
+ #
15
+ # 4. edit /etc/network/interfaces and add the following:
16
+ #
17
+ # allow-hotplug eth1
18
+ # iface eth1 inet dhcp
19
+ #
20
+ # 5. observe IP address 192.168.1.1 is now reachable from eth1
21
+ #
22
+ # credit: [Huawei E3131 on Wheezy](https://www.raspberrypi.org/forums/viewtopic.php?p=210958)
23
+
24
+ class HuaweiE3131
25
+
26
+ def initialize(host='192.168.1.1', callback: nil)
27
+ @host, @callback = host, callback
28
+ end
29
+
30
+ def check_notifications()
31
+
32
+ query 'monitoring/check-notifications'
33
+
34
+ end
35
+
36
+ alias notifications check_notifications
37
+
38
+ def connection_status()
39
+
40
+ query 'monitoring/status'
41
+
42
+ end
43
+
44
+ alias status connection_status
45
+
46
+ def messages()
47
+
48
+ response = RestClient.post "http://#{@host}/api/sms/sms-list",
49
+ "<request><PageIndex>1</PageIndex><ReadCount>20</ReadCount>" +
50
+ "<BoxType>1</BoxType><SortType>0</SortType><Ascending>0</Ascending>" +
51
+ "<UnreadPreferred>0</UnreadPreferred></request>",
52
+ :content_type => "text/xml"
53
+
54
+ Rexle.new(response.body).root.xpath('Messages/Message').map do |message|
55
+
56
+ message.xpath('./*').inject({}) do |r,x|
57
+ x.text ? r.merge(x.name => x) : r
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+
64
+ def sms_count()
65
+
66
+ query 'sms/sms-count'
67
+
68
+ end
69
+
70
+ alias count sms_count
71
+
72
+ # continuously check for new messages
73
+ #
74
+ def start()
75
+
76
+ unread = notifications()['UnreadMessage'].to_i
77
+
78
+ @thread = Thread.new do
79
+ loop do
80
+
81
+ unread_messages = notifications()['UnreadMessage'].to_i
82
+
83
+ if unread_messages > unread then
84
+
85
+ @callback.call if @callback
86
+ unread = unread_messages
87
+
88
+ end
89
+
90
+ sleep 3
91
+
92
+ end
93
+ end
94
+
95
+ 'checking for new message every 3 seconds ...'
96
+
97
+ end
98
+
99
+ def stop()
100
+
101
+ @thread.stop
102
+ @thread.kill
103
+
104
+ 'message checker stopped'
105
+ end
106
+
107
+ private
108
+
109
+ # returns a Hash object from the flat XML records returned from the response
110
+ #
111
+ def query(s)
112
+
113
+ response = RestClient.get "http://#{@host}/api/" + s
114
+
115
+ Rexle.new(response.body).root.xpath('./*').inject({}) do |r,x|
116
+ x.text ? r.merge(x.name => x.text.unescape) : r
117
+ end
118
+
119
+ end
120
+
121
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: huawei_e3131
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
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkwOTE4MTU1MzQyWhcN
15
+ MjAwOTE3MTU1MzQyWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDIgBXY
17
+ EncDCPnns5Xatt02W/d2V6DkAhb0mPVJRxlXXyC7chfEsiOUu3GozEVr02I3a2fn
18
+ vtibYOHtvbsBUwmYmyb3uqLbDxnM+UynVyDWefYTuCEA/5rm5hjoDDdyVIfjXZrz
19
+ wfD7K/HZQUX6FpvAQ5U/1WB1d3ES5rqupRPydujrkwGcNnZtU2UXML7KWS3hrsoU
20
+ JJRGJkZdaqBZ9arQChxY09Tu921l9DyRG4WBfjjmMAgs0WFSWQX45mI60RJt9aqs
21
+ VgLEOuMbK3Zo0LlEv4zd+tI3GkAHP4vKrT2a1dA5ACBRTnsOSdgn+YvG1sS+Z0X3
22
+ GU1iKfzAFu5+X1B4annDX/61E6RM9HOTwYi/FfiDSwmYtCS/KtMlRs3RUv2DiXyI
23
+ aZosQIMhUYBt5Lpp9pEfLCRAoY3aoVn12LoAzPnVId5onTFRjP4qQMjyu2RCvoRM
24
+ 5HIctwl0jjCFaVDm6jUMK02bdgwbamZM61l+fd9bsJ/uxI8SRzaKpa1Wn/0CAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU8jums4Oi
26
+ AvGa8aayU0sFmxN4UWowJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEACKnTFnMNuI7k+GfYtUagl1dpkeMenLGjFfrehyam
29
+ LRsd4GrXOx7lf4q03QUI8SlmuEcD5KOKuJmsh7rVpbQLAB42Z79wwYx/9i8DEe5P
30
+ RKH8DiJhX8HdU+cVThYT2wHgly0u6tKkawlBU8jKidfA+fvVb6GmjYA/QpZhmM0U
31
+ XLwykB2asfeUVIH00sncDrd4/2uhsR70TkjaHCX6v+STSGJS9DjEWLtoljRlUx2+
32
+ VvuYDJiO1pza/Ek0KBGB0i1+tU2AHsygbNTdJ4LiGTz3tG+l5sEilXAnSOfnABo/
33
+ C4t6lZQxGbEKdk6+IRRW6vnWkXNzbDkyUIGDOVWSTEWDmpGF4ix1JQ9e+ENVK7MG
34
+ uTVFTLtE1rlUQyOWycwR9kfvLB+uj/BQmWl9jkFtzec8iQe4dFfYzQyWP8BCS2Ae
35
+ N1SrCPJTgrDOB/y/+EfG4Nd3mtBPJAzIOVz2TAbXwE31144UUF/uRoIySYiDYta+
36
+ /TaNrWyfORZ4WOKDaEa3p1p7
37
+ -----END CERTIFICATE-----
38
+ date: 2019-09-18 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: rexle
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.5'
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 1.5.2
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '1.5'
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 1.5.2
60
+ - !ruby/object:Gem::Dependency
61
+ name: rest-client
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 2.1.0
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '2.1'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: 2.1.0
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '2.1'
80
+ description:
81
+ email: james@jamesrobertson.eu
82
+ executables: []
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - lib/huawei_e3131.rb
87
+ homepage: https://github.com/jrobertson/huawei_e3131
88
+ licenses:
89
+ - MIT
90
+ metadata: {}
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubygems_version: 3.0.3
107
+ signing_key:
108
+ specification_version: 4
109
+ summary: Checks the Huawei E3131 SMS inbox for new messages using the HTTP API.
110
+ test_files: []
metadata.gz.sig ADDED
Binary file