How I Set Up a 100kWh Home Battery with Home Assistant

Real-Time Monitoring, Automation, and Energy Independence

Most people hear "100kWh home battery" and think I'm joking. I'm not. I've got 100 kilowatt-hours of lithium iron phosphate sitting in my garage, integrated with Home Assistant, and monitored down to the individual cell level. Here's how I did it, what I learned, and how you can do something similar — even if you start smaller.

Why 100kWh? Because Half-Measures Are for Quitters

Let me back up. I've got a 16.1 kWh solar array on my roof in Coastal Georgia. When I first installed solar, I was grid-tied with no battery. That meant I was exporting power during the day when my panels were cranking and buying it back at night when rates were higher. I was essentially subsidizing the utility company's margins.

The math was simple: if I could store what I generated during the day and use it at night, I'd slash my bill. But I didn't want a tiny 10kWh battery that would run out by 9 PM. I wanted enough capacity to run my entire house — HVAC, home lab servers, EV charging, everything — through the night and into the next morning. That meant going big.

I settled on a mixed-battery setup that gets me exactly to 100kWh of usable capacity, with plenty of headroom.

The Hardware

Here's what the physical setup looks like:

Battery Configuration

Primary Battery Bank:

Safety Features:

  • Each battery has its own over/under current breaker
  • LiFePO4 chemistry ensures safety and longevity — chosen for its superior cycle life and thermal stability over NMC
  • Climate-controlled garage installation

Inverter System

I'm running EG4 inverters with WiFi dongles that communicate directly with Solar-Assistant software:

  • Each EG4 inverter has a WiFi dongle providing real-time monitoring
  • The system prioritizes solar/battery power before using any grid power
  • No peak shaving logic — we simply use battery power instead of grid when available

Solar Array

  • Capacity: 16.1 kWh DC (63 × 250W panels)
  • Panels: Mounted on a south-facing roof with minimal shading
  • Connection: DC-coupled to the hybrid inverter system

HVAC System

  • Carrier HVAC/HP unit with built-in soft start functionality
  • The soft start allows smooth operation even during battery-only mode
  • More efficient power draw during grid-down situations

Utility Rate Structure

My utility has time-of-use pricing:

  • Peak: $0.21/kWh (2 PM - 7 PM)
  • Off-peak: $0.11/kWh (7 PM - 11 PM, 6 AM - 2 PM)
  • Super off-peak: $0.06/kWh (11 PM - 6 AM)

This structure heavily incentivizes using battery power during peak hours.

Solar-Assistant: The Real-Time Monitoring Platform

Before we dive into Home Assistant integration, let me introduce Solar-Assistant — the software that makes this whole setup shine.

Solar-Assistant runs on a Raspberry Pi and provides:

Key Features:

  • Real-time analytics via Web, Android and iPhone apps (metrics update every 2 seconds)
  • Remote inverter settings adjustment — perfect for installers to avoid costly site visits
  • Role-based, multi-site access via single login with view-only or administrator permissions
  • Open Data with MQTT integration for Home Assistant and custom projects
  • Standalone operation without internet, with full remote access features when online

I chose Solar-Assistant specifically for its EG4 integration and the WiFi dongles that communicate directly with each inverter. This gives me granular visibility that I couldn't get from most other monitoring platforms.

Integrating with Home Assistant

This is where it gets fun. Hardware is hardware — it sits there and does its job. But without visibility and control, you're flying blind. Home Assistant turned my battery system from a dumb box into an intelligent energy management platform.

Getting the Data In

Solar-Assistant exposes comprehensive data via MQTT, which Home Assistant automatically discovers:

# configuration.yaml - MQTT sensor example for Solar-Assistant
mqtt:
  sensor:
    - name: "Battery State of Charge"
      state_topic: "solar-assistant/battery/soc"
      unit_of_measurement: "%"
      value_template: "{{ value }}"
    - name: "Battery Power"
      state_topic: "solar-assistant/battery/power"
      unit_of_measurement: "W"
      value_template: "{{ value }}"
    - name: "Solar Production"
      state_topic: "solar-assistant/solar/production"
      unit_of_measurement: "W"
      value_template: "{{ value }}"
    - name: "Grid Import"
      state_topic: "solar-assistant/grid/import"
      unit_of_measurement: "W"
      value_template: "{{ value }}"

The critical sensor is sensor.battery_state_of_charge — this gives me the combined SOC across all batteries, not just individual ones. That's the number I use for all my automations.

The Dashboard

I built a dedicated Energy dashboard in Home Assistant using a combination of built-in energy cards and custom cards:

  • Gauge card for real-time battery SOC (color-coded: green above 60%, yellow 30-60%, red below 30%)
  • History graph showing SOC over the past 24 hours
  • Power flow card showing real-time watts moving between solar → battery → house → grid
  • Statistics cards for daily solar production, battery cycles, and grid import/export totals
# Lovelace card example - Battery SOC gauge
type: gauge
entity: sensor.battery_state_of_charge
name: Battery
unit: "%"
min: 0
max: 100
severity:
  green: 60
  yellow: 30
  red: 0

Key Automations

Here's where Home Assistant earns its keep. I've set up several automations that manage the battery intelligently:

1. Storm Preparation Mode

When the weather forecast shows a hurricane or severe storm approaching (I pull this from my local weather entity weather.forecast_spartina_landing), the system switches to "storm prep" mode — it charges the battery to 100% from grid if needed, and holds it there until the threat passes.

automation:
  - alias: "Storm Prep - Full Charge"
    trigger:
      - platform: state
        entity_id: weather.forecast_spartina_landing
        to: "hurricane"
    action:
      - service: mqtt.publish
        data:
          topic: "solar-assistant/inverter/charge_mode"
          payload: "grid_charge"
      - service: notify.mobile_app
        data:
          title: "⛈️ Storm Prep Activated"
          message: "Battery charging to 100% from grid. Current SOC: {{ states('sensor.battery_state_of_charge') }}%"

2. Low Battery Alert

If the battery drops below 20% SOC, I get a notification. Below 10%, the system automatically reduces non-essential loads by turning off the home lab servers and pausing EV charging.

automation:
  - alias: "Low Battery - Shed Loads"
    trigger:
      - platform: numeric_state
        entity_id: sensor.battery_state_of_charge
        below: 10
    action:
      - service: switch.turn_off
        target:
          entity_id:
            - switch.home_lab_servers
            - switch.tesla_wall_connector
      - service: notify.mobile_app
        data:
          title: "🔋 Battery Critical"
          message: "SOC at {{ states('sensor.battery_state_of_charge') }}%. Non-essential loads shed."

3. Rate-Based Optimization

The battery automatically optimizes based on my utility's time-of-use rates:

  • Super off-peak (11 PM - 6 AM): Allow grid charging if SOC < 50% and tomorrow's forecast is cloudy
  • Off-peak (6 AM - 2 PM, 7 PM - 11 PM): Solar charges battery, excess powers home loads
  • Peak (2 PM - 7 PM): Battery discharge only, zero grid import at $0.21/kWh

This simple automation saves me hundreds of dollars annually by avoiding peak-rate electricity usage.

Monitoring with Grafana

Solar-Assistant provides excellent built-in dashboards, but for long-term trend analysis I push everything to Grafana. This gives me:

  • Long-term trends: Battery degradation and solar performance over months/years
  • Detailed energy accounting: Exact kWh generated, stored, consumed, and exported daily
  • Anomaly detection: If a battery or panel starts underperforming, I can see it before it becomes a problem

Solar-Assistant's MQTT data feeds directly into Grafana for comprehensive visualization.

Lessons Learned

1. Mixed Battery Brands Can Work Well

The Eco-worthy and EG4 batteries play nicely together. The key is ensuring they have similar voltage characteristics and proper breaker protection for each battery. Don't mix incompatible chemistries or voltage ranges.

2. WiFi Dongles Eliminate Wiring Hassles

The EG4 WiFi dongles were a game-changer. No more RS-485 wiring runs — just configure each inverter wirelessly and Solar-Assistant handles the communication automatically.

3. Solar-Assistant Is Worth Every Penny

Compared to proprietary monitoring systems, Solar-Assistant's one-time fee provides lifetime value. The Raspberry Pi hardware costs peanuts, and the software outperforms systems costing thousands.

4. Soft Start HVAC Is Essential

The Carrier unit's soft start capability prevents massive power spikes that could overload the inverter system during battery-only operation.

5. Rate Optimization Pays Dividends

Even a simple peak/off-peak optimization strategy delivers significant savings. The $0.15/kWh spread between peak and super off-peak rates makes every avoided peak kWh valuable.

What It Costs

I'm not going to pretend this was cheap. A 100kWh battery system is a serious investment — we're talking five figures. But here's the math:

My monthly electric bill went from $250-400 (Coastal Georgia summers are brutal) to consistently under $100.

At my current savings rate, the battery system pays for itself in about 7-8 years. The batteries are rated for 15+ years. That's 7+ years of nearly free electricity after payback.

And that doesn't account for the value of backup power during hurricanes and storms. When my neighbors are sitting in the dark after a storm knocks out the grid, my house is running like nothing happened. You can't put a dollar figure on that.

Getting Started

You don't need 100kWh to get started. Here's my advice for anyone considering a home battery:

  1. Start with Solar-Assistant. Even if you just have solar panels, get visibility into your system first.
  2. Right-size your system. Calculate your nighttime consumption. That's your minimum battery size.
  3. Go LiFePO4. The upfront cost difference has narrowed, and the longevity makes it cheaper per cycle.
  4. Demand WiFi/MQTT access. Modern inverters should support WiFi dongles and open protocols.
  5. Integrate with Home Assistant. The automation possibilities are what make this worthwhile.

What's Next

In upcoming posts, I'll dive deeper into:

  • EG4 inverter configuration — getting the most from Solar-Assistant's remote control features
  • Battery balancing automation — keeping the Eco-worthy and EG4 batteries working harmoniously
  • Generator integration — adding a backup generator for extended grid outages

If you've got questions about home battery setups, drop them in the comments or find me on the Home Assistant community forums. This stuff isn't rocket science — it just takes planning, patience, and a willingness to embrace open-source monitoring.


Big Kel writes about home automation, solar energy, and trying to never pay a utility bill again. Follow along at bigkel.tech.