【ソーラー 蓄電状態を可視化】EPEVERチャーコンをハックしてソーラー発電データを保存+グラフ表示

本日は万人向けではなく、ソーラー発電している方でEPEVERのチャージコントローラーを使っている方用の内容になります。

最近はこういったマニアックな記事になってしまってすみません。こういったセンシングが集まって総合的な自宅Iotが完成するので必要なところだけ参考にしていただけると嬉しいです。

ソーラー発電は、自分で電気を作っている感覚が面白くてハマってます。それと発電した電力でラズパイやUSB機器を使っているので少し得した気分、だけど実際にはバッテリーがすぐ空になって充電器で充電している始末なので、窓際ソーラー発電はあまり発電せず・・・役に立たないお遊び的なものでした。

現在は賃貸マンションで窓ガラス内側にソーラーパネルを設置しているだけなのであまり発電はされませんが、屋根の上など本格的にソーラー発電されている場合はかなり発電できる気がします。ソーラーパネルが10枚くらいあれば家の電力はまかなえそうな気がします。今度引っ越す時は「ぽつんと一軒家」的な庭が広いところでソーラーパネルを並べてみたい気がしますが・・・家の管理(庭の手入れや部屋掃除)が大変そうなのと古い家だと怖そうで、やっぱり賃貸マンションが楽だし一番かなぁ?

でも賃貸マンションだと窓際に設置するしかなく、直角にソーラーパネルが立っているから夏は太陽が真上に来てしまっているので秋・冬・春が窓際ソーラー発電の本領発揮かもしれません。最初(春)にソーラーパネルを設置した時はもっと発電していたのですが、最近は太陽が真上に来てしまったのかソーラーパネルを3枚に増設したけど発電量が以前より減った気がする。

広い庭付きの一軒家はいいけど管理が大変だし新しめの家は賃料が高そう、賃貸マンションだと庭がないのでソーラーパネルは窓際に設置するしかない、両方デメリットがあるので持ち家一軒家でないかぎりはソーラー発電はあまり向かなそうですね。持ち家一軒家は違う意味できついし引っ越せないのでストレスになって自分には無理です。

ということで現状はあまり役にたたず、将来使えるようになれば今までの経験が活かせる気がしている窓際ソーラー発電ですが、今回は以下のように発電量やソーラーパネルとバッテリーの電圧・電流を取得してInfluxDBに保存・Grafanaでグラフ表示させるところまで書いていきます。

ソーラー InfluxDB Grafana

接続方法は、BLE(Bluetooth Law Energy)接続のEPEVER BLEでハックしようとしましたが、できなかったのでLANを改造してUSB接続のEPEVERチャージコントローラーとラズパイを有線接続してハックしました。

Bluetooth接続のEPEVER BLEは現状解析できず

Bluetooth接続するEPEVERのBLE機器↓をebayで買ってハックしようとして挑戦してみましたが・・・BLEを解析できず力不足であえなく敗退、現状はうまく取得できていません。

なので今回は有線のLANケーブルを改造してUSBでラズパイに接続してデータを取得していきます。

ソーラー発電 データをアプリで表示

ハックはできませんでしたが、EPEVER BLEを使ってアプリで接続すると表示することはできます。アプリはEPEVERのものではなさそうなアプリで操作できました。↓

他のEPEVER純正?のようなChargeController(Sealed)やChargeController(Li)アプリも試してみましたが、同じような表示ですがなぜかBLE接続できなかった。

ソーラー発電の発電状況をアプリで表示

以下のように発電の状況を表示してくれます。まぁ、一応みれますが今の状況しか表示できず過去のグラフやログなど残ってなさそうなのであまり使う機会はなさそうです。

ソーラーパネルに逆流防止ダイオードを取り付けた

ソーラー発電の記事を見ていただいた方に教えてもらったので逆流防止ダイオードを買ってソーラパネル3枚につなげました。

MC4 In-line Fuse Connector 10A 15A PV Solar Photovoltaic Joint Diode Connector

3個で1000円くらいで買った。

逆流防止ダイオード

MC4のプラグの中に大きめのダイオードが入っていました。

逆流防止ダイオード

これで少しは発電量が上がるかと思いましたが・・・あまり変わらず。ただ、ソーラーパネルに過電流が逆流しないという安心感はあるのでつけておきます。

逆流防止ダイオード

プラス側につけてみました。これで電流が逆流しなくなりそうなので一安心です。

EPEVERチャーコンからソーラーデータを取得

それでは本題のEPEVERチャージコントローラーからLANケーブル→USB変換アダプタを通してラズパイに接続してデータをハックしてみましょう。

こちらの動画を参考にLANケーブルにUSBドングルを付けてラズパイに接続してデータをハックしました。

EPEVERチャージコントローラー持ってる+ラズパイが少しいじれる人は以下のとおりにやれば特に難しいことは無いと思いますので、気軽に作業してみてください。

ほぼこちら↑言われている通りの作業をすればハックできます。非常に参考になりました。ありがとうございますm(_ _)m

必要なもの

EPEVERチャージコントローラーとラズパイ(ラズパイの簡単OSインストールはこちらを参考にしてください。)をつなげるLANケーブル+USB RS485変換アダプタが必要になります。

  • ラズパイ(Raspberry Pi)
  • USB RS485変換アダプタ
  • LANケーブル
  • EPEVERチャージコントローラー

LANケーブル(RJ-45)は普通の8線のやつ、使用するケーブルは2本しか使わないので2線・4線でも使えるとは思いますが?RJ-45端子を加工する必要があるかと思います。

USB RS485変換アダプタを準備する

USB RS485変換アダプタというのを使います。↓ebayで100円程度で販売されています。

こちら、自分の環境が悪いからかもしれませんが、すぐ壊れます。いままで4ヶ月ほど使ってみて2個壊れました。もしかしてバッテリーを充電しているときに電流が逆流して壊れるのかとも思いましたがそうでもなさそうだし?なので余分に数個予備で持っています。

すぐに壊れるので上のアップグレード版↑も予備に買ってみました。使えるかどうかも分かりませんが、こちらのほうが壊れにくそうな見た目。こんどUSB RS485変換アダプタが壊れたら使ってみます。

USB RS485変換アダプタはアマゾンにも売ってますが最低でも400円弱しますのでebayで買ったほうがお得かと思います。

CC-USB-RS485-150UはPCにつなげるケーブルでハックには使えない

ちなみに以下のケーブルはWindowsPCにつなげるLAN→USBケーブルなのでデータを取得するハックには使えませんでした。

こちらはアマゾンで売っているケーブル↓と温度センサーのセット。温度センサーは特に必要ないのですが、EPEVERチャージコントローラーの左下に差し込みがあるので接続しました。

同じケーブルでebayで500円程度で売っていたのでこちらも買ってみた。

前の記事で紹介した以下のPCとチャージコントローラーを接続するeLOG01と同じ機能のようです。

CC-USB-RS485-150UケーブルをPCと接続したらeLOG01と同じように「XR21B1411 USB UART」と表示された。

ソーラーケーブル

最近はeLOG01が壊れてしまった・・・ようなので代わりにCC-USB-RS485-150Uケーブルを使おうかと考えているところ。たまにPCでソーラー発電の様子もみてみたいので、3ポートのLANケーブル分割アダプター買わないと。

LANケーブル 配線加工

LANケーブルはA結線とB結線があって、8つのケーブルに以下のように色がついています。

  A結線(T568A) B結線(T568B)
1
2
3
4
5
6
7
8

この8つのケーブルのうち使うのは4の青、5の白・青です。

USB RS485変換アダプタの上がUSB差し込みの場合は左側に5(白・青)、右側に4(青)ケーブルを接続します。

LANケーブル

かなり細いケーブルですぐに切れてしまうので結束バンドで止めておきました。↓

LANケーブル

これでケーブルの準備は完了。USBをラズパイに、RJ-45をEPEVERチャージコントローラーにさして接続します。

UARTを使えるようにする

ここからはSSHなどでラズパイにアクセスして設定してきます。

/boot/config.txtに「enable_uart=1」を追加します。すでに入っていれば追加しないでもOKです。

追加したらリブートします。

USBのデバイス名を固定する

ここで先ほど作成したLANケーブルとUSB RS485変換アダプタが正常にUSBに接続できていれば/dev/ttyUSB0にデバイスがあると思いますが、ラズパイのUSBポートに他のUSBデバイスを刺してある場合にはttyUSB1,ttyUSB2などのデバイス名になってしまって、常にttyUSB0で無い場合もあます。なのでできればデバイス名を固定しておきましょう。

(この項目は他のUSBデバイスを刺す予定が無い場合はほぼttyUSB0になっていると思うので、特に必要なければやらなくてもOKです。)

もし/devの中のttyUSB0~9が一個も表示されていない場合はケーブルがうまく接続されていないかもしれません。(USBケーブル以外の他のUSBガジェットを刺した場合は他の名前になります。例えばMicroSDカードを入れたUSBアダプタを刺すと/dev/sdaなどになります。)

lsusbでUSB機器情報を確認

まずはlsusbでラズパイに接続しているUSB機器の状況をみていきましょう。例として2つのラズパイのUSB機器情報を確認します。

Raspberry Pi 2 B+の場合

Raspberry Pi 2 B+ではWifiが無いので1つWifiのUSBドングルを刺していましてDevice 005 BUFFALO INC.・・・で認識されています。

ここで必要な情報はID 0411:01a2のようなIDに続く4文字:4文字の文字列2つです。1番目の4文字がベンダー名、2番目の文字列がProduct名です。

上のlsusbコマンドを実行した例では該当のUSBケーブルはID 04e2:1411 Exar Corp.

  • idVendor:04e2
  • idProduct:1411
  • メーカー:Exar Corp.

これは間違ったケーブルを接続したときにこのようになりました。正しくケーブルを接続した時は下のラズパイ3B+と同じようにQinHeng Electronics HL-340 USB-Serial adapterとなっていました。

Raspberry Pi 3 B+の場合

該当のUSBケーブルは、ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

  • idVendor:1a86
  • idProduct:7523
  • メーカー:QinHeng Electronics HL-340 USB-Serial adapter

Device 005のRealtek Semiconductor Corp.はMicroUSBを刺したUSBアダプタで、/tty/sdaになっています。

さらに詳細情報を知る場合

lsusbで機器情報を取得出来なかったときは以下のコマンドを試してください。

例として自分がやった結果、/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3の部分のATTRS{idVendor}、ATTRS{idProduct}にベンダー・プロダクトが見つかりました。

ただ、その下/devices/platform/soc/3f980000.usb/usb1/1-1にも違うベンダー名(ATTRS{idVendor}=="0424")・プロダクト名(ATTRS{idProduct}=="2514")が表示されまして、その更に下にも他のベンダー名・プロダクト名が表示されていてUSB機器の接続されているケーブルやパーツのベンダー・プロダクトの詳細が表示されるようなので正しいベンダー名・プロダクト名を得るにはもう少し深掘りする必要がありそうです。

固定デバイス情報を99-com.rulesに書く

次回再起動から固定デバイス情報をラズパイに認識させるように/etc/udev/rules.d/99-com.rulesファイルにベンダー名・プロダクト名を指定して好きなデバイス名で設定します。

99-com.rulesファイルは新規ファイルか、以下のように記入されているかもしれません。記入されていたらその下に新たに追加します。

ルールは以下のようになっていて先ほどlsusbで調べたベンダー名とプロダクト名を入れていきます。

  • KERNEL:ttyUSB*(ttyUSB0~ttyUSB9までの数字や1文字どれかにあてはまるデバイス)
  • ベンダー名(idVendor):1a86
  • プロダクト名(idProduct):7523
  • 好きな名前:ttyUSB_solar(ttyUSBは含んたほうがよさそう)

これを追加します。sudo vimで以下のように追加しましょう。

好きな名前で書いた「ttyUSB_solar」が今後指定するデバイス名になります。

再起動後に確認

99-com.rulesファイルにルールを書き終わったら再起動します。

再起動してttyUSBを調べると以下のようにttyUSB0のエイリアス(ショートカット、別名)としてttyUSB_solarが表示されました。これでttyUSB0がttyUSB1などになってもttyUSB_solarエイリアスが作られるので今後のプログラムで「ttyUSB_solar」を指定するとエラーにならずにデータを取得できます。

下準備 PHPやライブラリをインストール

今回はPHPライブラリPhpEpsolarTracerを使うので、Web開発でよくつかう言語のPHPを使います。

下準備としてラズパイにPHPをインストールします。それと、PHPからInfluxDBにアクセスするためにinfluxdb-phpが必要なので、まずはcomposerをインストールしてcomposerからinfluxdb-phpをインストールしていきます。

PHPをインストール

PHPはインストールしてあるのを前提で進めていきます。sudo dpkg -lコマンドを打って、PHPがなければインストールしてください。

composerインストール

composerはPHPのパッケージの管理システムです。

composerは以下のinfluxdb-phpをインストールするために必要です。

composerの本体(vendorディレクトリ)は「/」ディレクトリに移動しておくことにします。

下のほうのPHPプログラムで「require '/vendor/autoload.php';」とautoload.phpを読み込む行がありますので、もしvendorディレクトリをルート「/」ディレクトリに移動しないで別の場所に置いた場合は、「require '/置いた場所のパス/vendor/autoload.php';」というように変更してくださいね。

phpからinfluxdbに接続するためのライブラリ インストール

こちらのライブラリ↓をインストールします。

influxdb-php: A PHP Client for InfluxDB, a time series database - influxdata/influxdb-php

このほかにInfluxdbと連携するPHPライブラリはInfluxPHPは古いので使わないことにした。

以上でPHPが使えるようになって、PHPからInfluxDBに接続可能になりました。

Epever チャージコントローラーからデータを取得するライブラリ 接続テスト

いよいよEPEVERチャージコントローラーのデータを取得してデータを表示する段階にはいってきました。

PhpEpsolarTracerダウンロード

こちらですでにEpeverチャージコントローラーから各種データを取得するライブラリを作られている方がいらっしゃるので使わせていただきますm(_ _)m

Library for communicating with Epsolar/Epever Tracer BN MPPT Solar Charger Controller - toggio/PhpEpsolarTracer

ライブラリをインストールしていきましょう。

PhpEpsolarTracer example_cli.phpサンプル実行

まずはサンプルを実行してみましょう。これでデータが表示されたら正常にUSBケーブルが接続されてデバイス名がttyUSB0になっています。

以下のようにかなりのデータが表示されます♪

もし、エラーになる場合は指定しているデバイス名が違うのかもしれません。example_cli.phpを編集してデバイス名を固定した場合は以下のように変更するか、ls /dev/ttyUSB*コマンドを打ってデバイス名を確認しましょう。

データが表示されない場合は、ケーブルの接続を見直してみましょう。

PHPでデータをInfluxDBにインサート

Realtime DataとStatistical Dataのみ取得してInfluxDBにインサートしていきます。

PHPを多少知っている方はご自分の環境に合わせて変更してみてくださいね。設定は以下の5項目をあなたのラズパイの仕様に変更しましょう。

  • $db:InfluxDBのデータベース名
  • $table:InfluxDBのmeasurement名
  • $thost:InfluxDBで使うHOST名
  • $user:InfluxDBのユーザー名
  • $pass:InfluxDBのパスワード

InfluxDBのユーザー・パスワード作成方法はこちらで説明してあります。

PHPファイル(solar.php)をPhpEpsolarTracerでディレクトリの中に置きます。

solar.phpは以下の内容で保存。

solar.phpをテスト実行

シェルからsolar.phpを実行すると以下のように配列でEPEVERチャージコントローラーから取得したデータが表示されます。

あとはInfluxDBでデータがちゃんとインサートされているかみていきましょう。

データがインサートされたかInfluxを確認

シェルでinfluxコマンドを使ってデータがちゃんと登録されているか確認してみましょう。

influxコマンドでDBの中に入ってuse sensorでsensorデータベースを選びます。その中のmeasurement(table)のsolarの中身を「select * from solar」で全部表示させます。

すると以下のように表示されます。↓例では5個のレコードが表示されました。

こうなっていればもう少しで完成!あとは定期的にPHPプログラムを実行しておけば勝手にデータが蓄積されていきます。

Cronで定期的に実行

Cronで定期的にsolar.phpを実行して、これで設定完了なのであとは完全放置。

Grafanaでグラフ表示

データを定期的にDBに投げる仕組みができたので、最後にデータを人間が見やすいようにフラフ表示していきましょう。

グラフ表示するまでの道のりは少し長いけど以下を参考にしてくださいね。

自宅環境センシングの2回目の記事として今回はラズパイ(Raspberry Pi)にデータベースのInfluxDBを入れて将来的にセンシングしたデータをInfluxDB保存していきます。 そして次回は、GrafanaというデータをWebで美しく表示してくれるデータ可視化ツールとラズパイのCPUやRAM使用率な...
センシングしたデータを保存するInfluxDBは前回ラズパイに構築したので今回はGrafana+telegrafを入れて設定していきます。おまけとしてChromografとvcgencmdを使ってCPU温度やCPU使用率・ARMのデータを取得してInfluxDBにインサートするところまでやっていきます。 I...

ソーラー発電のデータをグラフ化すると以下のようになりました。

Solar.json

Grafanaでグラフ表示は手っ取り早く以下をダウンロードして、ご自分の見やすいように改造しちゃってください。

なおGrafanaのJsonファイルのアップロード方法はこちらに書いてありますので参考にしてくださいね。

solar.jsonファイルをGrafanaにアップロードすると上の画像と同じように表示されます。(ホスト名やDB名を変更した場合は手直ししてくださいね。)

ソーラー発電データのハック グラフ化完成!感想

これでソーラー発電の発電量やバッテリーの状態がグラフにできました。

ただ、定期的にUSB RS485変換アダプタが壊れるので予備が必要かもしれません。今のところ2個壊れただけなので、もしかしたら最初に使っていた2個が不良品だったのかもしれません。

しかし最近は梅雨なのでソーラー発電せず、3日置きにバッテリーを充電しないといけないので面倒、マンションの屋上とかにソーラーパネルを設置したくなってきた。不動産屋さんが許可してくれないだろうなぁ・・・(泣)

本格的に自作ソーラー発電されている方は参考にしてくださると喜びます♪

スポンサーリンク

コメントを残す