Google Homeのホスト名の取得方法


背景

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);
    }
});