【ソーラー 蓄電状態を可視化】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です。

$ sudo vim /boot/config.txt
enable_uart=1 #行の最後に追加する。
$ sudo reboot

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

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

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

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

$ ls /dev/ttyUSB*
/dev/ttyUSB0 #このようになっていれば正常に接続できています。

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

lsusbでUSB機器情報を確認

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

Raspberry Pi 2 B+の場合

$ lsusb
Bus 001 Device 005: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]
Bus 001 Device 004: ID 04e2:1411 Exar Corp.
Bus 001 Device 007: ID 8564:4000 Transcend Information, Inc. RDF8
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

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+の場合

$ lsusb
Bus 001 Device 006: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 001 Device 005: ID 0bda:0109 Realtek Semiconductor Corp.
Bus 001 Device 004: ID 0424:7800 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

該当の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機器の接続されているケーブルやパーツのベンダー・プロダクトの詳細が表示されるようなので正しいベンダー名・プロダクト名を得るにはもう少し深掘りする必要がありそうです。

$ sudo udevadm info -a -p $(sudo udevadm info -q path -n /dev/ttyUSB0)
・・・省略
  looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.3':
    KERNELS=="1-1.3"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="ff"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="8"
    ATTRS{bMaxPower}=="96mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0254"
    ATTRS{bmAttributes}=="80"
    ATTRS{busnum}=="1"
    ATTRS{configuration}==""
    ATTRS{devnum}=="7"
    ATTRS{devpath}=="1.3"
    ATTRS{devspec}=="  (null)"
    ATTRS{idProduct}=="7523"
    ATTRS{idVendor}=="1a86"
    ATTRS{ltm_capable}=="no"
    ATTRS{maxchild}=="0"
    ATTRS{product}=="USB2.0-Serial"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="removable"
    ATTRS{rx_lanes}=="1"
    ATTRS{speed}=="12"
    ATTRS{tx_lanes}=="1"
    ATTRS{urbnum}=="14"
    ATTRS{version}==" 1.10"

  looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1':
    KERNELS=="1-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{authorized}=="1"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceProtocol}=="02"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{bMaxPower}=="2mA"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bcdDevice}=="0bb3"
    ATTRS{bmAttributes}=="e0"
    ATTRS{busnum}=="1"
    ATTRS{configuration}==""
    ATTRS{devnum}=="2"
    ATTRS{devpath}=="1"
    ATTRS{idProduct}=="2514"
    ATTRS{idVendor}=="0424"
    ATTRS{ltm_capable}=="no"
    ATTRS{maxchild}=="4"
    ATTRS{quirks}=="0x0"
    ATTRS{removable}=="unknown"
    ATTRS{rx_lanes}=="1"
    ATTRS{speed}=="480"
    ATTRS{tx_lanes}=="1"
    ATTRS{urbnum}=="75"
    ATTRS{version}==" 2.00"
・・・省略

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

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

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

$ sudo cat /etc/udev/rules.d/99-com.rules
SUBSYSTEM=="input", GROUP="input", MODE="0660"
SUBSYSTEM=="i2c-dev", GROUP="i2c", MODE="0660"
SUBSYSTEM=="spidev", GROUP="spi", MODE="0660"
SUBSYSTEM=="bcm2835-gpiomem", GROUP="gpio", MODE="0660"

SUBSYSTEM=="gpio", GROUP="gpio", MODE="0660"
SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c '\
        chown -R root:gpio /sys/class/gpio && chmod -R 770 /sys/class/gpio;\
        chown -R root:gpio /sys/devices/virtual/gpio && chmod -R 770 /sys/devices/virtual/gpio;\
        chown -R root:gpio /sys$devpath && chmod -R 770 /sys$devpath\
'"
・・・省略

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

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

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

$ sudo vim /etc/udev/rules.d/99-com.rules
#以下を追加します。
KERNEL=="ttyUSB*", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="ttyUSB_solar"

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

再起動後に確認

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

$ sudo reboot

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

$ ls -al /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0  4月 22 06:43 /dev/ttyUSB0
lrwxrwxrwx 1 root root         7  4月 22 06:43 /dev/ttyUSB_solar -> ttyUSB0

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

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

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

PHPをインストール

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

$ sudo dpkg -l | grep php
#以下は例
ii  php-common                            1:49                              all          Common files for PHP packages
ii  php7.0-cli                            7.0.33-0+deb9u3                   armhf        command-line interpreter for the PHP scripting language
ii  php7.0-common                         7.0.33-0+deb9u3                   armhf        documentation, examples and common module for PHP
ii  php7.0-fpm                            7.0.33-0+deb9u3                   armhf        server-side, HTML-embedded scripting language (FPM-CGI binary)
ii  php7.0-json                           7.0.33-0+deb9u3                   armhf        JSON module for PHP
ii  php7.0-opcache                        7.0.33-0+deb9u3                   armhf        Zend OpCache module for PHP
ii  php7.0-readline                       7.0.33-0+deb9u3                   armhf        readline module for PHP
#php7.xx-fpmが入ってなければ以下のようにしてPHPをインストールする。FPMは(FastCGI Process Manager)コマンド用PHP
$ sudo apt-get install php-fpm 

composerインストール

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

$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
$ composer require crodas/influx-php:\*

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

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

$ sudo mv  vendor /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は古いので使わないことにした。

$ composer require influxdb/influxdb-php

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

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

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

PhpEpsolarTracerダウンロード

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

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

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

$ cd script
$ git clone https://github.com/toggio/PhpEpsolarTracer.git #gitからライブラリ取得
$ cd PhpEpsolarTracer #PhpEpsolarTracerに移動

PhpEpsolarTracer example_cli.phpサンプル実行

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

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

$ php example_cli.php
Info Data
----------------------------------
00 Manufacturer:
Rated Data
----------------------------------
00 PV array rated voltage: 100V
01 PV array rated current: 40A
02 PV array rated power: 1040W
03 Battery rated voltage: 24V
04 Rated charging current: 40A
05 Rated charging power: 1040W
06 Charging Mode: 2
07 Rated load current: 40A

RealTime Data
----------------------------------
00 PV array voltage: 13.31V
01 PV array current: 0.66A
02 PV array power: 8.85W
03 Battery voltage: 11.96V
04 Battery charging current: 0.74A
05 Battery charging power: 8.85W
06 Load voltage: 11.96V
07 Load current: 0A
08 Load power: 0W
09 Battery temperature: 25.77°C
10 Charger temperature: 29.44°C
11 Heat sink temperature: 29.44°C
12 Battery SOC: 31%
13 Remote battery temperature: 0°C
14 System rated voltage: 12V
15 Battery status: 2
16 Equipment status: 15

Statistical Data
----------------------------------
00 Max input voltage today: 22.29V
01 Min input voltage today: 12.71V
02 Max battery voltage today: 12.65V
03 Min battery voltage today: 11.8V
04 Consumed energy today: 0KWH
05 Consumed energy this month: 0KWH
06 Consumed energy this year: 0.02KWH
07 Total consumed energy: 3.81KWH
08 Generated energy today: 0.03KWH
09 Generated energy this moth: 0.24KWH
10 Generated energy this year: 2.04KWH
11 Total generated energy: 11.63KWH
12 Carbon dioxide reduction: 0.01T
13 Net battery current: 0.72A
14 Battery temperature: 25.77°C
15 Ambient temperature: 25.77°C

Settings Data
----------------------------------
00 Battery type: 1
01 Battery capacity: 200Ah
02 Temperature compensation coeff.: 3mV/°C/2V
03 High voltage disconnect: 16V
04 Charging limit voltage: 15V
05 Over voltage reconnect: 15V
06 Equalization voltage: 14.6V
07 Boost voltage: 14.4V
08 Float voltage: 13.8V
09 Boost reconnect voltage: 13.2V
10 Low voltage reconnect: 12.6V
11 Under voltage recover: 12.2V
12 Under voltage warning: 12V
13 Low voltage disconnect: 11.1V
14 Discharging limit voltage: 10.6V
15 Realtime clock (sec): 0
16 Realtime clock (min): 0
17 Realtime clock (hour): 0
18 Realtime clock (day): 0
19 Realtime clock (month): 4
20 Realtime clock (year): 39
21 Equalization charging cycle: 770 day
22 Battery temp. warning hi limit: 43.55°C
23 Battery temp. warning low limit: 0.3°C
24 Controller temp. hi limit: 65°C
25 Controller temp. hi limit rec.: 615.36°C
26 Components temp. hi limit: 85°C
27 Components temp. hi limit rec.: 75°C
28 Line impedance: 85mOhm
29 Night Time Threshold Volt: 75V
30 Light signal on delay time: 0 min.
31 Day Time Threshold Volt: 5V
32 Light signal off delay time: 10 min.
33 Load controlling mode: 600
34 Working time length1 min.: 10
35 Working time length1 hour: 0
36 Working time length2 min.: 0
37 Working time length2 hour: 0
38 Turn on timing1 sec: 256
39 Turn on timing1 min: 256
40 Turn on timing1 hour: 0
41 Turn off timing1 sec: 0
42 Turn off timing1 min: 19
43 Turn off timing1 hour: 0
44 Turn on timing2 sec: 0
45 Turn on timing2 min: 6
46 Turn on timing2 hour: 0
47 Turn off timing2 sec: 0
48 Turn off timing2 min: 19
49 Turn off timing2 hour: 0
50 Length of night min.: 6
51 Length of night hour: 0
52 Battery rated voltage code: 60
53 Load timing control selection: 5
54 Default Load On/Off: 2591
55 Equalize duration: 1 min.
56 Boost duration: 0 min.
57 Dischargning percentage: 1%
58 Charging percentage: 120%
59 Management mode: 30

Coils Data
----------------------------------
00 Manual control the load: 1
01 Enable load test mode: 0
02 Force the load on/off: 0

Discrete Data
----------------------------------
00 Over temperature inside device: 0
01 Day/Night: 0

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

$tracer = new PhpEpsolarTracer('/dev/ttyUSB0');
 ↓ 変更する
$tracer = new PhpEpsolarTracer('/dev/ttyUSB_solar');

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

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でディレクトリの中に置きます。

$ cd /home/pi/script/PhpEpsolarTracer
$ vim solar.php

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

<?php
require_once 'PhpEpsolarTracer.php';
require '/vendor/autoload.php';

$host  = 'localhost';
$db    = 'sensor';
$table = 'solar';
$thost = 'Epever40A';
$user	 = 'root';
$pass	 = 'xxxxxx';

$tracer = new PhpEpsolarTracer('/dev/ttyUSB_solar');
$client = new InfluxDB\Client($host, 8086, $user, $pass);
$database = $client->selectDB($db);

$solararr=array();
if ($tracer->getRealtimeData()) {//Realtime Data
	for ($i = 0; $i < count($tracer->realtimeData); $i++) {
		$item = $tracer->realtimeData[$i];
		$key = str_replace(" ","-",$tracer->realtimeKey[$i]);
		if($item > 0){$solararr[$key]=$item;}
	}
}
if ($tracer->getStatData()) {//Statistical Data
	for ($i = 0; $i < count($tracer->statData); $i++) {
		$item = $tracer->statData[$i];
		$key = str_replace(" ","-",$tracer->statKey[$i]);
		$key = 'Stat-' . $key;//Realtimeと重複の名前があるために名前を変える
		if($item > 0){$solararr[$key]=$item;}
	}
}
//print_r($solararr);

$points = array(
	new InfluxDB\Point(
		$table, // the name of the measurement
		null, // measurement value
		['host' => $thost], // measurement tags
		$solararr, // measurement fields
		null // timestamp
	)
);
$result = $database->writePoints($points);
print_r($points);
?>

solar.phpをテスト実行

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

$ php solar.php
Array
(
    [PV-array-voltage] => 14.85
    [PV-array-current] => 0.52
    [PV-array-power] => 7.79
    [Battery-voltage] => 13.44
    [Battery-charging-current] => 0.58
    [Battery-charging-power] => 7.79
    [Load-voltage] => 13.44
    [Battery-temperature] => 27.18
    [Charger-temperature] => 31.99
    [Heat-sink-temperature] => 31.99
    [Battery-SOC] => 87
    [System-rated-voltage] => 12
    [Equipment-status] => 7
    [Stat-Max-input-voltage-today] => 20.98
    [Stat-Min-input-voltage-today] => 0.36
    [Stat-Max-battery-voltage-today] => 16.05
    [Stat-Min-battery-voltage-today] => 8.63
    [Stat-Consumed-energy-this-year] => 3.93
    [Stat-Total-consumed-energy] => 7.72
    [Stat-Generated-energy-today] => 0.06
    [Stat-Generated-energy-this-moth] => 0.14
    [Stat-Generated-energy-this-year] => 18.69
    [Stat-Total-generated-energy] => 28.28
    [Stat-Carbon-dioxide-reduction] => 0.02
    [Stat-Net-battery-current] => 0.6
    [Stat-Battery-temperature] => 27.19
    [Stat-Ambient-temperature] => 27.19
)

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

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

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

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

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

$ influx
Connected to http://localhost:8086 version 1.7.4
InfluxDB shell version: 1.7.4
Enter an InfluxQL query
> use sensor
Using database sensor
> select * from solar
name: solar
time                Battery-charging-current Battery-charging-power Battery-temperature Battery-voltage Charger-temperature Equipment-status Heat-sink-temperature Load-current Load-voltage PV-array-current PV-array-power PV-array-voltage Remote-battery-temperature Stat-Ambient-temperature Stat-Battery-temperature Stat-Carbon-dioxide-reduction Stat-Consumed-energy-this-year Stat-Generated-energy-this-moth Stat-Generated-energy-this-year Stat-Generated-energy-today Stat-Max-battery-voltage-today Stat-Max-input-voltage-today Stat-Min-battery-voltage-today Stat-Min-input-voltage-today Stat-Net-battery-current Stat-Total-consumed-energy Stat-Total-generated-energy System-rated-voltage host
----                ------------------------ ---------------------- ------------------- --------------- ------------------- ---------------- --------------------- ------------ ------------ ---------------- -------------- ---------------- -------------------------- ------------------------ ------------------------ ----------------------------- ------------------------------ ------------------------------- ------------------------------- --------------------------- ------------------------------ ---------------------------- ------------------------------ ---------------------------- ------------------------ -------------------------- --------------------------- -------------------- ----
1555893814115322952 0.42                     5.28                   23.91               12.58           26.67               15               26.67                              12.58        0.38             5.28           13.89            12                         23.91                    23.91                    0.01                          0.02                           0.64                            2.44                            0.05                        13.93                          21.9                         12.4                           0.18                         0.45                     3.81                       12.03                       167.97               Epever40A
1555893852560052155 0.43                     5.4                    23.95               12.58           26.7                15               26.7                               12.58        0.38             5.4            13.88            12                         23.93                    23.93                    0.01                          0.02                           0.64                            2.44                            0.05                        13.93                          21.9                         12.4                           0.18                         0.42                     3.81                       12.03                       44.26                Epever40A
1555894021818116824 0.35                     4.4                    24.03               12.59           26.79               15               26.79                              12.59        0.31             4.4            13.89            12                         24.02                    24.02                    0.01                          0.02                           0.64                            2.44                            0.05                        13.93                          21.9                         12.4                           0.18                         0.51                     3.81                       12.03                       322.68               Epever40A
1555894082050548083 0.46                     5.79                   23.9                12.59           26.82               15               26.82                              12.59        0.41             5.79           13.9             12                         23.9                     23.9                     0.01                          0.02                           0.64                            2.44                            0.05                        13.93                          21.9                         12.4                           0.18                         0.45                     3.81                       12.03                       542.56               Epever40A
1555894141812646021 0.46                     5.78                   23.98               12.58           26.86               15               26.86                 0.03         12.58        0.41             5.78           13.88            12                         23.98                    23.98                    0.01                          0.02                           0.64                            2.44                            0.05                        13.93                          21.9                         12.4                           0.18                         0.42                     3.81                       12.03                       487.58               Epever40A

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

Cronで定期的に実行

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

$ crontab -e #以下の行を追加
*/1 * * * * /usr/bin/php /home/pi/script/PhpEpsolarTracer/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日置きにバッテリーを充電しないといけないので面倒、マンションの屋上とかにソーラーパネルを設置したくなってきた。不動産屋さんが許可してくれないだろうなぁ・・・(泣)

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

スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。