背景
Google HomeのIPアドレスは、arp -a
コマンドで分かるが、
プライベートIPアドレスが動的に欲しいなと思ったら、ホスト名が分からず、ちょっとハマったので備忘録。
ホスト名とは
例えば、ラズパイなら、ホスト名は、raspberrypi.localになっているので、raspberrypi.localを名前解決すれば、動的なIPアドレスを得られる。しかし、ホスト名がわからないと、動的にIPアドレスを得られない。
ホスト名の取得方法
こちらの記事を参考にしたら、簡単にできた。
pi@raspberrypi:~ $ sudo apt -y install avahi-utils
...
pi@raspberrypi:~ $ avahi-browse -at
+ wlan0 IPv6 _____________________MacBook Pro _companion-link._tcp local
+ wlan0 IPv4 _____________________MacBook Pro _companion-link._tcp local
+ wlan0 IPv4 57XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX _googlezone._tcp local
+ wlan0 IPv4 Google-Nest-Mini-57XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX _googlecast._tcp local
+ wlan0 IPv4 googlerpc _googlerpc._tcp local
となる。57XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.localがホスト名である。
ping 57XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.local
が成功することで確認できる。
そういうわけで、名前解決するプログラムも完成して、問題も解決した。
const googlehome = require('google-home-notifier')
const dns = require("dns")
const language = 'ja';
const msg = process.argv[2]
googlehome.device('Google-Home', language);
dns.lookup('57XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.local', (err, address, family) => {
console.log('Device Google-Home at %j (IPv%s)', address, family);
googlehome.ip(address);
try {
googlehome.notify(msg, function(res) {
console.log(res);
});
} catch(err) {
console.log(err);
}
});