おもちゃ、家電、もろもろの修理の足跡と備忘録

色々と忘れるので、趣味のメモ

太陽光パワーコンディショナからのデータを見える化してみた(ハードウェアとか編)

2023-11-19 17:45:20 | 太陽光パワコンデータの見える化

ハードウェアは、こんな感じにしました。
 上からDC/DCコンバータ(12Vto5V)、ESP32devkit v1、RS485/TTLレベルコンバータです。DC/DCコンバータは、手元にあって使わなくなっていた車用シガーライタUSB電源を流用しました。入力段にフューズ抵抗*(抵抗値を持った、ヒューズ)らしきものが入っていましたので、そのまま使っています。 何かあったとき?に今回作ったものをそのまま取外しができるように右上に12Vの電源(+/GND)とその下にRS485の信号(A+/B-)のデュポンコネクタを設置して接続しています。
 左上にESP32devkit v1への電源切替用スイッチで、パワコンからの電源(スイッチ上向き)とそれの切断(スイッチ下向き)です。切断はESP32のアプリをUpdateする時やDebugする時に、microUSBからの電源とぶつからないようにするものです。一応パワコン側からの5Vには順方向にダイオードを入れておきました。
 RS485/TTLコンバータは、基板の上にTXD/RXDのモニタ用LEDがついているので、RS485ライン上の受信データの状態がわかります。
 ESP32devkit v1は、RS485/TTLコンバータからシリアルデータを受信して、サーバへデータの転送を終えるまでの間基板上の青いLEDを点灯させるようにしていますので、先の記事で書いた、サーバ書き込み時の異常(長時間responceが帰ってこない状態)の時には長時間点灯するので目視でわかります。当たり前ですが、よく見ると(この写真には写っていないです、、)、RS485/TTLコンバータで受信時のLED点灯と、ESP32devkit v1上の青いLED(処理中表示)が連動(コンバータで受信して、続けてESP32で処理)しているのがわかります。
 あとESP32 devkit v1自体も基板からはずせるようにしたかったので、ICコネクタを道具箱から探してきて、コネクタの真ん中で割って足の幅にあわせてはんだ付けしました。ESP32 devkit v1の挿入がとっても硬い、、。
 今回はハードウェア的には何を作ったわけではなく、モジュールを繋げただけ状態なのであまり面白みは無いです、、。

*:別件もあって、ヒューズ関連を調べていたのですが、WEBの記事の中にはヒューズ抵抗と抵抗型ヒューズを混同した記載もあるようです。ヒューズ抵抗は通常はカラーコード記載の抵抗値を有していて、過電流が流れると切れるもので、抵抗型ヒューズは、リードタイプの抵抗器の形状をしたヒューズ(抵抗値はほぼ無い)です。ヒューズ抵抗の方が数値のばらつきが大きいそうです。ちなみに、メーカによって違うようですが、カラーコードの最後が緑や白のものもあるらしいです。今回は緑でした。

太陽光パワーコンディショナからのデータを見える化してみた(ソフトとか編)

2023-11-12 12:16:53 | 太陽光パワコンデータの見える化
 
 概要編、に続いて今度はソフトウェアとかその開発環境とかの辺りを書こうと思います。

 先の概要編にもちょっと書きましたが、以前ESP8266を使った気圧、温湿度のモニタを作りました。皆さん最初?にやるあれ、ですね。このときはは言語をわざわざやったことのないLUAを使って疲れました(笑)が、こういう考え方で作るんだ、というのがわかってくると面白い言語だな、と思いました。
 今回は、ESP32をBaseに、より高級言語?のPython使おうか、と思って色々と調べたところ、AdafruitCircuitPythonなるものを使うことにしました。Adafruit(読みはエイダフルーツ、ですかね。本当はfruitと単数形なので最後は「ツ」じゃないですけれど)という会社、知らなかったのですが面白そうな会社です。社長さんが女性だそうですが、この界隈の方々はお好きそうなモジュールをたくさん作られています。ご興味があれば是非調べてみてください。CircuitPythonはMicroPythonからの派生だそうです。ライブラリが充実しています。

開発環境:
 開発環境は、CircuitPythonのWEBページを見ると「mu」(読みはミュー)というeditorが推奨よ、と書いてあるのですが、私のPC環境だとPCのシリアルドライバが認識されず動作せず、色々とWEBをさまよった挙げ句、Thonnyという開発環境が動いたのでそれを使うことにしました。
 Thonny(https://thonny.org/)は、「Thonny、Python IDE for beginners」と銘打ってUniversity of Tartu, Estonia.が開発したものだそうです。感謝です。

インストールとESP32への接続:
 これについては、ESP32のrevisionとかボードのバージョンとかで違うようなので、入手された環境に合わせて構築が必要です。
 私が入手したESP32 Devkit v1に使われているESP32はUSBがNativeでサポートされていないので、スクリプトをDrop&downするだけ動かせる、という機能が使えませんでした。新しいESP32であればこの機能は使えるようですが、入手した後でわかったことなので仕方ないですね。ESP32を入手されるときにはその辺りも確認が必要です。
 で、今回はThonnyを使って、USBserialでESP32につないで開発をしましたが、結構使いやすいです。上部のeditor部でeditして、Runボタンを押すと自動的にESP32へダウンロードして自動でRunします。下部のWindowで実行結果が見られます。表示設定をすると変数値の確認とかその他諸々の機能もあります(全く使いませんでしたが、、)。

プログラムの作成とポイント:
 プログラムは、必要なライブラリをImportしてPythonで作ってゆくだけなので、色々とあちこちのWEBsiteを参考にして組み立てました。
 パワコンからRS485経由で来るデータをSerialを使って読み込み、データを解析して必要なデータを抽出して、WEB(今回もAmbientサービスhttps://ambidata.io/ を使わせて頂いております。ありがとうございます)にPOST送信しているだけです。
 ポイントは、POSTするとなにかのタイミングでソフトがコケることがあって(結構落ちます)、それの対処が分からなくて随分Try&Errorしました。
 Error自体は、Repeated socket failuresとでてadafruit_requests.pyの中で落ちているようです。色々調べて、海外でのやり取りを見つけましたが、どうやらadafruit_requests.pyの先で落ちているようで、そのやり取りも途中状態でまだFixされていないような感じです。
 プログラムがコケるのでWatchDogとかでresetかなぁ、でもそれまでのデータ消えちゃうしどうしようかな、と思っていたのですが、調べてゆくとなんと、Pythonのtry/exceptで救えることがわかりました。素晴らしい。
 POSTするところをtryに入れて、Errorが起きたらexception 処理をすることでプログラムがコケるのを救ってくれます。これとても助かりました。これでとりあえず、丸一日動くようになりました。
 ポイントのもう一つは、Ambientサービス側。これはサービスの問題なので、Ambientを使わなければ問題ないと思います(もしかしたら我が家側の問題かもしれませんし、、)。そちらにPOSTすると下手をするとそこから戻ってくるのに酷いと10秒以上かかることがあるようで、データを取ってみると上記のexceptionとはまた別な要因があるようです(いえいえ、使わせていただいてありがとうございます、、)。こちらは、POST処理のパラメータにtime_outの項目があるのでそれを使って強制的に戻すようにしました。
 その他、Pythonの使い方は今回随分勉強になりました。ライブラリが充実していて助かります。以前、ESP8266で作った気圧、温湿度を単ESP32でCircuitPythonでデータを読み込むだけのプログラムはImport部分を除くとほんの数行(10行いらない、、、3行くらいですかね)でかけちゃいます。素晴らしい、、、。すべて先駆者のおかげです。ありがたいですね。感謝します。

で、処理速度的にはどんな感じ?:
 パワコン側からは10秒で20台分のデータが0.5秒間隔で出てくるので、色々と速度も気になっていたのでなんちゃってで計測しながら作りましたが、Idle Loop(他の19地点分の処理の部分)では、3,4回回っていたようですし、262バイトのデータも取りこぼしは無いので処理速度的には問題ないようです。
 当初、10秒に一回データが出てくるのでそのままAmbientにそのデータ(瞬時値と累計値程度)を送っていたら、夕方にサーバから429レスポンスが返ってくるようになって、調べたら「TooManyRequests」で、「お前多すぎ」と怒られてしまいました、、。(Ambientさんごめんなさい)
 現在は30秒に一回(主ループ3回に一回ですね)に回数を減らしてサーバに送信していますが、パワコンから受信してサーバへの送信が終わると、28秒ほどsoft sleepするようにしています。省エネを目論んでなのですが、soft sleepだし、この電力は太陽光発電からの一部を利用しているのであまり関係無いのかもしれません。Idle Loopも余裕を見て0.3秒ほどのsleepを入れています。もちろん今はパワコンは1台なので、パワコン20台のデータをサーバに送ろうとすると、違う観点の考慮が必要だと思います。

実際の出力グラフ:


ambientでの出力例です。この日は一日晴れていたようです。15時過ぎからはパネルに影がかかって来て急激に落ち込んでいます。

最後にお決まりですが、本記事は自分の修理の備忘録です。修理、分解、稼働しているシステムへの接続を勧めるものでは決して有りません。参考にされる場合はすべて自己責任でご対応ください。