1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Step Functions + Nature Remo Cloud API + Grafanaで室温管理してみた。

1
Posted at

はじめに

grafanaを触ってみたいなーってずっと思ってたので、たまたま家にあるNature Remoからリビングの室温を取得し、grafanaで可視化してみた。って記事です。

作ったもの

作ったものはこんな感じです。

image.png

構成図

サーバレスかつ、ほぼコードレスな仕組みにしてみました。

本当は室温データはAmazon Timestream for LiveAnalyticsで実現してみたかったのですが、すでに新規受付終了してましたので、今回はカスタムメトリックスで実現してみます。

アーキテクチャ.drawio.png

処理概要

  • 30分おきにStep Functionsのステートマシンを呼び出し
  • Step Functionsでは以下を実施
    • Nature Remo Cloud APIから室温を取得
    • 室温をCloudWatchのメトリックスへ送信
  • 送信したMetricをMacBook上のコンテナ内で動作しているGrafanaで表示

説明

各モジュール毎に工夫したことや、苦労したことを少しまとめておきます。

Nature Remo Cloud API

Nature Remoは、センサーから取得したデータを取得するAPIが公開されています。
認証はWEB上から取得したAPIキーをベアラトークンに指定する方法です。

詳細な仕様は以下に公開されています。

今回はhttps://api.nature.global/1/devicesを使います。

以下のようなレスポンスが取得でき、私が持っている端末(Remo-mini)では温度のみ取得可能です。

[
    {
        "name": "living",
        "id": "xxxxxxx-1b43-4a3f-9b04-6e121a54104d",
        "created_at": "2020-11-29T05:48:58Z",
        "updated_at": "2025-08-30T05:43:08Z",
        "mac_address": "f4:cf:a2:dd:78:ff",
        "serial_number": "2S0924603",
        "firmware_version": "Remo-mini/2.0.62-gf5b5d27",
        "temperature_offset": 0,
        "humidity_offset": 0,
        "users": [
            {
                "id": "xxxxxxx-7dd0-4beb-9bb4-6efd3f22ed78",
                "nickname": "hoge",
                "superuser": true
            }
        ],
        "newest_events": {
            "te": {
+                "val": 25.5,
                "created_at": "2025-08-31T02:47:42Z"
            }
        }
    }
]

なお、温度はリアルタイムでは取得できず、0.5°くらいの変化がないとデータが更新されないみたいでした。

Step Functions

とってもシンプルです。API叩いてその結果をカスタムメトリックスに送信するだけです。

image.png

Call NatureRemo API

JSONataを利用し、レスポンスボディを変数に格納しています。
便利〜!

{
  "name": "{% $states.result.ResponseBody[0].name %}",
  "temperature": "{% $states.result.ResponseBody[0].newest_events.te.val %}"
}

なお、ベアラ認証が必要なので、EventBridgeのAPIの送信先を登録しておきます。

image.png

今回のケースだけでいうと、少し面倒な感じもしますが、このAPIを複数システムから呼び出すときなどは、EventBridgeのに一度登録しておけば認証周りを意識しなくて良いので、楽かもです。

また、認証情報はきちんとAWS Secrets Managerに保管してくれてそうです。

スクリーンショット 2025-08-31 14.49.14.png

PutMetricData

名前空間とメトリックス名が冗長な感じもしますが、以下のようにメトリックスを送信しています。

変数便利。

{
  "Namespace": "MyHome/Temperature",
  "MetricData": [
    {
      "MetricName": "RoomTemperature",
      "Value": "{% $temperature %}",
      "Dimensions": [
        {
          "Name": "Room",
          "Value": "{% $name %}"
        }
      ]
    }
  ]
}

Grafana on MacBook Container

AWSにはAmazon Managed Grafanaってサービスが存在しますが、コストの関係で今回はローカル環境で構築してみることにしました。

また今回は、dockerではなく、macOSで今後搭載予定のContainerで構築します。

containerインストーラ

まずはインストールから。

Homebrew、またはGithubのページからインストールします。

私が試したバージョンは0.4.1でした。

% container --version
container CLI version 0.4.1 (build: release, commit: 4ac18b5)

あと、使いそうなコマンドもまとめておきます。

用途 コマンド
コンテナの停止 container stop grafana
コンテナの破棄 container rm grafana
コンテナ内のターミナル操作 container exec -it grafana bash

Grafana構築

Grafanaは以下のコマンドで構築してみました。

% container run -d -p 3000:3000 --name=grafana \
--volume "$PWD/grafana-data:/var/lib/grafana" \
--volume "$HOME/.aws:/usr/share/grafana/.aws:ro" \
-e "AWS_PROFILE=xxxx" \
-e "AWS_DEFAULT_REGION=ap-northeast-1" \
grafana/grafana-enterprise

ホストマシンの$HOME/.aws/usr/share/grafana/.awsにコピーさせることで、ホストマシンのIAM Identity Centerで取得した一時的な認証情報を利用して、AWSにアクセスできる仕組みとしてみました。

うまく起動できれば、http://localost:3000でログイン画面が表示されるはず。

image.png

後は必要に応じて日本語にしておきます。

スクリーンショット 2025-09-01 4.18.48.png

CloudWatch連携

次にCloudWatchと連携してみます。

データソースからCloudwatchを選択します。

スクリーンショット 2025-09-01 4.22.07.png

各種設定をしていきます。

Authentication ProviderAWS SDK Defaultを選択しておきます。
自動的にマウントした/usr/share/grafana/.awsを見てくれて認証してくれるみたい。

image.png

Assume Roleでは、Grafanaが利用するロールを指定しておきます。
IAM Identity Centerの一時的な認証情報そのままでは強いadministrator権限があるためです。

付与するポリシーはマネージドのCloudWatchReadOnlyAccessのみです。

スクリーンショット 2025-09-01 4.32.17.png

Additional Settingでは、リージョンや、カスタムメトリックスの名前を指定しておきます。
特にカスタムメトリックスはここで指定しておかないと、ダッシュボード作成時に選択肢として表示されません。

image.png

最後に保存してテストを選択し、成功すればOKです!

image.png

後はダッシュボード作成時にCloudwatchのデータソースを選択し、namespaceからカスタムメトリックスを選択したりするだけです。

image.png

少し見た目もいじって、こんな感じになりました。
リビングの室温の遷移が見られるようになりましたねー。

image.png

なお、マネコンでみるとこんな感じ。

機械学習した期待値まで表示されていて、メトリックスの場合だと別にGrafana使わなくても良いですね。

image.png

まとめ

ということで、Grafana初体験でした。

今回は視覚化するだけでしたが、Nature Remo Cloud APIは機器の操作もできるので、室温に応じてエアコンの操作とかもできそうですね!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?