8ポートのスイッチングハブを購入

NASやBRAVIA、Tinker Board SなどのLAN接続する機器が増えてしまい、ポートが足りなくなったので8ポートのスイッチングハブを購入。
特にこだわりもなかったので2000円だったI-O DATAのETG-ESH08K2Bにしました。1000BASE-Tの8ポートで2000円とは安いですね。

ハブの交換ついでにちょっと機器周りを整理して交換しやすくしてみました。これで何かあっても簡単に交換できますね。

Google Home で現在BRAVIAで放映している番組名をアナウンスさせる

先日のbravia∴npmを利用してBRAVIAで放映している番組名をアナウンスさせてみます。

bravia-ch.js をこちらの内容で作成します。

その後「bin/bravia-ch.js」とコマンドを実行して番組名がアナウンスされればきちんと動作しています。

bin/bravia-ch.js
*** WARNING *** The program 'node' uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see http://0pointer.de/avahi-compat?s=libdns_sd&e=node
*** WARNING *** The program 'node' called 'DNSServiceRegister()' which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see http://0pointer.de/avahi-compat?s=libdns_sd&e=node&f=DNSServiceRegister
said サンプルの番組名です

(WARNINGは無視してください)

homebotへの設定は

@homebot command tv:ch:say bin/bravia-ch.js

で、こんな応答があれば登録完了です。

set !tv:ch:say to bin/bravia-ch.js

あとはIFTTTで行いたい操作をslackに出力するよう設定すればOKです。

@homebot send tv:ch:say()

と設定します。

これでGoogle Homeに声をかけて、番組名をアナウンスさせる事ができました。

bravia.js で使用できるコマンド一覧

先ほど作成した bravia.js で使用できるコマンド一覧です。
name:の後ろのNum1などが操作コマンドです。
よく使うのは電源ON(WakeUp)、電源OFF(Sleep)、HDMI切り替え(Hdmi1~Hdmi4)、各種切り替え(Digital、BS、CS)あたりですかね。

[ { name: 'Num1', value: 'AAAAAQAAAAEAAAAAAw==' },
  { name: 'Num2', value: 'AAAAAQAAAAEAAAABAw==' },
  { name: 'Num3', value: 'AAAAAQAAAAEAAAACAw==' },
  { name: 'Num4', value: 'AAAAAQAAAAEAAAADAw==' },
  { name: 'Num5', value: 'AAAAAQAAAAEAAAAEAw==' },
  { name: 'Num6', value: 'AAAAAQAAAAEAAAAFAw==' },
  { name: 'Num7', value: 'AAAAAQAAAAEAAAAGAw==' },
  { name: 'Num8', value: 'AAAAAQAAAAEAAAAHAw==' },
  { name: 'Num9', value: 'AAAAAQAAAAEAAAAIAw==' },
  { name: 'Num0', value: 'AAAAAQAAAAEAAAAJAw==' },
  { name: 'Num11', value: 'AAAAAQAAAAEAAAAKAw==' },
  { name: 'Num12', value: 'AAAAAQAAAAEAAAALAw==' },
  { name: 'Enter', value: 'AAAAAQAAAAEAAAALAw==' },
  { name: 'GGuide', value: 'AAAAAQAAAAEAAAAOAw==' },
  { name: 'ChannelUp', value: 'AAAAAQAAAAEAAAAQAw==' },
  { name: 'ChannelDown', value: 'AAAAAQAAAAEAAAARAw==' },
  { name: 'VolumeUp', value: 'AAAAAQAAAAEAAAASAw==' },
  { name: 'VolumeDown', value: 'AAAAAQAAAAEAAAATAw==' },
  { name: 'Mute', value: 'AAAAAQAAAAEAAAAUAw==' },
  { name: 'TvPower', value: 'AAAAAQAAAAEAAAAVAw==' },
  { name: 'Audio', value: 'AAAAAQAAAAEAAAAXAw==' },
  { name: 'MediaAudioTrack', value: 'AAAAAQAAAAEAAAAXAw==' },
  { name: 'Tv', value: 'AAAAAQAAAAEAAAAkAw==' },
  { name: 'Input', value: 'AAAAAQAAAAEAAAAlAw==' },
  { name: 'TvInput', value: 'AAAAAQAAAAEAAAAlAw==' },
  { name: 'TvAntennaCable', value: 'AAAAAQAAAAEAAAAqAw==' },
  { name: 'WakeUp', value: 'AAAAAQAAAAEAAAAuAw==' },
  { name: 'PowerOff', value: 'AAAAAQAAAAEAAAAvAw==' },
  { name: 'Sleep', value: 'AAAAAQAAAAEAAAAvAw==' },
  { name: 'Right', value: 'AAAAAQAAAAEAAAAzAw==' },
  { name: 'Left', value: 'AAAAAQAAAAEAAAA0Aw==' },
  { name: 'SleepTimer', value: 'AAAAAQAAAAEAAAA2Aw==' },
  { name: 'Analog2', value: 'AAAAAQAAAAEAAAA4Aw==' },
  { name: 'TvAnalog', value: 'AAAAAQAAAAEAAAA4Aw==' },
  { name: 'Display', value: 'AAAAAQAAAAEAAAA6Aw==' },
  { name: 'Jump', value: 'AAAAAQAAAAEAAAA7Aw==' },
  { name: 'PicOff', value: 'AAAAAQAAAAEAAAA+Aw==' },
  { name: 'PictureOff', value: 'AAAAAQAAAAEAAAA+Aw==' },
  { name: 'Teletext', value: 'AAAAAQAAAAEAAAA/Aw==' },
  { name: 'Video1', value: 'AAAAAQAAAAEAAABAAw==' },
  { name: 'Video2', value: 'AAAAAQAAAAEAAABBAw==' },
  { name: 'AnalogRgb1', value: 'AAAAAQAAAAEAAABDAw==' },
  { name: 'Home', value: 'AAAAAQAAAAEAAABgAw==' },
  { name: 'Exit', value: 'AAAAAQAAAAEAAABjAw==' },
  { name: 'PictureMode', value: 'AAAAAQAAAAEAAABkAw==' },
  { name: 'Confirm', value: 'AAAAAQAAAAEAAABlAw==' },
  { name: 'Up', value: 'AAAAAQAAAAEAAAB0Aw==' },
  { name: 'Down', value: 'AAAAAQAAAAEAAAB1Aw==' },
  { name: 'ClosedCaption', value: 'AAAAAgAAAKQAAAAQAw==' },
  { name: 'Component1', value: 'AAAAAgAAAKQAAAA2Aw==' },
  { name: 'Component2', value: 'AAAAAgAAAKQAAAA3Aw==' },
  { name: 'Wide', value: 'AAAAAgAAAKQAAAA9Aw==' },
  { name: 'EPG', value: 'AAAAAgAAAKQAAABbAw==' },
  { name: 'PAP', value: 'AAAAAgAAAKQAAAB3Aw==' },
  { name: 'TenKey', value: 'AAAAAgAAAJcAAAAMAw==' },
  { name: 'BSCS', value: 'AAAAAgAAAJcAAAAQAw==' },
  { name: 'Ddata', value: 'AAAAAgAAAJcAAAAVAw==' },
  { name: 'Stop', value: 'AAAAAgAAAJcAAAAYAw==' },
  { name: 'Pause', value: 'AAAAAgAAAJcAAAAZAw==' },
  { name: 'Play', value: 'AAAAAgAAAJcAAAAaAw==' },
  { name: 'Rewind', value: 'AAAAAgAAAJcAAAAbAw==' },
  { name: 'Forward', value: 'AAAAAgAAAJcAAAAcAw==' },
  { name: 'DOT', value: 'AAAAAgAAAJcAAAAdAw==' },
  { name: 'Rec', value: 'AAAAAgAAAJcAAAAgAw==' },
  { name: 'Return', value: 'AAAAAgAAAJcAAAAjAw==' },
  { name: 'Blue', value: 'AAAAAgAAAJcAAAAkAw==' },
  { name: 'Red', value: 'AAAAAgAAAJcAAAAlAw==' },
  { name: 'Green', value: 'AAAAAgAAAJcAAAAmAw==' },
  { name: 'Yellow', value: 'AAAAAgAAAJcAAAAnAw==' },
  { name: 'SubTitle', value: 'AAAAAgAAAJcAAAAoAw==' },
  { name: 'CS', value: 'AAAAAgAAAJcAAAArAw==' },
  { name: 'BS', value: 'AAAAAgAAAJcAAAAsAw==' },
  { name: 'Digital', value: 'AAAAAgAAAJcAAAAyAw==' },
  { name: 'Options', value: 'AAAAAgAAAJcAAAA2Aw==' },
  { name: 'Media', value: 'AAAAAgAAAJcAAAA4Aw==' },
  { name: 'Prev', value: 'AAAAAgAAAJcAAAA8Aw==' },
  { name: 'Next', value: 'AAAAAgAAAJcAAAA9Aw==' },
  { name: 'DpadCenter', value: 'AAAAAgAAAJcAAABKAw==' },
  { name: 'CursorUp', value: 'AAAAAgAAAJcAAABPAw==' },
  { name: 'CursorDown', value: 'AAAAAgAAAJcAAABQAw==' },
  { name: 'CursorLeft', value: 'AAAAAgAAAJcAAABNAw==' },
  { name: 'CursorRight', value: 'AAAAAgAAAJcAAABOAw==' },
  { name: 'ShopRemoteControlForcedDynamic',
    value: 'AAAAAgAAAJcAAABqAw==' },
  { name: 'FlashPlus', value: 'AAAAAgAAAJcAAAB4Aw==' },
  { name: 'FlashMinus', value: 'AAAAAgAAAJcAAAB5Aw==' },
  { name: 'DemoMode', value: 'AAAAAgAAAJcAAAB8Aw==' },
  { name: 'Analog', value: 'AAAAAgAAAHcAAAANAw==' },
  { name: 'Mode3D', value: 'AAAAAgAAAHcAAABNAw==' },
  { name: 'DigitalToggle', value: 'AAAAAgAAAHcAAABSAw==' },
  { name: 'DemoSurround', value: 'AAAAAgAAAHcAAAB7Aw==' },
  { name: '*AD', value: 'AAAAAgAAABoAAAA7Aw==' },
  { name: 'AudioMixUp', value: 'AAAAAgAAABoAAAA8Aw==' },
  { name: 'AudioMixDown', value: 'AAAAAgAAABoAAAA9Aw==' },
  { name: 'PhotoFrame', value: 'AAAAAgAAABoAAABVAw==' },
  { name: 'Tv_Radio', value: 'AAAAAgAAABoAAABXAw==' },
  { name: 'SyncMenu', value: 'AAAAAgAAABoAAABYAw==' },
  { name: 'Hdmi1', value: 'AAAAAgAAABoAAABaAw==' },
  { name: 'Hdmi2', value: 'AAAAAgAAABoAAABbAw==' },
  { name: 'Hdmi3', value: 'AAAAAgAAABoAAABcAw==' },
  { name: 'Hdmi4', value: 'AAAAAgAAABoAAABdAw==' },
  ... 17 more items ]

Google Home から、赤外線ではなくネットーワーク経由でBRAVIAを操作する

先日構築した環境でRM mini3を使って赤外線リモコンからBRAVIAを操作できるのですが、リモコンの操作を記憶させるだけだとリモコンにある機能しか使えません。
なにか無いか探してみたところ、BRAVIAは操作用のAPIがあり、API経由だと直接HDMI入力を選択したり今視聴している番組名を取得したりと、リモコンの操作ではちょっと面倒なことも出来るようになるようです。

ちょうどNode.js用のパッケージが公開されているのでそれを利用してBRAVIAを操作します。
まずBRAVIAでAPIから操作できるよう設定を変更します。
私が使用しているX8300Dでは下記の設定を行いました。ここらへんは機種やバージョンにより多少差異がある可能性があります。

  • ホーム → 設定 → 通信設定 → ホームネットワーク → レンダラー設定 → レンダラー機能を「ON」に
  • ホーム → 設定 → 通信設定 → ホームネットワーク → IP コントロール → 認証 を「Normal and Pre-Shared Key」に
  • ホーム → 設定 → 通信設定 → ホームネットワーク → IP コントロール → Pre-Shared Keyで4桁の暗証番号を設定
  • ホーム → 設定 → 通信設定 → ホームネットワーク → IP コントロール → 簡易IPコントロール を「ON」に

次にbravia∴npmをインストールします。

npm install bravia --save

インストール後、bravia.jsをこちらの内容で作成します。

その後「bravia.js Digital」とコマンドを実行して地デジに切り替わり、「bravia Digital」と表示されればきちんと動作しています。

bravia.js Digital
bravia Digital

homebotへの設定は

@homebot command bravia bin/bravia.js "#"

で、こんな応答があれば登録完了です。

set !bravia to bin/bravia.js "#"

あとはIFTTTで行いたい操作をslackに出力するよう設定すればOKです。例えば画面をHDMI2に切り替えるのなら

@homebot send bravia(Hdmi2)

と設定します。

これでGoogle Homeに声をかけてBRAVIAの操作ができるようになりました。

Google Home、RM Mini3、Tinker Board Sで家電を操作してみた

Google Homeに声を掛けるだけで赤外線リモコンに対応している家電を操作できるようになります。
基本的にはこちらの記事を参考に環境を構築できました。

10ドルのRM Mini3とGoogle Homeで家電を操作する方法 – Smart Home – Scrapbox

hubotを動作させるマシンはRaspberry PiではなくTinker Board Sですが、各ソフトウェアのインストールと設定はRaspberry Piの所そのままでいけると思います。
私はNode.jsやRedisは説明を見ずにインストールしてしまったので細かい部分は違うかもしれません。

今の所、ホームシアタースピーカー、TV、エアコン、扇風機を操作できるようにしています。そのうち照明も対応させたいですね。



Google Home

Google HomeSpeakers

発行google

カテゴリーオフィス用品

Supported by amazon Product Advertising API

Kindle Paperwhiteを5.9.4にアップデート

Kindle Paperwhiteに5.9.4のアップデータが出ていたので手動でアップデートしました。
Amazon.co.jp ヘルプ: Kindle Paperwhite (第7世代) のソフトウェアアップデート

変更点はこんな感じです。

  • 検索範囲の拡張: 全文検索では、メモとハイライトも検索範囲に含まれます。
  • 読書中に時計を表示: 今読んでいるページから移動しなくても、現在時刻を確認できるようになりました。「表示設定(Aa)」メニューのオプションを選択すると、時計を表示できます。
  • 太字: 太字をもっと目に優しく、読みやすくするため、すべてのフォントの太字の太さを5段階で調節できるようになりました。この機能は、読書画面の「表示設定(Aa)」メニューで使用できます。

時計表示も太字も読書環境の改善としてなかなか良いアップデートじゃないでしょうか。検索範囲の拡張も使っている人には便利かな。
さっそく時計表示と太字を2に調整しました。なかなかいい感じです。
太字ですが、私の環境では明朝体とゴシック体は太字の調節ができているのですが、筑紫明朝はその太さを選択しても太さが変わりません。
なぜだろう…

筑紫明朝の太字はネットに接続してフォントのアップデート後に利用できるようになりました。

新宿矯正展でそばがら枕を購入

新宿駅西口広場イベントコーナーで新宿矯正展の即売会をやっていたので色々見て回りました。
この即売会は刑務作業の一環として作成された家具などを販売しています。品目は靴、タンス、家具、キャンプ用品、食器、バッグや寝具、便箋やスケッチブックなど沢山の種類があります。全てハンドメイドで質も良いのに、とてもリーズナブルです。

焼き物のビールマグや切子のワイングラスに惹かれましたが、新しい枕が欲しかったのでそばがら枕と枕カバーを購入しました。
これで良い夢が見れるかな。

「バーフバリ 王の凱旋」を鑑賞

「バーフバリ 王の凱旋」が面白いという話を聞いたので、日曜の夜に観てきました。
公式サイトはこちら → 映画『バーフバリ 王の凱旋』公式サイト

噂通り全編がアクションシーンの見せ場で成り立っている映画でした。
1作目の「バーフバリ 伝説誕生」は観ていないのですが、最初にあらすじがあるので王の凱旋から観ても問題はありません。

それにしても動画サイトにあがっていたヤシの木で飛ぶ場面が知恵を使った結果とは…w
「バーフバリ 伝説誕生」を上映している映画館もあるので、「バーフバリ 王の凱旋」を一緒にまた観ようかな。

【Amazon.co.jp限定】バーフバリ2 王の凱旋 (劇場版プレスシート+オリジナル缶バッジ付き) [Blu-ray]

【Amazon.co.jp限定】バーフバリ2 王の凱旋 (劇場版プレスシート+オリジナル缶バッジ付き) [Blu-ray]DVD

監督S.S.ラージャマウリ

出演アヌシュカ・シェッティ,ラーナー・ダッグバーティ,サティヤラージ,ラムヤ・クリシュナ,ナーサル,タマンナー プラバース

発行株式会社ツイン

カテゴリーBlu-ray

Supported by amazon Product Advertising API

浄水器のカートリッジを交換

浄水器(クリンスイ)のカートリッジを交換してから半年ほどたったので、新しいカートリッジに交換しました。
あまり水を使わないので、使用量からするとまだ交換しなくてもいいのですが…
カートリッジはAmazonで購入しました。3つ入りで5000円ちょっとなので結構安いですね。

新しいマットレスを購入

島忠ホームズの初売りでやすかったので、東京西川のフェスタ2という高反発ウレタンマットレスを購入。

元々の値段が約2万円で、それが初売りで16,000円でした。昨日から使っていますが、なかなかいい感じです。
ちょっとこれで初夢を見たかったかもw