はじめに
最近、FireTVを使っていると、「今日はどれくらい観たんだろう?」「深夜まで観すぎてないかな?」と気になるようになってきました。
そこで、HomeAssistantを使って、FireTVの視聴時間を自動記録し、可視化する仕組みを作ってみました。
本記事では、
- Fire TVの視聴時間をどのように取得するのか?
- Home Assistant でどのようにデータを保存・可視化するのか?
- 実際に作ってみて苦労した点
をまとめました。
やりたいこと(要件整理)
まず、どんな情報を記録・可視化したいのかを整理しました。
✅ 記録したい情報
- 1時間ごとの視聴時間
- 1日ごとの視聴時間
- どのアプリ(Amazon Video / YouTube など)をどれくらい見たか
✅ 最終的にやりたいこと
- リアルタイムで「今日の視聴時間」を表示する
- 1時間ごとの視聴時間を棒グラフで可視化する
- 1週間単位で視聴時間の推移を表示する
- アプリごとの使用割合を円グラフで表示する(←今後実装予定)
完成イメージ
こんな感じでダッシュボードにFireTVの視聴時間が確認できるようにします。
HomeAssistantの構成イメージ
ざっくりと構成をまとめるとこんな感じになります。
FireTV の状態を取得できるようにする
FireTVの状態(playing, paused, idleなど)を取得するために、HomeAssistantにmedia_player.fire_tv
エンティティを用意して、そこからFireTVの状態を取得するようにします。
FireTVを開発者モードを有効にする
設定 → マイFireTV → 開発者オプション → ADBデバッグ をオンにします。
設定 → マイFireTV → バージョン情報 → ネットワーク で表示されるIPアドレス(wifi)を確認します。
IPアドレスでFireTVを指定しますので、手動でIPアドレスを設定するか、Wi-FiルーターでIP予約してFireTVのIPアドレスが変わらないようにしてください。
HomeAssistantにFireTVデバイスを追加
HomeAssistantの設定 → デバイスとサービス → 統合を追加 を選択
「ブランド名で検索」に「Amazon」を入力して選択
「Amazon Fire TV」を選択
確認メッセージが表示されたら「OK」を選択
Android Debug Bridgeで以下を入力
項目 | 設定値 |
---|---|
ホスト | FireTVのIPアドレス |
デバイスの種類 | firetv |
ポート | 5555(デフォルト) |
ADBキーファイルへのパス | 空白 |
ADBサーバーのIPアドレス | 空白 |
ADBサーバーのポート | 5037(デフォルト) |
「送信」をクリックしてしばらくするとFireTV側に「USBデバッグを許可しますか?」の確認画面が表示されます。
「このコンピューターを常に許可」にチェックを入れて、OKボタンを押します。
正常にデバイスの追加ができたら「完了」を押します。
エンティティIDはmedia_player.fire_tv
のように、わかりやすいIDに変更してください。(以降は、media_player.fire_tv
のエンティティ名で進めていきます。)
FireTVの現在の状態を表示するエンティティを作成
configuration.yamlに以下のエンティティを追加して、現在のmedia_player.fire_tv
の状態を表示するエンティティを用意します。
✅ FireTV視聴履歴(input_text.fire_tv_watch_history
)
FireTV視聴中のアプリ名を記録します。
input_text:
fire_tv_watch_history:
name: Fire TV 視聴履歴
max: 255
✅ FireTV視聴中フラグ(input_boolean.fire_tv_watching
)
FireTV視聴中の間、ステータスをONにします。
input_boolean:
fire_tv_watching:
name: Fire TV 視聴中フラグ
initial: off
このエンティティの状態を history_stats
や utility_meter
を使って集計していきます。
視聴時間の記録方法
✅ 短期間のデータ取得(1時間ごとの視聴時間)
-
history_stats
センサーを使用 -
input_boolean
を利用し、00分00秒〜59分59秒の間でhistory_stats
センサーがONの時間を集計
sensor:
- platform: history_stats
name: Fire TV 1時間ごとの視聴時間
entity_id: input_boolean.fire_tv_watching
state: "on"
type: time
start: "{{ now().replace(minute=0, second=0) }}"
end: "{{ now().replace(minute=59, second=59) }}"
✅ 長期間のデータ保存(1日ごとの視聴時間)
-
utility_meter
を使用し、1日ごとの視聴時間を蓄積 - 1時間ごとの視聴時間を集計する
history_stats
センサーを利用
utility_meter:
fire_tv_daily_watch_time:
source: sensor.fire_tv_hourly_watch_time
cycle: daily
✅ 当日の視聴時間を「〇〇時間〇〇分」で表示
-
templete
を使用し、当日の試聴時間を「〇〇時間〇〇分」のフォーマットに変換 - 1日ごとの試聴時間を蓄積する
utility_meter
を使用
sensor:
- platform: template
sensors:
fire_tv_total_daily_watch_time_human:
unique_id: fire_tv_total_daily_watch_time_human
friendly_name: "Fire TV 本日の視聴時間"
value_template: >-
{% set total_minutes = (states('sensor.fire_tv_daily_watch_time') | float(0) * 60) | int %}
{% set hours = total_minutes // 60 %}
{% set minutes = total_minutes % 60 %}
本日の視聴時間 {{ hours }}時間{{ minutes }}分
オートメーション設定
FireTVの視聴時間を記録するためのオートメーションを設定します。
✅ 視聴開始したら視聴中フラグをONにしてアプリ名を記録する
以下の条件がすべて一致した場合、input_boolean.fire_tv_watching
のフラグをON(true)にして、input_text.fire_tv_watch_history
に視聴中のアプリ名を記録する。
【条件】
-
media_player.fire_tv
の状態がplaying
に変化する -
input_text.fire_tv_watch_history
の値とFireTVのsource
(アプリ名)の値が一致しない
- id: fire_tv_start_time_log
alias: Fire TV 視聴中フラグONと視聴中アプリを記録
trigger:
- platform: state
entity_id: media_player.fire_tv
to: playing
condition:
- condition: template
value_template: '{{ states(''input_text.fire_tv_watch_history'') != state_attr(''media_player.fire_tv'',
''source'') }}'
action:
- service: input_text.set_value
target:
entity_id: input_text.fire_tv_watch_history
data:
value: '{{ state_attr(''media_player.fire_tv'', ''source'') }}'
- service: input_boolean.turn_on
target:
entity_id: input_boolean.fire_tv_watching
✅ 視聴終了したら視聴中フラグをOFFにしてアプリ名をクリアする
以下の条件がすべて一致した場合、input_boolean.fire_tv_watching
のフラグをOFF(false)にして、input_text.fire_tv_watch_history
に"None"を記録する。
【条件】
- FireTVの状態が以下のいずれかに変化する
idle
standby
off
- 現在の
input_text.fire_tv_watch_history
の値が"None"以外
- id: fire_tv_watch_history_log
alias: Fire TV 視聴中フラグOFFと視聴中アプリ名をクリア
trigger:
- platform: state
entity_id: media_player.fire_tv
to: idle
- platform: state
entity_id: media_player.fire_tv
to: standby
- platform: state
entity_id: media_player.fire_tv
to: 'off'
condition:
- condition: template
value_template: '{{ states(''input_text.fire_tv_watch_history'') != ''None'' }}'
action:
- service: input_text.set_value
target:
entity_id: input_text.fire_tv_watch_history
data:
value: None
- service: input_boolean.turn_off
target:
entity_id: input_boolean.fire_tv_watching
✅ 00分になったら各センサーの状態を更新する
00分ちょうどにセンサーの情報を更新しないと、前の時間帯の最大値が今回の時間帯に含まれてしまい、正しい時間が集計できなくなるため、00分ちょうどで集計データをリセットする。
- id: fire_tv_reflesh_1hour_log
alias: Fire TV 1時間ごとの視聴時間を更新
trigger:
- platform: time_pattern
minutes: "0"
actions:
- target:
entity_id: sensor.fire_tv_hourly_watch_time
action: homeassistant.update_entity
data: {}
グラフで視聴時間を見える化する
視聴時間をグラフ化するために、apexcharts-card
やmushroom
のカスタムカードを使用しました。
どちらもHACSからインストールできます。
✅ 1時間ごとの視聴時間を棒グラフにする(ApexCharts)
type: custom:apexcharts-card
header:
title: Fire TV 本日の視聴時間
show: true
graph_span: 24h
series:
- entity: sensor.fire_tv_hourly_watch_time
type: column
name: 1時間ごとの視聴時間
group_by:
func: max
duration: 1h
✅ 1週間分の視聴時間を棒グラフで可視化
type: custom:apexcharts-card
header:
title: Fire TV 直近7日間の視聴時間
show: true
graph_span: 7d
series:
- entity: sensor.fire_tv_daily_watch_time
type: column
name: 1日ごとの視聴時間
group_by:
func: max
duration: 1d
✅ 当日の視聴時間を「〇〇時間〇〇分」のフォーマットで可視化
type: custom:mushroom-title-card
title: "{{ states('sensor.fire_tv_total_daily_watch_time_human') }}"
苦労したこと
-
データの集計方法の選定
-
history_stats
やutility_meter
など、どの方法で記録するかを決めるのに時間がかかった - 後から「1日ごとの視聴時間」も集計したくなり、構成を変更することになった
-
-
ApexChartsの設定調整
-
statistics-graph
では希望する表示ができず、apexcharts-card
に変更した
-
-
HomeAssistantの再起動とキャッシュの問題
- HACSで
apexcharts-card
をインストールしたが、ダッシュボードに表示されなかった - リソースの再読込」「ブラウザのキャッシュ削除」などを試して解決
- HACSで
まとめ
今回、HomeAssistantを使ってFireTVの視聴時間を記録し、可視化する仕組みを作りました。
データの記録方法をしっかり設計しないと、後から変更が大変になるということも実感しました。
特に、後でこのデータをどう使うか?を考えておくことが重要だと感じました。
今後は、アプリごとの使用時間を円グラフで可視化する機能 も追加していきたいと考えています。