CATTを使ってラズパイからChromecastやNest Hubに動画やWebサイトをキャストしてみる

# 背景
ChromecastやGoogle Nest Hub、Android TVなどのChromecastデバイスに映像をGravioで送ることができたらいいなぁと思ってたら、最近同僚にCast All The Things（CATT）というPythonで書かれたコマンドが公開されているのを教えてもらった。

Cast All The Things: https://github.com/skorokithakis/catt

# 使用環境
* Raspberry Pi 4
* Ubuntu 20.04.01 LTS
* Python 3.8.2
* CATT v0.11.3

# インストール手順

##PIPのインストール
CATTはPIPで公開されています。PIPのインストールはいろんなやり方があるので、以下を参考にしてください。
https://www.python.jp/install/ubuntu/pip.html

```bash
$ sudo apt install python3-pip
```

## CATTのインストール
次にCATTをインストールします。sudoをつけないとユーザー環境としてインストールされるので注意。そっちがいい人はそうしてください。Gravioで実行するにはsudo付きでインストールしておいたほうが吉。

```bash
$ sudo pip3 install catt 
```

# CATTでできること
まずはどんなことができるのかヘルプを見てみましょう。

```bash
$ catt -h
Usage: catt [OPTIONS] COMMAND [ARGS]...

Options:
  --delete-cache           Empty the Chromecast discovery cache.
  -d, --device NAME_OR_IP  Select Chromecast device.
  --version                Show the version and exit.
  -h, --help               Show this message and exit.

Commands:
  add           Add a video to the queue (YouTube only).
  cast          Send a video to a Chromecast for playing.
  cast_site     Cast any website to a Chromecast.
  clear         Clear the queue (YouTube only).
  del_alias     Delete the alias name of the selected device.
  del_default   Delete the default device.
  ffwd          Fastforward a video by TIME duration.
  info          Show complete information about the currently-playing video.
  pause         Pause a video.
  play          Resume a video after it has been paused.
  play_toggle   Toggle between playing and paused state.
  remove        Remove a video from the queue (YouTube only).
  restore       Return Chromecast to saved state.
  rewind        Rewind a video by TIME duration.
  save          Save the current state of the Chromecast for later use.
  scan          Scan the local network and show all Chromecasts and their IPs.
  seek          Seek the video to TIME position.
  set_alias     Set an alias name for the selected device.
  set_default   Set the selected device as default.
  skip          Skip to end of content.
  status        Show some information about the currently-playing video.
  stop          Stop playing.
  volume        Set the volume to LVL [0-100].
  volumedown    Turn down volume by a DELTA increment.
  volumeup      Turn up volume by a DELTA increment.
  write_config  Please use "set_default".
```

結構いろんな事ができますね。YouTubeやローカルのムービーファイル、サイトの表示も可能です。ボリュームの操作や再生位置の指定もできたり、キューの操作も可能なので、アイデア次第で色々できそうです。

## Chromecastデバイスを検索してみる
では、ネットワーク内のChromecastデバイスを検索してみます。

```bash
$ catt scan
Scanning Chromecasts...
192.168.xx.xx - AFTT-51 - Google Inc. AirReceiver
192.168.xx.xx - Chromecast 4K - Google Inc. Chromecast Ultra
192.168.xx.xx - J:COM LINK XA401 - Google Inc. XA401
192.168.xx.xx - ベッドルーム - Google Inc. Google Home Mini
192.168.xx.xx - リビングルーム - Google Inc. Google Nest Hub
```
我が家には色々Chromecastデバイスがありますのでこれくらい出てきます。Google Home miniはモニターを持っていないので今回は対象外ですね。
J:COMのSTBも最近置き換えたのはAndroid TVなのでキャスト可能です。AFTT-51はKindle FireTV Stickですね。AirReceiverというアプリを入れてます。

## YouTubeの動画をキャストしてみる
キャストは簡単です。 `-d`オプションでキャストするデバイスを指定できます。さきほど`catt scan`で見つけたデバイス名を指定します。あとは `cast`のあとにYouTubeのURLを書くだけ。

```bash
$ catt -d リビングルーム cast https://youtu.be/tfNJctN1TL0
Casting remote file https://youtu.be/tfNJctN1TL0...
Playing "[動画]ASTERIA Warp 製品紹介 2min｜アステリア" on "リビングルーム"...
```

## Webサイトを表示してみる
```bash
$ catt -d リビングルーム cast_site https://asteria.com
Casting https://asteria.com on "リビングルーム"...
```

# 最後に
以前も結構探してたんですが、いつのまにかこんなに便利なコマンドができてました。これでGravioのセンサーと連携して色々できるようになります。そのあたりはまた後日。