Получаем SMS через dbus

Народ в этом треде разобрался, как создавать обработчик сигналов 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 в таких случаях.