HilinkModem 0.2.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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +55 -0
  3. data/lib/hilinkmodem.rb +172 -0
  4. metadata +73 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 591d5a10ea51be5ead9e916f452222457b1e3812
4
+ data.tar.gz: eae97b559f4a815e0940331bb0855be3a411a6da
5
+ SHA512:
6
+ metadata.gz: b6b09913f32466f380f39420a653f2c9228ffb7cdcd281fa96d286f7331addb0008537345539d1f46b363d7dfb5323264e5d60592869ebde3b4e2be09fbe1e81
7
+ data.tar.gz: d98e9c4c83b461b575b13d6de6e0524a95292c4173f2ec77acf9bdfcb705961e022ade59f65241b53c871b7018538753c7731a04d44bfc7b8f8427d5c9419511
@@ -0,0 +1,55 @@
1
+ # Hilink - ruby interface for Huawei Hilink web-frontend
2
+
3
+ ## Usage
4
+
5
+ The code supposes that the modem is connected and has the IP
6
+ 192.168.1.1. Then you can do:
7
+
8
+ ````
9
+ require 'hilink'
10
+ puts Hilink::Monitoring::status.inspect
11
+ ````
12
+
13
+ which will return a hash of all variables that the stick can return.
14
+
15
+ Please also see the much more complete PhP-implementation on
16
+ [BlackyPanther/Huawei-HiLink](https://github.com/BlackyPanther/Huawei-HiLink).
17
+
18
+ If you have the newer version which connects to 192.168.8.1, this library
19
+ won't work for you, sorry.
20
+
21
+ ## Commands
22
+
23
+ Each command is a module inside of Hilink. There are different modules:
24
+
25
+ - Monitoring - return different status of the modem
26
+ - Network - change 2g / 3g network
27
+ - SMS - send, receive and list
28
+ - Dialup - (dis)connect from network
29
+ - Modem - useful only when it is in modem-mode
30
+ - USSD - *Doesn't work due to Huawei restriction*
31
+
32
+ The Hilink-module itself has three methods:
33
+ - `send_request( path, request = {} )` - generates a valid XML-request and return
34
+ the result as a hash
35
+ - `switch_to_modem` - sends the command so the key behaves as a modem
36
+ - `switch_to_debug` - according to web-interface, no difference visible
37
+
38
+ ### Monitoring
39
+
40
+ You can monitor different things:
41
+
42
+ - `traffic_statistics` - per-connection and total usage
43
+ - `traffic_reset` - set all to 0
44
+ - `status` - shows whether connected or not
45
+ - `check_notifications`
46
+
47
+ ### Network
48
+
49
+ - `set_connection_type( mode = 'auto', band = '-1599903692' )` - mode
50
+ can be 'auto', '2g' or '3g'
51
+ - `current_plnm` - get actual connection
52
+
53
+ ### SMS
54
+
55
+ - `list`
@@ -0,0 +1,172 @@
1
+ require 'net/http'
2
+ require 'active_support/core_ext'
3
+ require 'active_support'
4
+ require 'serialport'
5
+ require 'helperclasses/hashaccessor'
6
+
7
+
8
+ module HilinkModem
9
+ extend self
10
+ #using HelperClasses::HashAccessor
11
+
12
+ def send_request( path, request = {} )
13
+ url = "/api/#{path}"
14
+ http = Net::HTTP.new('192.168.1.1')
15
+
16
+ if request != {}
17
+ req = Net::HTTP::Post.new(url)
18
+ req.body = request.to_xml(root: 'request', indent: 0, skip_types: true)
19
+ req.content_type = 'text/xml'
20
+ else
21
+ req = Net::HTTP::Get.new(url)
22
+ end
23
+ begin
24
+ response = http.request(req).body
25
+ rescue Errno::ENETUNREACH => e
26
+ return nil
27
+ end
28
+
29
+ begin
30
+ Hash.from_xml( response )['response']
31
+ rescue REXML::ParseException => e
32
+ nil
33
+ end
34
+ end
35
+
36
+ def switch_to_modem
37
+ send_request( 'device/mode', :mode => 0 )
38
+ end
39
+
40
+ def switch_to_debug
41
+ send_request( 'device/mode', :mode => 1 )
42
+ end
43
+ module Modem
44
+ extend self
45
+
46
+ def send_modem( str )
47
+ sp = SerialPort.new('/dev/ttyUSB0',115200)
48
+ sp.write("#{str}\r\n")
49
+ sp.read_timeout = 100
50
+ sp.readlines
51
+ end
52
+
53
+ def switch_to_hilink
54
+ send_modem('AT^U2DIAG=119')
55
+ end
56
+
57
+ def save_modem
58
+ send_modem('AT^U2DIAG=0')
59
+ end
60
+ end
61
+ module Monitoring
62
+ extend self
63
+
64
+ def send_request( path, request = {} )
65
+ Hilink::send_request( "monitoring/#{path}", request )
66
+ end
67
+
68
+ def traffic_statistics
69
+ send_request('traffic-statistics')
70
+ end
71
+
72
+ def traffic_reset
73
+ send_request('clear-traffic')
74
+ end
75
+
76
+ def status
77
+ send_request('status')
78
+ end
79
+
80
+ def check_notifications
81
+ send_request('check-notifications')
82
+ end
83
+ end
84
+ module Network
85
+ extend self
86
+
87
+ def send_request( path, request = {} )
88
+ Hilink::send_request( "net/#{path}", request )
89
+ end
90
+
91
+ def current_plnm
92
+ send_request('current-plnm')
93
+ end
94
+
95
+ def set_connection_type( mode = 'auto', band: '-1599903692' )
96
+ nmode = case mode
97
+ when /2g/i
98
+ 1
99
+ when /3g/i
100
+ 2
101
+ else
102
+ 0
103
+ end
104
+ send_request( 'network', {
105
+ :NetworkMode => nmode,
106
+ :NetworkBand => band } )
107
+ end
108
+ end
109
+ module SMS
110
+ extend self
111
+
112
+ def send_request( path, request = {} )
113
+ Hilink::send_request( "sms/#{path}", request )
114
+ end
115
+
116
+ def list( box = 1, site: 1, pref_unread: 0, count: 20 )
117
+ ret = send_request( 'sms-list', {
118
+ :PageIndex => site,
119
+ :ReadCount => count,
120
+ :BoxType => box,
121
+ :SortType => 0,
122
+ :Ascending => 0,
123
+ :UnreadPreferred => pref_unread } )
124
+ if ret && ret['Messages']['Message'].class == Hash
125
+ ret['Messages']['Message'] = [ ret['Messages']['Message'] ]
126
+ end
127
+ ret
128
+ end
129
+
130
+ def delete( index )
131
+ send_request( 'delete-sms', { :Index => index } )
132
+ end
133
+
134
+ def send( number, message, index = -1 )
135
+ send_request( 'send-sms', {
136
+ :Index => index,
137
+ :Phones => [number].flatten,
138
+ :Sca => "",
139
+ :Content => message,
140
+ :Length => message.length,
141
+ :Reserved => 1,
142
+ :Date => Time.now.strftime('%Y-%m-%d %H:%M:%S') } )
143
+ end
144
+ end
145
+ module Dialup
146
+ extend self
147
+
148
+ def send_request( path, request = {} )
149
+ Hilink::send_request( "dialup/#{path}", request )
150
+ end
151
+
152
+ def connect
153
+ send_request( 'dial', :Action => 1 )
154
+ end
155
+
156
+ def disconnect
157
+ send_request( 'dial', :Action => 0 )
158
+ end
159
+ end
160
+ module USSD
161
+ extend self
162
+
163
+ def send_request( path, request = {} )
164
+ Hilink::send_request( "ussd/#{path}", request )
165
+ end
166
+
167
+ def send( str )
168
+ return :error => "Sorry, doesn't work!"
169
+ send_request( 'send', :content => str, :codeType => 'CodeType')
170
+ end
171
+ end
172
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: HilinkModem
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Linus Gasser
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-04-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: serialport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ description: Using the web-interface of huawei hilink modems to do things
42
+ email: ineiti@linusetviviane.ch
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - README.md
48
+ - lib/hilinkmodem.rb
49
+ homepage: https://github.com/ineiti/HilinkModem
50
+ licenses:
51
+ - GPLv3
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.2.2
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: Accessing Huawei HilinkModem modems
73
+ test_files: []