太陽光発電システムを Python で丸ごと監視!MPP Solar・JK BMS・Victron に対応した mpp-solar の使い方
太陽光発電システムを Python で丸ごと監視!MPP Solar・JK BMS・Victron に対応した mpp-solar の使い方
ひとことでいうと
mpp-solar は、太陽光発電システムで使われるインバーター(直流を交流に変換する装置)やバッテリー管理システムと、Python から直接やりとりするためのパッケージです。コマンドラインツール(CLI)として機器からリアルタイムデータを取得し、MQTT・MongoDB・PostgreSQL などさまざまな保存先にデータを送り込めます。MPP Solar・Voltronic・JK BMS・Victron など多数のメーカーの機器に対応しており、自宅の太陽光発電システムを自動で監視・記録したい DIY ユーザーからプロのエンジニアまで幅広く活用されています。「機器とソフトウェアをつなぐ橋渡し役」として、再生可能エネルギー分野のホームオートメーション構築に欠かせないツールです。
こんな人におすすめ
-
自宅や小屋でオフグリッド太陽光発電を楽しむ DIY ユーザー MPP Solar や Voltronic 製のインバーターを手元で制御・監視し、蓄電池の残量や充電状況を Python スクリプトから自動取得したい方に最適です。機器に特定のコマンドを送り、JSON・CSV 形式でレスポンスを受け取る仕組みがはじめから整っています。
-
Raspberry Pi や Linux サーバーで電力データを可視化したいエンジニア Grafana + InfluxDB や Prometheus との連携例が公式ドキュメント(
docs/MQTT_Influx_Grafana.md)に用意されており、シリアル・USB・Bluetooth 経由でデータを収集してダッシュボード化できます。 -
太陽光発電・蓄電システムの研究やプロトタイピングを行う技術者 コマンドライン一発で機器の内部ステータス(電圧・電流・温度・充放電モードなど)を取得し、データ解析のパイプラインに組み込む用途に向いています。プロトコルのリファレンス実装(動作する参考コード)としても参照価値があります。
インストール・使い方
Step 1: Python バージョンを確認する
mpp-solar のバージョン 0.16.0 以降は Python 3.10 以上が必要です。ターミナル(文字で命令を送る画面)を開き、以下を入力してください。コマンドはコピー&ペーストでかまいません。
python3 --version
# Python 3.10.x 以上と表示されればOKです
Python 3.9 以下と表示された場合は、先に Python を更新してください。
Step 2: pip でインストールする
pip(Python のパッケージ管理ツール)でインストールします。用途に合わせてオプションを選んでください。
# 最小構成(USB シリアル通信のみ)
pip install mppsolar
# Bluetooth(JK BMS など)を使う場合
pip install mppsolar[ble]
# MQTT・API サーバーを使う場合
pip install mppsolar[api]
# MongoDB に出力する場合
pip install mppsolar[mongo]
# PostgreSQL に出力する場合
pip install mppsolar[pgsql]
# Prometheus PushGateway を使う場合
pip install mppsolar[push]
# Linux で systemd デーモンとして動かす場合
pip install mppsolar[systemd]
[ble] や [api] のような記述は「追加機能のオプション」です。自分が使いたい機能だけを選んでインストールでき、後から追加することもできます。
Step 3: Docker で動かす(ハードウェアが繋がっている場合)
Docker(アプリを箱ごと動かす仕組み)を使う方法もあります。ホスト OS(普段使っているパソコンの OS)の環境を変えずに、クリーンな状態で実行できます。
docker pull jblance/mppsolar:latest
docker run --device=/dev/ttyUSB0 jblance/mppsolar:latest \
-p /dev/ttyUSB0 -P PI30 -c QPIGS
--device=/dev/ttyUSB0 は、USB シリアルで繋いだ機器をコンテナ内から使えるように渡すオプションです。
Step 4: 基本的なコマンドを実行する
# USB シリアル経由でインバーターのステータスを取得する
mpp-solar -p /dev/ttyUSB0 -P PI30 -c QPIGS
# 複数コマンドを同時に送る(セパレータは `#`、バージョン 0.16.0 以降)
mpp-solar -p /dev/ttyUSB0 -P PI30 -c QPIGS#QPIRI
# 使えるコマンドの一覧を表示する
mpp-solar --listCommands
# 使えるプロトコルの一覧を表示する
mpp-solar --listProtocols
-p は接続先のデバイスパス(機器の場所)、-P はプロトコル(通信の決まりごと)、-c は送るコマンドの指定です。--listCommands や --listProtocols はハードウェアがなくても実行できます。
動かしてみた
Docker 環境(Python 3.12.13)で pip install mppsolar を実行したところ、パッケージのインストールに問題なく成功しました。mpp-solar の要件は Python 3.10 以上ですが、最新の Python 3.12 系でも互換性があることを確認できました。
$ python3 --version
Python 3.12.13
$ pip install mppsolar
# インストール成功
パッケージの内部構成を確認すると、docker/powermon.yaml という設定ファイルが同梱されており、Docker Compose を使った電力監視デーモン(powermon)をすぐに立ち上げられるようになっています。また utils/ ディレクトリには Bluetooth Low Energy(BLE)接続を行うスクリプト(ble-chars.py・victron-ble.py・jk.py)や MQTT 送信ユーティリティ(mqtt_pub.py)が含まれており、シリアル・Bluetooth・ネットワークと多様な接続形態をカバーする設計になっていることもわかりました。
デモについて
mpp-solar は USB シリアル・Bluetooth・VE Direct などの物理的なハードウェア接続を前提とした CLI ツールです。そのため、ブラウザ上で動かすインタラクティブなデモは提供されていません。実際の動作確認には MPP Solar 互換インバーターや JK BMS などの実機が必要になります。
ただし、機器がなくても --listCommands や --listProtocols オプションでサポートされているコマンドとプロトコルの一覧を確認することはできます。対応機器の調査や通信仕様の把握だけであれば、ハードウェアなしで始めることが可能です。
実践のコツ — はじめの一歩
すぐに試せる行動を中心にまとめました。
- まず
--listProtocolsで対応プロトコルを確認する: 手持ちの機器が PI30 か別のプロトコルかを先に特定すると、コマンドのミスを減らせます。 --listCommandsでコマンド一覧を眺める: 機器から取得できるデータの種類がわかります。QPIGS(ゼネラルインバーターステータス)は多くのモデルで使える万能コマンドです。- 最初は最小構成(
pip install mppsolar)でインストールする: Bluetooth や MQTT などの追加オプションは後から足せます。まずシリアル通信だけで動作確認するのが近道です。 powermon.yamlをテンプレートとして活用する:docker/powermon.yamlには接続先・プロトコル・出力先の記述例が揃っています。自分の環境に合わせて値を書き換えるだけで動き始めます。- Docker で試すと環境を汚さない: インストールや設定に失敗しても、コンテナを削除すれば元に戻ります。初めて試す場合は Docker 経由が安心です。
- Raspberry Pi に systemd で組み込む:
pip install mppsolar[systemd]を使うと Linux サービスとして自動起動できます。Raspberry Pi などの常時稼働端末への組み込みに特に便利です。
活用アイデア
- Grafana ダッシュボード連携: MQTT → InfluxDB → Grafana のパイプラインを組み、インバーターの電圧・電流・蓄電残量をリアルタイムグラフで表示します。公式ドキュメント
docs/MQTT_Influx_Grafana.mdに詳しい手順が掲載されています。 - JK BMS の Bluetooth 監視:
pip install mppsolar[ble]で Bluetooth 対応版をインストールし、JK BMS の充放電状態やセル電圧バランスを定期取得してアラートを自動送信する仕組みを作れます。 - PostgreSQL への長期データ蓄積:
pip install mppsolar[pgsql]で取得データを PostgreSQL に蓄積し、長期的な発電量・消費量のトレンドを SQL で集計・分析できます。 - Docker Compose で監視スタックをチームに配布:
powermon.yamlと Docker Compose を組み合わせて監視スタック全体をコンテナ化し、再現性のある環境をチームで共有できます。 - Prometheus + Alertmanager でしきい値アラート:
pip install mppsolar[push]で Prometheus PushGateway にメトリクスを送り込み、蓄電残量が一定を下回ったら通知する自動アラートを設定できます。 - Python スクリプトへの組み込み: mpp-solar のコマンドを Python の
subprocessから呼び出し、取得データを独自のスクリプトで加工・保存する自作監視ツールを作ることも可能です。
用語とポイント解説
インバーター
太陽電池パネルや蓄電池からの直流(DC)を、家庭で使える交流(AC)に変換する装置です。かんたんに言うと「太陽光の電気を普通のコンセントで使えるように変換する箱」です。mpp-solar は MPP Solar・Voltronic など多数のメーカーのインバーターに対応しており、ステータス取得からコマンド送信まで行えます。
BMS(Battery Management System)
リチウムイオン電池などの蓄電池の電圧・温度・充放電を管理する回路やソフトウェアのことです。かんたんに言うと「蓄電池の健康状態を見守る番人」です。過充電・過放電を防いで電池を安全に長持ちさせる重要な役割を担います。mpp-solar は JK BMS・Daly BMS などに対応しています。
VE Direct
Victron Energy 製デバイスが使う独自のシリアル通信プロトコル(通信の決まりごと)です。かんたんに言うと「Victron の機器と話すための専用の言語」です。Victron SmartShunt 500A などをシリアルケーブルで mpp-solar に繋ぐと、電流・電圧データをリアルタイムで取得できます。
MQTT
IoT(モノのインターネット)デバイス間のデータ転送に広く使われる、軽量なメッセージング方式です。かんたんに言うと「センサーやデバイスからデータを受け取って他のアプリに届ける仕組み」です。MQTT ブローカー(仲介サーバー)にデータを送れば、複数のアプリが同じデータをリアルタイムで受け取れます。
PI30
MPP Solar インバーター向けの通信プロトコル識別子(Protocol ID 30)です。かんたんに言うと「この機器と話すための通信ルールの番号」です。mpp-solar のコマンドで -P PI30 と指定することで、対象機器に合ったプロトコルで通信できます。機器のモデルによって使うプロトコルが異なるため、--listProtocols で事前に確認するとよいでしょう。
powermon
mpp-solar に同梱されている電力監視デーモン(バックグラウンドで常時動き続けるプログラム)です。かんたんに言うと「設定ファイルを読んで自動的にデータを集め続けてくれるサービス」です。docker/powermon.yaml に接続先・プロトコル・出力先を書くだけで、定期ポーリング(一定間隔でのデータ取得)を自動化できます。
オフグリッド
電力会社の送電網に接続せず、太陽光発電と蓄電池だけで電力を自給自足するシステム形態です。かんたんに言うと「電力会社に頼らず自分で電気を作って使う暮らし方」です。山小屋・農場・キャンプ施設など、送電線が届きにくい場所でも電力を確保できます。mpp-solar はこうしたオフグリッド環境の機器監視に特に活躍します。
CLI(コマンドラインインターフェース)
ターミナル(文字で命令を入力する画面)からコマンドを打って操作するツールの形式です。かんたんに言うと「マウスを使わず文字で命令するタイプのプログラム」です。mpp-solar は CLI ツールとして提供されており、mpp-solar -p /dev/ttyUSB0 -P PI30 -c QPIGS のようにコマンドを打つだけで機器にアクセスできます。
Docker
アプリとその動作に必要な環境をまとめて「コンテナ」という箱に入れて動かす仕組みです。かんたんに言うと「どのパソコンでも同じ環境でアプリを動かせる魔法の箱」です。mpp-solar の公式 Docker イメージ(jblance/mppsolar:latest)を使うと、Python のインストールや依存関係の設定をほぼスキップしてすぐに試せます。
自宅の太陽光発電システムをより深く把握したい方から、データ分析基盤を整えたいエンジニアまで、mpp-solar はさまざまな場面で頼りになるツールです。ぜひ Grafana ダッシュボードでのリアルタイム電力監視や、Raspberry Pi を使ったオフグリッドシステムの自動管理などに活用してみてはいかがでしょうか。