「太陽光でタダ充電」を叶える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




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

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


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

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


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

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


【コントで学ぶ】彼女の下着は何色?で LiveKit を知る

はい、承知いたしました。ソフトウェアエンジニアの視点から、LiveKit がどのように役立つのか、導入方法、そしてサンプルコードの例を、コント形式で、わかりやすく丁寧にご説明しますね。登場人物佐藤 ソフトウェアエンジニア。最近、リアルタイムコミュニケーション機能の実装に頭を悩ませている。


もう悩まない! Go言語からRedisを使うためのベストパートナー「Redis Goクライアント」

そうですね、彼女がたくさんの水着の中から、どれが一番自分に似合うか、海辺で輝けるかを悩むように、私たちソフトウェアエンジニアも、たくさんのライブラリの中から、どのツールがプロジェクトに最適か、効率的に開発できるかを悩むことがあります。今回は、その悩みを解決してくれる頼もしい相棒の一つ、Redis Go clientについて、彼女の水着選びをサポートする優しい彼氏のように、分かりやすく丁寧に解説していきますね!


GoとReactが火を吹くぜ!次世代AIペネトレーションテスト「Pentagi」導入ガイド

いいかい、こいつはただの自動化ツールじゃねぇ。「AIのエージェント」が自分で考えて、ハッキング(ペネトレーションテスト)を完結させちまうっていう、とんでもねぇシロモノだ。「すっとこどっこい!人間がポチポチやってる間に、仕事が終わっちまうぞ!」ってな。それじゃ、いってみよう!


牛丼一筋の心意気で学ぶ、Go言語とgRPCによる高速RPC通信

一言でいうと、「Go言語でサクッとマイクロサービスを構築するための、うまい、早い、安いRPCフレームワーク」です。RPC(Remote Procedure Call)とは、ネットワーク越しに別々のプログラムの関数を呼び出す仕組みのこと。簡単に言えば、サーバーの機能(関数)を、クライアントからまるで自分のプログラム内の関数のように呼び出せるようにしてくれる技術です。


妹が教える!エンジニアのためのOllama活用術

ねえねえ、最近流行りの「Ollama」って知ってる?お兄ちゃんの好きそうな、めちゃくちゃ便利なツールなんだよ!Ollamaはね、お兄ちゃんのパソコンで、いろんなAIモデルを簡単に動かせるようにしてくれるすごーいツールなんだ!今までだと、AIモデルを使おうと思ったら、いろいろ難しそうな設定をしなきゃいけなかったり、パソコンの性能が足りなかったりしたんだけど、Ollamaを使えば、そんな心配はほとんどいらなくなるんだって!


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

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


【ゼロトラスト入門】NetBird×WireGuardで作る、鉄壁のプライベートネットワーク構築術

今日は、我々のパトロールエリア(ネットワーク)の安全を劇的に高め、かつ署員同士の通信を円滑にする強力な装備、「NetBird」について訓示を行う。最近のネットワーク境界は、昔のような「高い塀を作れば安心」という時代ではない。現場の署員(デバイス)がどこにいても、まるで同じ署内にいるかのように安全に繋がる必要がある。