あーく・りなっくす

プログラミングとかガジェットとかの雑記

Fitbit ionic を買った

今使ってる Charge HR が限界だったのと Android Wear でなくてもいいなという感じがあったので買った。

f:id:arc680:20171210212908p:plain:w300 f:id:arc680:20171210212929p:plain:w300 f:id:arc680:20171210212956p:plain:w300

日本での発売日は 2018 年 1 月なのだが、Amazonサイバーマンデーで先行販売されていた。
こんなチャンス逃してはいけないと思い、少しだけ考えてからポチった。

一通りセットアップをして触ってみた感じだと、

  • タッチパネルの感度は良い
  • アクティビティトラッカーメインのものが欲しいのならあり
  • Android WearApple Watch みたいに対応アプリがたくさんあるわけでもない
    • まあ向こうでも出てそんなにたってないはず

まだ装着して 1 日過ごしたわけではないので電池の持ちや就寝時の状態とかが分からないが、とりあえずここまで。
あと、ウォッチフェイスとアプリの開発はブラウザベースの環境が提供されているようなので、機会があったら試してみたいと思う。

2017/01/30 時点での録画サーバ構築手順

Raspberry Pi 2 で動かしていたけど安定しなかったので、X220 で作り直したときのメモである(と言っても手順としては同じ)。
参考にした記事をベースに自分の環境だとこうだったという感じにしている。

Ubuntu のセットアップ

USB メモリに iso を書き込む。

$ diskutil list
$ diskutil umountDisk /dev/disk3
$ sudo dd if=ubuntu-16.04.1-desktop-amd64.iso of=/dev/disk3 bs=1m

例のごとく、disk3 の 3 は環境によって変わる。
dd で書き込むのは結構時間がかかる上に、進行状況がわからないので放置して別の作業を。

USB メモリをブートし、適当にセットアップしていく。
GUI も使いたかったので今回は普通の Ubuntu を使った。

録画に最低限必要なものをインストール

セットアップした Ubuntu にいろいろ接続したり、必要なソフトウェアをインストールしていく。

必要なパッケージをまとめてインストール

ビルドや IC カードリーダを扱うのに必要なパッケージをまとめていれておく。

sudo apt -y install unzip \
    build-essential automake pkg-config \
    pcscd libpcsclite-dev pcsc-tools

各デバイスの接続

B-CAS カードを挿した IC カードリーダと USB タイプのチューナーをマシンに接続する。

$ lsusb | grep VidzMedia
Bus 002 Device 003: ID 3275:0080 VidzMedia Pte Ltd
$ ls /dev/dvb
adapter0

細かい数字は環境によって変わると思うが、だいたいこんな感じの出力があれば問題ないはず。

チューナーに PX-S1UD V2.0 を選んだ。 Windowsインストーラ経由でなんとかするしかないが、無印版のものをそのまま使えるので、

wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip
unzip PX-S1UD_driver_Ver.1.0.1.zip
sudo cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware

上で設置した inp ファイルは 64 bit OS の場合なので、 32 bit OS だとパスが変わる。
無印版のものがそのまま使えているが、V2.0 のもので検証してみるのもありかもしれない。
設置が完了したら、チューナーを挿し直す(reboot が確実か?)。

IC カードリーダの確認は

$ pcsc_scan

を実行し、

Japanese Chijou Digital B-CAS Card (pay TV)

が途中で出ていればよい。 pcscd が動いていない場合は、

$ sudo systemctl start pcscd

でスタートさせる。

arib25 のビルドとインストール

デコードするのに必要なライブラリである arib25 をビルドしてインストールする。

$ cd <適当な作業ディレクトリ>
$ curl -sL https://github.com/stz2012/libarib25/archive/09770e3.tar.gz | sudo tar zxv
$ cd libarib25-09770e334837f6c67268c41c1c15784373d35e5b
$ sudo chown -R $(whoami) .
$ make
$ sudo make install

recdvb のビルドとインストール

チューナーの操作を行うソフトウェアである recdvb をビルドしてインストールする。

$ cd <適当な作業ディレクトリ>
$ curl -sL http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.1.tgz | sudo tar zxv
$ cd recdvb-1.3.1
$ sudo chown -R $(whoami) .
$ ./autogen.sh
$ ./configure --enable-b25
$ make
$ sudo make install

ここまでで録画自体は可能となっているのでテストする。

$ recdvb --b25 --strip --sid hd <チャンネル> <秒数> <ファイル名>

※ チャンネルはマスプロなどの表を参考に。

ログがいろいろ出るが、エラー(failed などそれっぽいもの)が無く、生成された m2ts が VLC などで再生できれば成功している。

cannot open frontend device

というものが出た場合は、

$ sudo adduser <実行ユーザ> video

何度かセットアップした限りでは、adduser は必須と言っても良いかもしれない。

録画を楽にするものをセットアップ

コマンドラインでチャンネルを指定して、録画したいタイミングで実行するのは現実的でない。そのため、UI で録画予約するための必要なものをインストールしていく。
今回は Chinachu を採用することとした(参考にしたやつがそうだったのと、TL で使っている人がいたので安定してるのかなーという判断)。

下準備

これからインストールする 3 つのソフトウェアはすべて Node.js で動作するので、先にその環境を構築する。
Mirakurun は Node.js 6.x が必要で、Ubuntu でそのままインストールできない(2017/01/30 時点)ので、

$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt-get install -y nodejs

また、プロセスマネージャが必要なので、pm2 をインストールする。

$ sudo npm install pm2 -g

Mirakurun のインストールと設定

雑な説明をすると、録画をするための RESTful API でいろいろといい感じにやってくれるようだ。LAN 内でチューナーを共有するということも可能である。

$ sudo npm install mirakurun -g --unsafe --production

設定を変更するのは下記コマンドを実行する(実装を調べてないがラッパになってるっぽい)。

$ sudo mirakurun config tuners

下記を追記する。
type や command さえあっていれば name は適当で良さそう。

- name: PX-S1UD-1
  types:
    - GR
  command: recdvb --b25 --strip <channel> - -

チャンネルの設定は、

$ sudo mirakurun config channels

で行う。チャンネル表を見ながらもともとある設定を参考にすればよい。スカイツリーの地域であればそのまま、23 区の西の方であれば MX をいじれば大丈夫そう(他は知らん)。

必要な設定を一通りやったあとは反映させるためにリスタートする。

$ sudo mirakurun restart

Rivarun

Mirakurun クライアントで、同じサーバにインストールしなくてもいいが、検証用に入れておく。

$ sudo npm install rivarun -g

Mirakurun が正しく設定できたかを Rivarun 経由で確認する。

$ rivarun --ch <放送種別>/<チャンネル> <秒数> <ファイル名>

status コードが 200 で返ってきていれば問題なく動いている。

Chinachu

γ 版(2017/01/31 時点)を入れる。

$ git clone -b gamma git://github.com/kanreisa/Chinachu.git ~/chinachu
$ cd ~/chinachu
$ ./chinachu installer

インストーラを実行したら、 1) Auto (full) を選択する。
次に、録画予約用の設定ファイルを設置する。

$ echo "[]" > rules.json

Chinachu の設定ファイルを作成する。サンプルが同じディレクトリにあるので、これをベースにする。

$ cp config.sample.json config.json
$ vim config.json

基本的にデフォルトのままで良いが、wuiPort は何かを入れておかないとうまくいかなかった(要検証)。
録画データは外付け HDD に設置したいので、recordedDir も変更した。
外付け HDD のマウントに関しては前に書いた記事を参考にする。

動作確認のために下記 2 つコマンドを実行する。1 つ目のコマンドは、出力が止まったら Ctrl-C で抜ける。

$ ./chinachu service operator execute
$ ./chinachu update

/etc/init.d から起動できるようにし、コマンドを叩いてそのままログインしっぱなしで放置、ということをしなくていいようにする。

$ ./chinachu service operator initscript > /tmp/chinachu-operator
$ ./chinachu service wui initscript > /tmp/chinachu-wui
$ cd /tmp
$ sudo chown root:root chinachu-*
$ sudo chmod 755 chinachu-*
$ sudo mv chinachu-* /etc/init.d/
$ sudo update-rc.d chinachu-operator defaults
$ sudo update-rc.d chinachu-wui defaults
$ sudo service chinachu-operator start
$ sudo service chinachu-wui start

最後に、ブラウザからアクセスして番組表の確認や録画予約をしておわり。
このWeb UI はリアルタイム視聴や録画データの再生なども可能である。

参考

Swap 領域を追加

Raspberry Pi に Swap 領域がなかったので追加したときの雑なメモ。 (メモリが足りなくていろいろちゃんと動いてないんじゃね?ってなったときの検証の名残)

前は専用のパーティションを作って〜っていうのをやった気がするが、今回は多分別の方法でやった。

Swap 領域の作成

適当な場所に適当なサイズで作成する。

$ mkdir /var/swap
$ dd if=/dev/zero of=/var/swap/swap0 bs=1M count=2048
$ chmod 600 /var/swap/swap0

$ mkswap /var/swap/swap0
$ swapon /var/swap/swap0

例のごとく起動時に使えるように

/etc/fstab に下記を追記する。

/var/swap/swap0 swap swap defaults 0 0

Swap 領域の確認

$ cat /proc/swaps
Filename                Type        Size    Used    Priority
/var/swap/swap0                         file        2097148 32968   -1

Raspberry Pi に外付け HDD を追加

とりあえずのマウント

今回改めて調べて知ったのだが、

$ sudo parted -l

で接続したストレージが確認できる。
結果はこんな感じになった。

$ sudo parted -l
Model: WD My Passport 25E1 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name         Flags
 1      1049kB  1000GB  1000GB  ntfs         My Passport  msftdata


Model: SD USDU1 (sd/mmc)
Disk /dev/mmcblk0: 64.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  138MB   134MB   primary  fat16        boot, lba
 2      138MB   64.5GB  64.4GB  primary  ext4

接続した外付け HDD を特定できたので、マウントする。

$ sudo mount -t ntfs /dev/sda1 <マウントしたいところ>

起動時に自動でマウントするように

/etc/fstab に設定を追記する。 diff 的にはこんな感じで、

$ diff before.txt after.txt
2a3
> UUID="FE6EB6976EB64863" /mnt/data   ntfs    defaults    0   0
LABEL=cloudimg-rootfs    /       ext4    defaults    0   0
LABEL=system-boot       /boot/firmware  vfat    defaults    0       1
UUID="FE6EB6976EB64863" /mnt/data   ntfs    defaults    0   0

という感じになる。

UUID は

$ blkid

で接続した HDD の UUID を取得する。 fstab に追記する時にあったほうがいいという感じの記事がいくつかあったので、今回は使ってみることにする。