Cloud Pi + iOSでのセンサ情報モニタリング … 失敗

先日、家のセンサ情報をブラウザ上で見えるようにしましたが、残念ながらローカルネットに閉じてしまっているので、家の外からはログの閲覧ができません。

というわけで、ついにCloud Piを使う日がやって参りました。ローカルネットに外出先からアクセスしてくれるようになるこのシロモノ。半年以上前に、発売直後に購入していたのですが、一応利用開始日から1年間が有効期限ということなので、十分に活用できる環境が整うまで、ずっと使わずに保管していたのです。また、発売直後はiOSには対応していなかったのですが、2015/3からiOS向けクライアントアプリも提供され始めたので、今なら1年間の有効期限をフルに活かせるのではないかと思います。

 

。。。と思って試してみた結果、ダメでした。少なくとも、自分の環境(Raspberry Pi 2 + iPhone 6 + iOS 8.4, Raspberry Pi上のWebサーバのポート:10080)では使えませんでした。正確には、接続はしてくれますが、実質は何もできない、という状態です。

 

ただ、Android版では(ローカルネットの中からのテストですが)普通に使えたので、一応設定の備忘録は残しておきます。ただ、自分が普段持ち出すのはiPhoneなので、これで使えないのはかなり痛い。。。

 

以下、セットアップの記録です。ほとんとスイッチサイエンスの方でやってくださっているので、そちらを参考にさせていただきました。

まず、Raspbian用のサーバモジュール(p2ptunnel_vXXX.tar.gz)をこちらからダウンロード。直接Raspberry Piから落とすこともできるかもしれませんが、自分は開発用のMacでダウンロードしてから、scpでRaspberry Piにコピーしました。

$ scp p2ptunnel_v100.tar.gz pi@192.168.24.50:/home/pi/.

Raspberry Piにログインしたら、cloudpiディレクトリを作成して、そこに先ほどダウンロードしたファイルを移動させて、解凍します。

$ mkdir cloudpi
$ mv p2ptunnel_v100.tar.gz cloudpi/.
$ cd cloudpi/
$ tar xzvf p2ptunnel_v100.tar.gz 
p2ptunnel/
p2ptunnel/cloudpi
p2ptunnel/cloudpi.conf
p2ptunnel/._install_p2ptunnel.txt
p2ptunnel/install_p2ptunnel.txt
p2ptunnel/._install_p2ptunnel_en.txt
p2ptunnel/install_p2ptunnel_en.txt
p2ptunnel/P2PTunnelServer

解凍してできたp2ptunnelディレクトリに移動して、実行ファイルのコピーと、実行権限の設定をします。

$ cd p2ptunnel/
$ sudo cp cloudpi /etc/init.d/cloudpi
$ sudo chmod 755 /etc/init.d/cloudpi

続いて、”p2ptunnel/cloudpi.conf”を開くと、

uid=UID(20char)
password=1234567890

こんな感じになっているので、”=”の右辺を全部消して、購入したカードに書かれているUIDと、自分で決めたパスワード(4桁以上10桁以下)を入力します。

編集が済んだら、cloudpiをサービスに登録して、起動時に自動的にサーバモジュールが実行されるようにします。

$ sudo insserv cloudpi

あとは、以下のコマンドでサービスをスタートさせるか、Raspberry Piを再起動させれば、端末側の準備は完了です。

$ sudo service cloudpi start

 

続いて、クライアント側の設定です。クライアントには、iPhone 6 + iOS 8.4を使います。

AppStoreからCloud Piアプリをダウンロードして起動すると、

cloudpi-1

こんな感じの画面になりますので、UIDとパスワードを入力します。QRコードを撮影すれば、UIDの入力は省略できます。

UIDとパスワードを入力すると、CloudPi1が追加されたとの通知が出てきます。この通知を消してから右上の「次へ」を押すと、一応接続されるよう(←Raspberry Pi側のコンソールにログが出る)ですが、iPhone側は画面が真っ白でよくわかりません。

cloudpi-3

右下のアイコンを押せばメニューが出てくるので、「設定」をタッチします。

cloudpi-4

すると、「ポートマッピング」の設定がでてきますので、必要に応じてポートの設定をします。自分の場合はRaspberry Pi側でWebサーバが10080ポートを開いて待っているので、以下のように変更します。

cloudpi-5

これで、iPhone上での8080ポートへのアクセスが、Raspberry Piでの10080ポートへのアクセスになるはずです。

 

さて、ここで一つ、ものすごく大きな注意点があります。自分も少し経験があるのでよくわかるのですが、iOSはAndroidに比べてアプリ開発の制約がものすごくキツくて、基本的にバックグラウンドで動き続けるようなアプリを開発することはできません。

Cloud Piアプリも例外ではなく、Raspberry Piと繋がるのはアプリがフォアグラウンドで動作しているときだけになります。つまり、他のアプリを起動しようものなら、接続は切れます。

そのため、Cloud Piアプリは内部にブラウザを持っていて、そのブラウザを使ってWebページへアクセスできるようにしています(ちなみに、このへんの話は開発者フォーラムを見ると出てきますが、もう少し目立つところに書いておいた方がいいんじゃないでしょうか。。。)。

cloudpi-6

こんな感じで、手打ちでURLを入力します。

「まあ、常時接続じゃなくても、センサログを自分の見たいときに見れるならそれでいいか」と思って、Cloud Piの内部ブラウザからアクセスしてみたのですが……何も表示されません。Raspberry Piのコンソールを見ると接続はされているようですが、表示されません。iOS 8.4に対応していないのか、Raspberry Pi 2に対応していないのか、ポート番号とかWebサーバの設定が悪いのか、よくわかりませんが表示されません。Androidからのアクセスだとうまくいくみたいなので、やっぱりiOS側の問題かな…

 

ということで、とても残念な結果になってしまいました。どうにかして外部からのアクセスを実現しようと思ったら、Cloud Pi + Android端末+格安SIMを使うか、別の手段でNAT越えを実現するか、ですかね。。。前者の方が簡単ですが、後者なら、IFTTTとかとの連携にも自作のRaspberry Piを組み込めるようになるので、それはそれでアリかと。

なんにせよ、一旦保留です。残念。FREETELのSAMURAI MIYABIが出たら、これの検証用途で買ってみようかなあ。。。