太陽光発電のモニタシステム開発顛末

2018年6月のことだったと思います。
千葉で電気工事の会社を経営している弟から太陽光発電のパワコンの監視が出来ないかと相談されました。しかし弟からは細かな仕様までは聞くことが出来ませんでした。不安はありましたが、病み明けで何かしら仕事をしなければと焦っていたこともありやってみることにしました。
パワコンを調べるにも、パワコンは発電所に行って動いている物を見る以外方法がありませんでした。当然太陽が出ている時間しか調べられません。
わたしは東京都大田区、弟は千葉県佐倉市、発電所は千葉県勝浦市付近とかなり離れています。発電所に寝泊まりして作業できればまだ良いのですが、掘っ立て小屋程度の倉庫があるだけです。水もトイレもありません。朝７：２０に自宅を出て弟の家のそばまで電車で行き、９：００に弟にピックアップしてもらい、１１時頃に発電所について、１７時ぐらいまで作業してということを計１０回くらい、期間は４ヶ月ほど行いました。

さてパワコンというのはWikiによると
『パワーコンディショナー（パワコン）は、太陽光発電システムや家庭用燃料電池を利用する上で、発電された電気を家庭などの環境で使用できるように変換する機器であり、インバータの一種である。ソーラーパネルなどから流れる電気は通常「直流」であり、これを日本の一般家庭で用いられている「交流」に変換することで、通常利用可能な電気にすることができる。なお、パワーコンディショナーは和製英語であり、外国ではインバータと呼ばないと理解されない。』
ということです。今回のパワコンメーカは山洋電気さんです。

弟から渡された資料は、パワコンのカタログ、取扱説明書だけでした。RS485を使っていることもぼんやり見えてきましたが、そこまででした。
さらにネットで調べたところ、どうやらパワコンではMODBUSという規格が多く使われているぐらいはわかりました。

実際に現地でパワコンを見てみると、それぞれが芋づる式にRS485で繋がれていて、終端に監視用のLCDパネルが付いています。
弟は週に1，2度現場に行くのですが、LCDパネルを確認すると時々障害が起こっていて、発電が出来ず、損失が発生していることがあるそうです。メーカからは純正のリモート監視用のシステムが販売されてはいるけれども10年で80万とかするとのこと。年８万ですが、太陽光発電でせこせこ稼いでいるのが吹っ飛んでしまいます。
現場の倉庫に泥棒が入ったことがあるので監視カメラを付けているが、現在はローカルのHDDに録画しているだけだということ。インターネットで画像を監視できるとカタログには書いてあるので、これもインターネットに繋ぎたいとのこと。

①WiFiルータの選定
まず監視カメラをインターネットに繋がなくてはいけません。パワコンの監視をするにしても、インターネットが使えるようにしておいた方が助かります。そこでWiFiルータとプロバイダを決めました。
WiFiルータはAterm HT100LNに、プロバイダはUQモバイル（実際に契約したのは弟なのでたぶんですが…）にしました。
これはグローバルなIPがもらえないのですが、発電所内のマイコンにWebサーバを立ち上げるのではなく、レンタルサーバのデータベースとWebサーバを使い、マイコンから定期的にパワコンからの信号を保存する形を考えました。

②パワコン－LCDパネル間の通信プロトコルの調査
パワコンのメーカさんに質問したのですが、説明書以上のことは話せないとのこと。仕方ないので全て自分で調べました。このパワコンのRS485は1000BASE-Tの8線なのですが、どの線が使われているのかわからず、オシロの素人が簡易オシロを繋いで調べてもなにもわかりませんでした。波形が安定していないのです。

そこで福福電子さんという会社のAnalyze232Cをレンタルしました。基本RS232Cを繋ぐ機械なのですが、RS485用には片側RJ45、片側LANケーブルの切りっぱなし状態のケーブルが1本付いてきました。
悪いことに？パワコンのRS485端子もRJ45だったので、この線の配置のまま繋げばいいと勝手に思い込んでしまいました。結局この思い込みのせいで福福電子さんに無駄な問合せをして煩わせてしまいました。
福福電子さんの取説には丁寧に注意が載っているにもかかわらずです；；
しばらく検討した結果、このようなものを作りました。手前の二つのRJ45には、パワコンからのRS485、LCDパネルへのRS485をつなぎ、奥のRJ45には福福電子さんの機器をつなぎます。（写真は奥のRJ45への接続が正しくありません）

![SWITCHER.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290178/9d1bb58e-65e0-c0c9-7d71-ee5a357d326b.jpeg)

これはどう使うのかというと、まずはストレートに8本繋いでから、一本ずつ外していってどの線が通信に必要なのかを調べたのです。結果4本だけが必要だと判明しました。

使われている線がわかったのでオシロで調べると、４本の線は、5V、GND、TX+(RX+)、TX-(RX-)だとわかりました。さらにRS485はどうやら19200bps/8bit/non-parity/1 stop bitだとわかりました。

福福電子さんのAnalyze232Cはちゃんと使えば、パワコンとLCDパネルの信号を綺麗に分けてモニタできるのでしょうが、とにもかくにもこのような通信をモニタすることが出来ました。
![福福結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290178/d71426a5-b37f-ab3f-be7f-71ec0261a8d8.png)
（あれ？2 stop bitになっているような！？）
よく見ると01 03 C0 20 00 20 ...で始まっています。これはMODBUS/RTUでスレイブ01に対し、アドレス0xC020から0x0020byte、レジスタを読み込む命令です。

LCDパネルから様々な操作を行っても、LCDパネルからパワコンへの問合せは
Read Holding Register（03）だけで、対象となるレジスタは
0xC000～0xC002
0xC100～0xC10F
0xC020～0xC02F
だけのようでした。
トラブルが起こった時の異常ステータスは、0xC000～0xC002、0xC100～0xC102に反映されるのではないかと想像できましたが、実際に異常が起こらないとどのようになるかわからないので今後の課題としました。

③マイコンの選定
現場では監視カメラ、WiFiルータを設置しているため、AC100Vが常時使えるようになっています。そこで使用するPCに特に制限はありませんが、太陽光でせっかく発電した電力を燃費の悪い強力PCで監視するなんてもったいないと考え、なるべく省電力にしたいと思い、WiFiが使え、Arduinoの開発環境を使えるESP-WROOM-02で開発できないかと考えました。調べるとMODBUS関係のライブラリもたくさんあってなんとか出来そうだと当たりを付けました。
AMAZONの電子太郎「ESP-WROOM-02開発ボード」を購入しましたが、下の写真は秋月電子通商のものになっています。
RS485を繋げるため、MAX485チップの載ったモジュールを買いました。動作を確認するために16x2文字表示のLCDパネルも付けました。
![DSCN1942.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290178/da7f8f2f-00ca-aa1d-fdcd-16840f96cda1.jpeg)

システムが完成するまでは、LCDパネルは付けたままにして、テストする時にだけつなぎ替えるようにしました。

④サーバの選定
他の方のBLOGをみるとローカルなPCにWebサーバを載せてって言う方法が見られましたが、わたしの考えているPCは発電中のみ作動しているので、レンタルサーバを借りて、そのサーバがもつDBにデータを保存しようと考えました。

サーバ上に最低限必要なのは、MySQL、PHPぐらいかなとぼんやり考えました。
cronとかパスワードによるアクセス制限とかはこの時点ではノーアイデアです。
他のページを読むと、PHPのPOSTを使えばMySQLに発電実績を保存できそうだと当たりを付けました。
レンタルサーバはnetowlが無料で使えるのでしばらくはこれを使い、うまくいきそうなら有料に移ろうかと考えました。

⑤Web上でグラフの表示
PHP+javascriptでグラフを表示できることがわかったのですが、ライブラリの選定に苦労しました。javascriptもほぼ素人だったので、そもそもグラフが書けなかったのです；；
しかし最終的にChart.jsに決定しました。ただ他の太陽光発電モニタシステムのサイトを見てみると、グラフの再描画をするのにPOSTなどせずに書き換えができています。ただnetowlに自由にソフトをインストールすることはできないので、自由度のより高いサーバを使えるまではこれで我慢しようと考えています。

⑥その他
省エネにするため、太陽光発電されていない時はESP-WROOM-02はスリープ状態にしようと考えました。インターネットから現地の日の出、日の入り時間を調べることができたので、その情報をテーブルにして持たせておくことにしました。
LCD表示も30秒程度でオフになるように作り込みました。

そして最終的に2018/10/22に無事？稼働にこぎ着けました。
しかし無料のサーバから有料サーバに切り替えたり、通信の頻度をきちんと10分単位にしたりなどのブラッシュアップはなかなかできずにいます。
なにしろ発電所は遙かに遠く、自力でそこまで行くことも出来ませんし…。
（やっと2019/4にサーバは有料のものに切り替えられました。）
![発電状況..png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290178/215e6442-daf9-d0fa-990f-be61dd4f3f7b.png)

詳細な開発内容やそのあとに行った田渕電機さん、デルタ電子さんについてはまた今度。