「太陽光でタダ充電」を叶えるEVCCの仕組み:ソフトウェアエンジニアが解説する設定と互換性
ここでご紹介する evcc-io/evcc は、まさにその悩みを解決してくれる、ソフトウェアエンジニアから見て「これは使える!」と思える素晴らしいオープンソースプロジェクトです。
evcc("Electric Vehicle Charge Controller"の略)は、電気自動車(EV)の充電を賢くコントロールするためのエネルギー管理システムです。
ざっくり言うと、「自宅の太陽光発電(PV)システムや蓄電池の状態、EVの充電状態、電力料金などを総合的に判断して、最も効率的で経済的、かつエコな充電を自動で行う」ためのソフトウェアです。
特に、ご関心の高い「Solar Charging(ソーラーチャージング)」機能が核となっています。
| メリット | 説明 | 技術的視点からの魅力 |
| 太陽光余剰電力の活用 | 自宅で発電した電力のうち、家庭で使いきれずに余っている電力(余剰電力)だけでEVを充電します。売電価格より自家消費のほうがお得なことが多いので、経済的メリットが大きいです。 | リアルタイムでの電力計測データ(メーター)と充電器(チャージャー)の制御を組み合わせた最適化アルゴリズムがGo言語(golang)で実装されており、高速かつ安定しています。 |
| 高い互換性(Vendor Neutrality) | 多くのEV充電器、太陽光インバーター、スマートメーター、EV自体(API経由)に対応しています。特定のメーカーに縛られません。 | デバイスとの連携には、MQTT(軽量なメッセージングプロトコル)や、メーカー固有のAPI、Modbusなどが広く使われており、柔軟な統合レイヤーが構築されています。設定ファイル(YAML)ベースで拡張しやすい設計です。 |
| ローカル動作 | ソフトウェアは自宅のラズベリーパイやサーバーなどで動作し、クラウドサービスに依存しません。プライバシー重視で、インターネット接続が途切れても基本機能は動作します。 | Go言語はクロスプラットフォームで、組み込み環境にもデプロイしやすく、依存関係が少ないため、安定したローカル運用に適しています。 |
| 柔軟な充電モード | 「太陽光の余剰電力だけで充電する(pvモード)」の他、「最低限の電力で充電を続けつつ、余剰電力があればフルパワーで充電する(min+solarモード)」など、柔軟なモード設定が可能です。 | Home-automation(ホームオートメーション)の文脈で、充電の開始・停止・電流調整といったロジックを、ユーザーの細かいニーズに合わせてカスタマイズできます。 |
evccはGo言語で書かれたアプリケーションですが、多くのプラットフォームで簡単に導入できるように工夫されています。
evccを動かすためのサーバーが必要です。最も一般的なのは以下のいずれかです。
Raspberry Pi などの小型PC
NAS (Docker対応のもの)
Home Assistant や openHAB などのホームオートメーションプラットフォーム上(アドオンとして)
Go言語の実行ファイルとして配布されています。
多くのエンジニアにとって最も簡単な方法です。
# 必要な設定(evcc.yamlなど)を保持するためのディレクトリを作成
mkdir evcc-config
cd evcc-config
# docker-compose.yml ファイルを作成し、設定を記述
# (設定ファイルについては後述のサンプルコードを参照)
# 実行
docker-compose up -d
リリースページからバイナリ(実行ファイル)をダウンロードして実行します。
# 最新版をダウンロード(環境に合わせてURLを調整)
wget https://github.com/evcc-io/evcc/releases/download/xxx/evcc_linux_arm64.deb
sudo dpkg -i evcc_linux_arm64.deb
# サービスとして起動
sudo systemctl enable evcc
sudo systemctl start evcc
ここが最も重要な部分です。evccはYAML形式の設定ファイルに基づいて動作します。このファイルで、自宅のEV充電器、太陽光インバーター、電力メーターなどの機器を定義し、それらを連携させます。
ここでは、「太陽光インバーター」と「EV充電器」を連携させて、「太陽光余剰電力で充電する」ための基本的な設定のイメージをご紹介します。
# evcc.yaml - evccの基本設定ファイル
site:
title: "My Solar Home" # UIに表示される名前
meters:
grid: # グリッド(電力会社)との電力メーター
name: grid
type: custom # 例: Modbus TCPで接続するスマートメーター
uri: 192.168.1.10:502
# ...その他の設定...
pv: # 太陽光発電(PV)の発電量メーター (インバーター)
name: pv
type: fronius # 例: Fronius社のインバーター
# ...その他の設定(IPアドレスなど)...
chargers:
- name: wallbox01 # EV充電器
type: go-e # 例: go-e Charger
uri: 192.168.1.20 # IPアドレス
# ...その他の設定...
# ロードポイント(充電口)の定義
loadpoints:
- title: "Garage Charger"
charger: wallbox01 # 上で定義した充電器を指定
# ここがコア設定:充電モード!
mode: pv # これで「太陽光余剰電力充電(Solar Charging)」が有効になります!
# 最小/最大電流の設定
minCurrent: 6 # 最低充電電流 (A) - これ以下だと充電が安定しない場合がある
maxCurrent: 16 # 最大充電電流 (A)
# 余剰電力充電の制御オプション
enable:
# 余剰電力が2000W以上で1分間続いたら充電を開始
delay: 1m
threshold: -2000 # W (マイナスは消費=余剰が必要な電力)
disable:
# 余剰電力が-200W以下で5分間続いたら充電を停止
delay: 5m
threshold: 200 # W (プラスは売電/買電)
この設定ファイルは、まるでランジェリーの試着室での指示出しのようなものです。
site (試着室全体)
gridとpvメーターは、「今、外の太陽はどれくらい強くて(PV発電)、家全体でどれくらい電力を使っているか/余っているか(Grid消費/売電)」を教えてくれる鏡のような存在です。
chargers (ランジェリー)
wallbox01は、「充電器」という名前のランジェリーです。どのブランド(go-e)で、どこに吊るされているか(uri)を特定します。
loadpoints (着こなしのルール)
mode: pvは、今回の絶対的な着こなしテーマです。「太陽光発電の余剰電力を最大限に活かすスタイル」と宣言しています。
enableとdisableのルールは、「充電を開始・停止する繊細なタイミング」を定義しています。
「余剰電力(利益)が2000W(十分な余裕)以上になったら、焦らず1分待って(delay: 1m)、そっと充電をスタートしてね」
「逆に、電力が足りなくなって200W(わずかな不足)以上になったら、5分待って(delay: 5m)、充電をストップしてね(バタバタ切り替わるのはEVの機嫌を損ねるから)」