PQI Air Card IIを常時Wi-Fiクライアントとして使う

いまさら、旬を過ぎた話ではあるのだけれど…

PQI Air Card II(以下Air Card)は無線LAN機能を内蔵したmicroSDカードアダプタ。アクセスポイント(親機)としても、クライアント(子機)としても動作する。

デフォルトではアクセスポイントとなりスマホやPCから一対一接続して使うのだが、クライアントとして動作させると、LAN環境やテザリング環境でさらに便利に使えるようになる。Linuxで動いており、FTPも自由自在。

ということで、常にクライアントとして動作させるようにする。

参考サイト: デジカメ内部でRubyを動かす狂気!無線LAN内蔵SDカードアダプタPQI Air Cardの間違った使い方

接続先の登録

クライアントとして動作させるには、事前に接続に行く先のSSIDとパスワードを登録しておく必要がある。

購入時点では当然登録されていないので、まずはカメラなどにAir Cardを入れて、カメラの電源を入れデフォルトのアクセスポイントモードで立ち上げる。

そしてPCやスマホでSSIDがAir Cardのネットワークに接続し、ブラウザで192.168.1.1もしくはhttp://air.card/ に接続すると、設定画面が表示される。

ここで左のメニューから[Wifi Setup]を選び、HotspotsのAPに使いたいネットワークのSSIDとKEY(パスワード)を登録する。

3つまで登録できるので、優先順に無線LANアクセスポイントのものや、スマホのテザリング用のSSIDなども登録しておくとよいだろう。

今後もアクセスポイントモードとして動作させることがあるのならば、パスワードも設定する。

また、このとき[Main Page]で表示されるMacアドレスも控えておく。

クライアントモードでの立ち上げ設定

Air Cardをクライアントとして動作させる公式の手順は、カード内にある緑色の写真を消去すること。これにより、自動的にクライアントモードに切り替わる。

が、Air Card IIはLinuxで動作しており、/usr/bin/w2コマンドによりクライアントモードにすることができる。

そして、microSDカードのルートディレクトリにautorun.shというスクリプトを置いておくとカード起動時の最後に実行される。普通にPCなどから書き込んで構わない(もちろん改行コードはLF)。

#!/bin/sh

sleep 5
/usr/bin/w2

(sleep 5は動作が安定するまでの余裕)

autorun.shを書き込めば、次回の起動時からは先に設定したSSIDにクライアントとして接続するようになる(接続先の優先順位は上から)。

固定IPアドレスの設定

最後はLAN内のPCなどからAir Cardに簡単にアクセスできるように、固定IPアドレスを割り当てるようにする。

クライアントとして接続する場合はDHCPによってIPアドレスを取得するわけだが、このIPアドレスが動的割当だとAir Cardのアドレスを探すところから始めることになるからだ。

DHCPサーバでAir CardのMacアドレスに対しては固定IPを与えるように設定する。

うちでは一番使用するネットワークのDHCPサーバはdnsmasqを使っているので、/etc/dnsmasq.confに以下の行を加えた。

ルータのDHCP機能を使っている場合は、ルータのインターフェース上で設定することになる。

dhcp-host=10:66:82:xx:xx:xx,aircard,192.168.1.22,12h

そして、dnsmasqを再起動。

$ sudo systemctl restart dnsmasq.service

これで、ブラウザやftpで192.168.1.22にアクセスすることにより、SDカードの中身を操作できるようになる。

正直、この固定IPアドレスを付与するだけのためにdnsmasqを使っている。NTTひかり電話ルータが、固定IPアドレスの設定すらもできないという仕様なのは困ったものだ。

動的IPアドレスをTwitterで通知する

Air Cardをテザリングしているスマホに接続した場合、割り当てるIPアドレスを固定することはできない。

だが、いちいちスマホの[設定]の奥深くまで潜って、割り当てたIPアドレスを調べるのはあまりに面倒。

参考にした「ひとりぶろぐ」さんではTwitterのメンションを飛ばす方法でIPアドレスの通知をしていたが、私は非公開アカウントがあるので、そこにツイートすることにした。

常用しているPushbulletに通知を飛ばすのが理想なのだが、PushbulletのAPIはhttps接続を前提としており、Air Cardに載っているwgetがhttpsに対応しておらず、この手段が取れないのが残念。

autorun.shを以下のように書き換える。
「ひとりぶろぐ」さんのスクリプトとほぼ同じようなものなのだが、私の好みの書き方ということで以下。

#!/bin/sh

TOKEN=TOKENtokenTOKENtokenTOKENtokenTOKEN
TWITTER_ID=MyTwitterID
STEWGATE='http://stewgate-u.appspot.com/api/post/'
WGET=/usr/bin/wget

sleep 5
/usr/bin/w2

IP=`ifconfig mlan0 | grep inet | perl -nlpe 's/^ +inet addr:([0-9\.]+).+$/$1/'`

${WGET} -O - --post-data="_t=${TOKEN}&msg=http://${IP}/%0ARAND - ${RANDOM}" ${STEWGATE} 2> /dev/null

使う人は、TOKEN、TWITTER_IDの部分を自分のものに書き換えてください。

IPアドレスをURLの形にしているのは、Webインターフェースにも簡単にアクセスできるようにするため。

${RANDOM}を設定しているのは、同じツイートを連続して書き込むと、制限がかかるため。それでも、このスクリプトを連続実行する(Air Cardのオンオフを短時間で繰り返す)と、Twitterから制限がかかる可能性もあるので注意。

もちろん、LANに接続した場合もツイートはされてしまうのだが、LANの場合は固定IPなのでいちいち見ることもない。それでも、接続確認の役にはたつのでそれはそれでよいだろう。

なお、「PQI Air Card II搭載のwgetコマンドは動作がおかしい」とのことだったが、特に問題なく動作した。Firmwareのバージョンが違うのかな…

残念なこと

Air CardのWi-Fiが弱く、接続先のそばに置いておかないといけない。

PCやスマホの無線LANであれば、余裕で接続できるような距離でもAir Cardでは接続できなかったりする。とくに仕事場ではメインのPCのそばでは接続できないので、アクセスポイントのそばにカメラを置いて、PCのそばに移動して作業するというのはちょっと面倒。

まあ、長時間接続していろいろやるわけではなく、写真のデータさえ取り出すことができれば良いので大きな問題ではない。

Xacti DMX-CG9では、動作しない。

もちろん、ただのSDカードアダプタとしては使えるのだけれど、 Wi-Fiが有効にならない。

一眼の方はまとめて取り出すことが多いので、どちらかといえばAir Cardはちょこちょこ使うXactiで使いたかったのだが、残念。

もはや高くなってきている

投げ売りの時期も過ぎてしまったようで、今Amazonではアダプタのみで2,800円もする。

まあ、利便性を考えれば2,800円出しても買う価値はあると思うけれど、というか予備機としてもう一つ買っておきたいくらいだ。

いくつか残念なことはあるが、以前のようにケーブルを繋いだり、カードを抜き差しするのに比べれば圧倒的に楽。そもそも銀塩時代を考えれば極楽のはずなのだが人間堕落するものだ。

検討すべきこと

以前、うまくクライアントモードで接続しないときがあった。

最近はほぼ問題は発生していないのだが、またうまくいかなくなるようだったら、”iwconfig mlan0″の出力からESSIDの値を取り出し、それによって”/usr/bin/w2″を再試行するようにすると良いかもしれない。

wsl-start

WSL上から、Windowsのファイルを開くスクリプト。

以下のように、パスが通ったコマンド、関連付けしてある拡張子のファイルをWindowsで開くことができる。

$ wslstart notepad
$ wslstart /mnt/c/foo/bar.pdf

Windows上でEmacsを使うための一番の情報源と思われる、NTEmacs @ ウィキの管理者さんの作成。

導入の一番の目的は、WSL上で動作するEmacs上でURLを指定して、Windowsのブラウザで開くこと。

とりあえず、ブラウザを開くのに必要そうなwslstartとwslcommonのみをダウンロードして使ってみることにする。
他にも便利に使えそうなものも揃っているので、あとでじっくり見てみよう。

.emacsに以下のコードを追加して、URLをWindowsのブラウザで開くことができるようになった。

(setq browse-url-browser-function 'browse-url-generic)
(setq browse-url-generic-program "wslstart")

CrystalDiskInfo

S.M.A.R.T情報他、ディスクの情報を取得する。

常駐させて、異常を感知した時にメールで知らせたり、値の変動をグラフ化して表示することも可能。

CrystalDiskInfoで感知できる異常は、発生後すぐにディスクが使えなくなるというより、だんだん悪化していくたぐいのものが多いと思われるので、定期的に起動しすべてのディスクに対してチェックを行い健康状態を確認するという使い方をしている。

もちろん、ディスクに不調を感じたときにも起動し、チェックを行う。