<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Комментарии: Проверка баланса GPRS-модема через USSD-запрос</title>
	<atom:link href="http://linenet.org/2009/07/script-get-balanse-usb-gprs-modem/feed/" rel="self" type="application/rss+xml" />
	<link>http://linenet.org/2009/07/script-get-balanse-usb-gprs-modem/</link>
	<description>Заметки системного администратора</description>
	<lastBuildDate>Sat, 17 Jul 2010 09:01:05 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<item>
		<title>Автор: Администратор</title>
		<link>http://linenet.org/2009/07/script-get-balanse-usb-gprs-modem/comment-page-1/#comment-73</link>
		<dc:creator>Администратор</dc:creator>
		<pubDate>Wed, 24 Feb 2010 15:49:09 +0000</pubDate>
		<guid isPermaLink="false">http://linenet.org/?p=451#comment-73</guid>
		<description>Если шлюз, на момент подачи запроса, подключен к сети - возможно тут проблема (занят порт)? На би и мтс, у меня данный скрипт прекрасно работал в одном регионе (я его в отпуске писал), а после приезда домой, отказался работать на всех доступных мне операторах - мтс, би и меге. Это и остановило его дальнейшее развитие (хотелось апплет для гнома написать). Вот доработанная версия скрипта, работоспособная, но, работает не во всех регионах :(
&lt;pre lang=&quot;PYTHON&quot; line=&quot;1&quot; colla=&quot;-&quot;&gt;
#!/usr/bin/env python
# coding: UTF-8
import sys
import serial
import string
S_PORT=&#039;/dev/ttyUSB2&#039; # Девайс
S_REQ = &#039;*101#&#039; # Номер
S_SPEED=115200
def byte2bin(num):
	result=&quot;&quot;
	for i in range(0,7):
		result=result+str(num&gt;&gt;i &amp; 1)
	return result
def revbin(str):
	result=&quot;&quot;
	for i in range(0,8):
		result=str[i]+result
	return result
def packnum(num):
	a=list(num)
	adjbyte=line=&quot;&quot;
	for i in range(len(a)):
		line += byte2bin(ord(a[i]))
		adjbyte += &quot;0&quot;
	line += adjbyte # Выравнивание байта
	a=&quot;&quot;
	for i in range(0,len(line),8):
		b = hex(int(revbin(line[i:i+8]),2))[2:]
		if len(b)&lt;2: a+=&quot;0&quot;
		a+=b
	a=string.upper(a)
	return a
# ===================================================
#print packnum(S_REQ)
#sys.exit()
if len(sys.argv)&gt;1: # Если есть аргументы в командной строке
	S_PORT=sys.argv[1] # предполагаем, что это имя устройства (модема)
try:
	sp = serial.Serial(S_PORT, S_SPEED, timeout=3) # Пытаемся открыть порт
except: # Открыть не удалось
	print &#039;Error: Устройство \&quot;%s\&quot; занято или не существует!&#039; % S_PORT
	sys.exit(1) # Завершаем работу
if __name__ == &#039;__main__&#039;:
	print &#039;Запрос баланса. Ожидайте...&#039;
#	s_query = &#039;AT+CUSD=1,&quot;&#039;+S_REQ+&#039;&quot;,15\015&#039; # Запрос без упаковки (х.з. раньше работало так)
	s_query = &#039;AT+CUSD=1,&quot;&#039;+packnum(S_REQ)+&#039;&quot;,15\015&#039; # Упакованный запрос (позднее, только так, теперь у меня не работают оба)
	sp.write(s_query) # Отправляем запрос
	rst = &quot;&quot;
	c = 0
	while not(rst.startswith(&#039;+CUSD:&#039;) or rst.startswith(&#039;+CME ERROR:&#039;)):
		rst=sp.readline() # читаем пока не получим ответ
		c+=1
		print(c,rst)
		if c&gt;10: break
	try:
		s=string.replace(rst.split(&#039;,&#039;)[1],&#039;&quot;&#039;,&#039;&#039;)
	except IndexError:
		s=&quot;Ответа не дождались...&quot;
	print(s) # выводим результат
	sp.close() # закрываем порт
	sys.exit(0) # выход
&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>Если шлюз, на момент подачи запроса, подключен к сети &#8211; возможно тут проблема (занят порт)? На би и мтс, у меня данный скрипт прекрасно работал в одном регионе (я его в отпуске писал), а после приезда домой, отказался работать на всех доступных мне операторах &#8211; мтс, би и меге. Это и остановило его дальнейшее развитие (хотелось апплет для гнома написать). Вот доработанная версия скрипта, работоспособная, но, работает не во всех регионах <img src='http://linenet.org/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>

<div class="wp_codebox"><table><tr id="p4511"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
</pre></td><td class="code" id="p451code1"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># coding: UTF-8</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> serial
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">string</span>
S_PORT=<span style="color: #483d8b;">'/dev/ttyUSB2'</span> <span style="color: #808080; font-style: italic;"># Девайс</span>
S_REQ = <span style="color: #483d8b;">'*101#'</span> <span style="color: #808080; font-style: italic;"># Номер</span>
S_SPEED=<span style="color: #ff4500;">115200</span>
<span style="color: #ff7700;font-weight:bold;">def</span> byte2bin<span style="color: black;">&#40;</span>num<span style="color: black;">&#41;</span>:
	result=<span style="color: #483d8b;">&quot;&quot;</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">7</span><span style="color: black;">&#41;</span>:
		result=result+<span style="color: #008000;">str</span><span style="color: black;">&#40;</span>num<span style="color: #66cc66;">&gt;&gt;</span>i <span style="color: #66cc66;">&amp;</span> <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">return</span> result
<span style="color: #ff7700;font-weight:bold;">def</span> revbin<span style="color: black;">&#40;</span><span style="color: #008000;">str</span><span style="color: black;">&#41;</span>:
	result=<span style="color: #483d8b;">&quot;&quot;</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>,<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span>:
		result=<span style="color: #008000;">str</span><span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span>+result
	<span style="color: #ff7700;font-weight:bold;">return</span> result
<span style="color: #ff7700;font-weight:bold;">def</span> packnum<span style="color: black;">&#40;</span>num<span style="color: black;">&#41;</span>:
	a=<span style="color: #008000;">list</span><span style="color: black;">&#40;</span>num<span style="color: black;">&#41;</span>
	adjbyte=line=<span style="color: #483d8b;">&quot;&quot;</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
		line += byte2bin<span style="color: black;">&#40;</span><span style="color: #008000;">ord</span><span style="color: black;">&#40;</span>a<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
		adjbyte += <span style="color: #483d8b;">&quot;0&quot;</span>
	line += adjbyte <span style="color: #808080; font-style: italic;"># Выравнивание байта</span>
	a=<span style="color: #483d8b;">&quot;&quot;</span>
	<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>,<span style="color: #008000;">len</span><span style="color: black;">&#40;</span>line<span style="color: black;">&#41;</span>,<span style="color: #ff4500;">8</span><span style="color: black;">&#41;</span>:
		b = <span style="color: #008000;">hex</span><span style="color: black;">&#40;</span><span style="color: #008000;">int</span><span style="color: black;">&#40;</span>revbin<span style="color: black;">&#40;</span>line<span style="color: black;">&#91;</span>i:i+<span style="color: #ff4500;">8</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>,<span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span>:<span style="color: black;">&#93;</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>b<span style="color: black;">&#41;</span><span style="color: #66cc66;">&lt;</span><span style="color: #ff4500;">2</span>: a+=<span style="color: #483d8b;">&quot;0&quot;</span>
		a+=b
	a=<span style="color: #dc143c;">string</span>.<span style="color: black;">upper</span><span style="color: black;">&#40;</span>a<span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">return</span> a
<span style="color: #808080; font-style: italic;"># ===================================================</span>
<span style="color: #808080; font-style: italic;">#print packnum(S_REQ)</span>
<span style="color: #808080; font-style: italic;">#sys.exit()</span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">&gt;</span><span style="color: #ff4500;">1</span>: <span style="color: #808080; font-style: italic;"># Если есть аргументы в командной строке</span>
	S_PORT=<span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> <span style="color: #808080; font-style: italic;"># предполагаем, что это имя устройства (модема)</span>
<span style="color: #ff7700;font-weight:bold;">try</span>:
	sp = serial.<span style="color: black;">Serial</span><span style="color: black;">&#40;</span>S_PORT, S_SPEED, timeout=<span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># Пытаемся открыть порт</span>
<span style="color: #ff7700;font-weight:bold;">except</span>: <span style="color: #808080; font-style: italic;"># Открыть не удалось</span>
	<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Error: Устройство <span style="color: #000099; font-weight: bold;">\&quot;</span>%s<span style="color: #000099; font-weight: bold;">\&quot;</span> занято или не существует!'</span> <span style="color: #66cc66;">%</span> S_PORT
	<span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># Завершаем работу</span>
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
	<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Запрос баланса. Ожидайте...'</span>
<span style="color: #808080; font-style: italic;">#	s_query = 'AT+CUSD=1,&quot;'+S_REQ+'&quot;,15\015' # Запрос без упаковки (х.з. раньше работало так)</span>
	s_query = <span style="color: #483d8b;">'AT+CUSD=1,&quot;'</span>+packnum<span style="color: black;">&#40;</span>S_REQ<span style="color: black;">&#41;</span>+<span style="color: #483d8b;">'&quot;,15<span style="color: #000099; font-weight: bold;">\0</span>15'</span> <span style="color: #808080; font-style: italic;"># Упакованный запрос (позднее, только так, теперь у меня не работают оба)</span>
	sp.<span style="color: black;">write</span><span style="color: black;">&#40;</span>s_query<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># Отправляем запрос</span>
	rst = <span style="color: #483d8b;">&quot;&quot;</span>
	c = <span style="color: #ff4500;">0</span>
	<span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #ff7700;font-weight:bold;">not</span><span style="color: black;">&#40;</span>rst.<span style="color: black;">startswith</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'+CUSD:'</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">or</span> rst.<span style="color: black;">startswith</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'+CME ERROR:'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
		rst=sp.<span style="color: #dc143c;">readline</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># читаем пока не получим ответ</span>
		c+=<span style="color: #ff4500;">1</span>
		<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span>c,rst<span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">if</span> c<span style="color: #66cc66;">&gt;</span><span style="color: #ff4500;">10</span>: <span style="color: #ff7700;font-weight:bold;">break</span>
	<span style="color: #ff7700;font-weight:bold;">try</span>:
		s=<span style="color: #dc143c;">string</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span>rst.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">','</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>,<span style="color: #483d8b;">'&quot;'</span>,<span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">IndexError</span>:
		s=<span style="color: #483d8b;">&quot;Ответа не дождались...&quot;</span>
	<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span>s<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># выводим результат</span>
	sp.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># закрываем порт</span>
	<span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># выход</span></pre></td></tr></table></div>

]]></content:encoded>
	</item>
	<item>
		<title>Автор: noname</title>
		<link>http://linenet.org/2009/07/script-get-balanse-usb-gprs-modem/comment-page-1/#comment-71</link>
		<dc:creator>noname</dc:creator>
		<pubDate>Tue, 23 Feb 2010 10:50:53 +0000</pubDate>
		<guid isPermaLink="false">http://linenet.org/?p=451#comment-71</guid>
		<description>пробую ваш скрипт подкрутить для своих нужд....
есть жсм шлюз, отправляю запрос, порт занят, просто идет ожидание......
и все.... шлюз никак не отвечает, хотя даже на не правильный запрос выдает, Input error, но система M$

если есть минутка, мой жаббер: noname@unstable.nl</description>
		<content:encoded><![CDATA[<p>пробую ваш скрипт подкрутить для своих нужд&#8230;.<br />
есть жсм шлюз, отправляю запрос, порт занят, просто идет ожидание&#8230;&#8230;<br />
и все&#8230;. шлюз никак не отвечает, хотя даже на не правильный запрос выдает, Input error, но система M$</p>
<p>если есть минутка, мой жаббер: <a href="mailto:noname@unstable.nl">noname@unstable.nl</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>
