This page looks best with JavaScript enabled

GO言語でNature Remo Eのデータを取得するパッケージを作った

 ·   ·  ☕ 7 min read  ·  ✍️ Reeve
    🏷️

最近、家の電気使用量などを計測できる機器「Nature Remo E lite」を購入してみた。
Nature Remo E liteでは、REST APIによりデータを取得することができるが、Go言語を使ってデータを取得するパッケージを作成してみた。
このパッケージの使い方について紹介したい。

この記事の内容

  • Nature Remo E liteとは?
  • Nature Remo E liteの初期設定
  • Go言語でNature Remo E liteからデータを取得する「go-remoe」

Nature Remo E liteとは?

Nature Remo E liteとは、Nature株式会社が最近(?)発売した商品で、家の電力メータからデータを取得できるIoT機器。
また、発電設備を持っている人のための上位機種であるNature Remo Eも存在する。


元々、Nature株式会社は「スマート赤外線リモコン」と呼ばれる、家電操作の自動化デバイスを販売している会社。
私も発売時にクラウドファンディングで購入し、利用している。
外出先からスマートフォンでエアコンを操作できたり、部屋の気温によってエアコンを操作できたり、非常に便利。
(エアコン以外も操作できるけど、結局エアコンの操作が一番使ってる)


話を戻すが、Nature Remo E liteはこのようにコンセントに指すだけで使える。

Nature Remo E liteの写真

なんとも不思議だが、これだけで電力メータ(スマートメータ)からデータを取得できる。
ただし、条件があり、家の電力メータがスマートメータになっている必要がある。
自宅の電力メータがスマートメータであるかを確認する方法は簡単で、電力メータに円盤みたいなくるくる回るパーツがついているかどうかを確認すれば良い。
くるくる回っていたらスマートメータではなく、円盤がついていないものはスマートメータである。
私の家は、すでにスマートメータになっていた。

ちなみにスマートメータへの置き換えは順次進んでおり、2024年までにはすべての電力メータがスマートメータ化する予定らしい。
また、お願いすると優先的に交換工事を行ってくれる他、電力自由化で他の電気会社に乗り換える場合も変えてくれるとのこと。
まだスマートメータ化が行われておらず、Nature Remo E liteを使いたいという方は検討してみると良いかも。
従来のアナログ式の電力メータの場合、電気会社の人が月に1回メータを確認する必要があるが、スマートメータだとインターネット経由で電気会社がデータを集められる。
要するにコスト削減のために、スマートメータ化を進めているということだ。

そして、スマートメータにはデータの通信経路がいくつか用意されており、電力会社や関連会社との間の通信である「Aルート」「Cルート」の他に利用者との間の通信である「Bルート」というものがある。
Nature Remo E liteでは、これを使用する。
このBルートの通信は「Wi-SUN」という無線通信規格を使用しており、Nature Remo E liteとスマートメータ間もこの規格で通信している模様。
(そのため、なるべくスマートメータに近い、玄関などに設置しろ、とマニュアルに書いてあった)

Nature Remo E liteの初期設定

ここではあまり詳しくは説明しないが、初期設定として以下の2ステップを行う必要がある。

  • Bルートサービスの申し込み
  • Nature Remo E lite自体の初期設定
  • APIのアクセストークン発行

Bルートサービスの申し込み

まず、スマートメータのBルートサービスを申し込む必要がある。
そして、これが一番時間かかるところ。
私の場合は2〜3週間程度かかった覚えがある。
発行手数料などはかからないので、少しでもNature Remo E liteを使ってみたいと思っている人は事前に申し込んでおいたほうが良い。
申し込みの手順は電力会社などによって異なるが、このサイトが参考になる。


Nature Remo E lite自体の初期設定

次に、Nature Remo E lite自体の初期設定を行う。
本体をコンセントに接続し、Nature Remoアプリから初期設定を行う。
このとき、私の場合はなぜかBluetoothがなかなか繋がらないという問題が発生した。
スマートフォンの再起動とNature Remo E liteの再起動を行ったところ、無事接続できた。
詳細は、このサイトがわかりやすい。


設定が完了すると、アプリ上でこのようにリアルタイムの消費電力や一定期間のグラフが見れるようになる。

Nature Remoアプリ

APIのアクセストークン発行

アプリだけでも情報は確認できるが、せっかくならこの情報を活用したい。
Nature Remo E liteはREST APIによるデータ取得に対応しており、そのためにはAPIのアクセストークンを発行する必要がある。
アクセストークンの取得はこちらから行える。


設定は難しくないので直感的にわかると思うが、わからない場合はこのサイトを参考にすると良い。


以下のコマンドを実行し、JSON形式のデータが返ってくることが確認できればOK。

1
$ curl -X GET "https://api.nature.global/1/appliances" -H "Authorization: Bearer [アクセストークン]"

Go言語でNature Remo E liteからデータを取得する「go-remoe」

curlで取得できることは確認できたが、プログラミング言語から呼び出せた方が色々と便利。
ネット上で調べるとPythonでデータ取得する例などは見つけたが、GO言語で書いている例は見当たらなかったので、GO言語用のパッケージを作成してみた。
以下のリポジトリにて公開している。
まだ、基礎的な関数しか作成していないが、必要があれば今後拡張したい。


また、GoDocは以下のページで確認できる。
あまりちゃんと書いていないが、どのような構造体や関数があるかなどは確認できると思う。


では、簡単に使い方を説明する。
呼び出すには、以下のimport文を記述する。

1
import "github.com/reeve0930/go-remoe"

まず、APIを呼び出すためのクライアントを定義する。

1
client := remoe.NewClient("ここにREMOのアクセストークンを記述")

情報を取得するには、GetRawData関数を呼び出す。

1
data, err := client.GetRawData()

取得したdataは以下のRawData構造体のスライスとなる。
スマートメータが複数ある場合は、複数個取得される。

1
2
3
4
5
6
7
8
9
type RawData struct {
    ModelID                                  string
    Coefficient                              int
    CumulativeElectricEnergyEffectiveDigits  int
    CumulativeElectricEnergyUnit             int
    NormalDirectionCumulativeElectricEnergy  int
    ReverseDirectionCumulativeElectricEnergy int
    MeasuredInstantaneous                    int
}

取得した各要素は以下のものを示している。

  • ModelID : スマートメータのID
  • Coefficient : 係数
  • CumulativeElectricEnergyEffectiveDigits : 積算電力量有効桁数
  • CumulativeElectricEnergyUnit : 積算電力量単位
  • NormalDirectionCumulativeElectricEnergy : 積算電力量計測値(正方向)
  • ReverseDirectionCumulativeElectricEnergy : 積算電力量計測値(逆方向)
  • MeasuredInstantaneous : 瞬時電力計測値

このうち、直接使える値は「MeasuredInstantaneous」くらいである。
「MeasuredInstantaneous」は取得した瞬間の電力計測値で単位は[W]である。
他の要素については、以下の公式ドキュメントが非常にわかりやすいので、一読をオススメする。


ここを読んでいただけるとわかると思うが、一定期間に使用した電力量を計測するのは結構面倒である。
ということで、これを計測する関数も作成した。
dataに格納された情報の1つ目を使って算出する例を示す。
(スマートメータが複数台ある場合は、2つ目以降も同様である。)

1
2
3
4
5
6
7
data, err := client.GetRawData()
p0 := remoe.GetPowerCunsumption(data[0])

time.Sleep(1 * time.Hour) //例えば、一時間の消費電力量

data, err := client.GetRawData()
p := remoe.GetPowerCunsumptionDiff(data[0], p0)

GetPowerCunsumption関数で、その時刻での積算電力量(単位は[kWh])を算出できる。
GetPowerCunsumptionDiff関数は、取得したRawData構造体の他、計算の起点となる積算電力量を引数として与える。
この差分を計算することで、この期間の消費電力量を算出する。

直接引き算しても良いのではないか?、と思うかもしれないが、これはスマートメータの積算電力量計測値がループする仕組みになっているからである。
この関数では、値がオーバーフローしてループした場合でも正しく値を算出できるようにしている。
(アナログ式の電力メータの名残で、上限値も10進数ベースになっているのがおもしろい。)

まとめ

今回はGO言語で作成したNature Remo E lite用のパッケージ「go-remoe」について紹介した。
基本的な機能しか実装していないので、もし必要な機能などがあれば、GitHubのissueにあげてもらえれば対応するかもしれない。

Share on

Reeve
WRITTEN BY
Reeve
Researcher/Engineer