はじめに
- Elixir楽しんでいますか
- 2020/12/27(日)は、【オンライン】豪華プレゼント付!Elixir/Nerves(ナーブス)体験ハンズオン!が行われました
- このイベントのお手伝いをしたため、私もSeeed株式会社様からRaspberry Pi 4を頂戴しました!
- ありがとうございます!
- 令和2年なのにいまだに使っているRaspberry Pi 2と都合2台となりまして、そうなってくると、
-
@nishiuchikazumaさんが投稿された「
nerves.local
の名前をorenonerves.local
にする」のようなことが必要になってくるわけです
ところで
-
mix nerves.new
したときに、はじめからできている
config/target.exs
config :mdns_lite,
# The `host` key specifies what hostnames mdns_lite advertises. `:hostname`
# advertises the device's hostname.local. For the official Nerves systems, this
# is "nerves-<4 digit serial#>.local". mdns_lite also advertises
# "nerves.local" for convenience. If more than one Nerves device is on the
# network, delete "nerves" from the list.
host: [:hostname, "nerves"],
ttl: 120,
- って書いてあって、
nerves.local
はconvenienceであって、nerves-<4 digit serial#>.localなるものがあるとのこと! - で、次の疑問は**<4 digit serial#>**って何ですか? という疑問です
答え
- シリアル番号の下4桁です
- まずNervesで
IEx
を使えるようにします- a. ディスプレイとキーボードを接続する
- b.
ssh nerves.local
する (1台目の電源ON時はこれでいける)
@mnishiguchi さんコメント
iex> Nerves.Runtime.serial_number
c3ba
iex> (
File.read!("/proc/cpuinfo")
|> String.split("\n")
|> Enum.find(&String.starts_with? &1, "Serial")
|> String.slice(-4..-1)
)
c3ba
@torifukukaiou オリジナル
- 私はもともとこういうコードを載せていましたところ、@mnishiguchiさんがもっと短くすむコードをコメントで教えてくださいました
iex> (
File.read!("/proc/cpuinfo")
|> String.split("\n")
|> Enum.map(&(String.split(&1, ":")))
|> Enum.reject(&(Enum.count(&1) == 1))
|> Enum.map(fn [k, v] -> {String.trim(k), v} end)
|> Enum.map(fn {k, v} -> {String.to_atom(k), v} end)
|> Keyword.get(:Serial)
|> String.slice(-4..-1)
)
cccc
- 上記では、
nerves-cccc.local
になります - (この値って変わることはないのかなあ?)
(私の家のRaspberry Pi 2ではこの4桁でうまくいったけど本当にそれでいいのかなあ?)
参考
-
@takasehideki 先生のElixirでIoT#4.3:Nervesアプリ開発時のよくあるトラブルをシューティング -- 原因と対処法
- この4桁は,ボードのシリアル番号から付けられています
- ありがとうございます!
- RASPBERRY PI のシリアルナンバー
Wrapping Up
- シリアル番号の下4桁で合っていますですかね
ちょっと自信がありませんが、自信のある方が正してくださるでしょう- Yes! Yes! Yes!
- @takasehideki 先生から回答をコメントでいただきました!
- ありがとうございます!
- Enjoy Elixir
-
Nervesに興味を持っていただけましたらぜひ、Nerves JP Slackへご参加ください
- 愉快なfolksたちが大歓迎です