【続】SORACOM x Nerves できたとはいえるとぼくおもいます
をぜひご参照ください。
はじめに
- Elixir 楽しんでいますか
- SORACOM Air for セルラーとNervesで、データ通信を楽しみたいとおもいます
Nervesとは
- Elixirというプログラミング言語でIoTを楽しめる、**ナウでヤングなcoolなすごいやつ**のことです
はじめに、おことわり
- この記事でやっていることはあなたが望んでいることとは違うのかもしれません
- うん、違うとおもいます
- 私自身が本当にやりたかったこととは違うので...
- 後半、試してみたこと、これからやってみたいことをまとめます
- わかってはいますが、現時点で私ではできなかったポイントをまとめておきます
- 自分で解決したい気持ちもありつつ、どなたかから助言なりがないと詰まってしまっておりまして、もっと言うとこの中途半端な状態のままですが、あとを引き取ってくださることを期待して記事にしました
できたこと
- モバイルWiFiーーHUAWEI Mobile WiFi E5785に、SORACOM Air for セルラーのSIMをいれて、Nervesアプリと接続してデータ通信することです
- 私は、HUAWEI Mobile WiFi E5785を https://www.iijmio.jp/device/?DeviceType=r&DeviceType2=hikari で買いました
- 家のインターネットが夜になると遅くなってですね、夜の時間帯だけHUAWEI Mobile WiFi E5785を使って動画をみたりしています
- 1日1時間〜2時間で、見ない日もあったりでだいたい月20GBくらいの利用です
- くしくも20ギガプランでなんとかなっています
SIMの購入
- SORACOM Air for セルラーの利用方法(個人・法人) を参考にSIMを購入します
- 私は、
plan-D
を選びました - HUAWEI Mobile WiFi E5785に合うサイズは、マイクロです
APN設定
-
HUAWEI Mobile WiFi E5785と接続したパソコンのブラウザで、
http://192.168.8.1
にアクセスして、APN設定をします - 設定方法の詳細は、 https://support.mineo.jp/contract/pdf/e5577_02.pdf などをご参照ください
- SORACOM Air for セルラーの利用方法(個人・法人)の値は、https://soracom.jp/start/ をご参照ください
Nervesアプリの作成
- この記事では割愛します
- いくつかリンクを示しておきます
公式
環境構築
Nervesアプリの開発の流れがよくわかる記事
WiFi設定
Nerves とつないでみる
Raspberry Pi 2
- 令和3年なのに、
Raspberry Pi 2
です- 我が家では現役バリバリです
- WiFiはついていないので、WN-G150Uをさしてつかいます
- 特に特殊なことは不要で、認識してくれます
- HUAWEI Mobile WiFi E5785は、2GHzを使いました
Raspberry Pi 4
- WiFiは搭載されています
-
HUAWEI Mobile WiFi E5785は、5GHzを使いました
- もしかしたらもう少し待っておけば、2GHzでもつながったのかもしれません
- 素のRaspberry Pi OSではつながっていたので
- なかなかつながらなかった(1分くらいは待って待ちきれなくなった)ので、5GHzに変えてみたところすんなりつながりました
- もしかしたらもう少し待っておけば、2GHzでもつながったのかもしれません
Run
- Nervesにsshして以下を実行しました
iex> ifconfig
# wlan0 がそれっぽくあること
iex> ping "nerves-project.org"
Press enter to stop
Response from nerves-project.org (185.199.110.153): time=3725.777ms
Response from nerves-project.org (185.199.110.153): time=2533.257ms
Response from nerves-project.org (185.199.110.153): time=740.385ms
Response from nerves-project.org (185.199.110.153): time=166.326ms
Response from nerves-project.org (185.199.110.153): time=175.369ms
iex> url = "http://beam.soracom.io:8888"
iex> headers = [{"Content-Type", "application/json"}]
iex> time = Timex.now() |> Timex.to_unix()
iex> json = Jason.encode!(%{value: %{temperature: 100, humidity: 100, time: time}})
iex> HTTPoison.post(url, json, headers)
- Nervesアプリ -> HUAWEI Mobile WiFi E5785 -> SORACOM Beam -> Azure仮想マシンへのデータ通信が通った様子です
Azure仮想マシン に自作したPhoenixアプリ
本当にやりたいこと…… (ある意味ここからが本題)
#NervesJP
— TORIFUKU Kaiou (@torifukukaiou) May 2, 2021
いつでもどこでも温度・湿度が測れます!
Raspbian OS + Elixirアプリ(Nervesじゃないよ...) + L-02C(モデム) + SORACOM Air for セルラー(SIM) + ANKERのバッテリー + Phoenixアプリ on Azure VM pic.twitter.com/ePpnAu5iZE
wvdial
- たとえば https://users.soracom.io/ja-jp/guides/usb-dongles/ms2372h-607/raspberrypi/ のページで紹介されているsetup_air.shスクリプトでは、wvdialコマンドでセルラー通信を開始するように書かれています
- もちろんデータ通信端末が異なれば、ATコマンドのスクリプトも違ったものが必要にはなるのですが、その件については素のRaspberry Pi OSではありますが手前味噌の団長! いつでもどこでも温度・湿度が測れるのであります! (Elixir, SORACOM Air for セルラー)で解決しています
- L-02Cに関しては数多くの先人たちの記事がありました
- 感謝します
- ところが、公式に公開されているNerves System1には、wvdialなんて無いし、あとから追加することもできません
- そもそも
pon
コマンドが公式のNerves Systemにはないんです
- そもそも
Customizing Your Own Nerves System
- では道は閉ざされているのかというとそんなことはなくて、リンク先の通りにカスタマイズしてやればいいわけです
- カスタマイズ内容は、https://github.com/nerves-networking/vintage_net_mobile のREADMEの通りにやると、
pon
コマンドが追加されたりします- もう少し具体的に試したことは、Nerves + L-02C(データ通信端末)でデータ通信にトライ(モデムモードにはなりました) (Elixir)に書いています
- READMEの通りでは、wvdialコマンドは入ってきません
-
pon
は使えるようになったので、素のRaspbian OS上でうごいた設定ファイルなどを配置して以下を実施してみました - うんともすんともいわず、セルラー通信がはじまりそうな気配はありません
- 文字通り、エラーもなにもでないので詰まっています
iex> :os.cmd 'mknod /dev/ppp c 108 0'
[]
iex> :os.cmd 'pon soracom'
[]
-
ち〜ん
-
mknod /dev/ppp c 108 0
はよくわかっていなのですが、pon soracom
だけやるとエラーメッセージにでてくるので実行しました - https://github.com/nerves-networking/vintage_net_mobile/blob/06456c3bcf2e5d18dba21aed0b7452a0ff149c43/lib/vintage_net_mobile.ex#L148
- にそれっぽい処理はあります
-
- 私が、コマンドの使い方を間違っている可能性もあります……
nerves-networking/vintage_net_mobile
-
Nerves的にはあとは、これを利用してデータ通信端末ごとにモデムを作ればいいらしいのですが、私の現時点の力量では作れませんでした
- なんとなく作ってみたのですがうんともすんともいわず、詰まっている状態です
- あと、もしかしたら日本と海外では事情が若干違うところがあるのではないかとおもっています
- それは、ユーザー名やパスワードの話が一切vintage_net_mobileでてきていないことです
- ユーザー名やパスワードが指定できていないから弾かれているといったところの段階までまだ到達はしていないとおもっていますが、のちのちぶつかりそうなポイントです
- もちろん、私がちゃんと読めていない可能性はあります
- それは、ユーザー名やパスワードの話が一切vintage_net_mobileでてきていないことです
wvdial
- もう一度これに戻ります
- wvdialであれば、ユーザー名・パスワードを設定ファイルに指定できるし、https://soracom-files.s3.amazonaws.com/setup_air.sh でも使われているので一番近道な気がします
- 次は、wvdialコマンドが使えるようにして試してみたいとおもっています
- おもっています
- ただ、いまの私では詰まってしまっています
- 不確かな情報で申し訳ありませんが、以前(2010年代前半)はBuildrootにwvdialがあったようですがいまはなくなっているようです
- https://hexdocs.pm/nerves/customizing-systems.html#adding-a-custom-buildroot-package をベースに応用問題をやればいいのでしょうが、いまの私には追加方法がわかりませんでした
-
buildroot wvdial
とかで検索すると、https://github.com/Metrological/buildroot/blob/master/package/wvdial/wvdial.mk などそれっぽいものが見つかります- 仮にこういったものがコピペで大部分が使えるものだとしても、
- このファイルの中に書いてある
http://wvdial.googlecode.com/files
にアクセスしても404です
-
apt-get install wvdial
にて、素のRaspbian OSにインストールはできるのできっとなにか方法はあるのだとおもっています - wvdialをよく読んで中でやっていることを再現してしまうという方法もあるとはおもいます
Wrapping Up
- NervesJPの愉快なfolksが期待していることとは違うとおもいますし、それはできるよね〜 感がいっぱいだとおもいます
- 引き続き本当にやりたいことを目指して精進をつづけるつもりです(つもりです)
- もし、こんなふうにやればいんじゃないのというアドバイス、もしくはもうできたぜ! という方はぜひぜひお知らせください
NervesJP
- ここでNervesJPの紹介です
- 月1回程度、ワイワイガヤガヤ オンラインで集まっています
- 次回は、2021/6/23(水) 19:30〜 NervesJP #18 テストどうやってやっていく回 です
- 愉快なfolksたちがあなたの参加を待っています
- れっつじょいな〜す
- https://join.slack.com/t/nerves-jp/shared_invite/enQtNzc0NTM1OTA5MzQ1LTg5NTAyYThiYzRlNDRmNDIwM2ZlZTJiZDc1MmE5NTFjYzA5OTE4ZTM5OWQxODFhZjY1NWJmZTc4NThkMjQ1Yjk
- ぜひぜひSlackにご参加ください
-
正確な呼び方とそれが表す範囲はよくわかっていませんが、Customizing Your Own Nerves Systemというタイトルからこの記事では
Nerves System
と呼ぶことにしました ↩