
Home Assistant の統計データを VictoriaMetrics に保存していつまでも残しておこう
みなさんこんにちは、たいくんです。
Home Assistantには登録されたデバイスの履歴を保存する機能があり、温度や湿度などのグラフを見ることができて大変便利ですが、長期統計を保存しておくのには向いていません。
そのため、この記事ではデータベースの「VictoriaMetrics」に長期統計データを保存し、データ視覚化ツールの「Grafana」を使って記録された長期統計を表示する方法を紹介します。
Home Assistantの統計データをVictoriaMetricsに保存するメリット・デメリット
そもそもHome Assistantのデータベースは統計の長期記録に向いていない

Home Assistantはデフォルトのデータベースエンジンに「SQLite」を使用しています。
Recorder統合を通してデータベースに統計データを記録しており、特に何も設定しなくても自動的にデータが記録されていきます。
デフォルトでは、データベースの容量が肥大化しないように、10日間で「パージ」(切り離し)が行われ、「長期統計」に移行します。
長期統計に移行したデータは、Home Assistantの履歴ページでは薄い色のグラフで確認することができます。

長期統計と通常統計の境目を拡大してみるとわかりますが、長期統計のデータは容量が大きくならないよう、間引かれたデータになっています。
長期統計データは基本的に、1時間ごとにサンプリング・平均化されたデータとなっています。
長期統計データは、センサーの「state_class」属性が「measurement」か「total」、または「total_increasing」のいずれかに設定されている場合のみ記録されるため、すべてのセンサーデータが長期統計に保存されるわけではありません。

また、長期統計に記録されるセンサーでも、CPU使用率のような高頻度に更新されるセンサーの場合は間引かれる範囲がとても大きくなってしまう場合があり、古いデータを見たいときに役に立たないこともあります。
このように、Home Assistantの長期統計データは広い範囲のデータの平均値を見たい場合に最適化されており、狭い範囲のデータを見る用途には向いていません。
VictoriaMetricsに保存するメリット
VictoriaMetricsには間引かれていないデータが長期保存される

これは、先ほどHome Assistantの履歴ページで表示していたものと同じ温度センサーの、VictoriaMetricsに保存したデータをGrafanaで表示したものです。

長期統計に切り替わる境目に拡大してみると、こんな感じで間引かれていないグラフになっているのがわかると思います(同じ数値が連続している場所では線が途切れていますが、つなげて表示させることも可能です)。

さらに、より古いデータを拡大して見てみても、間引かれていない完全なデータが記録されているのがわかります。

先ほど確認した、Home Assistantの長期統計では使い物にならなかったCPU使用率のセンサーも、このようにきちんと記録されています。

古いデータを拡大して見てみても、すべてのデータが正しく記録されています。
このように、VictoriaMetricsでは完全なデータを長期間保存しておくことができます。
データベースが軽量

これは、2024年3月7日からデータを保存しているHome Assistantのデータベース情報です。
「推定データベースサイズ (MiB)」のところに推定容量が記載されていますが、非常に多くのセンサーやエンティティを登録していることもあり、「10269.66 MiB」つまり約10.2GiB(約11GB)ほどの容量となっています。
Recorder統合の設定はデフォルトのまま、つまり10日以上経過した古いデータが間引かれているにもかかわらずこの容量ですので、結構大きいですよね。
データベース容量を確認する方法(クリックで開閉)
お使いのHome Assistantのデータベース使用量を確認するには、Home Assistantの「設定」→「システム」→「修復」と進むか、以下のボタンから修復設定を開きます。
その後、右上の「…」から「システム情報」をクリックすると様々なシステム情報が表示され、その中の「Recorder」セクションからデータベース容量を確認することができます。

一方こちらは、2024年1月31日からデータを保存しているVictoriaMetricsのデータフォルダ情報です。
一切データが間引かれておらず、Home Assistantのデータベースよりも圧倒的に多くのデータが保存されているのにもかかわらず8.72GB(約8.1GiB)と、データの圧縮効率が非常に高いのがわかるかと思います。

Home Assistantの履歴ページでは広い範囲の統計を表示しようとすると読み込み画面が表示されてしばらく時間がかかりますが、VictoriaMetricsに保存したデータは軽量なので、広い範囲の統計を表示してもあまり待たされずに表示させることができます。
VictoriaMetricsのデメリット
データが二重に記録されるためストレージ容量を消費する
VictoriaMetricsはHome Assistantのデータベースを置き換えるわけではないため、Home AssistantのデータベースとVictoriaMetricsの二重にデータが記録されます。
そのため、小さいストレージで使用している場合、記録するデータが増えるにつれてストレージを圧迫してしまう可能性があります。
Home Assistantの履歴ページでは保存されたデータを確認できない
先ほども言ったように、Home Assistantのデータベースとは別に記録しているため、VictoriaMetricsに保存されたデータを確認するにはGrafanaなどのツールを使う必要があります。
Home AssistantのネイティブUI(履歴ページなど)からはHome Assistantのデータベースしか確認できないため、長期統計を確認するには一手間増えてしまうことになります。
数値データしか記録できない
VictoriaMetricsは仕様上、数値データの記録にしか対応していません。
そのため、アップタイム(稼働時間)センサーのようなテキスト情報や時間情報などを含むセンサーやボタンなどの記録をVictoriaMetricsに保存することはできません。
ただし、スイッチやバイナリセンサーなどは、状態を0(オフ・未検知)と1(オン・検知)の数値としてデータを記録することができます。
Home Assistantでは数値以外のセンサーどころか、スイッチやバイナリセンサーなどの長期統計も記録することができず、それと比べれば記録できる情報ははるかに増えますので、そこまで大きなデメリットでは無いかもしれません。

逆に言えば、数値データであれば何でも記録できることから、例えば電球のオン・オフ状態、明るさ、色温度などといった様々なデータを記録することもできるため、メリットと捉えることもできます。
統計データをVictoriaMetricsに保存するように設定する方法
VictoriaMetricsを設定する
VictoriaMetricsアドオンをインストールする
まずはVictoriaMetricsを実行するためのアドオンをインストールします。
アドオンが使用できないHome Assistantをご利用の場合は、Dockerコンテナなどを使ってVictoriaMetricsをインストールしてください。
この記事ではアドオンを使用する方法を解説します。

VictoriaMetricsアドオンはデフォルトのリポジトリには含まれていないため、VictoriaMetricsアドオンのリポジトリを追加する必要があります。
以下のボタンをクリックすることで追加できます。
手動でリポジトリを追加する方法(クリックで開閉)
Home Assistantの「設定」→「アドオン」→「アドオンストア」と進むか、以下のボタンからアドオンストアにアクセスします。
アドオンストアにアクセスしたら右上の「…」から「リポジトリ」をクリックします。

「追加」欄に次のURLを入力し、「追加」ボタンをクリックします。
https://github.com/VictoriaMetrics-Community/homeassistant-addon-victoriametrics

このように表示されればリポジトリの追加は完了です。

リポジトリが追加できたらページを再読み込みするとVictoriaMetricsアドオンが表示されるはずですのでインストールします。

アドオンがインストールできたらアドオンの設定ページを開き、「Retention」の設定を確認します。
これはデータの保存期間を決める設定項目で、デフォルトでは「99y」(99年間)に設定されているので、変更したい場合はここで変更して設定を保存します。
特に変更する必要がない場合はこのままでも問題ありません。

設定が終わったらアドオンを起動します。
「起動時に開始」と「ウォッチドッグ」をオンにしておくことをおすすめします。
アドオンが起動したら、アドオンの「ホスト名」を後で使用するため、どこかにメモしておきます。
InfluxDB統合を設定する
Home Assistantの統計データをVictoriaMetricsに送信するには、InfluxDB統合を使用します。
VictoriaMetricsはInfluxDBと互換性があるため、この統合を使用することができます。

InfluxDB統合を設定するには、configuration.yamlに以下のコードを記述します。
influxdb:
api_version: 1
host: アドオンのホスト名
port: 8428
max_retries: 3
measurement_attr: entity_id
tags_attributes:
- friendly_name
- unit_of_measurement
ignore_attributes:
- icon
- source
- options
- editable
- min
- max
- step
- mode
- marker_type
- preset_modes
- supported_features
- supported_color_modes
- effect_list
- attribution
- assumed_state
- state_open
- state_closed
- writable
- stateExtra
- event
- friendly_name
- device_class
- state_class
- ip_address
- device_file
- unit_of_measurement
- unitOfMeasure
- color_mode
- hs_color
- rgb_color
- xy_color
- hvac_action
- value
- writeable
- attribution
- dataCorrect
- dayname
include:
domains:
- sensor
- binary_sensor
- light
- switch
- cover
- climate
- input_boolean
- input_select
- number
- lock
- weather
exclude:
entity_globs:
- sensor.clock*
- sensor.date*
- sensor.glances*
- sensor.time*
- sensor.uptime*
- sensor.dwd_weather_warnings_*
- weather.weatherstation
- binary_sensor.*_smartphone_*
- sensor.*_smartphone_*
- sensor.adguard_home_*
- binary_sensor.*_internet_access
「アドオンのホスト名」には、先ほど確認したホスト名を入力します。
例えば、先ほどの画像の場合は「1bd4a9fb-victoria-metrics」と入力します。
これらの設定はあくまで一例です。保存したいデータに合わせて「include」(VictoriaMetricsに送信するものに含めるデータ)や「exclude」(VictoriaMetricsに送信するものから除外するデータ)などの設定を変更してください。
私が使用している設定(クリックで開閉)
influxdb:
api_version: 1
host: xxxxxxxx-victoria-metrics
port: 8428
max_retries: 3
measurement_attr: entity_id
tags_attributes:
- friendly_name
- unit_of_measurement
ignore_attributes:
- icon
- source
- options
- editable
- min
- max
- step
- mode
- marker_type
- preset_modes
- supported_features
- supported_color_modes
- effect_list
- attribution
- assumed_state
- state_open
- state_closed
- writable
- stateExtra
- event
- friendly_name
- device_class
- state_class
- ip_address
- device_file
- unit_of_measurement
- unitOfMeasure
include:
domains:
- sensor
- binary_sensor
- light
- switch
- cover
- climate
- input_boolean
- input_select
- input_number
- number
- lock
- weather
exclude:
entity_globs:
- sensor.clock*
- sensor.date*
- sensor.glances*
- sensor.time*
- sensor.uptime*
- sensor.dwd_weather_warnings_*
- weather.weatherstation
- binary_sensor.*_smartphone_*
- sensor.*_smartphone_*
- sensor.adguard_home_*
- binary_sensor.*_internet_access
ほとんどデフォルトのままですが、含めるドメインに「input_number」を追加して、番号入力ヘルパーの数値状態を記録するようにしています。
設定できたら、右上の赤い保存ボタンをクリックして設定を保存し、Home Assistantを再起動します。
VictoriaMetricsに正しくデータが送信されていることを確認する

Home Assistantが起動したら、VictoriaMetricsアドオンのWeb UIを開き、上の「Query」欄に任意のエンティティIDを入力します。
VictoriaMetricsに送信されるエンティティIDの最後にはエンティティの属性が追加されるので、入力するエンティティIDの最後にはそのエンティティの数値状態であることを表す「_value」をつけます。
エンティティIDを入力する際、「Autocomplete」をオンにしておくことで入力中に候補が表示されるようになるので、そこを選択することで自動的に補完することができます。
入力できたら、「EXECUTE QUERY」をクリックして、グラフが正しく表示されることを確認します
グラフが正しく表示されれば、Home Assistantのデータが問題なくVictoriaMetricsに送信されていることを表しています。
グラフが表示されない場合、InfluxDB統合の設定が間違っている可能性がありますので、もう一度確認してみてください(特にホスト名)。
Grafanaを設定する
Grafanaアドオンをインストールする
正しくデータが記録されていることを確認したら、次はGrafanaを実行するためのアドオンをインストールします。
アドオンが使用できないHome Assistantをご利用の場合は、Dockerコンテナなどを使ってGrafanaをインストールしてください。
この記事ではアドオンを使用する方法を解説します。

Grafanaアドオンは、デフォルトのHome Assistant Community Add-onsリポジトリに含まれているので、リポジトリを追加することなくアドオンをインストールすることができます。
Grafanaアドオンをインストールするには、Home Assistant「設定」→「アドオン」→「アドオンストア」と進んでGrafanaを探すか、以下のボタンからアドオンのページを開き、インストールしてください。

インストールできたらアドオンを起動します。
「起動時に開始」と「ウォッチドッグ」、「サイドバーに表示」をオンにしておくことをおすすめします。

アドオンが起動したらWeb UIを開きます。
データソースを追加する
VictoriaMetricsに保存されたデータをGrafanaで表示できるようにするために、GrafanaとVictoriaMetricsを接続します。

左上のGrafanaロゴをクリックするとメニューが開くので、「Connections」内の「Add new connection」をクリックします。

VictoriaMetricsとの接続には、VictoriaMetricsと互換性のあるPrometheusのプラグインを使って接続するので、データソースとして「Prometheus」を追加します。

データソースに「Prometheus」を選択するとこのような画面が表示されるので、右上の「Add new data source」ボタンをクリックします。

データソースの設定画面が表示されるので、「Name」欄には「VictoriaMetrics」や「Home Assistant」などのわかりやすい名前を入力し、「Prometheus server URL」には以下のURLを入力します
http://homeassistant.local:8428/prometheus
「homeassistant.local」の部分はHome AssistantサーバーのIPアドレスでも構いません。

正しく入力できたら、最も下にある「Save & test」をクリックし、「Successfully queried the Prometheus API.」と表示されればデータソースの接続確認と設定は完了です。
何かエラーが表示された場合は、URLが正しいことをご確認ください。
データが取得できることを確認する

データソースが追加できたら、VictoriaMetricsに保存されているデータがGrafanaで正しく表示できることを確認します。
Grafanaのメニューを開き、「Explore」ページを開きます。

これがExploreページです。この画面から、データソースに保存されたデータを簡単に確認することができます。

右側の「Metric」のところにある「Select metric」欄に先ほどVictoriaMetricsのWeb UIに入力したものと同じエンティティIDを入力します。
入力中に候補が表示されるので、そちらを選択すると簡単です。

このような画面になっていれば準備は完了です。右上の青い再読み込みボタン(「Run query」ボタン)を押してみましょう。

このように、下のほうにグラフが表示されれば正しくデータが取得できています。
この画面ではデータが更新されても自動的にグラフが更新されないため、グラフを更新するにはもう一度再読み込みボタンを押します。
再読み込みボタンの右側にあるボタンから、一定時間ごとにグラフの表示を更新する自動更新機能をオンにすることができます。
ダッシュボードを作成してパネルを設定する
このままではデータを確認するために手間がかかりますので、よく確認するデータをすぐに表示できるように、ダッシュボードを作成しましょう。

ダッシュボードを作成するには、Grafanaのメニューから「Dashboards」ページを開き、「Create dashboard」ボタンまたは右上の「New」から「New dashboard」ボタンをクリックします。

新しいダッシュボードの設定画面が表示されるので、「Add visualization」ボタンまたは右上の「Add」から「Visualization」ボタンをクリックします。

データソースの選択画面が表示されるので、先ほど設定したデータソースを選択します。

Visualizationパネルの設定画面が表示されるので、設定していきます。
パネルの設定画面では、左上にパネルのプレビュー、左下にクエリの設定、右側にパネルの設定が表示されます。
用語について(クリックで開閉)
- パネル
- Home Assistantのダッシュボードで言うところの「カード」に相当します。
- メトリック
- エンティティのデータを表します。Home AssistantのエンティティIDだと考えるとわかりやすいでしょう。
- クエリ
- メトリックをグラフに表示するために記述するコードです。グラフに表示させる際の表示方法を変更したり、フィルタリングを行ったりすることができます。
今回のようにPrometheusで設定している場合、基本的にはBuilderを使ってUIで設定できるため、実際にコードを記述する事はほとんどありません。
- メトリックをグラフに表示するために記述するコードです。グラフに表示させる際の表示方法を変更したり、フィルタリングを行ったりすることができます。

クエリの設定は、先ほどExploreページでテストした時と同様に設定することができます。
1つのパネルに複数のグラフを表示したい場合は、下のほうにスクロールして「Add query」ボタンからクエリを追加することで実現できます。
パネルに表示される凡例名を変更する

デフォルトでは、凡例に表示される名前が非常に長く、人間にとってわかりづらいものとなっているため、人間が読みやすいよう、Home Assistantで設定したエンティティ名に変更してみましょう。
凡例にエンティティ名を表示するには次の2つの方法があります。
- クエリの設定から表示を変更する
- 1つのメトリックに対して表示を変更できます。
複数のクエリがある場合、クエリごとに設定を行う必要があります。
- 1つのメトリックに対して表示を変更できます。
- パネルの設定から表示を変更する
- すべてのクエリに対して一括で表示を変更できます。
クエリの設定から表示を変更するには、クエリ設定にある「Options」を開き、「Legend」を「Auto」から「Custom」に変更し、次のように入力します。
{{friendly_name}}
これで、凡例の名前がわかりやすいものに変わっているはずです。
Home Assistantでエンティティ名を変更すると、こちらにも反映されます。

パネルの設定から表示変更するには、パネルの設定を下のほうにスクロールし、「Standard Options」内にある「Display name」に、次のように入力します。
${__field.labels.friendly_name}
これで、凡例の名前がわかりやすいものに変わっているはずです。
Home Assistantでエンティティ名を変更すると、こちらにも反映されます。
これで、凡例の名前を変更することができました。
パネルに表示されるグラフの見た目を変更する

デフォルトでは、このようにシンプルな折れ線グラフが表示されるようになっています。
同じ数値が連続する場合、グラフの線がつながらずに途切れた表示になっているため、少しわかりづらいかもしれません。

グラフを途切れさせずにつながった表示にするには、パネルの設定の「Graph styles」内にある「Connect null values」を「Always」に変更します。
これで、同じ値が連続している場所でもグラフの線をつなげて表示させることができます。
「Always」の代わりに「Threshold」に変更することで、「一定時間以内の間に同じ値が連続している場合のみつなげる」(例えば、1時間まで同じ値が連続している場合はグラフを繋げ、1時間以上同じ値が連続している場合は途切れさせる)といった設定を行うことも可能です。

また、デフォルトでは「データの点」を尖った山または谷として表示するシンプルな折れ線グラフになっていますが、Home Assistantの履歴ページに表示されるグラフのようなカクカクした表示に変更することもできます。
グラフの形を変更するには、パネルの設定の「Graph styles」内にある「Line interpolation」を最も右にある「Step after」(「⤴︎⤵︎」のような形のアイコン)に変更します。
これで、グラフの形がHome Assistantの履歴ページに表示されるものと同じ表示になり、わかりやすくなりました。
ダッシュボードを保存する

パネルの設定が終わったら、上にある「Back to dashboard」ボタンをクリックします。

すると、設定したパネルがダッシュボードに表示されるので、大きさの変更や並び替えを行ったり、新たなパネルを追加したりしてカスタマイズします。

右上にある時計のアイコンから、グラフを表示する期間を変更することができます。

また、グラフ上で表示したい範囲をドラッグアンドドロップすることでその範囲を拡大することもできます。
ちなみに、「Refresh」ボタンの右側にあるボタンからグラフの自動更新間隔を変更することができます。
デフォルトでは自動更新がオフになっていますが、自動更新を設定しておけば、わざわざ「Refresh」ボタンをクリックしなくても定期的にグラフが更新されますので、設定しておくと良いでしょう。
カスタマイズが終わったら、右上の「Save dashboard」ボタンをクリックしてダッシュボードを保存しましょう。

「Title」欄にお好みの名前をつけ、「Save」をクリックすることでダッシュボードを保存することができます。

ダッシュボードのカスタマイズ後に変更を保存する際、そのままではデフォルトのグラフ表示期間(そのダッシュボードを開いたときにデフォルトで選択されているグラフ表示期間)を変更しても保存されない(パネルやレイアウトの変更しか保存されない)ので、デフォルトのグラフ表示期間を変更するには保存画面で「Update default time range」にチェックを入れてから保存します。
作成したダッシュボードにアクセスする

Grafanaを開いたときに表示されるホーム画面では、左側の「Dashboards」から最近開いたダッシュボードを再び開くことができます。
よく使うダッシュボードは、そのダッシュボードの右側にある星のアイコンをクリックすることで、「Starred dashboards」(星をつけたダッシュボード)セクションに常に表示されるようになります。

ホーム画面には最近開いたダッシュボードか星をつけたダッシュボードしか表示されないため、すべてのダッシュボードにアクセスするには、メニューから「Dashboards」ページを開きます。
すると、保存されているダッシュボードの一覧が表示されるため、そこからダッシュボードを開くことができます。
私のダッシュボード

参考までに、私が使用しているダッシュボードをご紹介します。
私は主に、自分の部屋の温湿度を確認することが多いため、温湿度のみをまとめたダッシュボードを使用しています(他のデータはあまり確認しないので、確認したい時になったらExploreページで確認しています)。
左側には大きなグラフを配置しており、右側には現在の温湿度を表示する小さなカードを並べています。
右側に並べている小さなカードは、しきい値によって色が変わるようにしていて、温湿度が高くなった・低くなった際に気づきやすくしています。

このように、古い統計データもきちんと残っています。
注意
エンティティを削除すると統計データも削除される
Home Assistantからエンティティを削除してしまうと、Home Assistantのデータベースだけでなく、VictoriaMetricsからもデータが削除されてしまう場合があります。
そのため、残しておきたいエンティティのデータがある場合は、そのエンティティは削除せずに残しておきましょう。
エンティティの種類によっては、そのエンティティが設定されているデバイスが利用できなくなったときに自動的に削除されてしまう場合があります(レガシー統合など)。
そのようなデータは、あらかじめCSVファイルなどにエクスポートしておくようにしましょう。
ファイルをエクスポートしておけば、VictoriaMetricsから削除されて利用できなくなったデータでもファイルとして残しておくことができます。
この記事では解説しませんが、Grafanaの公式ブログ(英語)で、CSVファイルとしてエクスポートする方法が紹介されているので、確認してみてください。
さいごに
今回は、Home AssistantでVictoriaMetricsとGrafanaを組み合わせて、長期統計を保存し、表示する方法をご紹介しました。
過去の統計データを確認する機会はあまり多くないかもしれませんが、過去のデータを過去にさかのぼって記録することはできないため、将来的に過去のデータを確認できるように記録し続ける事が非常に重要です。
特に、過去のエネルギー使用量などは非常に大事なデータですので、いつまでも自宅のデータを残しておくようにしましょう。
最後まで読んでくださりありがとうございました。それでは、また!
コメントはこちらから!
記事について気になるところや質問、ご指摘など、以下のコメント欄から気軽にコメントしていただけるとうれしいです!
※コメントの投稿には、無料で作成できるGitHubアカウントが必要です。コメント欄が表示されない場合はページを再読み込みしてみてください。
コメント欄ではMarkdown記法が使用でき、画像を挿入することもできます。ここで使用できるMarkdown記法の詳しい使い方は、入力欄の右下にあるアイコンをクリックすることで確認することができます。