充放電コントローラ計測のための通信接続方法は RS232C-USBケーブルを使った有線、BMS計測のための通信接続方法は Bluetoothを使った無線でしたが、今回、充放電コントローラ計測のための通信接続方法もBluetooth(Renogy BT-1)を使った無線に変更しました。

⇒前回記事:「車庫屋根ソーラー発電システム36(12Vシステムのパネル変更)

 関連記事を遡ると
⇒関連記事:「車庫屋根ソーラー発電システム31(計測システム改修)」※計測システム変更3
⇒関連記事:「車庫屋根ソーラー発電システム29(計測システム改善)」※計測システム変更2
⇒関連記事:「車庫屋根ソーラー発電システム25(計測システム改造)」※計測システム変更1
⇒関連記事:「車庫屋根ソーラー発電システム20(計測システム構築)
 計測システムの「関連記事」では、今回、計測システム(新規)構築から数えて5回目となり、これまで記事のお題目に色んな言葉を使ってましたが、今後も続くことを想定し2回目以降はすべて「変更」で統一することにしました・・・。従いまして、今回4回目の変更になります。過去の記事のお題目は敢えて変更してません。
fig01
 充放電コントローラ(Renogy Rover 60A)との通信接続には、solarshed を使っていた関係上、Renogy Rover 40A に付属していたRS232-USBケーブルを使っていました。しかしながら、BMS通信に使っているBluetoothの方が使い勝手がいいので、充放電コントローラ(Renogy Rover 60A)との通信接続も Bluetooth化するために solarshed をベースにした改造による実現について検討していたところ、ちょうど目的に合った solar-bt-monitor がでてきたので、今回これを導入する作業を行います。
 以下、現状の通信接続構成やプロセス機能配置を含む計測システム構成図になります。
fig02
 以下、変更後の計測システム構成図になります。solar-bt1-monitor プロセス(prometheus exporter プロセス)を常時起動し bluetooth により Renogy Rover 60Aに接続している Renogy BT-1 に接続します。solarshed プロセスからの接続は、RS232C-USBケーブル をRenogy Rover 40A に接続変更しました。
fig03
 今回唯一の引っかかりポイントについて、Renogy Rover 40A 用に買った古い Renogy BT-1 だと、solar-bt1-monitor がうまく動作しませんでした。古い Renogy BT-1 では60A、40Aどちらもダメで、Renogy Rover 60A 用に買った新しい Renogy BT-1 では60A、40AどちらもOKでした。アプリからの接続は古い方も新しい方も、60A、40Aどちらでも問題なく動作していましたので、古い方が壊れているということでもなさそうです。
 solar-bt1-monitor のログを見るとbluetooth接続が問題なくできた後、1回目は正しく計測データを取得できているっぽいのですが、2回目以降は正しく取得できなくなっているようです。古い Renogy BT-1 と 新しい Renogy BT-1 では、データ構造が異なるのかもしれません。
 左が古い Renogy BT-1、右が新しい Renogy BT-1。
IMG_5642
 結果的に、新しい Renogy BT-1 を使った環境での solar-bt1-monitor プロセス動作は、今のところ極めて安定しています。すばらしいプログラム完成度です。

 solarshed から solar-bt1-monitor への機能上の変更点は以下の通りです。(気付いた範囲です)
・通信接続方法が RS232C-USBケーブル を使う有線接続から Renogy BT-1 を使うbluetooth無線接続に変更
・充放電コントローラから出力される電流量が以下prometheusパラメータにより取得できるようになりました
 solarmon_battery_current
⇒ solarshed 利用時は、solarshed_battery_volts(充放電コントローラの出力電圧) と solarshed_solar_watts(ソーラーパネルの発電電力) から充放電コントローラの変換効率100%の想定で、オームの法則により電流量を算出していました。
・以下のような各種積算量がprometheusパラメータにより取得できるようになりました(使ってませんが)
 solarmon_max_charging_power_today
 solarmon_max_discharging_power_today
 solarmon_charging_amp_hours_today
 solarmon_discharging_amp_hours_today
 solarmon_power_generation_today
 solarmon_power_generation_total

 参考のため、prometheus exporter へのweb接続出力結果をそのまま以下にコピペします。
--
# HELP python_gc_objects_collected_total Objects collected during gc
# TYPE python_gc_objects_collected_total counter
python_gc_objects_collected_total{generation="0"} 278.0
python_gc_objects_collected_total{generation="1"} 149.0
python_gc_objects_collected_total{generation="2"} 0.0
# HELP python_gc_objects_uncollectable_total Uncollectable object found during GC
# TYPE python_gc_objects_uncollectable_total counter
python_gc_objects_uncollectable_total{generation="0"} 0.0
python_gc_objects_uncollectable_total{generation="1"} 0.0
python_gc_objects_uncollectable_total{generation="2"} 0.0
# HELP python_gc_collections_total Number of times this generation was collected
# TYPE python_gc_collections_total counter
python_gc_collections_total{generation="0"} 66.0
python_gc_collections_total{generation="1"} 5.0
python_gc_collections_total{generation="2"} 0.0
# HELP python_info Python platform information
# TYPE python_info gauge
python_info{implementation="CPython",major="3",minor="7",patchlevel="3",version="3.7.3"} 1.0
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 6.66624e+07
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 2.3425024e+07
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1.65070565025e+09
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 124.91
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 12.0
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 1024.0
# HELP solarmon_battery_percentage Battery %
# TYPE solarmon_battery_percentage gauge
solarmon_battery_percentage 100.0
# HELP solarmon_battery_volts Battery Voltage
# TYPE solarmon_battery_volts gauge
solarmon_battery_volts 27.200000000000003
# HELP solarmon_battery_current Battery Current
# TYPE solarmon_battery_current gauge
solarmon_battery_current 10.22
# HELP solarmon_controller_temperature_celsius Controller Temperature
# TYPE solarmon_controller_temperature_celsius gauge
solarmon_controller_temperature_celsius 29.0
# HELP solarmon_battery_temperature_celsius Battery Temperature
# TYPE solarmon_battery_temperature_celsius gauge
solarmon_battery_temperature_celsius 22.0
# HELP solarmon_load_volts Load Voltage
# TYPE solarmon_load_volts gauge
solarmon_load_volts 27.200000000000003
# HELP solarmon_load_amperes Load Current
# TYPE solarmon_load_amperes gauge
solarmon_load_amperes 0.0
# HELP solarmon_load_power_watts Load Power
# TYPE solarmon_load_power_watts gauge
solarmon_load_power_watts 0.0
# HELP solarmon_solar_volts Solar Voltage
# TYPE solarmon_solar_volts gauge
solarmon_solar_volts 51.400000000000006
# HELP solarmon_solar_amperes Solar Current
# TYPE solarmon_solar_amperes gauge
solarmon_solar_amperes 5.64
# HELP solarmon_solar_watts Solar Power
# TYPE solarmon_solar_watts gauge
solarmon_solar_watts 290.0
# HELP solarmon_max_charging_power_today Solar Power
# TYPE solarmon_max_charging_power_today gauge
solarmon_max_charging_power_today 414.0
# HELP solarmon_max_discharging_power_today Solar Power
# TYPE solarmon_max_discharging_power_today gauge
solarmon_max_discharging_power_today 0.0
# HELP solarmon_charging_amp_hours_today Solar Power
# TYPE solarmon_charging_amp_hours_today gauge
solarmon_charging_amp_hours_today 35.0
# HELP solarmon_discharging_amp_hours_today Solar Power
# TYPE solarmon_discharging_amp_hours_today gauge
solarmon_discharging_amp_hours_today 0.0
# HELP solarmon_power_generation_today Solar Power
# TYPE solarmon_power_generation_today gauge
solarmon_power_generation_today 944.0
# HELP solarmon_power_generation_total Solar Power
# TYPE solarmon_power_generation_total gauge
solarmon_power_generation_total 788872.0
# HELP solarmon_controller_charging_state Controller Charging State
# TYPE solarmon_controller_charging_state gauge
solarmon_controller_charging_state 2.0
# HELP pi_temperature_celcius Pi Temperature
# TYPE pi_temperature_celcius gauge
pi_temperature_celcius 41.856
--

 構築手順については、solar-bt1-monitor の README にとても親切に記載されています。今回の変更での対応はその一部になります。

1.solar-bt1-monitor のインストール

・GATTライブラリのインストール
 # pip3 list | grep gatt
 gatt              0.2.7
 gattlib           0.20201113
 ⇒すでにBMSとの通信接続で使用しているのでインストール済でした。

・libscrcのインストール
 ⇒pip3ではインストールできないため、libscrcをビルドする必要があるとのことです。
 # cd ~/
 # git clone https://github.com/hex-in/libscrc
 # cd libscrc/
 # python3 setup.py build
 # python3 setup.py install

・solar-bt1-monitor のデリバリー
 # cd ~/
 # git clone https://github.com/snichol67/solar-bt-monitor.git
 # mv solar-bt-monitor solar-bt-monitor1 ⇒複数のインスタンス(充放電コントローラ)を設定する予定のため

・solar-bt1-monitor 設定ファイルの編集
 # cd solar-bt-monitor1
 # cp solar-bt1-monitor.ini.dist solar-bt1-monitor.ini
 # vi solar-bt1-monitor.ini
 --
 [monitor]
 adapter = hci0
 device_alias = BT-TH-XXXXXXXX ⇒使用する Renogy BT-1 の情報を設定、アプリで確認できます
 mac_addr = XX:XX:XX:XX:XX:XX ⇒使用する Renogy BT-1 の情報を設定、アプリで確認できます
 log_level = ERROR ⇒最初"DEBUG" で動作確認してから、ログの最小化のため"ERROR"に設定
 continuous_monitor = True
 data_read_interval = 30
 reconnect = True
 data_logger = prometheus
 --

・prometheus exporter のポート設定変更
 # vi ./prometheus_logger.py
 --
 ・・・
 start_http_server(5001) ⇒デフォルトは5000、solarshed exporter と競合するため変更
 ・・・
 --

2.prometheus.yml の変更(追記)

 # cd /etc/prometheus
 # vi prometheus.yml
 --
 ・・・
   - job_name: solar-bt-monitor1
     static_configs:
       - targets: ['localhost:5001']
 ・・・
 --

3.solar-bt1-monitor の起動

・起動シェルの作成
 # cd ~/
 # vi solar-bt-monitor1.sh
 # cat solar-bt-monitor1.sh
 #!/bin/bash
 pyspid=`ps -ef | grep solar-bt-monitor1 | awk '{if($8=="python3")print $2}'`
 if [ ! "$pyspid" = "" ]
 then
         kill -9 $pyspid
         sleep 1
 fi
 ( cd /root/solar-bt-monitor1 ; python3 /root/solar-bt-monitor1/solar-bt-monitor.py ) &

・クーロンへの起動シェル追加
 # crontab -e
 # crontab -l
 ・・・
 @reboot /root/solar-bt-monitor1.sh
 ・・・

・起動(RaspberryPIの再起動か以下コマンド投入)
 # systemctl restart prometheus
 5分程度 prometheus の再起動完了を待ってから
 # /root/solar-bt-monitor1.sh
 ログ(~/solar-bt-monitor1/solar-bt-monitor/solar-bt-monitor.log)に異常出力がないか確認する

4.Grafana GUI の変更

 ・既存のダッシュボードをコピーして、solarshed のパラメータを solar-bt-monitor1 の対応するパラメータに変更

 変更作業は以上で完了です。

 以下、先の計測システム構成変更に関係するところ以外での変更はありません。

 負荷システム構成図。
fig04
 24Vシステム構成図。
fig05
 12Vシステム構成図。
fig06
 その後システム動作は順調です。最初と微妙に画面配置が好みと気分で変わっていますが、いとも簡単に変更できるところがGrafanaの強みです。
fig01_202204251215