Народ в
этом треде разобрался, как создавать обработчик сигналов bdus, приходящих при получении SMS. Но само сообщение закодировано в
PDU, так что его нужно сначала декодировать. Я добавил соответсвующую поддержку в последнюю версию (0.0.9) gsmdecode.py из пакета ussd-comon.
Вы можете использовать функцию gsmdecode.decode_pdu (pdumsg), которая вернет вам что-то вроде этого:
{'sender': '3656523',
'timestamp': {
'year': '10',
'month': '03',
'day': '13',
'hour': '00',
'second': '57',
'minute': '48'
'timezone': '12',},
'pid': 0,
'user_data': 'Decoded SMS message ',
'part': True,
'udl': 132,
'address_len': 18,
'type': 64, 'dcs': 8,
'type_of_address': 208}
Но стоит помнить, что длинные СМС на самом деле передаются как несколько сообщений. Так что вам нужно проверять значение поля 'part' и, если оно истинно, где-нибудь аккумулировать сообщения. Так что, обработчик сигнала должен выглядть примерно так:
import gsmdecode
def callback(pdumsg, msgcenter, somestring, sendernumber):
global message
pdu = gsmdecode.decode_pdu (pdumsg)
if pdu != None :
print pdu
print pdu['user_data']
message += pdu['user_data']
if not pdu['part']:
print message
message = ""
Проверка на None добавлена так как этот сигнал вызывается и при оповещениях о доставке. У меня не было ни времени не необходимости расшифровывать PDU для них, так что decode_pdu возвращает None в таких случаях.