水澄net.com
Intelの趣味のHP
topサーバ・ネットワーク>Bルートで電力を取得してGrafanaで監視する
2025年05月21日作成

Bルートで電力を取得してGrafanaで監視する

1.はじめに
2.Bルートを利用するのに必要となるもの
3.keilogのセットアップ
4.influxdbの導入
5.telegrafのインストールと設定
6.データ取り込み結果の確認
7.Grafanaの導入と連携

1.はじめに

Bルートで電力値を取得して表示するといった要望に応える記事があまりにも少ないので一つ書いてみようと思います。
なお、大まかな流れについてはこちらのブログと同様ですので細かい操作等については端折りながら、 掻い摘んで解説していこうと思います。
今回利用するソフトウェア・プログラムは以下のものです。
・keilog https://github.com/kjmat/keilog Bルートで情報を取得しCSVで保存する
・telegraf CSVファイルをもとにDBへデータを投入する
・influxdb データを蓄えるDB
・Grafana DBからグラフ表示する

2.Bルートを利用するのに必要となるもの

・BルートのID/パスワード
 利用している電力エリアの一般送配電会社(東京電力エリアなら東京電力パワーグリッド)から、BルートのIDとパスワードを発行してもらいいます。
 なお、発行には供給地点特定番号が必要となります。
 検針票や請求書に記載されていますので確認してください。
 窓口に問い合わせる必要がある場合もあります。
 ※enでんきは問い合わせ窓口に電話で確認するしかなかったです。
・Bルート通信デバイス
 Wi-SUN規格に対応したデバイスが必要です。Amazonなんかでも売っていますので、探して見てください。
 ちなみに私はこれを使っています。
 HEMS用 Wi-SUNモジュール, Wi-SUN Route-B 専用 RL7023 Stick-D/IPS
・サーバとして利用するPC
 適当なので良いと思います。

3.keilogのセットアップ

keilogを利用するには前提としてpython3の各パッケージを導入する必要があります。

$ sudo apt install python3 python3-serial python3-requests

次にkeilogを動作テストさせるディレクトリを作成します。
また、権限はスクリプトを実行するユーザにしておきます。※今回は”misumi”とします。
$ sudo mkdir /script
$ sudo chown misumi:misumi /script/

続いて、keilogをダウンロードします。
$ cd /script/
$ git clone https://github.com/kjmat/keilog.git
$ cd ./keilog/

これで必要なファイルの入手が完了です。
続いて設定を作っていきますが、その前にデバイス名を確認します。
PCにWi-SUNデバイスを繋いで以下コマンドを入力し、表示された”usb-FTDI_~”というデバイス名を控えておきます。
$ ls /dev/serial/by-id/

スクリプトを実行するユーザ”misumi”を”dialout”グループに追加することで、Wi-SUNデバイスのアクセス権を付与します。
$ groups misumi
misumi : misumi sudo audio video plugdev render
$ sudo usermod -G misumi,dialout,sudo,audio,video,plugdev,render misumi

今回はBルート用のテンプレートをコピーして設定ファイルを作っていきます。
$ cp -p keiconf_broute.py keiconf.py
$ vi keiconf.py

以下のように変更します。
 - from keilib.broute   import BrouteReader
+ from keilib.broute import BrouteReader, WiSunRL7023

- fname_base = 'mylogfile'
+ fname_base = 'smartmeter-log'

- broute_port = '/dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_xxxxxxxx-if00-port0'
+ broute_port = '/dev/serial/by-id/[[事前に確認したWi-SUNデバイス名]]'

- broute_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
+ broute_id = '[[BルートID]]'

- broute_pwd = 'xxxxxxxxxxxx'
+ broute_pwd = '[[Bルートパスワード]]'

デバッグモードで動作確認します。”DEBUG - OK”と出ればOKです。
$ DEBUG=1 python3 kei.py

以下のスクリプトを"logcleaner.sh"という名前で保存します。
#!/bin/bash
# move old file (24 hours)
find /script/keilog/ -maxdepth 1 -type f -name "????????-smartmeter-log.txt" -mmin +1440 | xargs -r -IXXX mv XXX /script/keilog/archive/
find /script/keilog/ -maxdepth 1 -type f -name "sum????????-smartmeter-log.txt" -mmin +1440 | xargs -r -IXXX mv XXX /script/keilog/archive/
# compress old file
TARGET=(/script/keilog/archive/*smartmeter-log.txt); if [ -f $TARGET ]; then gzip /script/keilog/archive/*smartmeter-log.txt; fi
# delete old file (30 days)
find /script/keilog/archive/ -maxdepth 1 -type f -name "*-smartmeter-log.txt.gz" -mtime +30 | xargs -r rm

続いて自動起動するようにcronの設定をしていきます。
$ crontab -e

#以下の内容を追記する
@reboot cd /script/keilog; python3 kei.py &
0 1 * * * /script/keilog/logcleaner.sh

この後は一度再起動をかけた後に動作状況を確認します。以下コマンド投入し例示しているような表示が出てくればOKです。
$ ps -ef | grep kei.py
user 780 1 0 5月19 ? 00:01:51 python3 kei.py

4.influxdbの導入

DBとなるinfluxdbを導入します。
手順については後述するtelegrafのドキュメントに記載があるようですので、詳細は割愛し投入コマンドのみ掲載します。
まずは事前に"curl"と"gpg"をインストールします。環境によっては導入済みとなっている場合もあります。

$ sudo apt install curl gpg

続いてはリポジトリの追加です。※以下の内容をすべてコピペして貼り付け&Enterで行けると思います。
curl --silent --location -O \
https://repos.influxdata.com/influxdata-archive.key \
&& echo "943666881a1b8d9b849b74caebf02d3465d6beb716510d86a39f6c8e8dac7515 influxdata-archive.key" \
| sha256sum -c - && cat influxdata-archive.key \
| gpg --dearmor \
| sudo tee /etc/apt/trusted.gpg.d/influxdata-archive.gpg > /dev/null \
&& echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive.gpg] https://repos.influxdata.com/debian stable main' \
| sudo tee /etc/apt/sources.list.d/influxdata.list
sudo apt-get update

Influxdbのインストールと起動
$ sudo apt install influxdb
$ sudo systemctl enable influxdb
$ sudo systemctl start influxdb

起動後はWebGUIで操作します。
"http://[[サーバのIPアドレス]]:8086"にブラウザでアクセスし、ユーザ名、パスワード、Organization名、Bucket名はそれぞれ任意のものを設定します。
なお、この値は後ほど使うのでメモしておきます。
続いて、APIトークンが表示されますので控えておきます。※二度と確認できなくなるので確実に保管してください。

5.telegrafのインストールと設定

CSVで生成される電力データをDBに放り込むソフトウェアのteregrafをインストールします。
前述の4章でリポジトリを追加しているので、以下のコマンドのみでインストールできます。

$ sudo apt install telegraf

続いてtelegrafの設定をしていきます。 以下のコマンドでテンプレートを出力しそれをもとに設定を作りこんでいきます。
$ cd /var/tmp/
$ telegraf config --input-filter file --output-filter influxdb_v2 --aggregator-filter hoge --processor-filter hoge --secretstore-filter hoge > telegraf.conf

これをもとに設定を作りこんでいきます。 設定例は以下に提示します。
$ sudo vi ./telegraf.conf

[global_tags]
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 100000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = "0s"
[[outputs.influxdb_v2]]
urls = ["http://127.0.0.1:8086"]
token = "[[*******事前に控えたAPIトークン****************]]"
organization = "[[控えたOrganization名]]"
bucket = "[[控えたBucket名]]"
[[inputs.file]]
name_override = "BRoute"
files = ["/script/keilog/????????-smartmeter-log.txt"]
data_format = "csv"
csv_header_row_count = 0
csv_column_names = ["date","unitid","epc","edt","dataid"]
csv_column_types = ["string","string","string","float","string"]
csv_skip_rows = 0
csv_metadata_rows = 0
csv_metadata_separators = [":", "="]
csv_metadata_trim_set = ""
csv_skip_columns = 0
csv_delimiter = ","
csv_comment = ""
csv_trim_space = false
csv_tag_columns = ["unitid","epc","dataid"]
csv_tag_overwrite = false
csv_measurement_column = ""
csv_timestamp_column = "date"
csv_timestamp_format = "2006/01/02 15:04:05"
csv_timezone = "Asia/Tokyo"
csv_skip_values = []
csv_skip_errors = false

主要な項目について解説すると以下のようになります。
#取り込むファイルを指定します。
files = ["/script/keilog/????????-smartmeter-log.txt"]
#取得したデータの各項目に名前を付けます。
csv_column_names = ["date","unitid","epc","edt","dataid"]
#取得したデータの各項目の型を指定します。
csv_column_types = ["string","string","string","float","string"]
#分類するタグとして利用する項目を名前で指定します。
csv_tag_columns = ["unitid","epc","dataid"]
#タイムスタンプとして利用する項目を名前で指定します。
csv_timestamp_column = "date"
#日付のフォーマットを指定します。なお日付や時間はこの値にする作法のようです。
csv_timestamp_format = "2006/01/02 15:04:05"
#タイムゾーンを指定します。
csv_timezone = "Asia/Tokyo"

設定が完了したら設定ファイルを本来の場所に設置します。
$ sudo cp telegraf.conf /etc/telegraf/

telegrafの起動と自動起動の設定
$ sudo systemctl enable telegraf
$ sudo systemctl start telegraf

6.データ取り込み結果の確認

influxdb上でうまく取り込めているか確認します。
influxdbのWebGUIにログインし確認します。
左側メニューから Data Explorerを開いて以下のような表示ができていればOKです。
グラフが出ない場合は、”SUBMIT”を押してデータを更新して見てください。
influxbd

7.Grafanaの導入と連携

公式の手順に沿ってインストールします。 今回導入するのは安定版かつOSS版のものです。

$sudo apt-get install -y apt-transport-https software-properties-common wget
$sudo mkdir -p /etc/apt/keyrings/
$wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
$echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
$sudo apt-get update
$sudo apt-get install grafana

続いてGrafanaの起動と自動起動の有効化を設定します。
$ sudo systemctl enable grafana-server
$ sudo systemctl start grafana-server

Grafanaの起動後はWebGUIで操作します。
"http://[[サーバのIPアドレス]]:3000"にブラウザでアクセスしログインし、初期パスワードを変更します。
初期のID/PWはadmin/adminです。
続いてデータ連携の設定をします。
左のメニューからConnectionsを選択し、InfluxDBを選択します。
influxbd
各項目を入力します。
・Name:任意の値を入力い、Defaultスイッチをオンにします。
・Query language:Flux
・URL:http://localhost:8086 ※環境に応じて設定してください
・Auth:全部オフ
・Organization:控えておいたOrganization名
・Token:控えておいたAPIトークン
・Default bucket:控えておいたBucket名

左のメニューからConnectionsから、Dashboards を選択し”New dashboard”を開きます。
Add visualization で表示アイテムの追加をします。
Select data source で InfluxDB を選択するとQuery 欄が出てきます。
ここで、InfluxDBのWebGUIに戻り”QUERY BUILDER”をクリックし、表示されたクエリをコピーし、
GrafanaのQuery 欄に貼り付けます。
influxbd
後は表示の設定をお好みに設定し、”save dahboard”で保存します。
これで表示できていれば完了です。
influxbd

以上
<前へ戻る

《参考ページ》

・Hatena Blog - スマートメーターから消費電力データを取得してグラフ化する ①概要編
https://suzu-ha.com/entry/2024/01/21/151655
・Github - スマートメーター&計測ロガー
https://github.com/kjmat/keilog
・InfluxDB
https://www.influxdata.com/products/influxdb/
・Grafana
https://grafana.com/oss/grafana/