発電量のログ取り

屋上に仮設したソーラーパネルの発電量は、スマートプラグで測ってSmart Lifeアプリから見て楽しんでいる。毎日の発電量なんかもグラフで出る。

とはいえ生活エネルギーの可視化として、こういうインタラクティブな観察は非常に弱いものだ。1度に1つのデバイスしか見られず、切り替えには時間がかかる。

たとえば瞬間的にたくさん発電したときも、屋根上の分と庭のNGインバータ(止まっていたのでアクセスしやすい場所に隔離してテスト中。今日は動いてる)の分を足すことすらできない。

というわけで、スマートプラグの値を機械的に読めるように、ずけらんさんに教えてもらったPythonのTuyaバインディングを使ってみることにした。

TuyaというのはSmartLifeの元締めの会社で、ここに開発者登録してAPIを叩くことで、スマートプラグその他の操作や情報取得が手元のプログラムからできるようになる。

手順としては、

  • Tuyaの開発者登録をする
  • TuyaのIoT Platformのクラウド開発コンソールでクラウド開発プロジェクトを開始し、Access ID, Access Secretを取得
  • このプロジェクトでAPIを使えるようにしておく。
  • バイスを登録したSmart Lifeアプリをプロジェクトに紐付ける
  • 手元のコンピュータにインストールしたtinytuya等のwizardモードを使ってデバイスの情報を取る
  • この情報を使い、デバイスにアクセスして(tuyaのクラウドにアクセスして?)ログを取る

という具合。めちゃめちゃ面倒だったけど、なんとか動いた。

注意としては、さいきんTuya IoT Platformはリニューアルされてて、tuyapowerモジュールのReadme.mdにある説明そのままではないこと。APIも、Smart Home Devices Management、Authorization、Smart Home Family Managementの3つを使えるようにしろとあるのだが、多くは「IoT Core」に統合されたようで、よくわからないから全部enableしちゃえ! で動いた。いまんとこカネは取られていない(クレカの登録も不要)。

で、ここまでやったらこんな感じでデータが取れる。

>>> tuyapower.deviceInfo('1826182840f520ffffff', '172.17.1.39', "4b4734f9ef987654", '3.3')

(True, 60.7, 591.0, 105.8, 'OK')

tuyapowerモジュールのdeviceinfoメソッドを使い、Device ID 1826182840f520ffffff、Device IP アドレス172.17.1.39、Device Secret 4b4734f9ef987654、プロトコルバージョン 3.3でアクセスすることで、(オン状態、60.7W、591.0mA、105.8V、Status OK) という情報が得られたわけだ。

この方法を使い、2つのスマートプラグから情報を取り、オンとかstatusとかは省き、日付時刻をつけ、合計ワット数も含めるようにして表示してみた。:

2023/02/26 14:36:32, 112.9, 91.0, 961.0, 103.2, 21.9, 242.0, 102.9

形式は:

日付時刻, 発電量(合計), 発電量(屋根), 電流(屋根), 電圧(屋根), 発電量(庭), 電流(庭), 電圧(庭)

である。上のデータで言うと、2023/02/26 14:36:32に合計112.9Wの発電があり、屋根では91.0Wが発電され、それは961.0mAで103.2Vの電気として流れ、庭では21.9Wが発電され、それは242.0Aで102.9Vの電気として流れたということ。

データは毎秒取得することもできたが、同じ値が続くことが結構あり、見にくくなるだけだったので3秒ごとに取得するようにした。なかなかよい感じに並ぶようになった気がする。

今日は寒くて曇っているのだが、時々太陽が顔を出す。すると非常によく発電する。

2023/02/26 14:41:13, 351.0, 273.4, 2804.0, 106.4, 77.6, 863.0, 104.5
2023/02/26 14:41:17, 286.9, 209.3, 2500.0, 104.8, 77.6, 863.0, 104.5
2023/02/26 14:41:20, 518.8, 390.7, 3779.0, 104.8, 128.1, 1462.0, 104.5
2023/02/26 14:41:23, 548.3, 390.7, 3779.0, 104.8, 157.6, 1505.0, 104.5
2023/02/26 14:41:26, 592.8, 420.3, 3937.0, 104.8, 172.5, 1621.0, 106.4
2023/02/26 14:41:29, 592.8, 420.3, 3937.0, 104.8, 172.5, 1621.0, 106.4
2023/02/26 14:41:32, 617.0, 444.5, 4168.0, 106.6, 172.5, 1621.0, 106.4
2023/02/26 14:41:35, 617.0, 444.5, 4168.0, 106.6, 172.5, 1621.0, 106.4
2023/02/26 14:41:38, 594.1, 421.6, 3979.0, 106.4, 172.5, 1621.0, 106.4
2023/02/26 14:41:41, 594.1, 421.6, 3979.0, 106.4, 172.5, 1621.0, 106.4
2023/02/26 14:41:44, 563.4, 390.9, 3666.0, 106.4, 172.5, 1621.0, 106.4
2023/02/26 14:41:47, 584.0, 411.5, 3881.0, 106.4, 172.5, 1621.0, 106.4
2023/02/26 14:41:51, 584.0, 411.5, 3881.0, 106.4, 172.5, 1621.0, 106.4
2023/02/26 14:41:54, 584.0, 411.5, 3881.0, 106.4, 172.5, 1621.0, 106.4
2023/02/26 14:41:57, 472.90000000000003, 347.1, 3359.0, 106.4, 125.8, 1186.0, 105.0
2023/02/26 14:42:00, 411.5, 293.2, 2950.0, 105.0, 118.3, 1197.0, 105.0
2023/02/26 14:42:03, 411.5, 293.2, 2950.0, 105.0, 118.3, 1197.0, 105.0
2023/02/26 14:42:06, 579.3, 418.0, 3941.0, 105.0, 161.3, 1552.0, 105.0
2023/02/26 14:42:09, 593.8, 418.0, 3941.0, 105.0, 175.8, 1673.0, 106.9
2023/02/26 14:42:12, 624.5, 448.7, 4193.0, 107.1, 175.8, 1673.0, 106.9
2023/02/26 14:42:15, 624.5, 448.7, 4193.0, 107.1, 175.8, 1673.0, 106.9
2023/02/26 14:42:18, 601.4000000000001, 425.6, 4010.0, 107.1, 175.8, 1673.0, 106.9
2023/02/26 14:42:21, 428.3, 313.0, 2856.0, 105.6, 115.3, 1133.0, 105.8
2023/02/26 14:42:25, 312.0, 230.2, 2469.0, 105.6, 81.8, 960.0, 105.8
2023/02/26 14:42:28, 270.3, 196.4, 2399.0, 105.6, 73.9, 929.0, 105.8
2023/02/26 14:42:31, 281.20000000000005, 207.3, 2389.0, 105.6, 73.9, 929.0, 105.8
2023/02/26 14:42:34, 387.79999999999995, 288.2, 2795.0, 104.8, 99.6, 1037.0, 104.3
2023/02/26 14:42:37, 481.5, 372.8, 3622.0, 104.8, 108.7, 1086.0, 104.3
2023/02/26 14:42:40, 481.5, 372.8, 3622.0, 104.8, 108.7, 1241.0, 104.3
2023/02/26 14:42:43, 547.0, 387.6, 3392.0, 107.0, 159.4, 1532.0, 106.1
2023/02/26 14:42:46, 513.9, 354.5, 3426.0, 107.0, 159.4, 1532.0, 106.1
2023/02/26 14:42:49, 592.5, 423.5, 4002.0, 107.0, 169.0, 1604.0, 106.1
2023/02/26 14:42:52, 592.5, 423.5, 4002.0, 107.0, 169.0, 1604.0, 106.1
2023/02/26 14:42:55, 545.0, 387.0, 3512.0, 106.6, 158.0, 1476.0, 106.9
2023/02/26 14:42:59, 584.6, 426.6, 4018.0, 106.6, 158.0, 1476.0, 106.9
2023/02/26 14:43:02, 566.5, 408.5, 3614.0, 106.6, 158.0, 1476.0, 106.9
2023/02/26 14:43:05, 524.3, 408.5, 3614.0, 106.6, 115.8, 999.0, 106.4
2023/02/26 14:43:08, 275.9, 196.5, 2547.0, 104.8, 79.4, 910.0, 106.4
2023/02/26 14:43:11, 359.7, 237.5, 3317.0, 104.8, 122.2, 1238.0, 106.4
2023/02/26 14:43:14, 550.7, 390.4, 3666.0, 104.8, 160.3, 1591.0, 105.8
2023/02/26 14:43:17, 572.2, 411.9, 4038.0, 106.4, 160.3, 1591.0, 105.8
2023/02/26 14:43:20, 588.3, 411.9, 4038.0, 106.4, 176.4, 1657.0, 105.8

増えたと思ったら減り、減ったと思ったら増える。焚き火や水槽を見てるみたいに飽きない。時間泥棒ですw

発電量の可視化

データはCSV形式で吐くようにしといたので、表計算ソフト等で開けるが、とりあえずはGoogle Looker Studioでグラフを描いてみた。

2023/2/26 12:59-18:30の発電量。緑が屋根上、赤が庭、青が合計のワット数。

まあ、この程度の可視化だったら普通の表計算ソフトと変わらないかも。色使いが派手なとこが今風?
  • 青が合計、緑が屋上分の1.2kW、赤が庭の300W
  • ピークを結んでいくと「本来の」日射量が見える感じ
  • 雲の影響がすごい。7〜8割のエネルギーを持っていかれる
  • 庭はパネルが1/4なので発電量も屋上の1/4になるはずだが、昼の間は2/5くらい出てる
  • 15:30頃に庭が家の影に入るので、庭の発電量はここで急速に減る
  • グラフ的には左の方の最高値が出た直後にしばらく途切れてるとこがもったいない。まあスクリプトをいじってたのでしょうがない。

傾きの違い(庭のは25°、屋上のは10°)がこれほど大きく影響するとは…と思うんだけど、もしかして屋上の4台のインバータのうち1台くらい止まってる可能性もあるか? 条件を揃えないと、よくわからない。まあ、見ればわかるんだけど。

また、13:30前の最大のピークでは771.7Wを叩き出している。生データはこんな感じ。

2023/02/26 13:27:03, 771.7, 567.1, 5237.0, 108.5 204.6, 1885.0, 108.0
2023/02/26 13:27:06, 702.7, 498.1, 4597.0, 108.5 204.6, 1885.0, 108.0
2023/02/26 13:27:09, 672.9, 498.1, 4597.0, 108.5 174.8, 1673.0, 108.0
2023/02/26 13:27:12, 533.9, 387.0, 3755.0, 107.0 146.9, 1443.0, 108.0
2023/02/26 13:27:16, 683.9, 507.4, 4966.0, 107.0 176.5, 1779.0, 108.0
2023/02/26 13:27:19, 724.5, 548.0, 5149.0, 107.0 176.5, 1779.0, 108.0
2023/02/26 13:27:22, 747.8, 548.0, 5149.0, 107.0 199.8, 1934.0, 108.2
2023/02/26 13:27:25, 504.5, 331.2, 3420.0, 108.5 173.3, 1176.0, 108.2
2023/02/26 13:27:28, 350.7, 248.7, 2977.0, 108.5 102.0, 1017.0, 108.2
2023/02/26 13:27:31, 350.7, 248.7, 2977.0, 108.5 102.0, 1017.0, 108.2

20秒で半分になっちゃうような瞬間値ではあるものの、記録は記録である。

ウチのパネルは合計1500Wあるので、772Wはスペック出力のほぼ半分…ではなく、インバータ効率が90%(総出力1350W)なので57%くらい出てる。

このとき庭のNGインバータが204.6Wを出してるけど、こちらのパネルの最大出力が300*0.9の270Wであることを考えると、これは204.6 / 270 = 75.8%くらい。この季節としては随分すごい。これに対して屋根上のインバータは1080Wの最大出力に対して567.1Wなので52.5%くらい。

両者の主な違いは設置角度で、庭のパネルは地面に対して25°、屋根上のパネルは10°で設置している。たった15度の違いなので、cos15°は0.966くらいだから日照量は3.4%しか違わないはずなのに、発電量は25%近く違うわけだ。

当地の13:30の太陽高度は53.0°なので、この時の理想のパネル角度は37°。これに対して庭のは12°、屋上のは27°の違いがある。

おそらく20°くらいを境に何らかの制限要因(反射とか?)が急に増大するのでは、と思われるのだが。ちょっとわからない。もうちょっと立てたいところだが、台風を考えると難しいところ。

それにしても可視化ヤバい。楽しすぎる。