Cobra81 Research Laboratory

インターネットの世界に散らばる表と裏の情報をアーカイブする情報倉庫です。

LinuxでのSMSの送受信

f:id:cobra81:20180711220320j:plain

少し前、私はと呼ばれる混合メディア・シアター制作に取り組んで、私はそれを着用したい色よりも暗い黒があった場合。この制作の一環として、視聴者からSMSメッセージを送受信できるシステムを構築する必要がありました。今日、SMS Server Toolsを使用してそれを行う方法の技術的側面を見ています。

実際に着信テキストメッセージを取得するには、いくつかの方法があります。

APIのルートは、プログラミングの面から最も簡単な方法です。それはお金がかかりますが、ほとんどのゲートウェイは素晴らしいAPIを提供し、大量のメッセージを送信することができます。

BLACKにはいくつかの特定の要件があり、ゲートウェイを不適切なものにしました。

  1. 南オーストラリア州南部のバンから突き出していました。私たちはひどい電話の受け取りをしていて、モバイルデータは本当にフレークだった。
  2. 私たちは後で視聴者にテキストメッセージを送るつもりだったので、同じ電話番号を持つ必要がありました。

だから、私たちはUSB GSMモデムを手に入れ、プリペイド電話SIMを使いました。これにより、無料で無制限のメッセージを受信することができました。しかし、我々が好きだったように素早くメッセージを送信することはできませんでした。

モデムの選択

選択するGSMモデムがかなりあります。あなたは、USBインターフェースと取り外し可能なSIMを備えたものを探しています。Wi-Fiを使用してコンピュータに接続するGSMモデムは動作しません。ほとんどのモバイルデータSIMではSMSメッセージを送受信できないため、SIMを取り外す必要があります。もう1つの大きな要件はLinuxドライバであり、Googleは本当にあなたの友人です。注意すべき主な点は、メーカがマイナー製品のリビジョンでチップセットを変更していることです。

私たちはHuaweiチップセットを使って古いボーダフォンモデムに行きました。私が使った正確なモデルはHUAWEi Mobile Connect Model E169です。これはLinuxで次のように表示されます:

ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem

SMSツール

SMS Toolsは、Linux上のGSMモデムとのインタフェース用のオープンソースソフトウェアパッケージです。これには、メッセージを受信するデーモンSMSDが含まれています。SMSDは、メッセージが受信されたときに独自のスクリプトを実行するように設定されているため、必要なものは何でもできます。

インストールはUbuntuらには簡単です:

sudo apt-get install smstools

次に、モデムとスクリプト用のソフトウェアを設定する必要があります。

sudo s vim /etc/smsd.conf

設定ファイル

設定ファイルは扱いにくいですが、ありがたいことに、いくつかの正常なデフォルト設定が付属しています。お気に入りのテキストエディタでファイルを編集します。

モデム構成

まず、モデムを設定する必要があります。モデムの設定はconfigファイルの最後にあり、正確なパラメータはあなたのモデムの種類によって異なります。私が必要なものを見てみましょう:

[GSM1]
device = /dev/ttyUSB0
init = AT^CURC=0
incoming = yes
baudrate = 115200

device は、モデムのファイル記述子を指定する場所です。USBモデムを使用している場合、これはほとんどの場合/ dev / ttyUSB0になります。

initはあなたのモデムに必要なATコマンドを指定します。モデムの中には、何かをする前に初期化コマンドが必要なものがあります。ここでは、モデムのマニュアルを見つけるか、SMSTools フォーラム を利用して、他の人の作業構成を見つけるという2つの方法があります。

SMSToolsにメッセージを受信するためにこのデバイスを使用したいことを伝えるためにそこに着信があります。

ボーレートは、まあ、デバイスとの通話に必要なボーレートです。

私が言ったように、そこから選択する多くのオプションがありますが、これは私が必要最小限です。SMSToolsのウェブサイトとフォーラムでヘルプを確認してください!

イベントハンドラ

設定ファイルのもう一つの重要な部分は、イベントハンドラです。ここでは、メッセージを送受信するたびに実行されるスクリプト/プログラムを指定できます。このスクリプトから、必要な処理を行うことができ、受信メッセージに返信することもできます。

eventhandler = /home/michael/smstools/sql_insert

メッセージを送信する

SMSメッセージを送信するのは簡単です。Smsdは、設定ファイルで指定されたフォルダを送信メッセージのために探します。このフォルダに表示されるファイルは自動的に送信されます。デフォルトでは、このフォルダは/ var / spool / sms / outgoingです。

SMSファイルには、送信する電話番号(国コードを含みますが、+付き)とメッセージの本文が含まれています。例えば:

To: 61412345678

This is a text message sent by smstools. Awesome!

簡単!このようなファイルをフォルダに入れて、メッセージを送信しているだけです。

メッセージの受信

イベントハンドラを見てみましょう。このスクリプトは、メッセージを送受信するたびに呼び出されることを覚えておいてください。メッセージに関する情報は、プログラムにコマンドライン引数として与えられます:

イベントタイプ。これは、SENT、RECEIVED、FAILED、REPORT、またはCALLのいずれかになります。私たちはここで受信したものだけに興味があります。
SMSファイルへのパス。このファイルを読んで、必要なものをメッセージで任意のプログラミング言語を使用してメッセージを操作できます。しかし、formailとBash を使うのはとても簡単です。例えば:

#!/bin/bash

#run this script only when a message was received.
if [ "$1" != "RECEIVED" ]; then exit; fi;

#Extract data from the SMS file
SENDER=`formail -zx From: < $2`
TEXT=`formail -I "" <$2 | sed -e"1d"`

そこから、あなたは何でもできます。私は、メッセージをMySQLデータベースに入れました。

トラブルシューティング

これはLinux上でSMSメッセージを送受信できるプログラムを書くために必要なすべてのものです。実際にあなたのモデムと話すsmsdを持っていれば、かなり簡単です。しかし、実際には脆弱でもあります。

smsdログファイルは 非常に 便利です。/var/log/smstools/smsd.logにあります。

私が遭遇したいくつかのエラーとその対処方法は次のとおりです。

モデムが登録されていません

次のようなエラーが表示されます。

GSM1: MODEM IS NOT REGISTERED, WAITING 1 SEC. BEFORE RETRYING

つまり、モデムが受信を失い、接続を再確立しようとしています。残念ながらここでは何もできませんが、待っているか、USB延長ケーブルを使用して、より良い受信でスポットを見つけようとしています。

書き込みモデムエラー

このようなエラー:

GSM1: write_to_modem: error 5: Input/output error

ソフトウェアがモデムと通信できなくなったことを意味します。これは通常、モデムが誤って抜かれたり、システムの電源が入った後にモデムが接続されたり、USBドライバの断続的なグリッチによって引き起こされます。これを修正するには、次の手順を実行します。

  1. smsdを停止する(sudoサービスsmstools stop)
  2. モデムを取り外す
  3. 10秒ほど待ってください
  4. モデムを再び接続します
  5. smsdを起動する(sudoサービスsmstools start)

シリアルポートを開くことができません

このエラーが表示されることがあります:

Couldn’t open serial port /dev/ttyUSB0, error: No such file or directory

これは、モデムを接続する前にコンピュータ(したがってsmsd)を起動した場合に発生します。上の手順に従って修正してください。

結論

それであなたはそれを持っています。これらの手順に従うと、安価なプリペイドSIMとGSMモデムを使用して、LinuxでSMSメッセージを送受信できます。

次の記事では、私がこの設定を使ったものを正確に見ていきます。