daemon の起動はデフォルトでは無効としてあります。有効にするため、/etc/default/smstools を編集します。
user1@plum:~$ sudo nano -w /etc/default/smstools
# smsd default file ENABLE=no # enable wakeup by SMS WAKEUP=no # Defines under which user smsd is running. This may need to be changed # if using devices other then /dev/ttyS0 USER="smsd" GROUP="dialout" # Specifies pathes. PIDFILE="/var/run/smstools/smsd.pid" INFOFILE="/var/run/smstools/smsd.working"
“ENABLE=no” を “ENABLE=yes” に変更します。
SMS 着信による Suspend 状態からの Wakeup を有効にする2)場合、“WAKEUP=no” を “WAKEUP=yes” に変更します。
設定ファイルを更新したら、daemon を起動します3)。
user1@plum:~$ sudo service smstools start Starting SMS Daemon: smsd. user1@plum:~$
起動しているか確認をしておきます。
user1@plum:~$ ps ax|grep sms 1574 ? Ss 0:00 /usr/sbin/smsd -p/var/run/smstools/smsd.pid -i/var/run/smstools/smsd.working -usmsd -gdialout 1575 ? S 0:00 /usr/sbin/smsd -p/var/run/smstools/smsd.pid -i/var/run/smstools/smsd.working -usmsd -gdialout 1581 pts/1 S+ 0:00 grep --color=auto sms user1@plum:~$
SMS の送信は、
を設定したメッセージファイルを、SMS Server Tools 3 の送信ディレクトリ (/var/spool/sms/outgoing/) にコピーすることで実行されます。
もっとも簡単なメッセージファイルは、下記の書式となります。
To: 080xxxxxxxx Hello! from MA-E3xx.
※ より細かいオプションは、SMS Server Tools 3 - SMS file format を参照してください。
メッセージファイルを作成したら、実際に送信してみます。
user1@plum:~$ sudo cp msg.txt /var/spool/sms/outgoing/ user1@plum:~$
ログファイル (/var/log/smstools/smsd.log) には次のように記録され、送信が成功しました。
2014-07-30 13:56:19,5, smsd: Moved file /var/spool/sms/outgoing/msg.txt to /var/spool/sms/checked 2014-07-30 13:56:23,5, GSM1: sent, Message: Hello! from MA-E3xx.=>Hello! from MA-E3xx., l=20. 2014-07-30 13:56:26,5, GSM1: SMS sent, Message_id: 43, To: 080xxxxxxxx, sending time 5 sec.
送信されたファイルは、送信時の情報が付加され、送信済みディレクトリ (/var/spool/sms/sent/) へ移動されます。
user1@plum:~$ sudo cat /var/spool/sms/sent/msg.txt To: 080xxxxxxxx Modem: GSM1 Sent: 14-07-30 13:56:26 IMSI: 44xxxxxxxxxxxxx Hello! from MA-E3xx. user1@plum:~$
SMS の受信には、2つの動作があります。
SMS の受信をきっかけとして、何らかの動作をさせたい場合、ハンドラを設定するのが良いと思います。
まずは、単純にファイルとして保存される動作を確認してみます。
SMS を受信すると、ログファイルには下のような記録がされます。
2014-07-30 14:17:08,5, GSM1: SMS received, From: 080xxxxxxxx
受信ディレクトリには、ファイルが作成されています。
user1@plum:~$ ls -l /var/spool/sms/incoming/ total 4 -rw-r--r-- 1 smsd smsd 232 Jul 30 14:17 GSM1.cEnCZH user1@plum:~$
user1@plum:~$ cat /var/spool/sms/incoming/GSM1.cEnCZH From: 080xxxxxxxx From_TOA: 80 unknown, unknown From_SMSC: 8190xxxxxxxx Sent: 14-07-30 14:17:03 Received: 14-07-30 14:17:08 Subject: GSM1 Modem: GSM1 IMSI: 44xxxxxxxxxxxxx Report: no Alphabet: ISO Length: 23 Test Reply from iPhone.user1@plum:~$
※ 最後に改行コードがないので、プロンプト (user1@plum:~$) が続いてしまっています。メッセージは “Test Reply from iPhone.” までです。
設定ファイル (/etc/smsd.conf) の “eventhandler” に設定します。
〜〜〜 略 〜〜〜 [GSM1] device = /dev/ttyLISA1 incoming = yes #pin = baudrate = 19200 #incoming_utf8 = yes decode_unicode_text = yes #eventhandler= <--- ここ verify_pdu = no sms_mode = 1
詳細な説明は、SMS Server Tools 3 - Event handler, Alarm handler にあります。
指定したスクリプト/プログラムを、イベントにより 2 〜 3 個の引数付きで起動します。
使い方としては、つぎのような用例が考えられると思います。
v2.6.9rc2 から、python-gsmmodem パッケージを追加しました。
それを用いて、PDUから日本語メッセージをデコードすることができます。
まず、/etc/smsd.conf の下記項目を設定し、smstoolsを再起動しておきます。
store_received_pdu = 3
SMSを受信したときに作成されるファイルを、下記スクリプトで処理します。
受信したファイル
From: 080xxxxxxxx From_TOA: 80 unknown, unknown From_SMSC: 8190xxxxxxxxx Sent: 16-05-25 11:39:42 Received: 16-05-25 11:40:14 Subject: GSM1 Modem: GSM1 IMSI: 4401xxxxxxxxxxx Report: no Alphabet: ISO Length: 15 PDU: ..... �,�k{�Thogehoge
スクリプト
#! /usr/bin/env python3 import sys import gsmmodem def main(filename): f = open(filename, encoding='latin1') for line in f.readlines(): if line.startswith("PDU:"): pdu = line.strip().split(" ")[1] info = gsmmodem.pdu.decodeSmsPdu(pdu) print(info['text']) break if __name__ == "__main__": filename = sys.argv[1] main(filename)
実行例
root@plum:~# python3 decodeSMS.py GSM1.3Eqc6l 日本語にほんごhogehoge