Reply to comment

Получаем 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 в таких случаях.

Reply

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby>. The supported tag styles are: <foo>, [foo].

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Enter the characters shown in the image.