自分の場合、月イチくらいでNVR500のSyslogを見て、かかってきた電話番号を迷惑電話チェックサイトを使って調べ、着信拒否するという作業をしているんですが、最近は特にフリーダイアルである0120からの電話が多く、チェックするだけでも面倒になってきたので、電話着信の都度メールさせることでチェック漏れを減らし、変な時間帯にかけてくる業者をあぶり出そうかなということで、そういうスクリプトを設定してみました。
といっても、YAMAHA様のサイトに掲載されているサンプルスクリプト にちょっと手を入れただけなので、たいした事はやってませんが……。
本当は、NVR500の着信拒否リストと比較して0120からはじまる番号は自動で拒否リストに追加、という感じのことをやりたかったものの、ゼロからそういうコード書くのは時間かかりそうだったので、サンプル流用でお茶を濁しました。(一番は analog arrive restrict で 0120* みたいなワイルドカード使った一括拒否ができれば最高なんですが……)
ということで、同じようなことをしたい方の参考になれば幸いです。
スポンサードリンク
自分のテストした環境としては、ナンバーディスプレイ契約をしていて、電話回線はNVR500にひかり電話を直収していない(ホームゲートウェイからLINE経由で接続) 環境となります。
メール送信元はYahoo! JAPANのメールアドレスとし、SMTP-AUTH で認証しています。GMailだとSMTP-AUTHにSSL接続が必須のようで、SMTP-AUTHのSSL接続に対応していない(らしい) NVR500ではうまくメール送信できませんでした。
--[[ ●SYSLOG 監視スクリプト SYSLOG を監視し、特定の文字列が含まれたログを検出したら、指定した show コ マンドおよび show log コマンドの出力結果を管理者にメールで送信するスクリプ トです。 <説明> ・このファイルを RTFS か外部メモリに保存してください。 ・本項目の config の設定では schedule at コマンドでルーター起動時に Lua スク リプトが実行されるように設定しています。 ・スクリプトを停止するときは terminate lua コマンドを実行してください。 ・再度、Lua スクリプトを実行する場合は lua コマンドで実行してください。 ・★マークの付いた設定値は変更が可能です。 <ノート> ・メールの送信失敗時に出力する SYSLOG レベルを指定可能です。 SYSLOG のレベルを指定するには、log_level を設定してください。 debug レベル、notice レベルの SYSLOG を出力するためには、それぞれ以下の設定 が必要です。 debug レベル ・・・ syslog debug on notice レベル・・・ syslog notice on ・本スクリプトファイルを編集する場合、文字コードは必ず Shift-JIS を使用してく ださい。 ]] --------------------------## 設定値 ##-------------------------------- -- 検出したい SYSLOG の文字列パターン ptn = "InComing Call from" -- ★ -- ptn の文字列パターンを検出した時に結果を通知する show コマンドをカンマで区切って列挙する -- 例えばルーターの設定を通知する場合には、"show config" を、 -- ログを通知したい場合には "show log" を記述する cmd_tbl = { -- ★ "show history | grep TEL | grep 通信中" } -- メールの設定 mail_tbl = { -- ★ smtp_address = "smtp.mail.yahoo.co.jp", smtp_port = "587", smtp_auth_protocol = "plain", smtp_auth_name = "USER-ID", smtp_auth_password = "PASSWORD", from = "USER-ID@yahoo.co.jp", to = "mail-address@example.com" } -- メールの送信に失敗した時に出力する SYSLOG のレベル (info, debug, notice) log_level = "debug" -- ★ ----------------------## 設定値ここまで ##---------------------------- ------------------------------------------------------------ -- コマンドを実行結果を出力する関数 -- ------------------------------------------------------------ function exec_command(cmd) local rtn, str rtn, str = rt.command(cmd) if (not rtn) or (not str) then str = "実行失敗\r\n" end return rtn, string.format("# %s\r\n%s\r\n", cmd, str) end ------------------------------------------------------------ -- 現在の日時を取得する関数 -- ------------------------------------------------------------ function time_stamp() local t t = os.date("*t") return string.format("%d/%02d/%02d %02d:%02d:%02d", t.year, t.month, t.day, t.hour, t.min, t.sec) end ------------------------------------------------------------ -- メインルーチン -- ------------------------------------------------------------ local rtn, str while (true) do rtn, str = rt.syslogwatch(ptn) if (rtn) and (str) then mail_tbl.text = string.format("ログに検索文字列が検出されました。\r\n検索文字列: \"%s\"\r\n\r\n", ptn) for i, cmd in ipairs(cmd_tbl) do rtn, str = exec_command(cmd) mail_tbl.text = mail_tbl.text .. str end mail_tbl.subject = string.format("電話の着信を検知しました (%s)", time_stamp()) rtn = rt.mail(mail_tbl) if (not rtn) then rt.syslog(log_level, "failed to send mail. sd1:/local/call.lua") end end end
過去の着信電話番号もメールで送られることがあったため(同一電話番号で複数回コールテストを行った場合には発生しなかったのですが)、現在着信中の電話番号のみ通知するよう、「show history | grep TEL」コマンドを「show history | grep TEL | grep 通信中」に修正しました。
まず、mail_tbl の内容を使用する環境にあわせて設定します。Yahoo! JAPANのメールアドレスを使用するなら、smtp_auth_name(メールアドレスの@以前を指定)、smtp_auth_password(メールアドレスのパスワード)、from、to を設定するだけでOKです。他のメールサービスを利用する場合は、追加で smtp_address(SMTPサーバー名)、smtp_port(SMTPポート番号)、smtp_auth_protocol(SMTP-AUTHの認証プロトコル) についても、各サービスにあわせて設定します。
また、このスクリプトでは設置位置を rt.syslog(log_level, “failed to send mail. sd1:/local/call.lua”) と指定しています。これは、MicroSDの local ディレクトリ(ファイル共有機能でアクセス可能なディレクトリ)に、call.lua というファイル名で保存することを想定していますので、別の場所・ファイル名で使用する場合は、適宜変更してください。(エラー発生時にSyslog出力する際、スクリプトの場所を出力しているだけの部分なので、特に変更しなくても実害はないと思いますが)
スクリプト内容の修正が終わったら、起動時に自動実行されるように、以下のようなコマンドをコンソールまたはWebのコマンド実行画面から入力します。
schedule at スケジュール番号 startup * lua スクリプト名
今回の例では、以下のようにしました。スケジュール番号は、重複しなければ適当な数字を入れればOKです。また、 save コマンドを入力して、再起動しても設定が消去されないようにしておきます。
schedule at 99 startup * lua sd1:/local/call.lua save
ここまで設定できたら restart コマンドを入力して再起動し、電話をかけてみましょう。以下のようなメールが届けば正常に動作しています。(電話番号などは例です)
Subject : 電話の着信を検知しました (2015/04/15 14:00:00) Model: NVR500 Revision: Rev.11.00.25 Time: 2015/04/15 14:00:02 ログに検索文字列が検出されました。 検索文字列: "InComing Call from" # show history | grep TEL | grep 通信中 2015/04/15 14:00:00 TEL* [着信] 00:00:00 通信中 0120123456789
これでセールスの電話がかかってきても即チェックできるなーと思いつつ、設定してから数日、そういう時に限って電話はかかってこないという、マーフィーの法則を地で行っている今日この頃ですが、目先の話はさておいても、月イチのSyslogチェックの手間は多少なりとも軽減されるかなーということで。
YAMAHA様のサイトには、他にも スクリプト例 が掲載されているので、いろいろ試してみるのも面白いかと思います。
……さて、そろそろNVR500だけでなく、購入してから4ヶ月くらい開封してないRTX1210の導入および、家庭内ネットワーク環境の変更にも手を付けないと……。
スポンサードリンク
当サイトのコメント欄は承認制となっております。また、日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)
2 Responses to NVR500のLUAスクリプトを使って電話着信をメール通知するようにしてみた