IPカメラ用なんちゃってアラームサーバをOpenWrt上に

玄関の呼び鈴代わりの鉄腕アトムIPカメラ

うちの玄関にはIPカメラを設置している(図)。これは確か “B Series Astro Boy Model” と呼ばれていた,pan, tilt機能を持つもの。 “Astro Boy” (=鉄腕アトム)なのはその形状が鉄腕アトムの特徴的な頭部を想起させるからだろう。確かなところはわからないが,2012年なり2013年なりに購入したのだと思う。動画はMJPEG形式,画像はVGA解像度までなので,HDでの動画・写真撮影が当たり前の最近の機種からすると時代遅れと言われてもしかたがない。が,まだまだ使い続けたい。

1つの理由がアラーム端子を入力用,出力用の2セットとも備えていること。以前はそういうスペックのIPカメラは一定の割合であったように思うが最近見かけない。この鉄腕アトムカメラにはアラーム入力端子にボタンを繋いであるので,ボタンが押されると短絡された状態になり,アラームがトリガーされたものとIPカメラは認識する。それに対するアクションで住人に通知が行くようにして,そのボタンを呼び鈴代わりにしたかった。出力用アラーム端子には圧電ブザーを取り付けてあり,ボタンを押したらブザーが鳴るようにすることで,ボタンを押した人にはオーディオフィードバックがかかるようにした。

当時は父と二人暮らしだったのだが,本来の呼び鈴では1Fの狭いエリア内にいるときでないと聞こえず,2Fで寝起きや仕事をしてた私には聞こえなかったり,父も離れに行っていると聞こえず,2人とも在宅中なのにも関わらず配達を受け取りそこねるといったことがたびたび起こっていた。その問題を解消したかった。

アラーム通知機能を利用してボタンが押されたことを通知

さて,設定によりアラームがトリガーされたときいろいろなアクションを取らせることができる。FTPサーバに画像をアップロードする,指定アドレスに画像とともにメールを送る,MSNメッセンジャー(!!!)で通知するなど。

そのアラームがトリガーされたときに起こせるアクションの1つが,「アラームサーバ」に通知すること。といっても,要はHTTPで以下のリクエストが送られるだけ(マニュアルそのスナップショット)。

GET /api/alarm.asp?
    username=username&
    userpwd=password&
    rea=alarm type (1=Motion Detection, 2 =Alarm from Alarm in port)&
    io=0

実際には途中の改行はない。また行末に ” HTTP/1.0″ がつく(1.1ですらない)。

メールでの通知は,写真を6枚添付してから送ってくることもあり,メールが届くまでに遅延があったため,送られてきたのに気づいたときにはもう来客・配達人は帰ってしまったりしていた。しかも,時間のかかる写真添付をやめさせるように設定するすべも用意されていない。そうなると,実際にアラームに気づくまでの時間を短縮するにはこのアラームサーバへの通知機能を利用するしかない。

その路線で以前も努力したときの経緯は “OpenWrt BB rc3上のuhttpdのCGIが思うように動作しない” にある。当時もOpenWrtをインストールしたルータTP-Link TL-WR703N(ただしブリッジとして運用)で通知を受けようとした。OpenWrtのWeb設定システムLuCIのためにWebサーバはいずれにせよ走っているのでそのCGIとして実現しようとし,実際うまくいった。ところが,OpenWrtのバージョンを上げるとそれがなぜかうまくいかなくなり,しょうがなくNcatで「なんちゃってアラームサーバ」を作り,それで対処していた。そのときはなぜCGIとして実現できなくなったのか理由はわからなかった。

再度挑戦してわかったこと

このほど,ドコモの固定回線置き換え用ホームルータHome 5G HR01を導入し,それを中心にホームLANを構成し直したこともあり,最新版OpenWrtをインストールしたNexx WT3020F(やはりブリッジ運用)で再挑戦することにした。

uHTTPdのCGIスクリプトとしてはalarm.aspは起動もされない

やはりOpenWrtで走るWebサーバuHTTPdのCGIとして実装しても(そのためには以下が必要),実際鉄腕アトムカメラに接続したボタンを押したときにはCGI alarm.asp は起動すらされない。起動されてすぐkillされているのではない。ルータ上でtcpdumpを動かしそれをPC上のWiresharkで眺めてみても,cURL コマンドの場合とIPカメラがアラーム通知をする場合とで差があるように思えないし,GETリクエストがWT3020Fに伝わっていることは確実なのに,だ。ブラウザから http://鉄腕アトムカメラのIPアドレス/api/alarm.asp?user=… を開いたり,cURLでそのGETのリクエストと等価なはずのcURLコマンド( “OpenWrt BB rc3上のuhttpdのCGIが思うように動作しない” 参照)をPC上で実行したときには普通に alarm.asp は起動されるのに。

/etc/config/uhttpdに以下を入れる(代わりにluci-app-uhttpdパッケージをインストールしてLuCI上で同様の設定をしても良い)。

list interpreter '.asp=/bin/ash'

オプションcgi_prefixは/cgi-binと設定してあるのにも関わらず /api/alarm.asp に対応してくれる。

途中でkillされてしまうにしても一旦は起動されるのであればnohupと併用すればなんとかなるだろうがその手は使えない。起動もされていないということに気づく前はバッファリングが理由ではないかとstdbufコマンドやAwk内であればfflush()を使ってみたりもしたが,そこが理由ではないので当然うまくいかない。

[OpenWrt Wiki] uHTTPd webserver” や “[OpenWrt Wiki] uHTTPd Web Server Configuration” を読んでもヒントは見当たらない。さんざん時間をかけて試行錯誤した結果わかったことは,鉄腕アトムカメラは,GETに対するレスポンス(”HTTP/1.0 200 OK”)までは受け取るが,どうやらその後ヘッダの残りやボディを受け取らず即ディスコネクトしてしまうようであること。ステータスコードを返すまではCGIの仕事ではない。uHTTPdが alarm.asp “CGI” を起動する前にクライアント(鉄腕アトムカメラ)がディスコネクトしてしまうので,それを検知してuHTTPdはCGI起動をしないのではないかと想像する。ちなみに,ステータスコードを返さないとCGIとしては “Bad Gateway” と表示する。

ListenモードのNcatによる「なんちゃってWebサーバ」( “OpenWrt BB rc3上のuhttpdのCGIが思うように動作しない” にあげたものと本質的には変わらない)の場合,そういったHTTPのセマンティクスには無頓着。なので少なくとも –sh-execで指定したスクリプトの起動は行われる。それで alarm.asp は起動できる。ただし,alarm.asp がデバッグやテストのためにCGIライクに振る舞えるためには,alarm.asp の起動以前にステータスコードは返されていなくてはならない。また,CGIならば起動時にセットされる環境変数(QUERY_STRING,REMOTE_ADDRなど)は,Ncatのスクリプトでセットしてやってからalarm.aspを起動する必要がある。

リクエストの処理はGawkのスクリプトでやるが,以下ではうまくいかない。そこでブロックしてしまう模様。

printf “HTTP/1.0 200 OK\r\nConnection: close\r\n” > “/dev/stdout” ;

なのに以下ではうまくいく。なぜ???今だにわからない…。

system ( “echo -ne \”HTTP/1.0 200 OK\r\nConnection: close\r\n\”” )

“CGI”スクリプトの alarm.asp で標準出力等に出力があると固まる

上の理由でuHTTPd Webサーバからalarm.aspをCGIスクリプトとして起動できないことはわかったが,Ncatによる「なんちゃってWebサーバ」ではもう問題がないかというと,別の問題があった。

テストのためにブラウザからアクセスしたり,PCからcURLコマンドでGETしてみたりしたときに,デバッグ目的に標準出力にいろいろ文字出力をしていた。ブラウザからアクセスした場合はそれがWebページとして表示されるのでわかりやすいと思ったからだ。しかし,実際に鉄腕アトムカメラからアラーム通知があったときにはその文字出力でブロックしてしまうようだった。実際にIPカメラのボタンを押したときにだけに起こる以下のエラーもヒントになった。

curl: (23) Failure writing output to destination

Ncat版「なんちゃってWebサーバ」はアクセスされたときスクリプトを起動するのだが,アクセスした側が入力をすかさず閉じてしまうので,スクリプト内で標準出力に出力しようとしてもブロックしてしまうのだろう。

もちろん標準出力への出力を一切止めてしまうというのも1つの手であったが,出力を全てバックグラウンド実行させることでしのぐことにした。鉄腕アトムカメラから実際にアラーム通知があった際には,このサブプロセスはブロックしてしまう。だが,最終的にスクリプトが終了する段階でこれらサブプロセスはいずれにせよ合わせて終了される。デバッグ目的にWebブラウザやcURLからアクセスする際には出力は成功する。

Bashスクリプトでは exec &>/dev/null でそこから後の stdout, stderr への出力を /dev/null にリダイレクトできる。これはBashismのようでAshではどうせ使えない方法だったが,ファイルディスクリプタが閉じているかどうか判断して,標準出力が閉じているようなら/dev/nullにリダイレクトすることも考えた。試してみると,標準出力に実際出力すればブロックする状況でも,閉じてないと判断されてしまってこの手はいずれにせよ使えない。Sleepコマンドを使ってタイムアウトを実現するやり方も試したが(下),単純にバックグラウンド実行させてブロックするならブロックさせてほっておく方法の方が楽。

echo -ne "Content-Type: text/plain; charset=utf-8\r\n\r\n" & PID=${!};
sleep 1; kill ${PID} ; ESTAT=${?} ; echo "Kill exit status (1 for success before timeout): $ESTAT" >&2

Ncatの動作のために明示的なポート開けが必要

uHTTPdとNcatによる「なんちゃってWebサーバ」は並行して走る必要があるので,後者は80以外のポートを使う必要がある。そのためには,OpenWrtのBarrier Breakerでは必要なかった明示的なポート開けが必要だった。「なんちゃってWebサーバ」用にポート8081を選択。

“Network” → “Firewall” → “Traffic Rules” タブ でポート8081を開ける。

設定では Destination Zone として Device を選択するのがキー。

DNSの名前解決は問題

アラーム通知があったことをAndroid端末に伝えるための方法の1つとして,Automatecloud messaging機能を利用するのだが,それが以下のようなエラーを時々吐いていた。cURLのタイムアウトに対する対策は講じていたのに

curl: (6) Could not resolve host: llamalab.com

その後LAN内全般のDNS体制を見直したのでそれで解決することを期待したい。

やはりEmacsは快適

ルータ上でごくごく基本的な機能しかないZileで編集していたが,Windows上でCygwin版Emacsを起動し,Trampライブラリを使って遠隔編集。ああ,凄まじく快適

その他

 

 

 

OpenWrtにおけるDNSとDHCP

OpenWrtロゴ(CC BY-SA 4.0)

OpenWrtロゴ(CC BY-SA 4.0

OpenWrt 21.02をインストールしたNexx WT3020FでDNSの検索が失敗することがあり,主にタイムアウト設定をいじることで解決を試みた。しかしそれにも関わらず今だにドメイン名解決に失敗することがある。DNSの設定に何か問題がある気がしてならない。そこでそれをきちんと解決しようと考えた。この記事の内容は5年前に書いた “OpenWrt上でのDnsmasqの設定” と骨子は同じだが,いくらかは今の自分の理解のほうが深まっていると思う。いやそう思いたい。

やりたいこと

さて,今でもそうであったが今後も,ルータ自身はそのときどきのインターネット接続サービスプロバイダに提供されたものを使い,そこから有線でブリッジモードにしたルータ(以下簡単に「ブリッジ」)を繋いで家全体を有線・無線でカバーするというLAN構成を取る予定( “ホームLANの新構成“)。このルータは現在であればドコモのHome 5G HR01。来月中旬以降Biglobe eo光が使えるようになればeo光多機能ルーター

各ブリッジには決め打ちでIPアドレスを手動で割り振る。DHCPサーバに依存する形にするとDHCPサーバが立ち上がってない状態でブリッジが起動した場合にヤヤコシクなりそうだからだ。

この場合ブリッジにはDHCPでDNSサーバが指定されないので,ブリッジ自身がインターネットに接続する必要があるのなら,手動でゲートウェーだけでなくDNSサーバも指定する必要がある。OpenWrtであれば上記のcustom DNS serversの項で指定。ゲートウェーとバックアップとしてパブリックのものを指定することになるのだろうか。DHCPクライアントにはDHCPサーバからDNSが指定されるが,DHCPクライアントとして設定されてないブリッジにはそれが起こらない。意外と見落とす点だと思う。

OpenWrtではパッケージリストをダウンロードをしたりインストールしたパッケージが動作するのにインターネットに接続できる必要があるが,一般ブリッジ(ルータ)でもファームウェアのアップデートのためにインターネットに接続できる必要がある。

そのブリッジの中でOpenWrtをインストールしてあるものの1台にLAN全体のDHCPサーバを任せたい。Dnsmasqを利用することになるが,スタティックリースをするものについては,<自分で設定した名前>.lan という名前でアクセスできるようになり,これが地味に便利だからだ。例えば玄関に設置しているIPカメラのWeb管理画面にアクセスする場合は,http://entrancecam.lan/ でOK,といった具合。特に何かしらサーバ的役割を担っているものにはLAN内からアクセスできる必要がありそのときに楽。

ちなみに,今まで誤解していたが,スタティックリースであっても,名前付けだけしてIPアドレスは固定しない,というやり方もできる

この機能が必要なければ,与えられたルータにDHCPサーバをやらすので何ら問題ない。与えられたルータではなく,自前のブリッジでDHCPサーバを走らせておけば,インターネット接続サービスプロバイダを乗り換えてルータが変わってもDHCPサービスに関しては何も変更する必要がない(新しいルータのDHCPサービスは切る必要があるが)。

DHCPサーバには,さしあたりOpenWrtの最新版21.02.0へのアップグレードをしたばかりNexx WT3020Fをあてる。WZR-HP-AG300Hも候補だし,パフォーマンス的には明らかにこちらの方がよい。が,先日友人にインターネット接続費を抑えるための相談を受け楽天ひかりで最終的にベストのパフォーマンスが得られるようにするための暫定措置期間中にWZR-HP-AG300Hを使うかもしれないので,現時点ではWZR-HP-AG300Hは温存。

OpenWrtにおけるDNS設定

さて,OpenWrtのWeb UIであるLuCIではDNSに関する設定が以下の3箇所にある。これらの違いがよくわかってなかった。

  1. “Network” → “Interfaces” のインターフェースごとの設定で,”LAN” インターフェースに対して “Advanced Settings” タブで “Use custom DNS servers

  2. 同じく “Network” → “Interfaces” のインターフェースごとの設定で,”LAN” インターフェースに対して “DHCP Server” タブ,さらに “Advanced Settings” タブ中の “DHCP Options

  3. “Network” → “DHCP and DNS” の “General Settings” タブの “DNS forwardings

[Solved] Difference between setting DNS in DHCP-Options, “Use custom DNS servers”, or DNS Forwardings – Installing and Using OpenWrt / Network and Wireless Configuration – OpenWrt Forum” が私の持つ疑問そのもの。”[Solved] Difference between “Use custom DNS servers” and “DHCP-Options” – Installing and Using OpenWrt / Network and Wireless Configuration – OpenWrt Forum” も被っている。

そこにある回答(主にこの投稿この投稿)を元にまとめると:

  1. Custom DNS servers — OpenWrt自身が使用するDNSサーバ。ISPなどから自動的に与えられるものではなく自分で手動で設定する場合に使う。
  2. DHCP options — OpenWrtがDHCPサーバとして振る舞うとき(Dnsmasqで)デフォルトでは自分をDHCPクライアントのDNSサーバやゲートウェーとして設定するが,DHCP optionsでそれを変えるなどできる。DHCPクライアントに施す設定を指定するもの。
  3. DNS forwardings — 特殊な用途に使う(=自分には関係ない)。特定のドメインについてのみ特定のDNSサーバーで名前解決をさせるのに使う。

やりたいことをどう実現するか

この前提でどのように設定すればいいかというと以下:

  • DHCPサーバを走らせることにしたブリッジでスタティックリースの設定などを行う。後でやっても構わない。
  • このDHCPサーバは,特に何もしないと,クライアントにはそのブリッジがゲートウェーだと設定してしまう。しかしそれではクライアントはインターネットに接続できなくなってしまうので,DHCP optionsに “3,<正しいゲートウェーのIPアドレス>” を指定する。これが極めて重要。
  • DNSサーバとしてもこのブリッジが設定されるが,それは望ましいことなので問題ない ⇦ もちろんそれで目的は達成されるのだが,LANだけの名前でなく全ての名前を検索するのに非力なNexx WT3020Fに頼るのは合理的ではない。DNSサーバは複数指定できるので,ゲートウェーとNexx WT3020Fの双方をこの順で指定するのがよいのだろう。インターネットの名前はゲートウェーで検索され,結果はキャッシュされる。LAN上のみの名前はゲートウェーでは処理できないので,Nexx WT3020Fで処理される。つまり,DHCP optionsに “6,<ゲートウェーのIPアドレス>, <DHCPサーバのIPアドレス>” を指定する
  • このブリッジ以外でDHCPサーバを走らせうる機器はルータも含め全てDHCPサーバ機能を切る。
  • ブリッジでDHCPサーバ機能を有効化した上で,全て再起動。

DHCP optionsで指定できるパラメタは多数あるが,自分が使用しそうなのは “3” (router) ,”6″ (domain name server)ぐらい。

現在のゲートウェードコモのHome 5G HR01わずか数分分しか検索結果をキャッシュしないようで,Nexx WT3020F上で走らせているIPカメラ用なんちゃってアラームサーバからcURLを走らせるとある程度の頻度で名前解決に失敗する。したがって,以下の対策をした:

  • Nexx WT3020F自身のDNSサーバとしては1.0.0.1, 8.8.4.4を192.168.11.1より先に指定。
  • Nexx WT3020FのDnsmasqのキャッシュのデフォルトが150だったのを1,000に増やした(LuCIで設定可)。

HR01のWifiにクライアントが接続できない

どうもドコモHome 5G HR01で有線側からwifi側にDHCPのブロードキャスト・メッセージが流れないようだ。そのためHR01のDHCPサーバ機能を切っていると,そのwifiに接続しようとする機器(スマホなど)に,LAN内でNexx WT3020FがDHCPサーバとして機能していても,そのブロードキャストパケットが流れず,機器はIPアドレスが取得できず通信できない。

HR01のwifi機能は諦めることにした その後解決。

パフォーマンス

このセットアップ前は dig コマンドが示すドメインネーム解決の時間は長いときで数十msだった。今は200msほどかかる ⇦ 名前解決対象によるのかも。TLDによって時間がかなり変わる。もちろん初回の話で一旦結果がキャッシュされれば数msになる。Nexx WT3020Fは非力で有線ポートも100Mbpsまでなので,将来的にはより強力なものに置き換えたい ⇦ WT3020Fが非力なのは事実なのでここは変わらない。

DnsmasqによるスタティックリースでIPアドレスまで指定する必要はない

この点誤解していたが,少なくともDnsmasqによるスタティックリースではIPアドレスを固定する必要はない。OpenWrtのwikiのスタティックリースの項によれば,ホストごとのスタティックリースの設定はDnsmasの-Gオプションに渡されるとのこと。Dnsmasqの-G/ –dhcp-hostオプションの項を読むと設定に相当の自由度があることがわかる。

特に以下により自分の考えが正しいことがわかる:

For example –dhcp-host=00:20:e0:3b:13:af,wap,infinite tells dnsmasq to give the machine with hardware address 00:20:e0:3b:13:af the name wap, and an infinite DHCP lease. –dhcp-host=lap,192.168.0.199 tells dnsmasq to always allocate the machine lap the IP address 192.168.0.199.

IPアドレスが固定で払い出されることが望ましい機器の数はごくごく限られるので,名前だけが指定できることは有用。IPアドレスも固定しようとすると,アドレスが被らないように配慮が必要になるので,それが省けるのはありがたい。

その他参考資料

ドコモHome 5Gで有線側からWifi側にDHCPのブロードキャスト・メッセージが流れない

追記: この記事に頂いたコメントのおかげで,無事解決!うまくいかなかった理由は以下:

  • 流れてなかったのはブロードキャストメッセージではなくユニキャストメッセージだった。
  • DCHPサーバであるDnsmasqはOFFERメッセージをブロードキャストメッセージで送信することもできたがそういう設定になっていなかった。

ドコモ Home 5G HR01の有線側からwifi側に(HR01とは別の)DHCPサーバからのブロードキャスト・メッセージが流れない,なんてことはありませんか?(HR01のSSIDの隔離機能は切っています)

HR01下でブリッジとして使っているOpenWrtルータでDHCPサーバを走らせて,HR01ではなくそれにLAN上の機器へのIPアドレス払い出しをしたいと考えています。HR01にwifiで接続したスマホに対して,OpenWrtのDHCPサーバは,ログによればそれに反応してちゃんとオファーを出しています。ところが,どうもそれがスマホに届いてるようではないのです。ですので,スマホはIPアドレスが得られず,通信ができません。つまり,ブロードキャストメッセージがwifi側→有線側には流れても,逆方向の有線側→wifi側には流れないのでは,と疑っています

スマホ上でパケットキャプチャを試みた結果,実際DHCPサーバからのオファーが来てないようなのですが,こういうことには疎いため正しくできた自信はありません。

追記: 某所で以下のようなコメントを頂いた。覚えておこう。

Wi-Fi環境でのパケットキャプチャですが、通常は端末自身に到達したパケットしかキャプチャできません。
具体的に言うと、端末が自分宛てではないと認識したパケットは含まれません。

有線の様に全てのパケットを確認したいなら、モニターモードに対応したWi-Fiアダプターが必要です。
ただ、該当製品は少ない(PC用の場合)し、スマホだとH/Wが対応していたとしてもroot化しないと使えないと思います。

HR01のDHCPサーバ機能は切っています。ネットワークの状況は正確には,HR01に有線でブリッジモードのAterm WG1200HSを繋げ,そこにさらにブリッジとして動作するよう設定したつもりのOpenWrtルータが繋がっています。WG1200HSのDHCPサーバ機能は切っています。関係あるかどうかもわかりませんが,その「送信元検証機能」も切ってあります

「送信元検証機能」が何してくれるものかよくわかりませんが,以下のようなそれに起因すると思われる不具合が起こるようです。それが今回の自分の問題に関係あるのかはわかりませんが,ともかく試してみました。今回特にそれが有意義に働いたふうはないですが…。

LAN内でHR01を含めたAPではSSIDを統一しローミングができるようにしてあり,HR01以外のAPに繋がったwifi機器はIPアドレスの払い出しを受け期待するような動作をしています。

WG1200HSは実はHR01と同室にあり,前者のwifi機能は切ってあります。後者のwifi機能を切って,前者のをオンにすれば解決する話かもしれません。ただ,HR01のwifi機能は(ちゃんと動けば)高性能ですので,できればそれを利用したいと考えています。

追記1: 結局HR01のwifiは切り,代わりにWG1200HSのwifiを使用することにしました。期待するような動作をしています。最初からそうしていれば何時間も無駄にすることなかった…。

なお,同一セグメント中DHCPサーバは1インスタンスのみ,とよく言われるが,払い出すIPアドレスの範囲が被らないようにしてあれば,複数サーバを立ててもよいようだ。一般的にはフェイルセーフの観点からむしろ複数インスタンスを用意するほうが望ましい。

自分の場合,スタティックリースにより名前で機器にアクセスできることがDHCPサーバを活用したい大きな理由なので,DHCPサーバは1インスタンスにするのが楽は楽。ただ,単に名前でアクセスできればよくIPアドレスが常時同じである必要がなければ,複数のDHCPサーバでMACアドレス→名前の設定を同期させれば,DHCPサーバを複数インスタンス走らせつつ目的を達成できる…いや,同じ.lanドメインのDNSサーバが2つ以上あるのはまずいのかな?

追記2: 某所で,DHCPのオファーメッセージはブロードキャストではなくユニキャスト,と指摘されたが, “protocol theory – Is a DHCP offer packet a broadcast or unicast? – Network Engineering Stack Exchange” によればどちらの可能性,さらに双方ともである可能性もあるようだ。

追記3: この記事に頂いたコメントで,同じことを試みた方からDnsmasqによるDHCPサーバでdhcp-broadcastオプションを設定したらうまくいった,ということを教えていただき,自分でも試してみたところその通りあっさり成功した。具体的にはDHCPサーバの走るホストの /etc/dnsmasq.conf に以下の一行を追加:

dhcp-broadcast

ブロードキャストが通ってない,というところまでは認識できていたのだから,Dnsmasqがちゃんとブロードキャストしているか確認すればよかった。あと一歩だったが,ともかく解決してうれしい。

ドコモホームルータ Home 5G HR01を使ってみて

ドコモの固定回線置き換え用ホームルータHome 5G HR01を使ってみた感想(マニュアルはこちらから詳しいマニュアルはこれ)。

最大の問題のパケづまりについては既に別記事に書いた。また,特にそのwifi機能についてはホームLANの新構成を検討する上で別途考慮した

SSIDは紛らわしい。デフォルトでは “a” を含むのが2.4GHz帯, “b” を含むのが5.0GHz帯。5.0GHz帯の “IEEE 802.11a” や2.4GHz帯の “IEEE 802.11b” の名称に由来する通常のコンベンションとは逆。一旦自分で逆転させたがその後それまでのSSIDに変更

2.4GHzで接続して web.setting (デフォルトでは192.168.128.1) 「SSID間通信隔離」を無効にして,5GHz帯で接続したときも設定ページに到達できるように。

SIMロックはかかってない詳細マニュアルのp. 2にその旨明記されているし,ドコモに電話で問い合わせても確認した。 “docomoの5G対応ホームルーター「home 5G HR01」が出荷遅延 | ひろざえもん.com” によれば,5G機能が利用できるのは本家ドコモ以外では対応バンドの関係でAuのみ。4Gだけでよければ楽天モバイル,ソフトバンクも利用できる。

5G接続しなくなった今では速度は下り数十Mbps。

現在IPv6非対応だが,IPv6シングルスタック接続試験に参加すれば今でも利用できるらしい。ただし,試した人によると特に速度面で改善は見られないらしい

Windowsでは携帯電波に再接続するたび?新たな「ネットワーク」扱いになる(図)。(図下に続く)

そもそもなぜHome 5Gに興味を持ったかというと,今後のインターネット接続は携帯電話通信でおきかえられるのではないかと思っていて,Home 5Gはそれに利用できると考えたから。楽天モバイルでそれをやろうと,Huawei製モバイルルータSpeed Wi-Fi NEXT W05を入手していたのだが,その策を実行する前にHome 5Gの一括0円キャンペーンが来たのでそれに乗っかった。

自分は4Kビデオをストリーミングしたりしないので,インターネット接続スピードは数十Mbpsも出たら十分。4G電波がちゃんと入ればそれは携帯のデータ通信で実現可能。2~3年前?ソフトバンク系の大容量データ通信サービスが話題になっていたこと,そして楽天モバイル(MNO)がデータ通信無制限プランを打ち出したことでこれらが自宅のインターネット環境を実現するのに利用できるかと思った。

今月の使用状況を見ると1月のデータ通信量は2人使用で400GB/月程度になりそう。私のお勧めを聞いて楽天モバイルで通話もインターネット接続も全てまかなっている方から月100GB程度ご利用になっていると事前に伺っていたので,そんなものかと思っていたが,実際には大幅に違った。

月400GB使うとなると,私の目論見はうまくいかなさそう。以下の理由で。

以上がわかったことが今回Home 5Gを試して得られた最大の収穫かもしれない。

Home 5GはホームLANの新構成で核になっているがBiglobe eo光が使えるようになったら,その後使えるシナリオが今のところ思い描けない。楽天モバイルの5Gに対応していればまだよかったのだが…。あ,たいそなアクセスポイントとして使うことはできるか11ax (Wi-Fi 6)対応であることだし。それに対応した機器はまだ持ってないが…。 “HUAWEI Speed Wi-Fi HOME L01を固定回線のアクセスポイント(ブリッジモード)として活用 – Embedded &oT” なんかに他機種でのAPの実現方法がある。

 

ドコモのHome 5G HR01でパケづまり?

楽天ひかりとの契約を9月末で終了し,その後の固定光インターネット回線が使えるようになるまでのつなぎとして,ドコモの固定回線置き換え用ホームルータHome 5G HR01を使っている。ホームLANの新構成でも中核の役割を果たしている。

ASCII.jp:ドコモ、5Gの「パケ止まり」対策を10月中旬までに実施 基地局をチューニング” なんかで言われているいわゆるパケ詰まりが起こっているようだった。

以下NTTドコモ -電波のお困りごと窓口-でドコモに連絡した内容。実際には500字以下でなければならないのでこれから文字を削った。

自宅2F西向きの窓のすぐ内側にホームルータHome 5G HR01を設置しています。多くの場合5Gで接続しているようですが,ときどき4G+に切り替わるようです。

5Gでの接続時には200Mbpsを超える速度を出すこともありそこは満足しています。しかし,2~3時間に1度,接続が切れるようです。しかしそんなときにもHR01のWeb UIでは接続は問題ないかのような表示になっています。自宅は5Gエリアのヘリの部分にあるようであることも合わせて考えると,いわゆるパケづまりが起こっているのではないかと想像されます。他に5G端末は持ち合わせておらず,他の機器でこの仮説を検証することができません。

ともかく接続が切れてしまうのは困り物で,仕事でインターネット電話のようなことをする際には,もし事前に対処できれば,意図的に5Gでは接続しないようHR01を設定するなどの措置を取らなければなりません。しかし5G目当てに契約したのに,4Gで使用しなくてはならないのでは意味がありません。

なお,HR01設置前に家の中のドコモ4G電波の入り具合はスマホで調べて周り,ベストの設置場所を選んだつもりです。

その後極めてまれに5Gに,しかも一瞬だけ接続する以外は常時4G接続となった。通信は安定したが,スピードは数十Mbps止まり。100Mbpsを超えることはなくなった。5Gで接続していた頃は2~300Mbpsが出ることも珍しくなかったので残念。Biglobe eo光が使えるようになるのは工事の関係で11月中旬になりそうなのだが,それまで再度5Gの恩恵に預かれることはないのだろうか。

Androidスマホへの電力消費の少ないメッセージ通知法

Androidスマホへの電力消費の少ないメッセージ通知法を考える。特にIoT絡みで通知を受けたいことがあるが,身につけているスマホで受けられるのが理想的だから。電池消費だけでなく,他にも後で述べるような要件がある。メッセージの通知を受けるのはとりあえず自分自身を想定しているが,他の人にもおいおい対象を広げる予定。

要件は以下:

  • Androidスマホ上だけでなく,PC上でも通知が受けられる。iOSデバイスについてはオプション。
  • Androidではそのために増える電力消費が極力少なく抑えられる。
  • サービスを利用するのに費用が発生しないか極めて安価で済む。
  • 簡便な方法でプログラムでメッセージを送信できる。
  • 使用者に新たなアプリの使用を要求しないのが理想的。

電力消費を抑えるということを要件にすると,Androidアプリでは Firebase Cloud Messaging (FCM) を使用しているものでなければならなくなる( “What is the exact functionality of Google Play Services & Google Services Framework (gapps)? – Android Enthusiasts Stack Exchange” およびそれを引用した “Androidの開発者サービス” 参照)。iOSデバイスについてオプションとしたのはiOSのこの辺りの事情を全く知らないから。

MatrixのサーバとAndroidクライアントElement間でどのようにFCMが使われているかを読むと,サーバ側で「プッシュゲートウェー」を介してプッシュ通知が行われていることがわかる。つまり,サーバとクライアントのセットでFCM対応しているときに,初めてFCMによる通知が利用できる。言い換えると,単に特定プロトコルに対応しているクライアント,というだけではFCMはまず利用されてない。つまり,単なるSIPクライアント,単なるXMPPクライアントはこの要件を満たせないはず(特定のサーバとの組み合わせで実現される可能性はある)。

後日, “光電話のスマホ子機の宅外への持ち出し” でLinphoneの開発しているFlexisip(PBXシステムそのものではなく,それと協調して動作するプロクシー)にはFlexisip Push Gatewayが提供するFCMによるプッシュメッセージ機能があることを確認した。

ちなみに,MatrixのクライアントElementにはGMSに依存しないF-Droid版がある。FCMを利用できないためバッテリ消費は増えるはず。それでも,GMSを搭載しないAndroid端末であってもクライアントを何不自由なく利用できるのは大きな利点。Android 5.0以上を要求するが,それを満たすAuガラホGratinaシリーズでは,特にGMSをインストールする苦労もなしに使えるのは大きい。F-Droidには他のMatrixクライアントもある

以下自分が検討している候補。通知メッセージ量が極端に増えない限りLine Notifyで用が足りるか。

Line

Lineは日本におけるデファクト・インスタント・メッセージング・サービスであり,まず誰でも既にアプリをインストールして使用している。PCクライアント,Chromeクライアントも用意されている。

Lineは開発者にフレンドリーであり,一般ユーザ向けのLine Notifyは一旦アクセストークンを取得するとcURLで簡単にメッセージを送れる。クオータはアクセストークンごとにAPI呼び出しが1時間あたり1,000回まで。アクセストークンは「サービス」ごとに取得することになっているが,メッセージの送り先グループごとに作成するものと理解してよいだろう。トークンは1ユーザあたり100個まで作成できるということなので,よほど激しい使い方でもしなければ多くのニーズがカバーできよう。

個人的にはLineを通知に利用することに関しては以下の不満がある。全てLine Notifyの問題ではなく,Lineクライアントの問題。

  • グループ別に通知音が設定できない
  • クライアントがOS別に1台までしか同時に利用できない,という妙な制約があるため,自由にクライアントを各所で使えない

これらは大きな制約。すぐ後に述べるMatrixのようにプロトコルが公開されており自由にクライアントを作成できるのならこのような問題はとうの昔に解決されているだろう。そうでないところがLineに頼ることに躊躇せざるをえないところ。

なお,ビジネスアカウント向け(無料枠もあり)に,単にメッセージを送るだけではなくボット作成もできるMessaging APIが別途用意されている

Matrix

Matrixについては既に述べた。Lineとの大きな違いは以下:

  • FOSSであるため利用できるソフトウェア資産が多い。サーバを自前でホストすることも可能。無料サーバ(例えばOracleの無料VPSサービス)を利用したりすれば運営費用はゼロにできる。
  • 一般には浸透していないので,Matrixを介したメッセージ通知を受けたい人にはMatrixクライアントをインストールしてもらわなければならない。

プログラム的に使用するには,PythonベースのMatrix-Commanderが利用できるか。cURLのみで様々な操作をすることについての公式ガイドもある

将来的には MatrixベースのBeeper を自前のVPSにインストールして各種IMSとブリッジさせたい気もしている。

Google Chat

その前のHangoutsでは公式のAPIは特に用意されなかったと思うが,Google ChatはAPIが公開されている。それでできることも,LineでのMessaging API相当の機能もあり,実に高機能。ただ,それが簡便に利用できるかはわからない。しかも,Google Chatでのメッセージ通知を受けるにはGoogle Chatアプリをインストールする必要があるが,日本ではAndroidユーザにすらあまり利用されていないGoogle Chatアプリを利用することに抵抗のある人もいるだろう。

SMS

実は意外とこの目的に使えるのがSMS。スマホだけでなくあらゆる携帯電話に通知することができる。通知を受ける側が特に新規にアプリをインストール必要もない。ただし,追加の工夫なしにそれをPC上では見られない。

Termuxのtermux-sms-sendコマンドを使えば,TermuxをインストールしたAndroid端末からSMSを発信できる。費用は発生する。

AutomateのCloud Messaging

自分はAutomateの有償ユーザなのでcloud messaging機能が使えるし,実際使っている。ただし,これは一般には向いていない。

関連して過去に書いた記事

Matrix:

SIP:

XMPP:

昔このようなことを考えていたときに書きかけた記事

随分前にこのことを考えていたときに書きかけた記事の草稿をこの後に含める。


DELIVERING MESSAGES TO MY SLEEPY ANDROID PHONE

OpenWrt BB rc3上のuhttpdのCGIが思うように動作しない

Google inexplicably removed the “Keep WiFi on during sleep” setting from the Pixel 2 (Updated)

I tested it on my Oppo R17 Neo and the value of wifi_sleep_policy was 2 — meaning wifi is supposed to be on even while the phone is sleeping. But I am not sure if that is what is happening with my phone, given the fact that chat messages sometimes arrive late. Is it what the infamous Phone Manager’s fault? I don’t know. At any rate, whatever that relies on the Internet cannot be trusted.

chat message on Hangouts separate article

I am a paid user of the Automate app. I forgot the exact rationale for choosing this particular automation app, but I did consider the fact that it is compatible with Tasker and Locale plugins.

It offers “cloud” messaging. You can send a cloud message from Automate itself, but you can also send one from a script using a command like cURL.

SIP message Galaxy SIP Settings – Apps on Google Play did expose SIP settings on my R17 Neo.

Galaxy SIP Settings – Apps on Google Play

SMS seems to be a good option, and I happen to have spare cellular phone lines. However, these phone lines, provided by Au, relies on its LTE network. I cannot use the USB dongles I bought in the past that can handle only 3G UMTS (WCDMA) networks.

Huawei E169 USB 3GドングルをTP-Link TL-WR703N上のOpenWrtで使えるようにする
HUAWEI E169 USB 3GドングルをドコモXi SIM用にもう1台購入

Used them with Asterisk, using its chan_dongle module. I could potentially do the same, but seems overkill. At that time, I was actually transferring calls, but this time I only need to send SMSes.

Using a spare Android phone seems to be a good option. It has to keep wifi alive all the time, though.

android – How do I send an SMS from a shell? – Stack Overflow

Doesn’t work due to lack of appropriate permissions

Termux Wiki

Important: Do not mix installations of Termux and Addons between Google Play and F-Droid. They are presented at these portals for your convenience. There are compatibility issues when mixing installations from these Internet portals. This is because each download website uses a specific key for keysigning Termux and Addons.

Termux-sms-send – Termux Wiki

Usage of this API is no longer allowed by Google and we had to disable it to prevent delisting of Termux:API application from the Google Play.

This means you have to download and install apps from F-Droid.org, not from Google Play.

How to Stop my Android from Killing Apps in the Background | Innov8tiv

【未完成】Asterisk11のChan_DongleをUSB 3Gドングルを挿したOpenWrtルータで使う

最後の編集が2014年だった記事の草稿。もう完成することはなかろうから公開する。


TP-Link TL-WR703NのOpenWrtをBarrier Breaker RC3にアップグレードしたのには理由があった。予想外の問題も発生した

モバイルPSTNのPBX収容

Asterisk™: The Definitive Guide
自分でもソースを取ってきてビルドしてみたがうまくいった。パッケージを見てみると、Asterisk11にはmain_page [Wiki Chan_dongle]も含まれている。が含まれている。Chan_mobileはない。不思議なことにAsterisk18にはchan_dongleもchan_mobileもない。

Asterisk Versions – Asterisk Project – Asterisk Project Wiki

Asterisk 11 Documentation – Asterisk Project – Asterisk Project Wiki

Asterisk cmd Sms – voip-info.org

RasPBX – Asterisk for Raspberry Pi / Discussion / General Discussion:Chan_dongle, Huawei e173 not registering

ダメだろうと思いつつSet(CALLERID())してみたがムダだった

デフォルトの設定では、有効化してあれば(Luciで設定するか/etc/init.d/asterisk enable)初期化の最後にAsteriskが実行されるようになっているが、それでもドングルの認識に失敗してしまうことが多いように思われた。有効化はせず、そこで、/etc/rc.localに以下のような行を含め、さらに遅いタイミングで起動されるようにした。

sleep 180; /etc/init.d/asterisk start

そうするとAsteriskの初期化が終了したときにはドングルもきちんと認識しているようだ。

BB rc3のopkgで利用できるAsterisk11のパッケージはバージョンが11.11.0-5。自前でビルドするなら、feedsを自分でアップデートして11.11.0-7が利用できる。既成バイナリ・パッケージにはないasterisk11-res-xmppも利用できる。chan_motif

function_base64等がない SMSがデコードできない

Asterisk GUI – Asterisk Project – Asterisk Project Wiki

LuCI luci-mod-pbx “releasing PBX (supporting Asterisk) interface for LuCI (Page 1) — Community Releases / Announcements — OpenWrt

FreeSWITCHのGSMopenは二つの外部ライブラリに依存しており、そのソースは同梱されているものとはいえ、自力でインストールしなくてはならない。その1つがgsmlibだが、configureがクロスコンパイル環境ではそれ以上進まない。

GSMopen – FreeSWITCH Wiki
Mod sms – FreeSWITCH Wiki

パッケージをインストール一発、では済まない。
最初はOpenWrt – FreeSWITCH Wikiを見て12.09 Aptitude Adjustment用にビルドしようとした。

新しいOpenWrt用に用意されているFreeSWITCH

gsmopenはOpenwrt用FreeSWITCHパッケージではデフォルトではインストールされない。
gsmlibを必要とする。パッケージに付属するパッチファイルにはgsmopenのみならずこのgsmlibに対するパッチも存在する。

Creating packages – OpenWrt Wiki“を見てなんとかしようかとしたが挫折。

【未完成】Matrixはよさげだった

以下は3年ほどかそれ以上前に書こうとしてた記事。完成していないが,今後そうすることもないと思うので公開する。


プロトコルとしてのMatrixは “aims to make real-time communication work seamlessly between different service providers” だそう。Matrixの公式サイトは以下のようにその特徴をまとめている

Matrix is an open standard for interoperabledecentralisedreal-time communication over IP.

  • there exists an open standard in the form of the Matrix Specification
  • it’s interoperable, meaning it is designed to interoperate with other communication systems, and being an Open Standard means it’s easy to see how to interoperate with it
  • Matrix is decentralised, which means there is no central point – anyone can host their own server and have control over their data
  • it is designed to function in real-time, which means it is ideal for building systems that require immediate exchange of data, such as Instant Messaging

Open standard, de-centralizedの辺りはXMPPを思い起こさせる。実際,Matrixの非常にザックリした理解としては,「モダンなXMPP」が適切であろう。XMLをデータ形式の基本として採用したXMPPに対して,Matrixはより簡便なJSONを採用。

SIP

This interoperability is provided by so-called “bridges,”

公式にサポートされてるのは少数

LibPurple, a library used in IMS’s such as Pidgin and Adium, has an impressive array of plug-ins, which not only include that for Hangouts, that for Skype, that for Facebook Chat, but even that for Line. If you want to run the app on the platform other than Windows, it is likely you will have to build the binaries yourself

お得な携帯契約法

お得に携帯電話の回線契約する方法・端末を購入する方法をまとめた。

乗り換える(MNPする),できれば半年ごとに

以前ほどの差はなくなったものの,それまでの事業者で新機種を購入し変更する場合(いわゆる「機種変」)に比べて,同じ番号を維持したまま事業者を乗り換える(MNPする)方が条件がよいのはやはり今も変わらない。新規契約よりもMNPの方が通常条件がいいが,最近は特にMVNOで全く変わらないこともある。

乗り換えのたびに2万円かそれ以上分の端末購入費割引やそれ以外の特典があるので,それを最大限に享受したければ頻繁に乗り換えるのがよいということになる。なので,「上級者」,あるいは節約のために労力を厭わない人は,その乗り換えを半年ごとに行う。なぜ半年かというと,それを切ると短期解約者と見なされて,その事業者のブラックリストに載る可能性があるから。一旦ブラックリストに載ると一定期間(これも事業者によって違う)その事業者と再契約できなくなったり,契約はできるもののキャンペーンの適用を受けられなくなったりする。

短期解約と見なされてしまう期間は具体的には一切公表されておらず,様々の人の実体験から推測するしかない。事業者によっても異なるとされている。確かなところはわからないが,半年が1つの安全な目安とされている。

いい条件のショップを探す

ドコモならドコモショップや家電量販店のドコモコーナーで全国どこでも同じ条件で契約できるように思っている人が多いがそれは全く誤っている。店によって条件が金額換算で数万円異なることもあるのでちょっとした違いではない。各店で独自のキャンペーンをやっていることはよくあるし,同じ家電量販店チェーンでも店舗によってキャンペーン内容が異なることもある。リサーチをしっかりしていて他店のよい条件を知っていると,交渉によりそれに合わせてもらえることもある。全般的に関西より関東の方が条件がよく,関西なら関西でも都市部(例えば大阪中心部)の方が田舎よりよいことが多い。

当然リサーチが重要になるが,これが難しくなった。以前はショップが積極的にTwitterに投稿していたが最近はそれはめったに見られない。家電量販店がやることはある。自分で地道に足で情報を稼ぐか電話で問い合わせるか,またはそういうことをやっている人による2次的情報に頼るしかない。

ただし,そういう情報を掲載しているサイトでさもお得のように煽ってるキャンペーン等であっても,掲載主のアフィリエート収入を狙ってるだけで実際にはさほどお得ではないこともままある。鵜呑みにはできない。

いい案件があれば飛びつく

びっくりするような好条件の案件に出くわすことがある。その幸運に恵まれたならその場で飛びつく。そうでないとすぐ在庫切れ等で利用できなくなる。数時間も猶予がないことは多い。特に,店がSNS等での話題集めだけを狙ってやるような場合,条件はよくても最初から台数をごく少数しか用意していない方が普通。

この「案件は水もの」という認識をしていない人が多い。一晩ゆっくり考えて,とやっていてはいい話をみすみす逃してしまう。もっとも,その場ですぐ判断ができるためには,事前のリサーチを十分にやって,どうなったら自分にとって好条件なのかが事前に理解できていなければならない。

契約は週末を狙う

週末は特に条件がよいことが多い。店舗自身も週末に近くならないと週末のキャンペーン内容がわかってないことが多いので,特に狙っているものがあるのなら金曜夕方頃に電話で問い合わせる。ただし,店舗まで足を運ばないと電話では教えてくれないような店舗も最近は多い。

キャンペーン期間は土・日だけとは限らず,その前の金曜日から始まる場合,あるいは月曜まで続く場合,そのどちらの延長もある場合のようなバリエーションがある。何らかの理由でキャンペーン期間中に店舗に足を運べない場合,事前に相談しておくと,キャンペーンの表向きの終了後にも特例で同じ条件を適用してくれることもある。

休日,特に連休の際も同様に条件がよくなることがある。

月末近くに契約する

キャンペーン内容は月末に向かって良くなっていく傾向がある。乗り換えする場合,乗り換えは初月は日割り計算になるのに乗り換えの通信費は日割りにならないことが大半なので,その意味でも月末に近い契約が有利。上の週末がキャンペーン内容がよいというのと重ねて,月末に近い週末が狙い目になる。ただし乗り換え先が初月無料の場合(一部MVNO)は通信費面では特に有利にはならない。

ただし,人気あるキャンペーンの場合人が殺到してしまい,特定の端末の購入を合わせてしたい場合,その端末の在庫がなくなってしまい結局契約できない,ということも起こりえる。

抱き合わせによる好条件化も検討する

以前は複数回線同時契約による好条件化がよく見られたが最近はなぜか見られなくなった。代わりに見るようになったのが,自宅の固定インターネット接続サービス契約を指定の事業者(ドコモであればドコモ光)と契約することを合わせてやることによる好条件化,あるいは使用料の割引。話がどうしても複雑になるので,携帯契約と固定インターネット接続サービス契約は分けて考えたいという人が大半だと思うが,万難を排して最安を目指す飽くなき求道者ならそこまで考える。

ただしこれには大きな注意点がある。最近の携帯契約は以前の2年縛りが事実上撤廃されたが,固定インターネット接続サービス契約は今だに2年縛り,3年縛りが当たり前。後者の乗り換えも合わせて考える場合,解約違約金のことも考慮に入れる。1万円程度が相場だが,事業者によっては2, 3万円のこともあるので要注意

Au/UQのように電力契約とのセット割を用意している事業者もある。

レンタルプログラムも検討する

ドコモのスマホおかえしプログラムは,事実上,購入オプションつきのレンタルプログラムと言える(より正確には制限の強いRent-to-own方式)。各MNOは同様のプログラムを提供している。正価ベースだとお得感は今ひとつだが,端末購入代金に大きな割引が入っていれば,大いに選択肢になる。携帯電話は今の時代の必携アイテムであり,そうやって2年間とか使った端末には愛着がわくものだろうが,新しい端末に乗り換えた後古い端末を置いておいても,一般人にはバックアップ端末以上の意味はないだろう(子供がいればお下がりを使わせる,というのは,一般的に有効と思われる唯一の使いみち)。最初からそういうプログラムで端末を入手すれば,いずれ断捨離を強制されるとも言え,それを利点を見る向きもあろう。

ただし,iPhoneのように中古品であっても値が落ちないものの場合は,買い取りでもよい条件で出ていれば,それとの得失はよく考えたほうがいい。「レンタルしておいて,もっと使いたかったら購入」か,「購入しておいて,不要になったら売却」か,のどちらがよいか,という判断。

日本人はiPhoneを異様に好むので中古でもニーズが高い。携帯電話をいかに大切に扱って傷がついたり破損するのを防いだとしても,必ず経年劣化するのが電池。以前のようなカートリッジ式の電池はもうすっかり息を潜め,電池は(素人には簡単には)取り外しのできない固定内蔵式が主流。しかし,iPhoneであれば町のリペア・ショップで内蔵電池の交換も比較的安価でできてしまう。iPhoneはきれいにさえ使っていれば商品価値は驚くほど維持される。

取り置きを頼む

端末購入もしたい場合,ショップに問い合わせてもし納得する機種があれば取り置きを頼む。それを受け入れてくれる場合とそうでない場合がある。

端末の割引額だけや通信費の安さだけを見るのではなくトータルで判断する

特に,どうせ端末は即売却することを考えているような場合は,回線のみの契約で,キャッシュバックやポイントバックつきのものを狙うのも一つの方法。端末売却の手間が省けるのはそれはそれで利点。自分が本当に望む端末が別にあるのであれば,その還元された現金やポイントをその購入費用に充当することもできる。 “Bic SIMのすすめ” は私がその路線で実行に移した策の一例。

極端な例を出すと,日本通信の合理的シンプル290プランは1GB/月つきの音声回線が290円/月と群を抜く安さ。何か他の要件(他の親回線が存在すること,など)もなく,実に使いよい。小容量プランで通信費だけを見るのなら,これは間違いなく最安の1つだが,契約時の端末に対する割引や,回線のみの契約に対するキャッシュ/ポイントバックなどは全くない。それも含めてトータルで考えると,必ずしも最安とはならない。特に半年ごとに乗り換えるようなことを前提にするような場合は,通信費のちょっとした安さはトータルでは大きく利いてこない。

クーポンなどが利用できれば利用する

有名なのがソフトバンクとの契約で使えるヤフー限定割引クーポン。Auも同様なクーポンが以前はよく使われたが最近はなかなか利用できなくなった。ただオークションサイトで入手できたりはする。条件が合えば万円単位の差がつくので軽視できない。

MVNOの場合エントリーパッケージが利用できれば利用

MNO, MVNOに関わらず,事務手数料が3,300円,さらにMVNOでは「SIMカード準備/発行料」などの名目でさらに400円ほど課金されることが多い(MVNOではキャンペーンで無料になることもある)。一部MVNO(UQも含む)では「エントリーパッケージ」なる商品が売られており,その実体はコード。このコードを契約申込時に適用することで事務手数料が無料になる。アマゾンのようなECサイトでも販売されているし,オークションサイトでも手に入る。

なお,通常コードが印刷された物理的パッケージとして売られてはいるが,必要なのはコードという文字列データのみなので,コードをメールで連絡してもらう,という形で購入すれば入手までの時間を短縮できる。なお,エントリーパッケージを利用してもSIMカード準備/発行料は無料にはならない。

エントリーパッケージはSIMのみの契約の場合にだけ利用でき,端末購入を伴って契約する際には利用できないことがあるので注意する(OCNモバイルOneなど)。

オンラインショップが便利なことも

探せばオンラインよりも実店舗の方が条件がよいことが多いが,いくらかは条件が悪いとしても,実店舗にわざわざ足を運ばなくて済み,夜中でも手続きのできるオンラインショップの利便性により大きな意義を見出す人もいよう。オンラインショップでは月末や週末だけに条件が変わることは私が知る範囲ではない。ただ,人気機種だと週末には在庫切れになりやすい。MVNOだとそもそもオンラインでしか契約できないことも多い。夜間だけのセール,期間限定のアウトレット品のセールがあることはある。

ただし,オンライン契約だと必然的にSIMカードなり端末なりが送付されるので,それを受け取れる必要がある。人によってはこれは難しいかもしれない。

ソフトバンクに特化したオンラインショップ(実店舗を併設しているものも)については, “キャッシュバックを出すことがウリのソフトバンクショップ” で紹介した。

事業者・プランは付加的価値も考慮に入れて判断

MVNOはごくごく一部の例外を除いて,必然的にMNOに比べて通信速度が遅い。MNO級の速度を出すMVNOもあるにはあるが,加入者数が増えるにつれて落ちていったりする。MVNO,MNOに限らず,一般的社会人の昼休み時間にあたる0:00pm-1:00pm間は使用者が多いため程度の差こそあれ速度が落ちるものだが,この時間帯でも速い通信速度を求めるのであれば,自動的に選択肢になる事業者の範囲が狭まる。

家族間通話無料のようなサービスはMNOのメインブランドにしか見られない。この点特にソフトバンクの家族割引は,家族の親等数に制限なし,同居していれば家族でなくてもよし,などと非常に「家族」の定義がゆるいことが特筆すべき。

ソフトバンクやワイモバイルユーザ向けのヤフープレミアム無料も,そういうのをよく利用する人には意味があるだろう(ヤフオク利用者など)。

その他公衆wifiサービスの無料提供もMNOならでは。ただしドコモはその公衆wifiサービスd Wi-Fiを,ドコモユーザに限らず,ポイントプログラム「dポイントクラブ」会員に無償で提供している( “【ミニレビュー】無料で使えてエリアも広い。ドコモの無線LAN「d Wi-Fi」が便利-Impress Watch” )。Auも「Au PAYアプリで残高をチャージいただける状態」であればAu Wi-Fiアクセスが無償で利用できるPovo利用者もAu Wi-Fiアクセスを利用できるようだが,SSID au_Wi-Fi2限るようだから限定的サービス提供?ソフトバンクWi-Fiスポットは同社のパケット定額サービスのユーザのみが利用できるよう。つまりソフトバンクユーザ以外には門戸を開いてはいない。

Bic SIMは中はIIJmioでありながら,IIJmioにはない独自性があり,それがBIC SIM専用プラン「ギガぞう Wi-Fi」。無償プランではスマホ1台のみで使えるという制限があるものの,VPN機能を提供しているのが大きな特徴。Au Wi-Fiアクセスでもその機能は用意されているが,それを利用するにはスマートプレミアムパスへの加入が要求される,という点でBic SIM専用ギガぞうWi-Fiの方が優れているといえる。VPN機能はd Wi-FiもソフトバンクWi-Fiスポットも提供していない。1台では足りなければ,VPNは得られないがd Wi-Fiが無償でも5台までサポートしている。

また,MVNOの一部には今までMNOでは当然無料だと思われてきたものがそうでなかったり,そもそもそのサービスそのものが提供されてなかったりするので要注意。例えばPovoでは留守番電話サービスも転送電話サービスも提供すらされていない(PovoはAuのサービスなのでMVNOではないがMVNO的性格を持つものとしてここに含める)。有償サービスなのではなく,そもそもそういうサービスが全く提供されていない。Y.uモバイルでは留守番電話サービスが330円/月,転送電話サービスの提供はなし。Y.uモバイルの料金は一見安いが,多くの人が必要とするであろう留守電サービスを追加するのなら料金でのアドバンテージは損なわれる。

さらに注意すべきなのがカスタマーサービスの質。MVNOでは実店舗を持ってない場合も多いし,あっても対応できるのは契約のみでその後のカスタマーサービスをする準備があるようには思えない場合が多い。しかも,電話でのカスタマーサポートを全く用意していないこともあり,問題が起こった際多大な時間を割き多大なストレスを被ることになるかもしれないことは計算に入れておくべき。カスタマーサービス用の電話番号を用意しているからといって安心もできない。ちょっと回線が込み入っているようだと,通話を自動的に一方的に切られていしまうこともある。チャットでの問い合わせはできても返事がいつになるかわからないことが大半で,状況によっては非常に困ってしまうこともあろう。

使用者の知識やスキルをよく測ってどの程度のカスタマーサービスが必要になるかは事前によく考えたほうがよい。これは使用者が高齢者のような場合特に重要になる。そこここにショップがあって手取り足取り面倒を見てくれるMNOは,仮に料金面で見劣りしても手厚いサポートで結局ペイするかもしれない。ただし,サポート受けにショップに行くにしても,いきなりは行かずに,事前にオンライン予約をするのが賢明。なお,老人のスマホデビューを助ける上で気をつけたほうがいいと思われることは別途記事にした

その点で興味深いのが「ドコモのエコノミーMVNO」。ドコモショップの手厚いサービスと,MVNOの低廉な料金のいいとこどりのような仕組み。とはいえ,ショップでどこまで面倒見てくれるかはわからないが,少なくとも初期設定は面倒見てくれるようだ。

逆に,MNOにはなかなかないが,MVNO(UQモバイルやY!モバイルなどのMNOのサブブランドも含めて)でよく見られるメリットもある。思いつく範囲で列挙してみると以下なんかがある:

  • 消費しなかったデータ通信量の翌月のへの繰り越し ー 月ごとのデータ使用量にばらつきがある人には福音。Y.Uモバイルでは永久的に繰り越した量が失効しないという点で非常に特徴的。
  • 初月無料 ー MVNOは初月の通信費が無料なことがよくある。その場合通信費を抑えるために月末に契約するメリットはなくなる。ただし,一般に月末に近いほどいい案件がある(端末費が安くなる,など),という傾向は変わらない。
  • 「カウントフリー」などと称される,特定インターネット・サービスを利用した際のデータ使用量は不問とするサービス/オプション。
  • 「低速モード」,「節約モード」などと呼ばれる通信モード。これを選択すると,低速通信だがそれでの通信量は不問になる( “低速だがデータ通信無制限の携帯プラン” も参照)
  • 「初速バースト」ー 上の「低速/節約モード」と組みで提供されることが多い。低速通信時であっても,接続の最初だけスピードを上げることで,少量のデータ通信の場合さほどそれを感じなくする。
  • シェア ー もともとデータ通信容量をシェアする前提で契約するという形態はいくつかのMVNOで可能だが,IIJmioでは契約名義人が同じであれば後から複数契約のデータ容量を合算利用できる。

以上あくまで一般論。以前はMNOとMVNOの棲み分けが比較的きれいにできていたと思うが,最近はMNOがメインブランドでも,従来MNVOの主戦場だった小容量プランを出して踏み込んで来てたりして,単純な話ではなくなった。

 

携帯料金節約しながらiPhone新調?

新居に引っ越したばかりの友人に携帯電話と自宅のインターネット接続に関する費用削減方法について意見を請われている(これに関して我々の間(だけ)で共有している文書)。

インターネット接続については引っ越し前から使っていた楽天ひかりを既に新居に移設工事も済ませていた。手持ちのルータだと思うように接続できてなかったので,それを可能にする方法と,今後理想的状況に持っていく方法については “エレコムWifiルータWRC-1750GST2を楽天ひかりで使う” に書いた。ただ,現行の楽天ひかりの契約を今後どうするかは未定

この記事では携帯電話サービスと端末について考える。本人は現在iPhone 7使用中。データ通信は月5GBほど。MVNO楽天モバイルを使用してきたが,携帯料金プランを見直したい。また,これを機にできればiPhoneを新調したい…とのこと。この記事は彼の状況に特化した内容だが,一般的なお得な携帯契約法については別記事にまとめた

ちなみに,「楽天モバイル」は実は2つ存在し,MNO(= Mobile Network Operator,「キャリア」ということも)であるドコモとAuの回線サービスを小売していたMVNO(= Mobile Virtual Network Operator,「格安SIM」などとも)としての楽天モバイルと,その後自社で設備を整備しサービスを提供し始めたMNOとしての楽天モバイルがある。区別のため前者を「MVNO楽天モバイル」,後者を「MNO楽天モバイル」とここでは呼ぶことにする。

MNO楽天モバイルの利用は前提

MNO楽天モバイルの使用は前提。無料のかけ放題を利用したいので。当初MNO楽天モバイル加入で楽天ひかりの使用料1年無料キャンペーンの利用もその目的の一つだったが,残念ながら彼本人は利用できないことがわかった

現状MNO楽天モバイルだけに頼り切ることにはまだ少し不安がある。他のMNOに比べ信頼性が劣ると判断せざるをえない事象が起きているから。特にiPhoneで使用する場合。2021年12月には楽天モバイル回線をiPhoneで利用した際,着信に失敗する不具合が起こるということが問題になったが,楽天は年内に解消するとしている。そしてそのためのネットワーク改修が予定通りに完了したとされている。実際に解消しきったかは現時点では不明。

こういったことを説明すると,友人はMNO楽天回線以外にもう1本回線を持ち合計2回線をDSDV機1台にまとめるという作戦に理解を示してくれた。最近のiPhoneはどうせDSDV機なのでDSDV機の要件は最近のiPhoneを選ぶ限り自動的に満たされる。ただしiPhoneの場合,2枚のSIMカードのうち1枚が物理SIMカード,もう1「枚」がeSIMとなる。なぜ私がDSDV機を強く推すか,そしてなぜeSIMがサポートされている機種を推すか,については別記事にかつて説明した

自分の「公式番号」用メイン回線と,サブ回線のどちらをMNO楽天モバイルにするかだが,ご本人はサブ回線にしようと考えている。私もそれが正解だと思う。「公式番号」にかかってくる電話を逃さないためにはそれがよいからだ。

自分が発信する電話が何らかの理由で相手に着信しなかったら,少なくとも自分は自分の通話が成功しなかったことを認識している。なので,もし必ず伝えなければならない用件なら,再度通話を試みるか,可能なら何か他の代替手段(例えばLineでのメッセージ)を取るなどするだろう。それに対して,誰かが自分の楽天回線の番号にかけてきた場合,iPhone用Rakuten Linkアプリの不具合でこちらに着信しなかったりすると,相手は単純に諦めてそれっきりになったりする。まだ着信履歴として残ればいいが,それもなかったりすると重要かもしれない連絡の存在にすら気づけない。こう考えると,かかってくる電話を確実に受けられることの方を重視するのが理にかなっている。

なお,Rakuten LinkやMNO楽天モバイルに関する恐ろしく詳しい情報が “楽天MNO(楽天回線)のFAQ” で得られる。

iPhoneは高い!

さて,iPhoneをどう入手するかが難しい。今年7月頃からiPhone SE (2020, ないしは第2世代)が家電量販店で64GBのものだと10円とかで叩き売りされている。型落ちと言っても性能的には申し分ないー小さい画面(4.7インチ)を除いては。この友人は同級生。我々老眼世代にはさすがに4.7インチは厳しいんじゃないか

iPhone 13が発売されたところなので,iPhone 12が型落ちになり安くなっている。しかしそれでも色々条件を揃えても6万円ほど高い。ではiPhone 11は,というと最安で4.5万円ほどやはり高い。いわゆるApple税だ。驚くのは中古のランクの低いものでも同じくらいはすること。中古でも値崩れしないところはさすがiPhone。

したがって,どうやらiPhoneにこだわるのであれば,基本歯を食いしばって高い金を払うしかなさそうだ。現時点ではiPhone SEだけが例外的に安く入手できるが,先に述べた理由で彼にはお勧めできない。

Androidに改宗するのもあり

これを機にAndroidに改宗するのも悪くないだろう。Android端末であれば,ミドルレンジ機の正価2万円台~4万円台程度のもので,一般的使用には十二分なスペックのものが入手できるからだ。すぐ後で述べるように,回線契約に伴って購入する際には割引が入るのでさらに安くなる(上でiPhone 11/12の最安値としてあげたのも,そういった割引の適用後の価格)。そういう事実に馴染んでいる人には,iPhone 1台に数万円~十万円強ものお金を差し出す人たちの心理を理解しがたい。特に新モデルが出るたび買い換える人。よほどお金があり余ってるんだろうか。

ただし,明らかにiPhoneの方が優れている面もたくさんあり,その大きなものが長期に渡るサポート。iPhoneではOSのアップデートが長期に続くようだが,Android端末はGoogleのPixelブランドなどごくごく一部を除いて,2年続けばいい方。セキュリティーパッチはもう少し長く提供される。

またiPhoneは中古でもそう価値は落ちないので,ある程度使った後端末を乗り換えて古いiPhoneを売却するつもりなら,購入費と売却費との差は意外と小さいので,実質の使用費は安く上がるかもしれない。

私はiPhoneには全く疎いが,Android端末の大多数がmicro SDカードスロットを備えており,必要があれば記憶領域を後で拡張できるという自由度は,そのような仕組みを持たず購入時の最初の記憶領域を増やす手段のないiPhoneユーザには新鮮ではないだろうか。

総務省の指導が入る前ほどではないとは言え,今でも携帯音声回線の契約を乗り換えや新規でするときには2万円程度相当の割引(機種購入を伴う場合)やキャッシュバック(SIMのみの場合)があることが普通。新規の方が若干条件が悪いのが普通だが,乗り換えの場合と完全に同じこともある。この友人の場合,「公式番号」用メイン回線は乗り換え,サブ回線は新規契約するので,その特典にありつく機会が2回あることになる。なお,お得に携帯契約をするための基礎知識を別途まとめた

ただし,弱小MVNOの場合端末購入に対する割引がほとんどないことがある。その場合,通信費だけで見るとお得に見えても,端末購入費に対する割引も合わせてトータルで見たときにはそうでないこともある。

MNO楽天モバイルでは初めて契約する際には特に大きな割引がある。機種購入に対するポイント還元では,現在還元対象になっているAndroid機はOppo機が多いが,例えばOppo Reno3 Aであれば実質わずか2,000円。もちろんDSDV機。Oppoは中国スマホメーカだがここ2年ほどで日本市場での存在感を確立し,現在日本でよく売れてる端末の上位の常連。自分もメイン機はここ2年以上Oppo機(R17 Neo)で,もう1台Oppo機のReno Aを所有しているがどちらにも満足している。Oppo Reno3 Aもスペック的には押さえるところは押さえており,特に最高級スペックを求める人でもなければ十分満足できると思う。

ただし,5Gには非対応でそれを求めるのならOppo Reno5 A実質18,000円弱となるがそれでも最近のiPhoneに比べれば半額以下。ちなみに,DSDVに関してOppoのReno 5aのSIMフリー版は異色の仕様となっており,「SIMフリー版では2基のnanoSIMカードスロットを備えるほか、新たにeSIMにも対応する。ただし、eSIMを使用する場合、2個目のnanoSIMカードは無効となる」。

かつて書いた “現時点でおすすめの楽天モバイル端末” ではOppo Reno3 AとAquos Sense 4 Liteについて詳しく書いているのでご参考に。ちなみに後者は記事を書いた時点で実質18,000円弱だったのが今実質1円になっている。

SIMフリーでDSDV対応のAndroid端末は他にも多数流通しておりいろいろなルートで入手できる。

既に持っているiPhone 7を延命させることも可能

今のiPhone 7に対する彼の大きな不満が劣化した電池持ちのようだが,三宮さんプラザの店でiPhone 7の電池交換が2,500円程度でできるのでそれでとりあえず延命させるというのは一つの現実的策かと。

ただしiPhone 7はDSDV機ではないので,上で述べたDSDV前提の作戦は取れない。必然的にMNO楽天モバイルに自分の「公式番号」をポートする必要がある。契約後3ヶ月は通信量無料なので,その間は既存iPhone 7でMNO楽天モバイル単独でそれを使い倒すのは悪くない。Rakuten Linkアプリを使った通話の品質には不安が残るが,プリインストールの電話アプリで発信すれば,費用は発生するが普通の通話になるので音質の問題は少なくとも減るだろう。バックアップ回線がないのが少し不安ではあるが,彼は仕事用iPhoneをどうせ携帯しなくてはならないそうなので,最悪それを使うことができよう。

MNO楽天モバイルの通信量無料期間後上にあげたDSDVシナリオに移行するのなら,DSDV機入手と並行して公式番号を別事業者にポートする必要がある。さらにMNO楽天モバイルも引き続き併用したければ再度新規契約が必要。わずらわしくなるのは否定できない。ただし,使用してみた結果,「いやMNO楽天モバイル1本でよくね?」となる可能性もある。

まだまだ書き足りないが一旦ここで筆を置く。iPhoneに対するこだわりが今後どうするかを大きく左右するのでそれについてご当人に考えてもあろう。