ユーザ用ツール

サイト用ツール


mae3xx_tips:use_sms:start

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
mae3xx_tips:use_sms:start [2014/07/30 14:51]
admin
mae3xx_tips:use_sms:start [2019/01/13 09:34] (現在)
admin [日本語メッセージの処理]
ライン 1: ライン 1:
 +====== SMS を使う (MA-E350/​F・MA-E350/​N) ======
 +
 +u-blox 製モジュールを搭載した MA-E350 と v2.1.6β2 以降のファームウェアで、SMS の送受信((SMS 契約ありの SIM が必要です))が可能となります。\\
 +
 +[[http://​smstools3.kekekasvi.com/​index.php|{{:​mae3xx_tips:​use_sms:​sms_00.png|SMS Server Tools 3}}]]
 +
 +[[http://​smstools3.kekekasvi.com/​index.php|SMS Server Tools 3]] を使用しています。
 +
 +\\
 +
 +===== 設定 =====
 +
 +daemon の起動はデフォルトでは無効としてあります。有効にするため、/​etc/​default/​smstools を編集します。
 +
 +<​code>​
 +user1@plum:​~$ sudo nano -w /​etc/​default/​smstools
 +</​code>​
 +
 +<file generic 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"​
 +</​file>​
 +
 +"​ENABLE=no"​ を "​ENABLE=yes"​ に変更します。\\
 +SMS 着信による Suspend 状態からの Wakeup を有効にする((MA-E350/​N で利用可、MA-E350/​F では機能しません。))場合、"​WAKEUP=no"​ を "​WAKEUP=yes"​ に変更します。
 +
 +\\
 +
 +===== daemon の起動 =====
 +
 +設定ファイルを更新したら、daemon を起動します((設定ファイル更新後の次回以降は自動で起動します))。
 +
 +<​code>​
 +user1@plum:​~$ sudo service smstools start
 +Starting SMS Daemon: smsd.
 +user1@plum:​~$ ​
 +</​code>​
 +
 +\\
 +
 +起動しているか確認をしておきます。
 +
 +<​code>​
 +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:​~$ ​
 +</​code>​
 +
 +\\
 +
 +===== SMS の送受信 =====
 +
 +==== SMS の送信 ====
 +
 +SMS の送信は、
 +
 +  * 送信先電話番号((マニュアルでは、"​international format without the leading +" となっていますが、"​8180xxxxxxxx"​ とすると送信できません。))
 +  * メッセージ
 +
 +を設定したメッセージファイルを、SMS Server Tools 3 の送信ディレクトリ (/​var/​spool/​sms/​outgoing/​) にコピーすることで実行されます。\\
 +もっとも簡単なメッセージファイルは、下記の書式となります。
 +
 +<file generic message.txt>​
 +To: 080xxxxxxxx
 +
 +Hello! from MA-E3xx.
 +</​file>​
 +
 +※ より細かいオプションは、[[http://​smstools3.kekekasvi.com/​index.php?​p=fileformat|SMS Server Tools 3 - SMS file format]] を参照してください。
 +
 +メッセージファイルを作成したら、実際に送信してみます。
 +
 +<​code>​
 +user1@plum:​~$ sudo cp msg.txt /​var/​spool/​sms/​outgoing/​
 +user1@plum:​~$ ​
 +</​code>​
 +
 +\\
 +
 +ログファイル (/​var/​log/​smstools/​smsd.log) には次のように記録され、送信が成功しました。
 +
 +<​code>​
 +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.
 +</​code>​
 +
 +\\
 +
 +送信されたファイルは、送信時の情報が付加され、送信済みディレクトリ (/​var/​spool/​sms/​sent/​) へ移動されます。
 +
 +<​code>​
 +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:​~$ ​
 +</​code>​
 +
 +\\
 +
 +==== SMS の受信 ====
 +
 +SMS の受信には、2つの動作があります。
 +
 +  * 受信したメッセージが、受信ディレクトリ (/​var/​spool/​sms/​incoming/​) へ保存される
 +  * メッセージ受信後、指定したハンドラ (スクリプト/​実行ファイル) を実行する
 +
 +SMS の受信をきっかけとして、何らかの動作をさせたい場合、ハンドラを設定するのが良いと思います。\\
 +まずは、単純にファイルとして保存される動作を確認してみます。
 +
 +\\
 +
 +=== 受信内容の保存 ===
 +
 +SMS を受信すると、ログファイルには下のような記録がされます。
 +
 +<​code>​
 +2014-07-30 14:17:08,5, GSM1: SMS received, From: 080xxxxxxxx
 +</​code>​
 +
 +\\
 +
 +受信ディレクトリには、ファイルが作成されています。
 +
 +<​code>​
 +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:​~$ ​
 +</​code>​
 +
 +<​code>​
 +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:​~$
 +</​code>​
 +
 +※ 最後に改行コードがないので、プロンプト (user1@plum:​~$) が続いてしまっています。メッセージは "Test Reply from iPhone."​ までです。
 +
 +\\
 +
 +=== メッセージ受信ハンドラの設定 ===
 +
 +設定ファイル (/​etc/​smsd.conf) の "​eventhandler"​ に設定します。
 +
 +<​code>​
 +〜〜〜 略 〜〜〜
 +[GSM1]
 +device = /​dev/​ttyLISA1
 +incoming = yes
 +#pin = 
 +baudrate = 19200
 +#​incoming_utf8 = yes
 +decode_unicode_text = yes
 +#​eventhandler= ​  <​--- ここ
 +verify_pdu = no
 +sms_mode = 1
 +</​code>​
 +\\
 +
 +詳細な説明は、[[http://​smstools3.kekekasvi.com/​index.php?​p=eventhandler|SMS Server Tools 3 - Event handler, Alarm handler]] にあります。\\
 +指定したスクリプト/​プログラムを、イベントにより 2 〜 3 個の引数付きで起動します。
 +  * イベント (SENT, RECEIVED, FAILED, REPORT or CALL)
 +  * SMS ファイル名
 +  * 送信済みメッセージの message id (イベントが "​SENT"​ の場合のみ)
 +
 +\\
 +
 +=== メッセージハンドラの例 ===
 +
 +使い方としては、つぎのような用例が考えられると思います。
 +  * SMS を受信したら PPP の発信を行う (IP 着信ができないMVNO SIM での、閉域網エミュレーション)。
 +  * ネットワークのトラフィックを監視し、ターゲットとなるアドレスへの SYN を検知したら、SMS を送信、相手側のデバイスとトンネルを張る。
 +
 +\\
 +
 +===== 日本語メッセージの処理 =====
 +
 +v2.6.9rc2 から、[[https://​github.com/​faucamp/​python-gsmmodem|python-gsmmodem]] パッケージを追加しました。\\
 +それを用いて、PDUから日本語メッセージをデコードすることができます。
 +
 +まず、/​etc/​smsd.conf の下記項目を設定し、smstoolsを再起動しておきます。
 +
 +<​code>​
 +store_received_pdu = 3
 +</​code>​
 +
 +SMSを受信したときに作成されるファイルを、下記スクリプトで処理します。
 +
 +受信したファイル
 +
 +<file generic GSM1.3Eqc6l>​
 +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
 +</​file>​
 +
 +\\
 +
 +スクリプト
 +
 +<sxh python toolbar:​false;​ title:​decodeSMS.py>​
 +#! /​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)
 +</​sxh>​
 +
 +\\
 +
 +実行例
 +<​code>​
 +root@plum:​~#​ python3 decodeSMS.py GSM1.3Eqc6l ​
 +日本語にほんごhogehoge
 +</​code>​
 +
 +\\
  
mae3xx_tips/use_sms/start.1406699496.txt.bz2 · 最終更新: 2014/07/30 14:51 by admin