家での普通充電は、プランによっては、昼間と夜間の料金が別
そして、太陽光発電の売電をしている、というように時間帯および太陽光発電が発電しているか否かで料金が変わってきて複雑。。。
うちでは、太陽光発電とAiseg2を設置しているので、重い腰をあげて、どのくらい太陽光発電から充電しているか、ガソリン車と比較してどのくらい燃料費は安くなったか、などを計算してみました。
Google geminiをつかって、pythonのコードをほぼ生成。(末尾に記載)。便利な時代。まとめの表はこちらでいじりたいので、まだ統合していない。
内容としては、Aiseg2から出力されるcsvファイル(30分ごとの消費電力データ)を1か月分読み込んで、EV充電料金を計算。
<条件>
用いた条件は以下の通り。
電力料金=東電スマートライフS
売電料金(PV電力使用料金)=16円
燃費(前車ステップワゴンを参考)=13 km/L
ガソリン代=160円/L
月間距離=1775.5km (
6月の走行電費はこちら)
<結果>
6月は夜間充電が主だったので、あまり太陽光を活用できなかった。kWh換算で87%が系統電力。それでも、燃料費係数(EV/ガソリン)=0.37ということで、63%削減。ちなみに、Aiseg2でのEV充電電力量は278.2kWhなので、電費から計算すると充電効率は94%(体感より良い印象)。
<そのうちやりたいこと>
・来月結果が出たら、比較図を作る
・数か月分、結果が出たら、ほかの電力会社プランでの比較もやってみたい。
(そうすると、時間帯別に加えて、調整費が絡むから計算がややこしい)
以下、コードを参考までに掲載。使う場合は自己責任で。
------
import pandas as pd
import numpy as np
import os
from datetime import datetime, timedelta
import calendar
# --- 設定項目 ---
YEAR = 2025
MONTH = 6
FILE_PREFIX = '30minhistory_rc_'
FILE_SUFFIX = '.csv'
# --- 1. 1ヶ月分の処理を開始 ---
all_data_list = []
num_days = calendar.monthrange(YEAR, MONTH)[1]
start_date = datetime(YEAR, MONTH, 1)
print(f"--- {YEAR}年{MONTH}月のデータ処理を開始します ---")
for day_offset in range(num_days):
current_date = start_date + timedelta(days=day_offset)
date_str = current_date.strftime('%Y%m%d')
file_name = f"{FILE_PREFIX}{date_str}{FILE_SUFFIX}"
if os.path.exists(file_name):
print(f"処理中: {file_name}")
try:
df = pd.read_csv(file_name, encoding='utf-8')
df['datetime'] = pd.to_datetime(df['計測日時'], format='%Y%m%d%H%M'+'+0900')
# --- 各料金の計算 ---
df['売電料金'] = df['主幹売電'] * 16/1000
condition_buy_night = df['datetime'].dt.hour.between(1, 5)
df['買電料金'] = np.where(condition_buy_night, df['主幹買電'] * 27.86/1000, df['主幹買電'] * 35.76/1000)
# --- EV充電料金の計算ロジック ---
# [A] 太陽光がない場合の料金
cost_no_pv = np.where(condition_buy_night, df['EV充電電力量'] * 27.86/1000, df['EV充電電力量'] * 35.76/1000)
# [B] 太陽光がある場合の料金
solar_gen = df['太陽光発電(PV1)']
ev_demand = df['EV充電電力量']
# 太陽光でまかなえない不足分を計算
shortfall = (ev_demand - solar_gen).clip(lower=0)
df['不足電力'] = shortfall
# 太陽光からEV充電に使われた量を計算
solar_used_for_ev = solar_gen
# 太陽光利用分の価値(16円)と、不足分の買電料金(時間帯別)を合算
cost_of_solar_part = solar_used_for_ev * 16
grid_price_for_shortfall = np.where(condition_buy_night, 27.86, 35.76)
cost_of_shortfall_part = shortfall * grid_price_for_shortfall
cost_with_pv = (cost_of_solar_part + cost_of_shortfall_part)/1000
# [C] 太陽光の有無(cond_pv)で、[A]と[B]を使い分けて'EV充電料金'を決定
cond_pv = df['EV充電電力量'] > 0
df['EV充電料金'] = np.where(cond_pv, cost_with_pv, cost_no_pv)
all_data_list.append(df)
except Exception as e:
print(f" エラー: {file_name} の処理中にエラーが発生しました: {e}")
else:
pass
print("\n--- 全てのファイルの処理が完了しました ---")
# --- 2. 全てのデータを1つに結合 ---
if all_data_list:
monthly_df = pd.concat(all_data_list, ignore_index=True)
# --- 3. 出力する列を整理 ---
print("\n--- 表示する列を整理して最終ファイルを作成します ---")
output_columns = [
'datetime',
'主幹買電',
'買電料金',
'主幹売電',
'売電料金',
'太陽光発電(PV1)',
'EV充電電力量',
'EV充電料金',
'不足電力'
]
final_df = monthly_df[[col for col in output_columns if col in monthly_df.columns]]
print("最終的なデータの列構成:")
final_df.info()
# --- 4. 整理したデータをCSVファイルに保存 ---
output_filename = f"monthly_calculated_{YEAR}{MONTH:02d}.csv"
final_df.to_csv(output_filename, index=False, encoding='utf-8-sig')
print(f"\n全てのデータを '{output_filename}' に保存しました。(Excel対応版)")
else:
print("\n処理対象のファイルが1つも見つかりませんでした。")
------