nasneのエラーを監視してslackに通知するツールを作った
nasneを使って毎週録画とかにしてると、たまに放送時間がずれて番組が被ったり番組情報を取得できなくなったりしますよね。 毎週手動でチェックするのもしんどいので、slackとかに通知したいなーと思って作ってみました。
インストール
npmとして公開してるので簡単にインストールできます。 Node.js v6.0以上が必要になります。
$ npm install nasne-checker -g
起動
$ nasne-checker --nasne 192.168.10.10 \ --slack https://hooks.slack.com/services/XXX/XXX/XXXXX \ --interval 24
Webhook URLの取得方法は以下のサイトが参考になると思います。 また、アイコンやbotの名前を設定しておいてください。
このコマンドで実行した場合、24時間ごとに予約エラーがチェックされるようになります。 定期的にチェックしたい場合は、Raspberry Piなどを常時起動させておいて実行するといいと思います。
エラーなどがあると下の画像のようなメッセージが投稿されます。 この画像にはありませんが、HDDの容量が少なくなった場合もエラーメッセージが投稿されます。
開発のお話
ざっくり使ってみたい人は下のリポジトリを見てみるといいと思います。 (今回作ったツールでは最終的に自前で実装しましたが)
予約エラーの判断方法
今回ツールを作る上でググっても全然情報が出てこなかった、予約エラーの判断方法について書いておこうと思います。
まず、予約一覧の情報は/schedule/reservedListGet
を使って取得します。
http://(nasneのIPアドレス):64220/schedule/reservedListGet?searchCriteria=0&filter=0&startingIndex=0&requestedCount=0&sortCriteria=0&withDescriptionLong=0&withUserData=1
にアクセスすると以下のようなJSONが取得できます。(長いので一部省略)
{ "errorcode": 0 "item": [ { "id": "14593626670000000138", "title": "シネマクラッシュ『コマンドー』", "conflictId": 0, "eventId": 59729, ... }, ... ], "numberReturned": 24, "totalMatches": 24 }
このJSONのitem
の配列が予約情報の本体となります。
予約情報にはid
やtitle
などの情報があります。(他にどんなものがあるのか知りたい人は自分の目で確かめてください)
予約エラーのチェックで重要になるパラメータはconflictId
とeventId
の2つです。
conflictId
からはその名の通り予約の衝突していることが判別可能です。
conflictId
が0のときは衝突がありません。
1以上の場合は衝突が起きていることを表します。
この時、衝突しているもう一方の予約情報のconflictId
も1以上になります。
1以上の値は、録画の優先順位を意味します。
例えば、予約Aが1で予約Bが2の場合は、予約Aが優先的に予約される形になります。
どの予約と衝突しているかを調べるには、おそらく/schedule/conflictListGet
を使えばいいと思います。
(あまり調べてないので正しいかわからないですが)
次にeventId
です。
このパラメータでは繰り返し予約の番組が見つからなかった場合を判別することができます。
繰り返し予約の番組が見つからなかった場合、eventId
の値は65536
になります。
このパラメータが何を示すものかは分かっていませんが、
2つの番組で繰り返し予約の番組が見つからなかった場合を検証したので多分合っていると思います。
このツールではconflictId
とeventId
をチェックして予約エラーかどうか判断しています。
エンドポイントや送信するパラメータの調べ方
nasneのクライアントアプリはAPIにアクセスして情報を取得しています。 しかも、APIはhttpなので、パケットキャプチャをすれば見放題なわけです。
PC TV Plusやtorne mobileなどのクライアントアプリを動作させることで、 エンドポイントや送信するパラメータなどを調べることができます。
今回はiPhone上でtorne mobileを動作させてキャプチャしてみました。 iPhone上でのパケットキャプチャは以下の記事が参考になりました。
Wiresharkのフィルタにhttp and ip.addr == nasneのIPアドレス
を指定してあげるといい感じに見れます。
おわりに
nasneのAPIをうまく使えば自動録画機能とかも作れるかもしれませんね。 (番組情報の取得は別APIを使う必要がありそうですが)
予約エラーに気づかず録画失敗してしまう経験をしたことがある人は、 是非今回のツールを使ってみてください。
- 出版社/メーカー: ソニー・インタラクティブエンタテインメント
- 発売日: 2015/03/05
- メディア: Video Game
- この商品を含むブログ (15件) を見る