ホーム » 「Google Home mini」タグがついた投稿
タグアーカイブ: Google Home mini
google-home-playerをインストール
Raspberry Pi で動かしていた homebridge だけど、nodejs.20.x が出ているとのことで、更新をかけた。しかしこの反動で、google-home-notifier が喋らなくなった。以前より google-home-notifier の内部で利用している google-tts-api のバージョンがあがると動かなくなるトラブルが発生していた。この状況下で、この後継となる google-home-player が出ているので、これを契機に乗り換え。
google-home-player のインストール
google-home-player を使うと、Google Home mini, Google Nest mini で自然なに英語や日本語をしゃべらせることができる。
$ sudo npm install -g google-home-player
Google Home mini が音量最低の英語モード
色々と活用されているGoogle Home mini だけど、子供が使おうとしたら音量が最低になって、かすかに声が聞こえると思ったら英語モードになってる。
ただ、設定を戻そうと Google Home アプリを開くけど、設定でどこを直せばいいのかさっぱり分からない。パソコンでググって設定を直したけど、どこに何があるかさっぱりわからん操作性なんとかならんのか。
homebridge-gsh 不調が回復
最近、homebridge の機能を Google home から制御するためのプラグイン homebridge-gsh が動かない状態であった。ひとまず “Siri” 中心にしてたけど、回復。
google アシスタントで、homebridge との接続を解除して、デバイスをすべて削除した後、再度接続を行う。この時、google アシスタントのデバイスの登録画面などが随分雰囲気が変わっていたので、Google Home, アシスタントの機能が更新されて、homebrige と通信ができなくなっていたのが原因かもしれない。
Siriのシーン登録
Google Homeでhomebridge制御が動かないときがある
最近、Google home mini からRaspberry Pi の homebridge の制御で「homebridgeが見つかりません」の返答が返ってくることが増えた。
どうも、homebridge-gsh では裏で無料のクラウドサービスが使われているけど、たぶんこのクラウドの反応が悪いのかもしれない。(追記:google home の機能変更が原因?)
しかし、Home Pod mini を使い始めてるし、”Hey Siri”で頼むのに切り替えればいい。ただ、”Ok google, 行ってきます”で、テレビと部屋の照明を消す機能の、Siri での設定に悩んだ。
iOS ホームのシーンの登録
“Google Home”アプリでは、複数機能の連動ではルーティン機能を使っていたので、”Google Home” の iOS版ということで、”ショートカット機能”ばかり調べてた。でも、こういう設定は、iOS ではホームアプリのシーン機能だった。ただ、”Google Home”であれば、「いってきます」で、テレビを消した後に「天気」を喋らせたりと、機器制御以外の処理も連動できたけど、iOS “ホーム” では機器制御しかできない。
pychromecastで画像表示
homebridge から、処理結果を chromecast で表示できないかと、pychromecast を試す。
pychromecast の 定番サンプルで、自宅サーバの画像ファイルの URL を与えて、表示を試すが真っ黒画面の表示で動かない。
webサーバのアクセス履歴を見ても、chromecast からのアクセス履歴が無いので、指定した URL にアクセスしていない。
chromecastは、ローカルのDNSを使わない
自宅では、サーバのプライベートアドレスを返す、自宅内 DNS が動いていて、自宅外ではグローバルアドレスを引けるようにしている。自宅ドメインのURLのファイルを表示できないことから、たぶん chromecast は、DHCP の指定する DNS サーバ情報を使っていないのだろう。DNSポイズニングを懸念するなら、あたりまえだろうな。
ということで、URL を、プライベートアドレスを生書きしたものを与えたら、普通に動いた。
(追記) プライベートアドレスのURLだと、https も表示できない。IPアドレス表記のURLだとホスト名が判らないから、https ではオレオレ認証扱いされるのか、これまた表示できない。プライベートアドレスなコンテンツの場合は、アドレス表記に直してかつ、プロトコルを http に変更が必要だな。
#!/usr/bin/python3 import time import pychromecast # デバイス名 chromecast_name = "リビングルーム" # 指定した名前のchromecastを探す chromecasts, browser = \ pychromecast.get_listed_chromecasts( friendly_names = [ chromecast_name ] ) chromecast = next( filter( lambda cc: cc.device.friendly_name == chromecast_name , chromecasts ) , None ) if not chromecast : sys.exit( 1 ) chromecast.wait() mc = chromecast.media_controller mc.play_media( 'http://192.168.xx.xx/wp/wp-content/uploads/2020/10/IMG_4165.jpg' , 'image/jpeg' ) mc.block_until_active() mc.play() # 接続を切る pychromecast.discovery.stop_discovery( browser )
google home で温度グラフ表示
pychromecast がうまく使えるようになったので、homebridge + Google Home にて温度グラフを表示するようにしてみた。「OK Google, 温度グラフをつける」(‘をつける’というのは、スイッチ扱いで登録してあるから)
google home が動かなかったな…
そういえば、先日の朝とか、いつもの Google home mini に「照明つけて」とか言っても、ネットワークにつながっていないとかいって動かなかったけど、google のトラブルが原因か。
我が家では、家電制御は、Google Home mini → homebridge-gsh → homebridge だから、我が家のネットワークの問題(mydns.jpの接続トラブルで逆引き失敗することがある)で、homebridge-gsh が動かないと思っていたけど、google さんがトラブっていりゃうごかないよね。
まあ、homebridge は Home アプリで操作が普通で、”Hey Siri!” で操作できるし、記事みたいに何もできなることはないし。
homebridge-gsh と cec-client
homebridge-gshで、google-homeからHomeKit(homebridge)を制御
自宅で homebridge-config-ui-x で、家電制御の設定が楽になり、homebridge-gsh にて、Google Home から Apple の HomeKit の制御を呼び出せるようにしてみた。今までは赤外線リモコンベースなので、テレビのON/OFFがトグル動作で怪しかったが、HomeKit 経由だと、TVにつなげた HDMI 接続のRaspberry-Pi から HDMI 接続の他の機器に、ON/OFF を明示的に制御ができるようになる。
cec-client で 電源ON/OFF ができなくなった
無事、homebridge-gsh が動き出したのに、CATVSTB の電源が ON/OFF できない。入力切替は正しく動いているのに…
cec-client の動作状況を表示させながらうごかすと、定番の 「echo “on 1” | cec-client -s」で動かない。メッセージを見ると、対象機器がうまく選べないのが原因みたい。
CEC では、物理機器番号と論理機器番号で管理されていて、物理機器番号が決まらないのに on はできない…といったのが原因みたい。cec-client のバージョンがあがり、その辺がいいかげんなコマンドが送れないようになったようだ。
しかたがないので、CEC-O-MATIC のページにて、他の方法を試すと、以下のコマンドなら、正しく電源のON/OFFができた。
$ echo "tx 26:36" | cec-client -s # チューナーをけす Recording2 → Tuner2 standby $ echo "tx 26:44:6C" | cec-client -s # Recording2 → Tuner2 User Control Pressed Power Off $ echo "tx 26:44:6D" | cec-client -s # Recording2 → Tuner2 User Control Pressed Power On
ということで、cec-client を呼び出す処理を、上記のコマンドを使うようにして、無事 google-home から HomeKit 呼び出しに成功。
google-home に、”NHK をつける” と話しかけると、homebridge-gsh 経由で homebridgeが呼び出され、「地デジ切替と1チャンネルの赤外線信号」をだすし、”チューナーを消す”と言えば、cec-client 経由でtx 26:44:6c を送ってチューナーの電源が切れる。超便利。
(追記)
“tx 2X:44:6D” による電源ONは、HDMIの電源連動機能が動かないみたい。”on Y” だと、(TVで連動ON設定が必要だけど)チューナーの電源を入れれば、TVも連動してONになっていた。しかし、”tx 2X:44:6D”ではテレビがつかない。TV側の連動機能を知らないうちにOFFにしたのかと思ったけど、リモコンでチューナーをつければテレビ付くし。
ということで、cec-client を使って電源操作するシェルスクリプトに、TVの電源ON動作を行う機能を追加しておいた。
Google Home セットアップ中はiPhoneのProxyはオフ
Google Home アプリの設定を確認していたら、ファームウェアの更新みたいな表示が出たので Google Home mini の初期化(本体裏のスイッチ長押し)を行う。
# たぶん、これもproxy経由が原因だったんだろうな。
Google Home 初期化に失敗
普通に初期化を行うが、最終段階でエラーの表示で「…セットアップされているようですが、iPhoneからの通信に応答しませんでした。Google Home mini と iPhone が相互に通信出来ないネットワークに接続されている可能性があります…」といったエラーが表示され、初期化に失敗する。いろいろと試したが、失敗するが、ふと自宅内で Squid の キャッシュProxyサーバを運用しているのを思い出した…。
Proxyをオフにしたら、無事接続成功となった。
Proxy 自動設定Scriptの適用
他にも色々と試すと、Proxy設定がONだと、iPhone から Google Home mini へのストリーミングもできなくなっている。
最終的には、iPhone の WiFi 設定で、Proxy 設定の自動化で、Proxy設定のJavaScript(proxy.pac: 同じサブネット内は Proxy を使わない)を設定となった。