Categorygithub.com/hnw/go-smartmeter
repositorypackage
0.0.0-20200515154420-789ba447f197
Repository: https://github.com/hnw/go-smartmeter.git
Documentation: pkg.go.dev

# README

go-smartmeter

Wi-SUNモジュールを使って電力スマートメーターにアクセスするGoライブラリです。

特徴

  • 致命的エラーとリトライ可能エラーを区別して可能ならリトライする(Wi-SUNの通信は不安定なので実用上はリトライ実装が重要)
  • SKSCANで指定チャンネルだけスキャンできるようにしたので、チャンネルがわかっていれば再スキャンが高速
  • ECHONET Liteの複数プロパティを1コマンドにまとめられるので、920MHz帯の節約になる
  • Bルート専用モジュールとデュアルスタックモジュール両対応
  • 実行ファイルが外部ライブラリ依存のない小さいバイナリになるので、Raspberry Piなど低スペック環境でも動作させやすい

サンプルコード

次のようなコードでスマートメーターの瞬時電力計測値にアクセスできます。(Wi-SUNモジュールの入手とBルートサービスの申し込みは必須です)

package main

import (
	"fmt"

	smartmeter "github.com/hnw/go-smartmeter"
)

func main() {
	dev, err := smartmeter.Open("/dev/ttyACM0",
		smartmeter.DualStackSK(), // Bルート専用モジュールを使う場合はコメントアウト
		smartmeter.ID("00000000000000000000000000000000"), // Bルート認証ID
		smartmeter.Password("AB0123456789"),               // パスワード
		smartmeter.Channel("33"))                          // チャンネル。各環境でScan()で取得した値に書き換える。

	if err != nil {
		fmt.Printf("%+v", err)
		return
	}

	err = dev.Authenticate()
	if err != nil {
		fmt.Printf("%+v\n", err)
		return
	}

	request := smartmeter.NewFrame(smartmeter.LvSmartElectricEnergyMeter, smartmeter.Get, []*smartmeter.Property{
		smartmeter.NewProperty(smartmeter.LvSmartElectricEnergyMeter_InstantaneousElectricPower, nil),
	})
	response, err = dev.QueryEchonetLite(request, smartmeter.Retry(3))
	if err != nil {
		fmt.Printf("%+v\n", err)
		return
	}

	for _, p := range response.Properties {
		fmt.Print(p.Desc())
	}
}

これを実行すると、次のように自宅の消費電力がわかります。

Instantaneous Electric Power: 389.000000 [W]

examples/以下に利用例がありますので参考にしてください。