Help us improve
Share bugs, ideas, or general feedback.
From cce-homeassistant
Configures Home Assistant energy monitoring with dashboards, solar production, grid consumption sensors, utility meters, and statistics. Use for energy sensors, power tracking, or consumption analysis.
npx claudepluginhub nodnarbnitram/claude-code-extensions --plugin cce-homeassistantHow this skill is triggered — by the user, by Claude, or both
Slash command
/cce-homeassistant:ha-energyThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Configure Home Assistant energy monitoring with dashboards, solar, grid, and device tracking.
Provides Home Assistant YAML patterns for energy dashboard setup, power monitoring sensors, solar integration, battery management, EV chargers, and time-of-use rate optimization.
Queries grid electricity forecasts and submits load events via EnergyKit (iOS 26+) for EV charging, HVAC scheduling, and home energy dashboards.
Mandatory fallback for any HA NOVA task without a dedicated subskill. Must be invoked before any raw relay write operation. Covers blueprints, energy, calendars, zones/persons/tags, destructive registry admin, system health, Apps, HACS, Zigbee/Z-Wave, and unsupported config-entry helper families.
Share bugs, ideas, or general feedback.
Configure Home Assistant energy monitoring with dashboards, solar, grid, and device tracking.
This skill prevents 8 common errors and saves ~45% tokens.
| Metric | Without Skill | With Skill |
|---|---|---|
| Setup Time | 45+ min | 15 min |
| Common Errors | 8 | 0 |
| Token Usage | ~10000 | ~5500 |
state_class values (must be total, total_increasing, or measurement)device_class: energy on energy sensorsstate_class for utility_meter entities (must be total_increasing)unit_of_measurement: kWh without state_class (breaks statistics)# configuration.yaml
template:
- sensor:
- name: "Total Energy Consumed"
unique_id: total_energy_consumed
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
state: "{{ (states('sensor.energy_meter') | float(0)) }}"
- name: "Solar Production"
unique_id: solar_production
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
state: "{{ (states('sensor.solar_meter') | float(0)) }}"
Why this matters: Proper state_class enables Home Assistant to automatically create statistics and energy dashboard integration. Without it, your sensors won't appear in the energy dashboard.
# configuration.yaml
utility_meter:
daily_energy:
source: sensor.total_energy_consumed
cycle: daily
offset: [hours: 0]
monthly_energy:
source: sensor.total_energy_consumed
cycle: monthly
offset: [days: 0]
daily_solar:
source: sensor.solar_production
cycle: daily
offset: [hours: 0]
Why this matters: Utility meters automatically reset at specified intervals and track consumption periods for billing analysis.
# configuration.yaml
recorder:
db_url: !secret database_url # Optional but recommended
auto_purge: true
auto_purge_days: 90 # Adjust retention as needed
# Include sensors with state_class for statistics
include:
entities:
- sensor.total_energy_consumed
- sensor.solar_production
- sensor.grid_consumption
- sensor.grid_return
Why this matters: Statistics require the recorder to be properly configured. Without explicit inclusion, energy sensors may not generate statistics for long-term analysis.
state_class: total_increasing for cumulative meters that only increasedevice_class: energy to all energy sensorsunit_of_measurement: kWh (or appropriate unit) on energy sensorsinclude liststate_class: measurement for cumulative meters (breaks statistics)offset parameter on utility_meter (may cause midnight resets)state_class (they won't work in energy dashboard)Wrong:
sensor:
- platform: template
sensors:
total_energy:
unit_of_measurement: kWh
value_template: "{{ states('sensor.meter') }}"
Correct:
template:
- sensor:
- name: "Total Energy"
unique_id: total_energy
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
state: "{{ (states('sensor.meter') | float(0)) }}"
Why: Template platform is deprecated. Use template integration with proper state_class and device_class to enable energy dashboard integration.
| Issue | Root Cause | Solution |
|---|---|---|
| Energy dashboard shows no data | state_class missing or wrong | Use total_increasing for cumulative meters |
| Statistics not generated | Sensors not in recorder's include list | Add sensor entities to recorder config |
| Utility meter not resetting | Wrong offset or missing cycle | Verify cycle (hourly/daily/monthly) and offset settings |
| Solar self-consumption not calculated | Battery sensors not configured separately | Create charge/discharge sensors for batteries |
| Grid consumption incorrect | Using bidirectional sensor instead of separate sensors | Split into grid_consumption and grid_return |
| Sensor unavailable after restart | Cumulative meter not preserved | Add availability_template to template sensor |
| Statistics showing wrong values | Raw data has negative values or gaps | Use Riemann sum to convert power to energy |
| Utility meter shows wrong period | Offset set incorrectly for timezone | Align offset with local midnight or billing cycle |
template:
- sensor:
- name: "Main Energy Meter"
unique_id: main_energy_meter
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
availability_template: "{{ states('sensor.meter_input') not in ['unavailable', 'unknown'] }}"
state: "{{ (states('sensor.meter_input') | float(0)) }}"
- name: "Instantaneous Power"
unique_id: instantaneous_power
unit_of_measurement: W
device_class: power
state_class: measurement
state: "{{ (states('sensor.power_meter') | float(0)) }}"
Key settings:
device_class: energy - Identifies as energy sensor for energy dashboardstate_class: total_increasing - Cumulative meter that only increasesstate_class: measurement - Instantaneous values (power, not energy)unit_of_measurement: kWh - Energy units; use W for poweravailability_template - Prevents unavailable states from breaking statisticsutility_meter:
daily_consumption:
source: sensor.total_energy_consumed
cycle: daily
offset:
hours: 0
net_consumption: false # true for solar with self-consumption
monthly_consumption:
source: sensor.total_energy_consumed
cycle: monthly
offset:
days: 1 # Reset on 1st of month
hours: 0
peak_consumption:
source: sensor.total_energy_consumed
cycle: weekly
offset:
days: 0 # Reset on Monday
hours: 0
Key settings:
cycle: hourly, daily, weekly, monthly, bimonthly, quarterly, yearlyoffset: Time adjustment for billing alignmentnet_consumption: Set to true for solar to track self-consumptionintegration:
- platform: riemann_sum
name: "Daily Energy from Power"
unique_id: daily_energy_riemann
source: sensor.instantaneous_power
round: 3
unit_prefix: k # Converts W to kWh
unit_time: h
method: trapezoidal
Key settings:
source: Power sensor (W) to integrateunit_prefix: k - Converts watts to kilowattsmethod: trapezoidal or left for integration algorithmround: 3 - Decimal precisiontemplate:
- sensor:
- name: "Grid Consumption"
unique_id: grid_consumption
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
state: "{{ (states('sensor.grid_import') | float(0)) }}"
- name: "Grid Return"
unique_id: grid_return
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
state: "{{ (states('sensor.grid_export') | float(0)) }}"
template:
- sensor:
- name: "Solar Production"
unique_id: solar_production
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
state: "{{ (states('sensor.solar_meter') | float(0)) }}"
- name: "Battery Charge"
unique_id: battery_charge
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
state: "{{ (states('sensor.battery_charge_meter') | float(0)) }}"
- name: "Battery Discharge"
unique_id: battery_discharge
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
state: "{{ (states('sensor.battery_discharge_meter') | float(0)) }}"
template:
- sensor:
- name: "Device Energy Today"
unique_id: device_energy_today
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
state: "{{ (states('sensor.device_energy') | float(0)) }}"
utility_meter:
device_daily_energy:
source: sensor.device_energy_today
cycle: daily
offset:
hours: 0
Located in references/:
state-class-guide.md - Comprehensive state_class referencedevice-class-reference.md - All energy-related device classesutility-meter-patterns.md - Billing cycle configurationsenergy-dashboard-setup.md - Step-by-step energy dashboard guidesolar-integration.md - Solar panel and battery trackingNote: For deep dives on specific topics, see the reference files above.
Located in assets/:
energy-sensors-template.yaml - Complete sensor templateutility-meter-examples.yaml - Meter configurations for all scenariosenergy-dashboard-card.yaml - Dashboard card configurationCopy these templates as starting points for your implementation.
For current documentation, use these Context7 library IDs:
| Library ID | Purpose |
|---|---|
/home-assistant/home-assistant.io | User docs - energy, solar, grid, utility_meter |
/home-assistant/integrations | Integration docs for specific devices |
/home-assistant/template | Template sensor reference |
Symptoms: Energy dashboard loads but shows "No data available" or blank graphs.
Solution:
# 1. Verify sensors exist and have state_class
developer-tools > States > Search for energy/solar sensors
# 2. Check recorder includes sensors
# In configuration.yaml:
recorder:
include:
entities:
- sensor.total_energy_consumed
- sensor.solar_production
# 3. Restart Home Assistant
# 4. Wait 10 minutes for statistics to generate
# 5. Check Developer Tools > Statistics
Symptoms: Utility meter keeps accumulating without resetting at expected time.
Solution:
# Check offset configuration
utility_meter:
daily_energy:
source: sensor.total_energy_consumed
cycle: daily
# For midnight reset in your timezone:
offset:
hours: 0
# For reset at 6 AM:
# offset:
# hours: 6
Symptoms: Self-consumption percentage is 0% or not shown.
Solution:
# Create separate battery sensors
template:
- sensor:
- name: "Battery Charge"
unique_id: battery_charge
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
state: "{{ (states('sensor.battery_charge_meter') | float(0)) }}"
- name: "Battery Discharge"
unique_id: battery_discharge
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
state: "{{ (states('sensor.battery_discharge_meter') | float(0)) }}"
# In energy dashboard configuration, set:
# - Source: Solar production sensor
# - Battery (optional): Both charge and discharge sensors
Symptoms: Sensor state stuck on "unknown" or "unavailable" in Developer Tools.
Solution:
# Add availability_template
template:
- sensor:
- name: "Energy Meter"
unique_id: energy_meter
unit_of_measurement: kWh
device_class: energy
state_class: total_increasing
availability_template: "{{ states('sensor.meter_input') not in ['unavailable', 'unknown'] }}"
state: "{{ (states('sensor.meter_input') | float(0)) }}"
Before using this skill, verify: