「太陽光でタダ充電」を叶えるEVCCの仕組み:ソフトウェアエンジニアが解説する設定と互換性


「太陽光でタダ充電」を叶えるEVCCの仕組み:ソフトウェアエンジニアが解説する設定と互換性

evcc-io/evcc

2025-10-13

ここでご紹介する 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 (試着室全体)

gridpvメーターは、「今、外の太陽はどれくらい強くて(PV発電)、家全体でどれくらい電力を使っているか/余っているか(Grid消費/売電)」を教えてくれる鏡のような存在です。

chargers (ランジェリー)

wallbox01は、「充電器」という名前のランジェリーです。どのブランド(go-e)で、どこに吊るされているか(uri)を特定します。

loadpoints (着こなしのルール)

mode: pvは、今回の絶対的な着こなしテーマです。「太陽光発電の余剰電力を最大限に活かすスタイル」と宣言しています。

enableとdisableのルールは、「充電を開始・停止する繊細なタイミング」を定義しています。

「余剰電力(利益)が2000W(十分な余裕)以上になったら、焦らず1分待って(delay: 1m)、そっと充電をスタートしてね」

「逆に、電力が足りなくなって200W(わずかな不足)以上になったら、5分待って(delay: 5m)、充電をストップしてね(バタバタ切り替わるのはEVの機嫌を損ねるから)」


evcc-io/evcc




ソフトウェアエンジニア必見!リアルタイム物体検出NVR「Frigate」活用術

frigateは、IPカメラ用のNVR (Network Video Recorder) だ。だが、ただのNVRじゃねぇ。こいつの真骨頂は、リアルタイムのAIによるオブジェクト検出にある。つまり、カメラの映像から、人間、車、猫といった特定の物体を瞬時に見つけ出すことができるんだ。


クレーンゲーム攻略にTelegraf!?データで掴む勝利の秘訣

MC(陽気な兄ちゃん風)「さあ、みんなー!今日は特別企画!巷で噂のUFOキャッチャー、その攻略法を伝授しちゃうぜ!」アシスタント(冷静な妹風)「でも兄さん、クレーンゲームって運じゃないですか?攻略法なんてあるんですか?」MC「フフフ…甘いな妹よ!確かに運の要素はある。だが、そこにはデータが隠されているのさ!そして、そのデータを捉えるための秘密兵器が…そう、influxdata/telegrafだ!」


Go言語でCLIを楽しく!Bubble Tea入門

やぁ、ソフトウェアエンジニアの皆さん!今日は、Go言語を使ったCLI開発を劇的に楽しくしてくれるフレームワーク「Bubble Tea」について、飲み比べコント風にご紹介しますね。このお酒、見た目は素朴な「ターミナル画面」なんだけど、一口飲むと「わ、これすごい!」ってなるんですよ。


DockerとGoで実現!遠隔操作ブラウザ「ネコ」があなたの開発を変える

やあ、諸君! プロのソフトウェアエンジニアである君なら、きっと「もっと自由に、もっと安全に、ウェブの向こう側を覗き見たい」なんて考えたことがあるはずだ。まるでルパン三世がどんな厳重なセキュリティも掻い潜るようにね。今日紹介するのは、そんな君の願いを叶えるかもしれない、とびきりのツール「m1k1o/neko」、通称「ネコ」だ。


Go言語エンジニアのためのWhatsApp連携術:whatsmeow徹底解説

whatsmeow は、Go言語(Golang)で書かれた、WhatsApp Web のマルチデバイス API を扱うためのライブラリです。「マルチデバイス API」というのがポイントで、スマートフォンがオフラインでも機能する、新しいWhatsAppの仕組みに対応しています。つまり、これを使えば、プログラムからWhatsAppのメッセージを送受信したり、アカウント情報を管理したりといった操作が可能になります。


冒険心をくすぐるFocalboard:自社運用型プロジェクト管理ツールの魅力

まるで、あなたのチームを救う「秘宝の地図」のような存在になるかもしれませんよ。Focalboard は、一言で言えば「自分だけの秘密基地」で作れる、高機能なプロジェクト管理ツールです。TrelloやNotion、Asanaのようなツールのオープンソース版で、自分たちのサーバーに設置して使うことができます。つまり、データの保管場所も、機能の拡張も、すべて自分たちの手の中にあるんです。まるで、自分たちだけの特別なギルドハウスを築き上げるような感覚ですね!


ソフトウェアエンジニアがChainlinkを導入するメリットとサンプルコード

さて、今回は「smartcontractkit/chainlink」について、ソフトウェアエンジニアの視点から、どういうときに役に立つのか、どうやって使うのか、といったことを、キャンプのコントを演じているつもりで、分かりやすく解説していきますね。


Dockerだけじゃない!Moby Projectで自作コンテナ環境を構築する

Moby Project ってのはな、一言で言うと「コンテナをベースにしたシステムを作るための、オープンソースのツールキット」だ。例えるなら、俺たちが事件現場で使う道具一式、例えば手錠とか懐中電灯とか、そういうのを全部まとめて提供してくれるようなもんだな。


RPG風に解説!cURLでサーバーを攻略する方法

cURLは、例えるならどんな難攻不落の城壁も乗り越え、どんな深淵の洞窟からも宝物(データ)を持ち帰るための、万能の聖剣のような存在です。ウェブの世界という広大なフィールドで、データ転送という重要なミッションを遂行するために、私たちはこのツールを使いこなしています。


Goエンジニアへの道:「go-interview-practice」で実践的スキルアップ!

こんにちは!Go言語での転職やスキルアップを考えている皆さん、RezaSiさんの「go-interview-practice」という素晴らしいプロジェクトをご存知ですか?これは、Go言語を使ったコーディング面接の練習問題集なんです。まるでビールを飲み比べながら味の違いを楽しむように、様々なコーディング問題を解いて、あなたのGoスキルを磨き上げることができます。