$name

日常の記録から技術メモまで

発電・電力使用状況可視化プロジェクト「helioview」をアップデートしました

以前ブログ記事でご紹介しました、発電・電力使用状況可視化プロジェクト「helioview」をアップデートしました。

機能や使い方、設定ファイルの記述などに変更点はありませんが、セットアップや運用、実装面で改善を行ったので紹介します。

Node.js製データ収集ツールを「heliostat」と命名

helioviewは、以下の3種類のツールで構成されています。

- helioview (Docker Compose プロジェクト)
  - heliostat (自作のデータ収集ツール)
  - InfluxDB (時系列データベース)
  - Grafana (データ可視化ツール)

従来は、heliostatに名前が与えられておらず、「データ収集ツール」などと呼称しておりましたが、固有名詞が与えられていた方が便利なのでこのたび命名しました。

heliostatは英語で「太陽を追尾する装置」といった意味合いがあります。オムロン製の太陽光発電計測ユニットに対してポーリングを行い、データを収集するツールであるため、このような名前を与えました。

リポジトリ名に変更はありません。Composeプロジェクト全体を「helioview」と呼んでいます。

InfluxDBの自動コンフィギュレーション

今回のアップデートによる目玉機能は「自動コンフィギュレーション」です。

以前は、helioviewを初回起動する前に、InfluxDBコンテナを先に立ちあげて、InfluxDBのWebUIを通じて、OrganizationやBucketの設定を手動で行っておく必要がありました。手作業によるInfluxDBの設定をユーザーに要求するのは親切な設計ではありませんでした。

今回のアップデートで、helioviewの起動時に、使用するOrganizationやBucketがあるかを前もって確認し、存在しなければこれらを自動生成するようになりました。ユーザー自身によるOrganizationやBucketの設定が不要になりました。

このアップデートは、すでに本プロジェクトを使用している既存のユーザーには影響ありません。

ログの表示改善

ログの重要度を「ERROR」「WARN」「INFO」の3段階に分けて表示するようにし、ログの視認性や検索性を向上させました。

改善されたエラーログ表示

モジュール分割

今までindex.jsに固めてモノリシックに実装をしていましたが、今後の拡張性や保守性を考え、モジュール分割を取り入れました。

以下のようにモジュール分割をしています。

- src/
  - database.js : データベースへのコネクションを扱うクラス
  - index.js : プログラム全体の実行の流れを制御するモジュール
  - init.js : データベースの初期化関数を実装するモジュール
  - power-metrics.js : データの取得とDBへの格納を実装するモジュール

データベースへのコネクションは、複数のモジュールから利用します。データベースへのコネクションはシングルトンなクラスとして実装し、同じコネクションが複数存在しないよう工夫しました。データベースの操作はメソッドとして抽象化しています。

今後の見通し

これまで、電圧・電流・電力などリアルタイムに変化するデータを扱ってきましたが、電力量についても、GrafanaによるリッチなUIを通じて分かりやすく可視化出来たら良いと考えるようになりました。電力量の収集機能も追加したいです。

また、InfluxDBに関しては設定自動化ができた一方で、Grafanaについては手動設定に頼る状態が続いているので、こちらも設定を簡略化・自動化できたらいいなと模索しています。

リポジトリへのリンク

今後も随時更新するので、オムロン製の太陽光発電計測ユニットをお持ちの方はぜひお試しください。

github.com