RaspberryPiと携帯回線網(+VPN)の死活監視プログラム

こんにちは、筆者です。RaspberryPiと携帯回線網の組み合わせは最強です。しかし、時々ですが携帯回線がダウンしてしまう場合があります。それの対策として死活監視プログラムの作成が必須となります。L-02Cのファームアップデートだけでは対処できないかも…。

Pythonを使ったPingの確認

Pythonを使ったPingの確認は前回の記事に詳しくかいています。pypingを使う方法です。pypingを使うためにはpipで追加する必要があります。

$sudo pip install pyping

LEDを組み合わせる

GPIO 17,27,22 (Board 11, 13, 15)を使います。LEDと抵抗を準備してください。

Pythonで作ってみる(ベータ版)

ちょっと急いで作ったので使用は自己責任で。多分大丈夫だとは思う。送り先と繰り返し調整は注意して下さい。間違えがあればコメントよろしくお願いします。一応確認はしていますが…。

※追記:pypingは多分pingを送るinterfaceがないとエラーが発生します。つまり、エラーが繰り返してしまうトラブルが発生します。これを解消するためpypingのエラーに対して例外処理を施して再起動を円滑に行えるように対処しました。

$vi ping_monitor.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import pyping
import RPi.GPIO as GPIO
import time
import os
import sys
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
################################################
#確認したいアドレス
host_dns     = "8.XXX.XXX.XXX"
host_vpn_A   = "25.XXX.XXX.XXX"
#代替比較アドレス
host_vpn_B   = "25.XXX.XXX.XXX"
################################################
#tが時間,sがtime sleep
def led_n3_f(t, s):
   n  = 0
   ts = t / (s * 2)
   while n < ts:
      GPIO.output(11, True)
      GPIO.output(13, True)
      GPIO.output(15, True)
      time.sleep(s)
      GPIO.output(11, False)
      GPIO.output(13, False)
      GPIO.output(15, False)
      time.sleep(s)
      n += 1
def led_n1_f(led_no, t, s):
   n  = 0
   ts = t / (s * 2)
   while n < ts:
      GPIO.output(led_no, True)
      time.sleep(s)
      GPIO.output(led_no, False)
      time.sleep(s)
      n += 1
def ping_tp(host_name, led_no, t):
   try:
      r_host = pyping.ping(host_name)
      if r_host.ret_code == 0:
         led_n1_f(led_no, t, 0.1)
         GPIO.output(led_no, True)
         return 0
      else:
         led_n1_f(led_no, t, 0.5)
         GPIO.output(led_no, False)
         return 1
   except:
      led_n1_f(led_no, t, 0.5)
      GPIO.output(led_no, False)
      return 1
def ping_sb(host_name_A, host_name_B, led_no, t):
   try:
      rA_host = pyping.ping(host_name_A)
      rB_host = pyping.ping(host_name_B)
      rAB     = (rA_host.ret_code) * (rB_host.ret_code)
      if rAB == 0:
         led_n1_f(led_no, t, 0.1)
         GPIO.output(led_no, True)
         return 0
      else:
         led_n1_f(led_no, t, 0.5)
         GPIO.output(led_no, False)
         return 1
   except:
      led_n1_f(led_no, t, 0.5)
      GPIO.output(led_no, False)
      return 1
def led_wait(t, s):
   n  = 0
   ts = t / (s * 2)
   while n < ts:
      GPIO.output(15, False)
      GPIO.output(11, True)
      time.sleep(s)
      GPIO.output(11, False)
      GPIO.output(13, True)
      time.sleep(s)
      GPIO.output(13, False)
      GPIO.output(15, True)
      time.sleep(s)
      n += 1
#EX:)解説:ホスト名, GPIOのPIN, 指定時間
#EX:)ping_tp(host_vpn_A, 11, 5)
#待ち時間
led_n3_f(10, 0.7)
led_wait(50, 0.25)

############################################################
while True:
   try:
      cn = 0
      while cn < 30:
         led_n1_f(15, 10, 1.5)
         GPIO.output(15, True)
         time.sleep(50)
         cn += 1
      tt1 = ping_tp(host_dns, 11, 20)
      if tt1 == 0:
         kk1 = ping_sb(host_vpn_A, host_vpn_B, 13, 20)
         if kk1 == 0:
            pass
         else:
            led_n1_f(15, 10, 0.5)
            os.system('sudo hamachi login')
            kk2 = ping_sb(host_vpn_A, host_vpn_B, 13, 20)
            if kk2 == 0:
               pass
            else:
               led_n1_f(15, 20, 0.05)
               os.system('sudo reboot')
               sys.exit()
      else:
         tt2 = ping_tp(host_dns, 11, 20)
         if tt2 == 0:
            kk3 = ping_sb(host_vpn_A, host_vpn_B, 13, 20)
            if kk3 == 0:
               pass
            else:
               led_n1_f(15, 10, 0.5)
               os.system('sudo hamachi login')
               kk2 = ping_sb(host_vpn_A, host_vpn_B, 13, 20)
               if kk2 == 0:
                  pass
               else:
                  led_n1_f(15, 20, 0.05)
                  os.system('sudo reboot')
                  sys.exit()
         else:
            led_n1_f(15, 20, 0.05)
            os.system('sudo reboot')
            sys.exit()
   except:
      led_n3_f(1800, 0.05)
      os.system('sudo reboot')
      sys.exit()

自動起動するようにする

再起動後自動起動することによってまた監視を続行する。

$sudo vi /etc/rc.local

#最後らへんに追加 先程作ったディレクトリを選択してください。ここではusr
python /usr/local/bin/ping_monitor.py &

exit 0

以上

自動起動を止めたい場合はrc.localの追加部分をコメントアウトするか削除してください。

PythonでPingの確認を行う

こんにちは筆者です。RaspberryPiとL-02Cにハマりまして必須と思われるPingを送信して確認するプログラムを作りたいと思います。

pypingを使う

Pythonでpingを送りたいのならosを使うかsubprocessを使うかのどちらかだけだと思っていたが実はpypingというものがあるらしい。シンプルで簡単なので今回はこちらを試してみた。

pipでpypingをインストールする。

$sudo pip install pyping

お好きなエディタ(viとかnanoとか)を使ってping.pyを作ります。この構成では到達を確認するものです。

$vi ping.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import pyping

#確認したいアドレス
host = "192.168.11.1"
RPing = pyping.ping(host)

if RPing.ret_code == 0:
    print("到達を確認しました。")

else:
    print("到達を確認できませんでした。")

以上が基本的な構成となっています。

色々使ってみる

GoogleにPingを送る場合で色々やってみた。たぶんPingを3回ほど送信して最大値と最小値、そして平均値を求めていると思う。

$vi ping.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import pyping

#確認したいアドレス
host = "www.google.com"
RPing = pyping.ping(host)

#送り先
print "ADD:"+str(RPing.destination)
#送り先IP
print "AIP:"+str(RPing.destination_ip)
#最大往復秒
print "MAX:"+str(RPing.max_rtt)+"ms"
#最小往復秒
print "MIN:"+str(RPing.min_rtt)+"ms"
#平均往復秒
print "AVG:"+str(RPing.avg_rtt)+"ms"

必ず管理者権限を使って実行してください。Windows Pythonでも同じことが言えます。

$sudo python ping.py
ADD:www.google.com
AIP:216.XXX.XXX.XXX
MAX:109.266ms
MIN:98.217ms
AVG:103.011ms

死活監視にも使えますので是非使ってみて下さい。以上、忘備録でした。

以上

三沢基地航空祭2016に行ってきた #5.5

後日談のようなものです。今年の航空祭は非常に楽しめました!なんといっても快晴でしたからね。

ピザア嗚呼あああああああー!

ピザを食べれなかったことが無念でなりません。こんなに混んでるなんて…!11時過ぎたくらいから1時間並んでも買えないくらいの人気っぷり。航空祭よりピザ目当てという方も多いのかもしれませんね。ちなみに友達は『あじの塩焼き』を食べ筆者はタコスを食べました。

露店によって味は千差万別。おいしいのからまずいのまで揃っています。具体的にはなにかなんて言いませんが!

ここで後悔したことリストを発表します。来年の役にたてますぜ!

1.交通

電車という手をやっぱり使わず友達の車で行った筆者。朝にすれ違いトラブルやらあって7:10くらいに八戸から出た。『浜三沢』到着は8:30くらいでシャトルバスはちょっと混雑していた。会場に着いたのは9時すぎとなり、オープニングフライトには間に合わなかった。くぅーーーー。車で行くなら早めに…。

帰りはシャトルバスに乗るのにかなり苦労しました。ブルーインパルスが演目終わった13:35くらいに帰る予定だったがこれが甘かった。みな考えること同じ、一斉に帰りの支度を始めるものです。

それと場所が悪かった!筆者たちはなんとアメリカ軍の展示コーナーにいた。帰りのシャトルバスがでる場所は『東バス乗り場』、自衛隊の展示コーナー側である。真逆にいたので移動に苦労したぜ…。

あと歩いてる途中にかなり長い列を発見。『なんの列?』と思い確認しに行くと浜三沢行きのシャトルバス乗り場であった…。確認に行った時間にも列はさらに長くなった。

この経験から確認を怠らないことをお勧めする。東バス乗り場(浜三沢駐車場行きと五川目駐車場行き)は自衛隊側、西バス乗り場(小川原湖畔駐車場)はアメリカ軍側。これだけ確認しておけば混雑は回避できそうだぜ!

まぁ並んでる間にF-35のフライトなど最後まで見ることができてよかったけど…。

2.トイレ

昼過ぎ筆者、実はお腹が痛かった。しかし、そんな筆者を待ち構えているのは行列。30分の苦行に耐えやっとのことでトイレに入ることが出来ました。チラッと見えたトイレットペーパーの無くなっていた簡易トイレもあった…。小ならいいだろう大なら地獄である。

航空祭に行き前に済ましておくことを強くおすすめする!

3.昼飯

混んでるところからガラガラのところまでいろいろある。外人が店員でも日本語は通じる。出来れば英語がいいが…。もし日本語が通じなかったら指で『コレ!』とメニューを指さすか手の動きで伝えるといいかも。

ちなみに航空祭名物『ピザ』はかなり人気商品なのでお昼近くに並んでからでは手遅れ。9時-10時くらいに並んでおくと余裕で購入できると思います。場所は米軍展示側の方。奥の方に位置する。

 

これくらいかな!来年もいくつもり!

名称未設定.png
See you next year.

GearBestに修理依頼

筆者は先月(7月)にGearBestから購入したXiaomi社製 Mi Pad 2の画面に異常(画面半分が明暗する、バックライトの不具合?)がみられたため、修理依頼を出すことに。詳しい保証条件はこちらに。GearBestには45日間返金保証やDAO(初期不良等)、1年間無料保証など手厚い保証があります。そこがうれしくて使ってるんですけどね。

筆者自身GearBestを使い始めたのは去年の11月から。GearBestを使い始めてから初めての機器トラブルなので備忘録がてら記事にしようと思います。

1.故障状況をサポートセンターに連絡

どの部分が故障したのか?詳しくサポートセンターに連絡する必要があります。やり取りはもちろん英語です。筆者は英語が苦手なので以下の文言(ちょっと変えていますが)を付け加え送信しました。

I’m bad at English. I’m using website translation. Please understand this.
私は英語が苦手です。私はウェブ翻訳を使用しています。予めご了承ください。

ほとんど文章の構成はweblioを参考にしました(専門用語をふんだんに使いますので…)。最後にアメリカ人の友達やGoogle翻訳、エキサイト翻訳を使い確認しました。。最初は念のためといってサポートセンターに日本語も併せて送っていましたが、途中から英語だけにしました。

あまり文の構成など気にしなくてもニュアンスで意味を汲み取ってくれました。別に完璧な英語でなくてもいいかと…。もちろん完璧にした方が良いですが。

サポートセンターには注文番号や詳しい事情を報告し、故障した箇所の画像を添付して送りました。(例えば画面トラブルだとBIOS画面を表示し撮って送ると良いかもしれません。)

2.方法を選択する

故障状況をサポートセンターに連絡すると、サポートセンターから返信が来ます(通常24時間以内とのこと)。初めに部品を調達するから2日程待ってくださいとの連絡をうけました。

その後(連絡を受けて当日に)、3つの提案をされました。

1.商品の返送

(Return the item back to us)
中国にあるGearBestに返送すること。商品が到着したら、交換か返金を選択できる。45日間の保証に限る。

2.商品を受け取ったまま、ポイントとして受け取る

(Keep the item and accept a partial refund on Wallet)
今回であればXiaomi Mi Pad 2を受け取ったまま、50 USD分のポイントを付与するというもの。

3つの提案ですが3つ目は省略します。さて、筆者が望んでいるのは『1.商品の返送』です。それを相手に伝えました。

3.返送に際しての注意

『1.商品の返送』を選択すると返送先住所が送られてきます。いろいろな注意書きもあります。詳しくはご自身でご確認ください。ここでは概略しか書きません。

1.添付ファイル(メッセージに添付されているWordファイル)

メッセージには添付ファイルが記載(内容は注文番号やRAM番号など)を印刷して返送する際に入れておくというもの。向こうで確認するために確認するときに使うようです。

2.通常配送選ぶ

通常方法で配送(SALとかかな?)してくれとのこと。DHLやFedEx、UPSなどの高速便を使用しないでくださいというもの。理由は税関で止められる可能性やそれによって保証が遅れてしまう可能性。それと高い関税が発生する恐れがあることから。

3.7日以内にすべての付属品を含め返送

7日以内に返送を実行する必要があります。また付属品すべてを返す必要があります。例えばXiaomi Mi Pad 2であれば本体含め、充電器やType-Cケーブルも含める必要があります。

4.追跡番号を通知

返送した場合の郵便通知番号を伝えること。相手が配送の進捗を確認するためです。

4.EMSで返送

SALとかいろいろありますが速度や保証などを考えてEMSにしました。

EMS.jpg
拡大はこちらをクリック

郵便局でEMSの送付状をもらいます。また梱包する封筒や箱を無料でくれます。画像はその控えになっています。

“受付年月日”を記入。”依頼主の氏名”、”住所”を英語圏表記に準拠した形で。”郵便番号”、”電話番号”も記入しましょう。

内容品は関税告知書を兼ねていますので正確に記入しましょう。今回は修理のためなので商品ではないことを明記しましょう。今回は”電子装置”の”タブレットPC”で、また修理という内容も記載しておきました。

Electronics
Tablet PC (REPAIR)

また備考も記載(いらないかもしれないです…。ご自身の判断にお任せ。)無償貨物であることを明記。

No commercial value for customs purpose only.

日本円(JPY)表記でも米ドル(USD)表記で価格を表記していいらしい。オプションで損害要償額も記入できます。

郵便局員の方に内容物やEMSの送り状に問題がないかをチェックしてもらって受け取ってもらいました。あとはGearBestには控えに書いている『お問合せ番号 EMS item number』を通知しましょう。

5.最後に

修理か交換とお願いしたのですが、タイミングが悪かったのか返金処理になりました。クレジットカードにUSDで返金されるようです。初めての海外への修理依頼。英語力は若干ついた気がします!返送に1,680円かかりましたが良い授業料になったと思います。

以上

Raspberry Pi初期セットアップ

Raspberry Piの初期セットアップについて備忘録としてまとめておきます。

1.Raspbianのダウンロードと書込み

1-1.Raspbianをダウンロードする

Raspberry Piに使うOSは様々ありますが、通常はRaspbianを入れます。イメージファイルを公式サイトからダウンロードします。

1-2.イメージファイルをMicroSDに書き込む

先ほどダウンロードしたRaspbianをMicroSDに書き込む必要があります。今回使うソフトウェアはWin32 Disk Imagerというものです。書き込むMicroSDの容量は8GB以上が望ましい。

関連

Amazon.co.jp – 【Amazon.co.jp限定】Transcend microSDHCカード 8GB Class4 (無期限保証) TS8GUSDHC4E (FFP)

Amazon.co.jp – 【Amazon.co.jp限定】Transcend microSDHCカード 16GB Class10 (無期限保証) Newニンテンドー3DS 動作確認済 TS16GUSDHC10E (FFP)

win32.png
Win32 Disk Imager

先ほどダウンロードしたイメージファイルを選択して書込み先を指定します。Writeボタンを押してしばらく待てば完了です。

2.Raspbianのセットアップ

2-1.MicroSDをRaspberry Piにセット

先ほど書き込んだRaspbianの詰まったMicroSDをRaspberry Piにセットする。初期の設定には画面とキーボード、LANケーブルまたは無線Wi-Fiアダプター、できればマウスがあったほうが便利です。

関連

Amazon.co.jp – BUFFALO 11n対応 11g/b 無線LAN子機 親機-子機デュアルモード対応モデル WLI-UC-GNM2

MicroUSBを接続すると自動でデスクトップ画面まで移動します。CUIに変更したい場合は”Alt+Ctrl+F1″で切り替えることができます。CUIに切り替える前にGUI上でWi-Fiの設定をしておくと便利です。

2-2.アップデートの実行

セキュリティやパッケージ情報などを最新に保つためにアップデートを実行する必要があります。

$sudo apt-get install update
$sudo apt-get install upgrade
$: "必要があれば"
$sudo rpi-update

2-3.SSHでWindowsからRaspberry Piを操作

SSHでWindows(またはLinux)側から接続します。特に設定しなくてもSSHでログイン可能になっています。Raspberry Piに設定されているIPアドレスを確認します。接続にはクライアントにはTera Termを使います。

$ifconfig
wlan0 Link encap:イーサネット ハードウェアアドレス b0:c7:45:aa:eb:80
      inetアドレス:192.168.11.4 ブロードキャスト:192.168.11.255 マスク:255.255.255.0

DHCPから指定されているIPアドレスが例として192.168.11.4であることがわかったと思います。また有線接続であればeth0のIPアドレス見てください。

Tera Termで実際に接続します。先ほど取得したIPアドレスをTera Termに入力して接続してみましょう。

tera.png
Tera Term:192.168.11.4指定

セキュリティ警告は続行で問題ないかと思います。次にユーザ情報を記入します。

tera2.png
初期ユーザとパスワード

初期値のユーザ名は”pi”、パスワードは”raspberry”です。

tera3
ログイン成功画面

これでRaspberry PiとWindowsが接続されました。

2-X.Linuxからログイン

LinuxからRaspberry Piに接続を試みる場合のみ。

Screenshot from 2016-07-18 12-02-10.png
Ubuntuからログイン

下記のコマンドでログイン可能となっています。

$ssh pi@192.168.11.4

続行するとパスワードを求められますので”raspberry”と入力すれば接続できるハズ!

2-4.日本語や時間を設定する

日本語設定は比較的簡単です!

$sudo dpkg-reconfigure locales

選択画面が出てきますからスペースキーで指定のロケールを選択してください。

[*] en_GB.UTF-8 UTF-8
[*] jp_JP.EUC-JP EUC-JP
[*] jp_JP.UTF-8 UTF-8
locale.png
日本語を希望ならjp_JP.UTF-8を英語希望ならen_GB.UTF-8

次に日本語フォントど導入します。

$sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

次にタイムゾーンの設定です。

$sudo raspi-config
tool.png
“5 Internationalisation Options”を選択
tool2
“I2 Cgange Timezone”を選択
tool3.png
Asia=>Tokyoを選択

2-5.起動時CUI設定にする

GUI起動を止めCUI起動にする。リソース最適化につながります。

tool5.png
“3 Boot Options”を選択
tool6.png
“B1 Console”を選択

3.Vimをインストール

エディタをインストールします。標準のViではちょっと面倒なのでVimをインストールします。標準でインストールされているnanoでもいいですけどね。

$sudo apt-get install vim

4.IPアドレスを固定

ローカルIPアドレスを固定化してDHCPによるIP変更を防止する。

設定項目 設定値
IPアドレス 192.168.11.200
ネットマスク 255.255.255.0
ゲートウェイ 192.168.11.1
$sudo vi /etc/network/interfaces
#変更前
allow-hotplug wlan0
iface wlan0 inet manual
     wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
#変更後
allow-hotplug wlan0
iface wlan0 inet static
   address 192.168.11.200
   netmask 255.255.255.0
   gateway 192.168.11.1
     wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

再起動する。

$sudo reboot

次回からSSHでのログインは192.168.11.200となります。

5.あとがき

備忘録として書きました。なにか間違えてる点があればコメントで知らせてください。

以上

Raspberry PiにMuninの導入法(インストール)

私の研究ではよくMuninというアプリケーションを使います。Muninはサーバーのリソースやセンサ情報などをグラフ化してくれるとてもありがたいアプリケーションなのです。

さて、はじめにRaspberry PiでMuninをインストールしただけだとエラーが発生する。

munin.png
Forbidden – You don’t have permission to access /munin/ on this server.

ちなみに今回筆者が使っているOSはRASPBIAN JESSIE (Kernel Version : 4.4)というもので2016-05-27と比較的新しいものを使っている。前まで使っていた古いRaspbianはそのまま apt-get install muninで勝手にグラフ化してアクセスできたのに…。

Ubuntuや他のLinuxでも同じ症状が発生したら試してみてください。Muninが動作しない状態が長引いたので面倒でしたが無事解決に至りました。

さてこれから、導入法まで自分の備忘録として書いていきたいと思います。もちろん環境によって設定等が変化しますから鵜呑みにせず、自己の責任で設定を行ってください。

 

1.Apacheの導入

Apache導入済みの方はこの項目をスキップしてください。先にMuninからインストールしてApacheをインストールしたのならMuninを削除してください。削除コマンドは下記。Muninだけならmunin-nodeを記載しないこと。すべて消し去るpurgeです。何かしらの設定維持ならば、removeを。

$sudo apt-get purge munin munin-node

次にApacheを導入します。導入後のバージョン確認も行ってください。Nginxでもいいですけどここでは解説しません。

$sudo apt-get install apache2
$apachectl -v
Server version: Apache/2.4.10 (Raspbian)
Server built: Jan 23 2016 22:26:49

2.Muninの導入

Muninの導入にあたってmuninとmunin-nodeがあります。muninは監視するアプリケーションでmunin-nodeは監視されるアプリケーションです。今回は両方インストールしてブラウザ上に表示したいと考えているので両方インストールします。

$sudo apt-get install munin munin-node

今までだとこれでブラウザ上で表示されていましたが、新しいバージョンだとはじめに紹介したエラーが発生するようです。ここでMunin側の設定ファイルを一部編集する必要があります。私はvimを使いますが、nanoを使う方ならviの部分をnanoにして使うと良いかと。

#変更前
$sudo vi /etc/munin/apache.conf
<Directory /var/cache/munin/www>
     Order allow,deny
     Allow from localhost 127.0.0.0/8 ::1
     Options None
#変更後
$sudo vi /etc/munin/apache.conf
<Directory /var/cache/munin/www>
     Order allow,deny
     Allow from all
     Require all granted
#    Allow from localhost 127.0.0.0/8 ::1
     Options None

他のPCからも閲覧できるように追加を行いました。セキュリティ上BASIC認証などをおすすめします。

3.ApacheにMuninを反映

項目2でApacheをリスタートしてもパーミッションエラーが発生します。Apache側に適用させる必要があります。シンボリックリンクを作り、Apacheに適用させます。

$sudo ln -s /etc/munin/apache.conf /etc/apache2/sites-enabled/munin.conf
$sudo /etc/init.d/apache2 restart

4.反映を確認

他のPCから見えるようになっているか確認してください。Raspberry PiのIPアドレスとmuninで見れるハズ!

ok_munin.png
RaspberryPiのIPアドレス/munin

Muninでディスクの状態を確認!

disk_munin.png
MuninとDisk情報

5.あとがき

筆者はこれに1日悩まされていました。でも解決してよかったと思っています。いろいろ試してきてこれの他にできる方法もありますが、これが一番かんたんかと思い紹介しています。いろいろと苦労しました…。開拓者の気苦労というやつですかな(笑)

間違っている部分があればコメントでお知らせください。

以上

 

関連

Amazon.co.jp – Raspberry Pi3 Model B ボード&ケースセット (Element14版, Clear)-Physical Computing Lab

Amazon.co.jp – Raspberry Pi 3 Model B (Element14)

Amazon.co.jp – BUFFALO 11n対応 11g/b 無線LAN子機 親機-子機デュアルモード対応モデル WLI-UC-GNM2