HomeassistantをGoogle Assistant (Google Home)からコントロールする

いままでHomebridgeをハブとしてiPadのSiriで電灯スイッチのボイスコントロールが出来ていました。が、Siriは精度が悪すぎました。

「Hey,Siri.寝室の電気を消して」
「すみません。寝室の天気がわかりません。」

「Hey、Siri!」
「・・・」
「Hey,Siri!」
「聞こえてますよ。」

上はほんの一例。
「行っている意味がわかりません。」はしょっちゅうです。

やっぱり音声認識Googleでやりたい。
HomeassistantをGoogle assistantでコントロール出来るようにしました。

まずは、Homeassistantのコンフィグを設定します。
私の環境では、
/home/homeassistant/.homeassistant/configuration.yaml
にあります。
このファイルの最終行に"cloud"アドオンの設定を書きます。

cloud:

これだけ。
で、Homeassistantを再起動します。

うちの環境ではGentooのお作法に従い、/etc/local.d/に起動スクリプトと停止スクリプトを書いています。

/etc/local.d/homeassistant.start

#!/bin/sh
sudo -u homeassistant -H /home/homeassistant/bin/hass --pid-file /home/homeassistant/hass.pid  --daemon > /var/log/home-assistant.log 2>&1

/etc/local.d/homeassistant.stop

#!/bin/sh
kill $(cat "/home/homeassistant/hass.pid") 2>&1

このスクリプトで停止と起動をしています。

/etc/local.d/homeassistant.stop
/etc/local.d/homeassistant.start

echoコマンドを設定していないので、物静かに停止と起動をしています。

で、https://192.168.0.x:8123(IPアドレスは各自の環境に読み替えてください)にアクセスし、「設定」をクリックすると、"Home Assistant Cloud"という項目が増えています。これをクリックします。
f:id:naoyukinagano:20180621212647p:plain

サインインするページが現れますが、まずは先に最下部の「Create Account」でHomeassistant Cloudのアカウントを作ります。
f:id:naoyukinagano:20180621213934p:plain

メールアドレスを入力し、パスワードを設定し、「CREATE ACCOUNT」をクリックします。
f:id:naoyukinagano:20180621214201p:plain

すると、メールが飛んでくるので、メール本文の「Confirm Email」をクリックします。
f:id:naoyukinagano:20180621214301p:plain

この画面で完了です。
f:id:naoyukinagano:20180621214508p:plain

Homeassistantの設定画面に戻り、メールアドレスとパスワードを入力して「SIGN IN」します。
f:id:naoyukinagano:20180621220546p:plain

下記のような画面でHomeassistant側は完了です。
f:id:naoyukinagano:20180621220627p:plain
このアカウントは2018年7月22日が有効期限のようです。というのも、Homeassistant Cloudは現在は無料ですが、今後はコミュニティーサポートとして有料化するようです。

次にAndroidスマホからの設定です。
「アシスタント」アプリから設定します。右上の青い○に皿の絵のようななんともいえないアイコンをタップします。
f:id:naoyukinagano:20180621223337p:plain

使い方・ヒントが表示されますが、右上のメニューアイコン「︙」をタップします。
f:id:naoyukinagano:20180621223429p:plain

メニューの中から「設定」をタップします。
f:id:naoyukinagano:20180621223718p:plain

スクロールして機能カテゴリーにある「スマートホーム」をタップします。
f:id:naoyukinagano:20180621223751p:plain

スマートホームのデバイスを追加するため、右下の「+」をタップします。
(すみません。画像がデバイス追加後の画像になっちゃってます。)
f:id:naoyukinagano:20180621223842p:plain

スクロールして「hass.io」を探してタップします。
f:id:naoyukinagano:20180621224030p:plain

先ほどHomeassistant Cloudで設定したアカウントとパスワードを入力し、Sign inをタップします。
f:id:naoyukinagano:20180621224115p:plain

サインインすると、「GoogleがHome Assistantにリンクしてあなたのデバイスをコントロールできるようにして良いですか?」と訊かれるので、「Allow Access」をタップして許可します。
f:id:naoyukinagano:20180621224209p:plain

これで、HomeassistantのデバイスGoogle Assistant(Google Home)でコントロール出来ます。
「タップして部屋を割り当て」とでてますが、このページからやるよりも、部屋の設定画面から設定した方が楽です。
f:id:naoyukinagano:20180621224412p:plain

より正確にコントロールできるように、ニックネームを設定すると良いです。
というのも、Homeassistant上で"Living Snowball"と設定している照明があるのですが、「スノーボールを消して」と言ってもWeb検索の結果が出るため、googleアシスタント上では「スノーボール」とカタカナのニックネームをつけています。

Googleのスマートウォッチ Wear OSからもコントロール出来るようになりました!

Homeassistant on Gentooのコンフィグ

だいぶ時間が経ちましたが、Homebridgeのコンフィグを紹介します。
私のHomebridgeはGentoo Linux上で動いているためhass.ioではありません。
(hass.ioのほうが、アドオンのインストールが簡単なのですが、Linux用がなさそうで・・・)

インストール時にhomebridgeというユーザーを作成し、chroot環境でpythonが動くようにしましたが、configはrootで読み書き可能ですので、suやchrootは不要です。

コンフィグのありかは、
/home/ユーザ名/.homeassistant/にある、"configuration.yaml"です。
うちの場合は、/home/homeassistant/.homeassistant/configuration.yamlです。
初めて見ました、yaml

では、うちの場合のconfiguration.yamlを紹介します。

homeassistant:
  # Name of the location where Home Assistant is running
  name: Sample_home
  # Location required to calculate the time the sun rises and sets
  latitude: 42.0000
  longitude: 141.0000
  # Impacts weather/sunrise data (altitude above sea level in meters)
  elevation: 20
  # metric for Metric, imperial for Imperial
  unit_system: metric
  # Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
  time_zone: Asia/Tokyo
  # Customization file
  customize: !include customize.yaml

まず、"homeassistant:"のセクションです。(各セクションは"section:"で始まります。)
最初にname:でhomeassistantに名称をつけましょう。
latitude:は緯度、longitude:経度、elevation:は高さですので、自宅の位置を調べて世界測地系で入力します。
unit_system:は単位です。メートルなのでmetricを。
time_zoneはその通りタイムゾーンですので、日本ならAsia/Tokyoを。
customize:で、このファイル以外に設定ファイルを読み込みます。ここではデフォルトのまま!include customize.yamlにしていますが、そもそもcustomize.yamlは空のフィアルです。

# Show links to resources in log and frontend
introduction:

# Enables the frontend
frontend:

# Enables configuration UI
config:

この3セクションはなにもいじっていません。

http:
  # Secrets are defined in the file secrets.yaml
  # api_password: !secret http_password
  # Uncomment this if you are using SSL/TLS, running in Docker container, etc.
  # base_url: example.duckdns.org:8123
  api_password: angou
  ssl_certificate: /etc/ssl/csr/rapidssl.crt
  ssl_key: /home/homeassistant/.homeassistant/private.key

http:では、homeassistantのwebページについて定義します。
とはいえ、base_urlを定義していません。
api_password:に、webアクセスの際のパスワードを設定します。生値なのがちょっと気になります。
ssl_certificate:にSSLの中間証明書を、ssl_key:にSSLのサーバー用秘密鍵を指定します。
が、通常、秘密鍵はrootしか読めないようにしなければなりません。しかし、このプロセスはrootではなくhomeassistantユーザーで起動します。なので、秘密鍵をhomeassistantで読めるようにします。
ちょっとセキュリティが下がるような気がします。
/etcにある秘密鍵をユーザーhomeassistantが読めるようにchmodするか、コピーしてchownするかのどちらかです。

これで、https://192.168.0.x:8123で、ブラウザ上にhomeassistantが表示されるようになります。
ルーターでIPポートフォワードを設定していれば、https://yourhostname:8123でインターネット上からもアクセスが可能になります。

# Checks for available updates
# Note: This component will send some information about your system to
# the developers to assist with development of Home Assistant.
# For more information, please see:
# https://home-assistant.io/blog/2016/10/25/explaining-the-updater/
updater:
  # Optional, allows Home Assistant developers to focus on popular components.
  # include_used_components: true

# Discover some devices automatically
discovery:

# Allows you to issue voice commands from the frontend in enabled browsers
conversation:

# Enables support for tracking state changes over time
#history:

# View all events in a logbook
#logbook:

# Enables a map showing the location of tracked devices
map:

# Track the sun
sun:

# Weather prediction
sensor:
  - platform: yr

このあたりもデフォルトのままです。
updater:はhomeassistantにアップデートがあれば、画面上で知らせてくれます。
discovery:はhomeassistantが見つけることが可能なデバイスを見つけます。私の家ではDLNAオーディオデバイスを見つけてくれています。
conversation:は使っていませんが、対応ブラウザからのボイスコマンドを受け付けるかどうからしいのですが、不明です。
map:はその名の通り地図のサポートです。このため、最初の緯度経度の設定が必要なんです。と、言ってもほぼ使いませんが・・・。
sun:は今の地域が日中かどうかを表示してくれます。日の出日の入りもわかります。
sensor: - platform: yr は天気予報を表示してくれます。ノルウェー気象局の情報なので、アテになるかどうか・・・。

ここからは、実際のデバイスの定義をしていきます。
まずはセンサー系

#sensor:
  - platform: rest
    resource: http://192.168.0.xxx/json?tasknr=1
    name: Outside Temp
    value_template: '{{value_json.temperature}}'
    unit_of_measurement: "C"

  - platform: rest
    resource: http://192.168.0.xxx/json?tasknr=1
    name: Outside Hum
    value_template: '{{value_json.humidity}}'
    unit_of_measurement: "%"

これは、sonoffを改造して作った温度湿度センサーの情報を取得します。
gentoolinux.hatenablog.com
このとき作ったセンサーですね。
EspEasy化されたsonoffはhttpサーバーでjson形式の情報を提供しているので、httpの情報を読み取るAPIプラットフォームであるRESTを使うので、- platform: restを指定します。
resource:はjsonを提供するURLを指定。
name:はそのままセンサーの名称を。
value_template:はjson形式であることを指定し、jsonの左辺を指定します。シングルコーテーションや{{}}が特殊ですが、気にせずそのまま指定しましょう。他の形式はよくわかりません。
unit_of_measurement:は、数字の後に付く単位を指定しましょう。
これで、homeassistantの上部にセンサーの情報が表示されるようになります。
f:id:naoyukinagano:20180616212904p:plain

では、重要な電灯スイッチ系です。
以前Raspberry Pi ZeroにWebioPiをインストールしていました。
gentoolinux.hatenablog.com
gentoolinux.hatenablog.com
ですので、linuxのコマンドを駆使してスイッチのON/OFFや状態把握をします。

switch:
  - platform: command_line
    switches:
      snowball:
       command_on: "/usr/bin/curl -X POST http://192.168.0.xxx:8000/GPIO/26/value/0"
       command_off: "/usr/bin/curl -X POST http://192.168.0.xxx:8000/GPIO/26/value/1"
       command_state: "/usr/bin/curl -X GET http://192.168.0.xxx:8000/GPIO/26/value"
       value_template: '{{ value == "0" }}'
       friendly_name: Living SnowBall

まずスイッチ系はswitch:というセクションでまとめます。

  • platform: command_lineで、linuxのコマンドを使うことを指定します。

snowball:は自分で決めたひとつのスイッチのセクションです。他の名前でもかまいません。私は類スポールセンのスノーボールという照明をコントロールしたくて、このようなセクション名にしています。
command_on:は、スイッチをONにするコマンドです。
WebioPiに対してhttpのGetメソッドを使って、GPIOの状態を変更しますので、コマンドとしてはcurlを使います。(wgetの方が使い慣れているならwgetでもOK)
curlのオプション-Xはメソッドの指定です。WebioPiはPOSTでGPIOの状態を変更するので、-XでPOSTを指定します。
その後、URLを指定しますが、GPIO26番を0(Low)にする。という意味です。
同様に、command_off:のコマンドをcurlを使って記述します。
command_state:は、現在のON/OFF状態を取得するコマンドを記述します。WebioPiはGETで状態を取得するので、GPIO26番の状態をGETメソッドで取得します。
WebioPiはjsonではなく、単純にhttpで0か1だけでGPIOのLow/Hiの状態を返します。
うちのリレーはGPIOがLOW(valueが0)でONなので、value_template: '{{ value == "0" }}'を指定します。
もしHiでリレーオンなら、1を指定しましょう。
friendly_name: は表示する名称です。スイッチの場所と名称を記載するとわかりやすいでしょう。

次に、sonoffで作ったスイッチを設定します。うちでは寝室の電灯スイッチがこれです。
gentoolinux.hatenablog.com
gentoolinux.hatenablog.com

      bedroom:
       command_on: "/usr/bin/curl -X GET http://192.168.0.xxx/control?cmd=event,PowerOn"
       command_off: "/usr/bin/curl -X GET http://192.168.0.xxx/control?cmd=event,PowerOff"
       command_state: "/usr/bin/curl -X GET http://192.168.0.xxx/control?cmd=status,gpio,12"
       value_template: '{{ value_json.state == 1 }}'
       friendly_name: Bedroom Light

これは- platform: command_lineのswitchs:セクションの続きです。
EspEasy化されたsonoffもhttpでリレーを制御しますので、そのままcommand_lineプラットフォームを使います。
寝室にあるのでbedroom:セクションですがここは他とかぶらないければ何でもOKです。
command_on:はWebioPiと同様にcurlで指定しますが、EspEasyのrulesで指定している、PowerOnイベントを指定します。
command_off:も同様。
command_state: の中のvalue_template:はONの状態のjsonを定義するので、value_template: '{{ value_json.state == 1 }}'とします。
JSONで左辺がstateとなっているものを読み、1の場合がONということです。

続いて、command_lineではないプラットフォームの例です。
broadlink製のWiFi赤外線リモコンがありますので、その指定です。
同様にスイッチなので、switch:の続きとして指定していきます。

  - platform: broadlink
    host: 192.168.0.xxx
    mac: '34:AA:34:AA:00:AA'
    timeout: 10
    switches:
      roomba:
        friendly_name: "Roomba"
        command_on: 'JgBaAGIgIWEfYR9hXyEgYSBhHwACqWEhIGEgYR9hXyEgYSBhHwACqGIhIGEfYh9hXyEgYR9hIAACqGEiIGEfYSBhXyEgYR9hIAACsGIgIF8iXyFfYSEgYSBgIAANBQAAAAAAAAAAAAAAAAAA'
        command_off: 'JgBaAGIgIWAgYSBgIGFgICFgYAACcGIgIWAgYSBgIGFgICFgYAACaGIgIWAgYSBgIGFfICFhXwACaWIgIWAgYR9hIGFfICFhXwACaWIgIGEgYR9hIGBgICFgYAANBQAAAAAAAAAAAAAAAAAA'

switch:セクションの続きに- platform: broadlinkを指定します。
host:でIPアドレスを指定します。
mac:でシングルコーテーションでMACアドレスを指定します。
timeout:でコマンドを受け付けられなくてあきらめるタイムアウト秒数を指定します。
switches:でスイッチ群の指定が始まることを定義します。
friendly_name:で表示される名称を指定します。
command_on:でONの赤外線データをシングルコーテーションで指定します。中はbase64エンコードで記述します。

これで、各スイッチが表示されるようになります。
f:id:naoyukinagano:20180616222334p:plain

Gentooのglibcが"too old: GNU ld"と言われてアップデート出来ない

gccをアップデートしたらglibcもアップデートしたい。
しかし、何度やってもemergeできない。
configureの途中で、

too old: GNU ld

と言われました。
ldが古いので、ldをバージョンアップします。
ldはbinutilsに入っているので、

# emerge -u binutils

でアップデートしますが、それでもemerge -u glibcはtoo old: GNU ldと言い続けます。

どうしてアップデート出来ないのかと思ったら、configがあるんですね。

# binutils-config -l
 [1] x86_64-pc-linux-gnu-2.24 *
 [2] x86_64-pc-linux-gnu-2.28
 [3] x86_64-pc-linux-gnu-2.30

おやおや、古いままですね。新しいものにセットし直します。

# binutils-config 3

 * Switching to x86_64-pc-linux-gnu-2.30 ...
(中略)
 * Please remember to run:

 *   # . /etc/profile

最後の

 # . /etc/profile

を忘れず実施すると、emerge -u glibcも通るようになりました。

VFS not found でkernel panic。grub.cfgの設定

gentooのemergeシステムは、コンパイルの難しさや依存関係を自動的にやってくれて、しかも、自分の環境に合った効率的な実行ファイルをビルドする、素晴らしいシステムですが、中核となるカーネルだけは、ほぼ自分でmakeする必要があります。
そして、make installしたカーネルを、grub2に登録し、再起動して新しいカーネルで起動させますね。

私はたまたま早々に64bit EFI環境に移行したため、grub2-9999の頃からの長いおつきあいです。
あの頃はドキュメントが少なすぎて大変でした。

さて、しばらくぶりにカーネルアップデートして再起動すると、kernel panicに遭遇します。

そして、毎回のことなのに、作業を忘れます。
kernel panicの内容は

kernel panic – not syncing: VFS: Unable to mount root fs

ルートファイルシステムがマウントできません。

/boot/grub/grub.cfgを見ると、今までブートできていたのは、

linux   /kernel-4.9.34-gentoo root=/dev/sda3 ro  

ですが、起動できなかったのは、

/vmlinuz-4.9.95-gentoo root=2270e722-6fa3-4ebf-a3e0-8225cd61f291 ro  

vmlinuzは名前の変更忘れなので関係ないとして、root=がデバイス名称なのかUUIDなのかの違いで、UUIDでは起動しないようです。
決して"kernelの.configにFS_VFS=yを記入し忘れたから"ではありません。
kernelの.configにVFSの項目はありませんでした。

で、手動で/boot/gurb/grub.cfgの内容を書き換えても良いのですが、そうすると次回のカーネルアップデートの時にまた忘れます。
そこで、grub-mkconfig(人によってはgrub2-mkconfig)の時に、自動的にroot=/dev/sda3を記入するように設定します。

/etc/default/grub

GRUB_DISABLE_LINUX_UUID=true
GRUB_DEVICE="/dev/sda3"

設定のテンプレートに"GRUB_DEVICE="の項目はありませんので、ご自身で追加を。

これで、grub-mkconfig時に"root=/dev/sda3"が設定されます。

GCC6.4のemergeエラー(コンパイルエラー)

GentooにインストールしているHomeAssistant (HASS)をアップデートした時に、GCCも6.4にバージョンアップしたのですが、その時にハマったにもかかわらず、リビルドで同じハマり方をしたので、備忘録。

GCC6.4は、特に原因不明のセグメンテーションフォルトでemergeが進みませんでした。
しかも、再度emergeしなおすと、別な場所でエラー。
どうも、「メモリーが少ないのでは?」というアドバイスが巷にあふれていましたが、メモリー高騰のご時世に、カネをかけずになんとかしたい!

英語のフォーラムで、
「MAKEOPTS="-j○"の○の数字が大きすぎるとメモリーが足りなくてセグメンテーションフォルトが起こるよ。試しに-j1でやってみて。」
って書いてあったので、/etc/portage/make.confの中MAKEOPTSを、MAKEOPTS="-j1"にしてみたらemergeが通りました。

それまではMAKEOPTS="-j7"でしたが、自分のマシンは4コアなので、MAKEOPTS="-j4"でリビルドしましたが、それで、メモリー大食いのmysqlを止めると通りました。

あとはCFLAGSの"-pipe"を消すと、emergeが遅くなるものの、完走しやすいと思います。

Gentoo readlineのslot conflictでemergeが進まない

Gentooのpipを使おうとすると最新のPythonを要求され、最新のPythonをemergeしようとしたら、最新のgccをemergeしなければならない。と、なったのが先日の話。
gccをアップデートしたなら、

emerge -uDN @world

をやらねば、なんだったらカーネルもアップデートしないと、"gccのバージョン違うドライバだよ!"って言われたりするので、やりたいなぁ。なんて思います。(思わないか?)

んで、やると、readlineというツールでslot conflictが発生します。

!!! Multiple package instances within a single package slot have been pulled
!!! into the dependency graph, resulting in a slot conflict:

sys-libs/readline:0

  (sys-libs/readline-7.0_p3:0/7::gentoo, ebuild scheduled for merge) pulled in by
    >=sys-libs/readline-7.0:0= required by (app-shells/bash-4.4_p12:0/0::gentoo, ebuild scheduled for merge)
    ^^                  ^^^^^^                                                                                                                                                       

  (sys-libs/readline-6.3_p8-r3:0/0::gentoo, installed) pulled in by
    sys-libs/readline:0/0= required by (sys-apps/util-linux-2.30.2:0/0::gentoo, installed)
                     ^^^^^                                                                                                   
    >=sys-libs/readline-6.2_p5-r1:0/0=[abi_x86_64(-)] required by (sys-libs/slang-2.3.0:0/0::gentoo, installed)
                                 ^^^^^                                                                                                             
    >=sys-libs/readline-4.1:0/0= required by (net-misc/ntp-4.2.8_p10-r1:0/0::gentoo, installed)
                           ^^^^^                                                                                                   
    >=sys-libs/readline-4.1:0/0= required by (dev-lang/python-2.7.14-r1:2.7/2.7::gentoo, installed)
                           ^^^^^                                                                                                       
    sys-libs/readline:0/0= required by (sci-libs/libqalculate-0.9.9:0/6::gentoo, installed)
                     ^^^^^                                                                                                     
    >=sys-libs/readline-4.1:0/0= required by (dev-lang/python-3.6.3-r1:3.6/3.6m::gentoo, installed)
                           ^^^^^                                                                                                       
    sys-libs/readline:0/0= required by (dev-libs/libpcre-8.41-r1:3/3::gentoo, installed)
                     ^^^^^                                                                                                 
    >=sys-libs/readline-6.2_p5-r1:0/0=[abi_x86_64(-)] required by (dev-db/unixODBC-2.3.4-r1:0/0::gentoo, installed)
                                 ^^^^^                                                                                                                 
    sys-libs/readline:0/0=[abi_x86_64(-)] required by (dev-db/sqlite-3.20.1-r1:3/3::gentoo, installed)
                     ^^^^^                                                                                                               
    sys-libs/readline:0/0= required by (net-wireless/bluez-5.47-r1:0/3::gentoo, installed)
                     ^^^^^                                                                                                   
lang/python-3.5.4-r1:3.5/3.5m::gentoo, installed)
                           ^^^^^                                                                                                       
    >=sys-libs/readline-5.2:0/0= required by (sys-block/parted-3.2-r1:0/0::gentoo, installed)
                           ^^^^^                                                                                                 
    sys-libs/readline:0/0= required by (app-text/hunspell-1.6.1-r1:0/1.6::gentoo, installed)
                     ^^^^^                                                                                                     
    sys-libs/readline:0/0= required by (dev-lang/ruby-2.2.9:2.2/2.2::gentoo, installed)
                     ^^^^^                                                                                                 
    sys-libs/readline:0/0= required by (app-crypt/gnupg-2.2.0:0/0::gentoo, installed)
                     ^^^^^                                                                                               

It may be possible to solve this problem by using package.mask to
prevent one of those packages from being selected. However, it is also
possible that conflicting dependencies exist such that they are
impossible to satisfy simultaneously.  If such a conflict exists in
the dependencies of two different packages, then those packages can
not be installed simultaneously.

For more information, see MASKED PACKAGES section in the emerge man
page or refer to the Gentoo Handbook.

すみません。いくつかのパッケージ端折ってます。
これ、どうにかするには、

/etc/portage/package.use

に、

dev-lang/python sqlite

という1行を追加して、pythonのUSEフラグに"sqlite"を追加し、

emerge dev-lang/python

で、pythonをemergeし直してから、@worldをemergeすると、slot conflict問題は解決するそうです。

出典
Gentoo Forums :: View topic - [SOLVED] sys-libs/readline slot slot conflict

ひかりTVのブロックノイズ(緑色のノイズ)への対処

今月の頭くらいから、ひかりTVにブロックノイズが乗るようになりました。

f:id:naoyukinagano:20180513183059j:plain

音声も途切れ途切れで見れたもんじゃありません。

気づいたのが5/2だったので、てっきりひかりTVを運営するぷららの障害だと思っていました。

www.plala.or.jp

ところが、いつまで経っても直りません。

ひかりTVNGN網内にサーバーがあるので、NGNへの接続が遅いのかと思い、フレッツ情報サービスサイトでスピードテストを実施してみました。

https://flets-east.jp/

f:id:naoyukinagano:20180513183901p:plain

うちはマンションタイプの中でも珍しいLAN配線方式なので、下り100Mbpsが上限のため、80Mbpsも出るのであれば問題ありません。

ひかりTVビデオの品質確認動画でも最高の25Mbpsがヌルヌルと再生されます。

これはもう、セットトップボックスの故障なのではないか!?と思ってきました。

サポートに電話しようかな? と、その前に、ネットで同じような状況になっている人がいるかも? と、思い、「ひかりTV ブロックノイズ」で調べると、悩んでいるどころか、解決している方を見つけました!

 

犯人は、同一ネットワークセグメント(もしかして同じハブも?)にいる、Wake on LAN(WOL)でスタンバイしているパソコンでした。

f:id:naoyukinagano:20180513220040j:plain

最近使っていなかったので電源が壊れていることに気づかなかったのですが、電源のコンデンサを付け替え修理を施し、よみがえったのでしたが、まさかWake on LANのスタンバイをしているとは。

Windows Media Centerとして使っていたので、リモコンで電源を入れることはあったんですけどね。

パソコンの電源を切った状態で、ネットワークだけWake on LANで生きているときは、10Mbpsでリンクアップされるそうでして、ひかりTVで利用しているIPv6マルチキャストがその10Mbpsのほうに引きつられ、マルチキャスト通信に遅延が発生するそうな。

 

さて、わかったところでWake on LANをOFFにしていきます。

このリビングPCにはPCI-EスロットにIntel PRO 1000PTを積んでいます。オンボードのLANが1Gbpsのくせにジャンボフレームに対応していないので、BIOSオンボードのLANをDisableにしております。

バイスマネージャのネットワークアダプタにあるIntel PRO 1000PTのプロパティを出し、電力の管理タブにあるWake on LANチェックをどんどん外していきます。

f:id:naoyukinagano:20180513221930j:plain

すいません。キャプチャがめんどくさくて写真です。

そしてシャットダウンしてひかりTVを見てみます。

f:id:naoyukinagano:20180513222108j:plain

お!ブロックノイズなく、ちゃんと映りました!

めでたしめでたし。