モデムを構成します
まず、私たちのモデムとLinuxを友達にする必要があります(ちなみに、私はCentos 5.5を使用しています)。 空きusbポートの1つにモデムを接続します。 最初に対処する必要があるのは、モデムがCD-ROMとして定義されていることですが、ご存知のように、SMSメッセージを送信せず、さらには受信しません。 この問題を解決するには、モデムに次のコマンドを送る必要があります: AT ^ U2DIAG = 0 (0-モデムのみ、1-モデム+ cd-rom、255-モデム+ cd-rom +カードリーダー、256-モデム+カードリーダー) Windowsがインストールされているコンピューターがある場合は、ハイパーターミナルを開いてモデムに接続し、コマンドAT ^ U2DIAG = 0を入力して、次の手順をスキップします。
そのため、モデムをLinuxでのCD-ROMではなく、モデムに強制します。 最初にusb_modeswitchおよびminicom
yum --enablerepo=rpmforge install usb_modeswitch minicom
、次に/etc/usb-modeswitch.confを作成/編集する必要があります。
DefaultVendor = 0x12d1
DefaultProduct = 0x1446
MessageEndPoint = "0x01"
MessageContent = "55534243000000000000000000000011060000000000000000000000000000"
そして、モデムを別のポートにドロップします
usb_modeswitch
秒待つ必要があり(モデムがCD-ROMとして定義される必要があります)、ルートから
usb_modeswitch
を実行し、以下について確認します。
Looking for target devices ...
No devices in target mode or class found
Looking for default devices ...
Found default devices (1)
Accessing device 004 on bus 007 ...
Using endpoints 0x01 (out) and 0x81 (in)
Inquiring device details; driver will be detached ...
Looking for active driver ...
OK, driver found ("usb-storage")
OK, driver "usb-storage" detached
SCSI inquiry data (for identification)
-------------------------
Vendor String: HUAWEI
Model String: Mass Storage
Revision String: 2.31
-------------------------
USB description data (for identification)
-------------------------
Manufacturer: HUAWEI Technology
Product: HUAWEI Mobile
Serial No.: not provided
-------------------------
Setting up communication with interface 0 ...
Trying to send the message to endpoint 0x01 ...
OK, message successfully sent
Device is gone, skipping any further commands
-> Run lsusb to note any changes. Bye.
新しいttyUSBデバイスが表示されるはずです
ls /dev | grep ttyUSB
ls /dev | grep ttyUSB
:
ttyUSB0
ttyUSB1
ttyUSB2
minicom –s
を起動します。/dev/ttyUSB0で動作するようにシリアルポート
minicom –s
構成します。
設定を終了し、ターミナルが起動したら、コマンドAT ^ U2DIAG = 0を入力し、応答してOKを取得する必要があります。
モデムをモデムに変更する手順は完了しました。smstoolsをインストール/構成します。
Smstools
奇妙なことに、巨大なrpmforgeリポジトリには、smstoolsのような最も有用なパッケージを置く場所がありませんでした。 しかし、それは問題ではありません。インターネットやメーカーのウェブサイトでは十分です。 パッケージ:smstools-3.0.10-4.el5.i386.rpmを見つけて、それをrpm –i smstools-3.0.10-4.el5.i386.rpmで「使用」しました。 smstools、ファイル/etc/sms.confを構成します。
devices = huaweiE1550
logfile = /var/log/smsd.log
loglevel = 2
[huaweiE1550]
device = /dev/ttyUSB0
baudrate = 115200
rtscts = no
init = at+cpms="sm","sm",""
incoming = yes
incoming = high
設定は
service smsd start
明確で、デーモンを起動し、
service smsd start
してこの奇跡を確認します:
smssend 9128141111 'test message'
(キリル文字を理解していない、 UCS-2BEに変換する必要がある、この記事は考慮しない)、携帯電話でSMSメッセージを待つ 切望されたメッセージが来なかった場合、構成にloglevel = 7を入れて、タンバリンに行きます。 すべてが初めて私から生まれました。
smsctrlデーモン
だから私たちは話すことができます、私たちは聞くことを学ばなければなりません!
モデムのSIM番号にSMSを送信すると、しばらくするとsmsdが/var/spool/sms/incoming/huaweiE1550.*に次の内容のファイルを作成します。
From: 79128141111
From_TOA: 91 international, ISDN/telephone
From_SMSC: 79126313431
Sent: 11-03-02 08:05:46
Received: 11-03-02 08:08:09
Subject: huaweiE1550
IMSI: 2500XXXXXXXXXXX
Report: no
Alphabet: ISO
UDH: false
Test message
したがって、サーバーを管理するためのコマンドが存在するかどうか、これらのファイルを確認します。 これを行うには2つの方法があります。bashの最初の小さなデーモン、smsdの2番目の組み込みイベントハンドラーです。
第一の方法
#!/bin/sh # SMSCtrl # chkconfig: - 55 45 # description: Sms control, Egor N. Zuskin, 2011, http://www.it2k.ru/projects/smsctrl . /etc/rc.d/init.d/functions DAEMON=smsctrl REFRESH_TIME=15 COMMAND_CHAR="#" INCOMING_DIR=/var/spool/sms/incoming ALLOW_PHONES="79128141111 79128141112" SEND_BACK_REPORT=YES to_log(){ text=$1 export LANG=en_EN log_date=`date "+%b %d %H:%M:%S "` log_host=`hostname -s` echo "$log_date $log_host $DAEMON: $text" >> /var/log/$DAEMON.log } start() { echo -n "Starting $DAEMON: " $0 --daemon && success || failure RETVAL=$? echo [ $RETVAL = 0 ] && touch /var/lock/subsys/$DAEMON to_log "Starting ..." return $RETVAL } stop() { # Stop daemon. echo -n "Shutting down $DAEMON: " killproc $0 RETVAL=$? to_log "Stopping ..." echo [ $RETVAL = 0 ] && rm -f /var/lock/subsys/$DAEMON } run() { for File in $(ls $INCOMING_DIR); do Allow=0 for Phone in $ALLOW_PHONES; do cat $INCOMING_DIR/$File | grep "From: $Phone" > /dev/null 2>&1 [ $? -eq 0 ] && Allow=1 done; [ $Allow -eq 0 ] && continue cat $INCOMING_DIR/$File | grep "$COMMAND_CHAR" [ $? -ne 0 ] && continue FromPhone=`cat $INCOMING_DIR/$File | grep "From:" | cut -d " " -f2` command=`cat $INCOMING_DIR/$File | grep "$COMMAND_CHAR" | cut -d "$COMMAND_CHAR" -f2` to_log "Incoming command: $command from $FromPhone" out=`$command` if [ "$SEND_BACK_REPORT" = "YES" ]; then smssend $FromPhone "$out" to_log "Send sms to $FromPhone: $out" fi rm -f $INCOMING_DIR/$File to_log "Deleting file $INCOMING_DIR/$File" done } daemon() { exec >/dev/null exec 2>/dev/null ( trap "" TERM while [ true ]; do run sleep $REFRESH_TIME; done; )& } case "$1" in --daemon) daemon ;; run) run ;; start) start ;; stop) stop ;; restart) $0 stop $0 start exit $? ;; status) status $DAEMON echo ;; *) echo "Usage: $DAEMON {start|stop|restart|status|run}" exit 1 esac exit 0
COMMAND_CHAR="#" –
INCOMING_DIR=/var/spool/sms/incoming – -
ALLOW_PHONES="79128141111 79128141112" –
SEND_BACK_REPORT=YES – -
あらゆる種類のパスフレーズなどを気にしないために 特定の番号からのコマンドのみを受け入れ(SMSが代替番号からどのように見えるかを確認しませんでした)、ランダムSMSから隔離するためにチームの前に特殊文字の存在を確認することにしました。
デーモンを/etc/init.d/smsctrl、chkconfig
chkconfig --add smsctrl
、
service smsctrl start
保存します
第二の方法
/etc/smsd.confに追加します :
eventhandler = /root/bin/sms_event.sh
/root/bin/sms_events.shを作成します
#!/bin/bash COMMAND_CHAR="#" ALLOW_PHONES="79128141111 79128141112" SEND_BACK_REPORT=YES [ "$1" = "RECEIVED" ] || exit 0 to_log(){ text=$1 export LANG=en_EN log_date=`date "+%b %d %H:%M:%S "` log_host=`hostname -s` echo "$log_date $log_host $text" >> /var/log/smsctrl.log } File=$2 Allow=0 for Phone in $ALLOW_PHONES; do cat $File | grep "From: $Phone" > /dev/null 2>&1 [ $? -eq 0 ] && Allow=1 done; [ $Allow -eq 0 ] && exit 0 cat $INCOMING_DIR/$File | grep "$COMMAND_CHAR" [ $? -ne 0 ] && exit 0 FromPhone=`cat $File | grep "From:" | cut -d " " -f2` command=`cat $File | grep "$COMMAND_CHAR" | cut -d "$COMMAND_CHAR" -f2` to_log "Incoming command: $command from $FromPhone" out=`$command` if [ "$SEND_BACK_REPORT" = "YES" ]; then smssend $FromPhone "$out" to_log "Send sms to $FromPhone: $out" fi rm -f $File to_log "Deleting file $File"
確認する
次の内容のファイル/root/bin/test.shを作成します。
#!/bin/bash ls –la /etc | grep $1
次に、電話を取り、テキスト
#/root/bin/test.sh sms
を含む
#/root/bin/test.sh sms
を切望の番号に送信し、
tail –f /var/log/smsctrl.log
ログを調べます。すべてが正常であれば、フォームのSMSが応答で届きます:
smsd.conf
おわりに
私はこの解決策を持っています、SMSによって着信接続のためにsshポートを開きます。 これが唯一のアプリケーションではなく、ちょっとした想像力を含んでいると思います。
Huawei E1550およびsmsdのセットアップに役立つリンク
1: SMSTools 3-SMSを送信するためのゲートウェイ
2: Huawei E1550モデムを備えたSMSセンターに関する記事が必要ですか?
3: MTSモデムHuawei E1550を「飼いならす」方法
あなたのコメントを楽しみにしてくれてありがとう。
UPD私の親友の発言によると、私はsmsdを使用してSMSメッセージを処理する実装を追加しました。