この記事は Grafana Advent Calendar 2025 の 6 日目になります。
ここ数日Grafana Cloudでお家モニタリングする系の記事を読んで、
お家モニタリング熱が高まったので、定番ネタではありますが、室温のモニタリング環境を作ってみました。
室温のモニタリングが何故必要になったのか?
12月に入ってより一層寒くなってきたので、自宅の仕事部屋ではほぼ一日中暖房をつけるようになりました。部屋を閉め切って作業していると、エアコンの設定温度よりも2〜3度ほど高くなってしまうことがあり、体感的にも暑さを感じることが以前からありました。
作業に集中していると、室温の上昇に気づかないまま放置してしまうことがあり、先日たまたま仕事部屋に設置しているNASのストレージ温度が50度を超えていることに気づきました。一般的にストレージ、特にHDDは50度を超えないよう管理すべきとされているため、温度超過にすぐ気づける仕組みが必要だと考えました。
そこで、Grafana Cloudを使ってストレージ温度のアラートを設定するために、ストレージ温度を記録することにしました。ついでに室温が高くなってしまっていることが原因であることを確認するため、室温もあわせて記録することにしました。
今回作成したものがこちらです。

SwitchBot Hub 2で測定した室温をM5StackからGrafana Cloudに書き込み、さらにWindows PCで収集したストレージ温度とあわせてGrafanaで確認できるようにしました。

今日の昼頃からの実際の温度変化です。
水色の縦線は、それぞれエアコンの設定温度を下げたタイミングと、換気のために部屋の扉を開けたタイミングを示しています。
これにより、PCのストレージ温度と室温をグラフで確認できるようになりました。
アラートルールも設定したので、対応が必要な場合はすぐに通知を受け取れるようになりました。
また、室温の上昇とストレージ温度の上昇が直接関係していることも明確になりました。
※ NASについてはすでに温度をモニタリングできていたため、あわせてアラートルールを設定しました。
どういった要件で、何を使って実現するか?
今回満たすべき要件は、以下のとおりです。
- ストレージの温度と室温を記録する
- 特に意識することなく、自動的に記録される
- 室温は、PCなどを起動しなくても一日中記録できる
自宅の環境を少しずつ整備してきたこともあり、今回必要なものはほとんど揃っていました。
まず、室温の計測にはSwitchBot Hub 2を使いました。室温を一日中記録し続けるために使うデバイスは、たまたま使わずに余っていたM5Stack ATOMが使えそうです。
メトリクスの記録先はGrafana Cloudです。必要なメトリクスはそれほど多くないので、無料枠で全く問題ないです。
実際に作ったもの
ストレージ温度のモニタリング
作ったものは、こちらに置いてあります。
GitHub - mtanda/prometheus-exporter-windows-service
ストレージ温度のモニタリングは、必要なツールをインストールして設定するだけで比較的簡単に構築できました。
Grafana Alloyを使ってメトリクスを収集し、Grafana Cloudへ書き込みます。
Grafana Alloyには windows_exporter が組み込まれているので、ついでにCPU使用率といったメトリクスも記録しています。ストレージの温度は S.M.A.R.T. 情報として個別に記録されているので、専用のツールでとってくる必要があります。
こういった用途で定番となっているツールは smartmontools ですが、ありがたいことにWindowsにも対応していました。Prometheusのexporter smartctl_exporter もWindowsに対応していたので、自分で何かを作ったりする必要はありませんでした。
Alloyの設定は以下のとおりです。
prometheus.exporter.windows "default" {
enabled_collectors = ["cpu", "logical_disk", "memory", "net", "os", "physical_disk", "system"]
}
prometheus.scrape "windows" {
targets = prometheus.exporter.windows.default.targets
forward_to = [
prometheus.remote_write.grafanacloud.receiver,
]
scrape_interval = "30s"
}
prometheus.scrape "smartctl_exporter" {
targets = [
{ "__address__" = "localhost:9633" },
]
forward_to = [
prometheus.remote_write.grafanacloud.receiver,
]
scrape_interval = "60s"
}
prometheus.remote_write "grafanacloud" {
endpoint {
url = "https://prometheus-us-central1.grafana.net/api/prom/push"
basic_auth {
username = "<user>"
password = "<pass>"
}
}
}
PCを起動すると、Alloy や smartctl_exporter が起動してメトリクス収集が自動的に開始されます。
なお、Grafana AlloyはWindows用のインストーラーも提供されており、手軽に導入できるようになっていました。とはいえ、今回は管理のしやすさを考えて WinSW を使ってサービス化して使っています。
WinSWのファイル構成は、 WinSWで任意のexeをWindowsサービス化する方法について を参考にさせていただきました。
室温のモニタリング
作ったものは、こちらに置いてあります。
https://github.com/mtanda/home-monitor
実は、M5StackからGrafana Cloudへメトリクスを書き込む部分が一番の懸念だったのですが、Grafana Labsが公式ライブラリを提供してくれていたおかげで、特に悩むことなく対応できました。
PrometheusArduino
Alloyと同様にremote writeを使って直接Grafana Cloudに書き込めるので、これで一日中室温を記録できるようになりました。
室温データは、SwitchBotのクラウドサービスにも記録されています。SwitchBotのAPIを使えば、記録済みの室温データを収集することもできますが、API呼び出しには回数制限があり、回数制限に達していなくてもAPI呼び出しに失敗することもあるようなので、別の方法を使いました。
SwitchBot Hub 2を購入する前に使っていた、SwitchBotの温湿度計は、温度と湿度の値を Bluetooth Low Energy (BLE) で周囲にブロードキャストする仕様になっていました。調べたところ、SwitchBot Hub 2も同様にBLEでデータをブロードキャストしているため、これをM5Stackで受信して処理します。
BLEで受信したデータの処理は、
を参考にさせていただき、SwitchBot本体に表示されている温度と湿度と一致する、正しい値が無事取得できました。
Grafana Cloudへのremote writeは以下のようなコードで簡単に実装できています。
void loop()
{
int64_t time;
time = transport.getTimeMillis();
if (!ts1.addSample(time, sampleCount))
{
Serial.println(ts1.errmsg);
}
sampleCount++;
if (sampleCount >= 4)
{
Serial.println("Sending data to Grafana Cloud...");
sampleCount = 0;
PromClient::SendResult res = client.send(req);
if (!res == PromClient::SendResult::SUCCESS)
{
Serial.println(client.errmsg);
}
else
{
Serial.println("Data sent.");
}
ts1.resetSamples();
}
delay(15 * 1000); // Wait 15 seconds
}
まとめ
Grafana Labsの過去のブログ記事で、アボカドのプランターをモニタリングする事例を知っていたので、以前からお家モニタリングに興味はありました。
これまでは具体的にモニタリングしたい対象が思いつかず、「実際にやってみると大変なのでは」という気持ちもあって手を付けられていませんでしたが、今回はよいきっかけになりました。
いろいろ必要なものが整備されて揃っているので、わりと気軽に始められると思いました。Grafana Labs公式の情報源としては、ここがまとまっているようでした。
CO2濃度のモニタリングなど、他にも試してみたいことはまだまだあるため、今回作った仕組みをベースに少しずつ拡張していくつもりです。