2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

NVR510でIIJmioひかり電話が使えるようにし、電話着信があったらメール通知する

Last updated at Posted at 2022-09-24

はじめに

IIJmioのひかり回線とひかり電話を導入しました。

ひかり電話を導入するには基本的に月額300円でルーターをレンタルしないといけなかったのですがそれが嫌だったのでYAMAHAのNVR510というルーターを中古で買いました。こいつが結構使えるやつで、Web GUIから簡単にセットアップができました。なので、そのセットアップの仕方とひかり電話がきたらメール通知するようにするやり方をメモしておく。

Step0. 前提

以下を契約、準備する

  • IIJmioひかり
    • IPoEオプション -無料
    • ヒアリングのときに小型ONUを使用すると申し出ること
    • ひかり電話
      • 固定電話機本体。例えば、VE-GD21-W 3600円@メルカリ など
      • ナンバーディスプレイオプション(ないと着信履歴がつかない)
  • NVR510 -ラクマで2万9千円にて購入
    • 適当なmicro SDカード
  • 必要に応じて適当な無線LANルーター(NVR510にはWi-Fi機能はついていないので)

Step1. NVR510でインターネット接続(IPv6 IPoE+Ds-Lite(taransix))

色々難しいコード(config)での設定がwebにありますが、ええいわからん!ということで見つけた手順。
コードでの設定は一切しません。web UIにログインして以下の通りにやります。

以下の手順は一度初期化を行い、まっさらな状態でスタートしてください。初期化はNVR510の場合、裏側のiniスイッチを押しながら電源ONです。

かんたん設定:プロバイダー接続

注意
これは一切設定しない。

一切設定しません。むしろ設定するとインターネットにうまく接続できなくなった覚えがあります。

かんたん設定:VPN → 拠点間接続

  1. 接続種別: IPIP
  2. IPIP設定
    設定名: 任意
    接続先ホスト: gw.transix.jp
    ポート開放: 指定しない
    IPIPキープアライブ: 使用しない
  3. 経路: デフォルト経路

これだけインターネットに接続できるようになります。

Step2. ひかり電話の設定

かんたん設定:IP電話→ひかり電話

  1. ひかり電話の設定:ひかり電話を使用する
  2. インターフェースの選択:ONU
  3. プレフィックスの設定:設定なし

簡単ですね。これだけです。あとはメール通知できるようにしていきます。

参考までに、

詳細設定:IP電話→TELポート

  1. ナンバー・ディスプレイ: 使用する

この設定をしておかないと、電話に着信履歴が残りません。

Step3. 電話着信をメール通知する

元ネタはNVR500のLUAスクリプトを使って電話着信をメール通知するようにしてみたです。改変点はgmailを使えるようにしたことと、メールの内容をユーザフレンドリーにしました。非通知着信の場合は着信を通知しても意味がないので意図してメール通知しないようにしています。

以下のluaスクリプトを使います。設定方法などは下部にあります。

lua call.lua
--[[
 
	●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 = "SIP Call from"	-- ★

-- ptn の文字列パターンを検出した時に結果を通知する show コマンドをカンマで区切って列挙する
-- 例えばルーターの設定を通知する場合には、"show config" を、
-- ログを通知したい場合には "show log" を記述する
cmd_ptn = "show history | grep TEL | grep 通信中"

-- メールの設定
mail_tbl = {			-- ★
	smtp_address = "smtp.gmail.com",
	smtp_port = "465",
	smtp_auth_protocol = "plain",
	smtp_auth_name = "USER-ID",
	smtp_auth_password = "PASSWORD",
	from = "USER-ID@gmail.com",
	to = "USER-ID@gmail.com",
	smtps = true
}

-- メールの送信に失敗した時に出力する 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

------------------------------------------------------------
-- メインルーチン								 --
------------------------------------------------------------

while (true) do
	local rtn, str
	rtn, str = rt.syslogwatch(ptn)
	if (rtn) and (str) then
		rtn, str = exec_command(cmd_ptn)
		local phone_num = string.match(str, string.regexp("0[0-9]{9,10}"))
		if(phone_num~=nil) then
			mail_tbl.text = phone_num .. " から着信がありました。\r\n\r\n着信日時:".. time_stamp()
			mail_tbl.subject = "【NVR510】着信通知 from " .. phone_num
			rtn = rt.mail(mail_tbl)
			if (not rtn) then
				rt.syslog(log_level, "failed to send mail. sd1:/local/call.lua")
			end
		end
	end
end

Step3.1 設定方法

設定値をいい感じに設定してください。ここはコードを改変する必要がありますが、さほど難しくありません。自分の場合、fromとtoを同じアドレスにして自分にメールするようにしています。

なおgmailでメール通知するためにはGoogleアカウントのパスワードではなく、アプリパスワードを生成する必要があります。アプリパスワードについてはGoogleのアプリ パスワードでログインする を参照してください。

コードの修正(設定)が終わったら、mico SDカードにの直下にlocalディレクトリを作り修正したスクリプトをcall.luaで保存

mioro SDカードをNVR510に挿入し、web UIの管理→保守→コマンドの実行から下記を入力

schedule at 1 startup * lua sd1:/local/call.lua

Step4.完成

すべてが上手く行けば、着信があるたびにこのようなメールが来ます。

Subject :【NVR510】着信通知 from 08011111111


Model: NVR510
SystemName: NVR510_xxxxxx
Revision: Rev.15.01.24
Time: 2022/09/24 15:05:49

08011111111 から着信がありました。

着信日時:2022年09月24日 15:05:46

ほんとは、不在着信だけ通知するようにしたかったし、メールの冒頭のModel、SystemNameなども消したかったけど、よくわからなかったので放置。

いいNVR510ライフを!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?