64 KiB
64 KiB
# ==================== 南方电网完整历史数据拼接传感器 ====================
# 请将此配置添加到 configuration.yaml 文件中
# 如果已有 template: 部分,请将传感器添加到现有的 - sensor: 列表中
# ==================== 南方电网完整历史数据拼接传感器(属性类型已修正)====================
template:
- sensor:
# ========== 1. 核心:历史数据拼接(上月+本月每日数据) ==========
- name: "南方电网历史拼接"
unique_id: csg_history_combined_0800041935246530
state: "{{ now().strftime('%Y-%m-%d') }}"
icon: mdi:chart-line
attributes:
history_day_value: >
{% set last_month = state_attr('sensor.0800041935246530_last_month_total_usage', 'last_month_by_day') %}
{% set this_month = state_attr('sensor.0800041935246530_this_month_total_usage', 'this_month_by_day') %}
{% set l_m = last_month if last_month is not none else [] %}
{% set t_m = this_month if this_month is not none else [] %}
{{ l_m + t_m }}
total_days: >
{% set last_month = state_attr('sensor.0800041935246530_last_month_total_usage', 'last_month_by_day') %}
{% set this_month = state_attr('sensor.0800041935246530_this_month_total_usage', 'this_month_by_day') %}
{% set l_m = last_month if last_month is not none else [] %}
{% set t_m = this_month if this_month is not none else [] %}
{{ (l_m + t_m) | length }}
last_month_days: >
{% set last_month = state_attr('sensor.0800041935246530_last_month_total_usage', 'last_month_by_day') %}
{{ (last_month | length) if last_month else 0 }}
this_month_days: >
{% set this_month = state_attr('sensor.0800041935246530_this_month_total_usage', 'this_month_by_day') %}
{{ (this_month | length) if this_month else 0 }}
date_range: >
{% set last_month = state_attr('sensor.0800041935246530_last_month_total_usage', 'last_month_by_day') %}
{% set this_month = state_attr('sensor.0800041935246530_this_month_total_usage', 'this_month_by_day') %}
{% set l_m = last_month if last_month is not none else [] %}
{% set t_m = this_month if this_month is not none else [] %}
{% set all_data = l_m + t_m %}
{% if all_data | length > 0 %}
{{ all_data[0].date }} 至 {{ all_data[-1].date }}
{% else %}
无数据
{% endif %}
last_update: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
# ========== 2. 年度历史数据拼接 ==========
- name: "南方电网年度历史拼接"
unique_id: csg_yearly_history_combined_0800041935246530
state: "{{ now().strftime('%Y-%m') }}"
icon: mdi:calendar-multiple
attributes:
history_month_value: >
{% set last_year = state_attr('sensor.0800041935246530_last_year_total_usage', 'last_year_by_month') %}
{% set this_year = state_attr('sensor.0800041935246530_this_year_total_usage', 'this_year_by_month') %}
{% set l_y = last_year if last_year is not none else [] %}
{% set t_y = this_year if this_year is not none else [] %}
{{ l_y + t_y }}
total_months: >
{% set last_year = state_attr('sensor.0800041935246530_last_year_total_usage', 'last_year_by_month') %}
{% set this_year = state_attr('sensor.0800041935246530_this_year_total_usage', 'this_year_by_month') %}
{% set l_y = last_year if last_year is not none else [] %}
{% set t_y = this_year if this_year is not none else [] %}
{{ (l_y + t_y) | length }}
last_year_months: >
{% set last_year = state_attr('sensor.0800041935246530_last_year_total_usage', 'last_year_by_month') %}
{{ (last_year | length) if last_year else 0 }}
this_year_months: >
{% set this_year = state_attr('sensor.0800041935246530_this_year_total_usage', 'this_year_by_month') %}
{{ (this_year | length) if this_year else 0 }}
last_update: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
# ========== 3. 近30日平均用电 ==========
- name: "近30日平均用电"
unique_id: csg_30days_average_0800041935246530
unit_of_measurement: "kWh"
device_class: energy
state_class: measurement
icon: mdi:chart-bar
state: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{% set recent = data[-30:] %}
{% set total = recent | map(attribute='kwh') | sum %}
{% set count = recent | length %}
{{ (total / count) | round(2) if count > 0 else 0 }}
{% else %}
0
{% endif %}
attributes:
calculation_days: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{{ data[-30:] | length if data else 0 }}
total_usage: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{{ (data[-30:] | map(attribute='kwh') | sum) | round(2) }}
{% else %}
0
{% endif %}
# ========== 4. 近30日最高用电 ==========
- name: "近30日最高用电"
unique_id: csg_30days_max_0800041935246530
unit_of_measurement: "kWh"
device_class: energy
state_class: measurement
icon: mdi:arrow-up-bold
state: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{{ (data[-30:] | map(attribute='kwh') | max) | round(2) }}
{% else %}
0
{% endif %}
attributes:
date: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{% set max_kwh = data[-30:] | map(attribute='kwh') | max %}
{% set max_item = data[-30:] | selectattr('kwh', 'equalto', max_kwh) | first %}
{{ max_item.date if max_item else '未知' }}
{% else %}
未知
{% endif %}
formatted_date: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{% set max_kwh = data[-30:] | map(attribute='kwh') | max %}
{% set max_item = data[-30:] | selectattr('kwh', 'equalto', max_kwh) | first %}
{% if max_item %}
{{ max_item.date[5:7] }}月{{ max_item.date[8:10] }}日
{% else %}
未知
{% endif %}
{% else %}
未知
{% endif %}
weekday: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{% set max_kwh = data[-30:] | map(attribute='kwh') | max %}
{% set max_item = data[-30:] | selectattr('kwh', 'equalto', max_kwh) | first %}
{% if max_item %}
{% set weekdays = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] %}
{{ weekdays[strptime(max_item.date, '%Y-%m-%d').weekday()] }}
{% else %}
未知
{% endif %}
{% else %}
未知
{% endif %}
# ========== 5. 近30日最低用电 ==========
- name: "近30日最低用电"
unique_id: csg_30days_min_0800041935246530
unit_of_measurement: "kWh"
device_class: energy
state_class: measurement
icon: mdi:arrow-down-bold
state: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{{ (data[-30:] | map(attribute='kwh') | min) | round(2) }}
{% else %}
0
{% endif %}
attributes:
date: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{% set min_kwh = data[-30:] | map(attribute='kwh') | min %}
{% set min_item = data[-30:] | selectattr('kwh', 'equalto', min_kwh) | first %}
{{ min_item.date if min_item else '未知' }}
{% else %}
未知
{% endif %}
formatted_date: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{% set min_kwh = data[-30:] | map(attribute='kwh') | min %}
{% set min_item = data[-30:] | selectattr('kwh', 'equalto', min_kwh) | first %}
{% if min_item %}
{{ min_item.date[5:7] }}月{{ min_item.date[8:10] }}日
{% else %}
未知
{% endif %}
{% else %}
未知
{% endif %}
weekday: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{% set min_kwh = data[-30:] | map(attribute='kwh') | min %}
{% set min_item = data[-30:] | selectattr('kwh', 'equalto', min_kwh) | first %}
{% if min_item %}
{% set weekdays = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] %}
{{ weekdays[strptime(min_item.date, '%Y-%m-%d').weekday()] }}
{% else %}
未知
{% endif %}
{% else %}
未知
{% endif %}
# ========== 6. 近7日平均用电 ==========
- name: "近7日平均用电"
unique_id: csg_7days_average_0800041935246530
unit_of_measurement: "kWh"
device_class: energy
state_class: measurement
icon: mdi:calendar-week
state: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{% set recent = data[-7:] %}
{% set total = recent | map(attribute='kwh') | sum %}
{% set count = recent | length %}
{{ (total / count) | round(2) if count > 0 else 0 }}
{% else %}
0
{% endif %}
attributes:
total_usage: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{{ (data[-7:] | map(attribute='kwh') | sum) | round(2) }}
{% else %}
0
{% endif %}
# ========== 7. 近7日最高用电 ==========
- name: "近7日最高用电"
unique_id: csg_7days_max_0800041935246530
unit_of_measurement: "kWh"
device_class: energy
icon: mdi:arrow-up-bold
state: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{{ (data[-7:] | map(attribute='kwh') | max) | round(2) }}
{% else %}
0
{% endif %}
# ========== 8. 近7日最低用电 ==========
- name: "近7日最低用电"
unique_id: csg_7days_min_0800041935246530
unit_of_measurement: "kWh"
device_class: energy
icon: mdi:arrow-down-bold
state: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{{ (data[-7:] | map(attribute='kwh') | min) | round(2) }}
{% else %}
0
{% endif %}
# ========== 9. 工作日平均用电 ==========
- name: "工作日平均用电"
unique_id: csg_weekday_average_0800041935246530
unit_of_measurement: "kWh"
device_class: energy
icon: mdi:briefcase
state: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{% set weekday_data = [] %}
{% for item in data[-30:] %}
{% set day_of_week = strptime(item.date, '%Y-%m-%d').weekday() %}
{% if day_of_week < 5 %}
{% set weekday_data = weekday_data + [item.kwh] %}
{% endif %}
{% endfor %}
{% if weekday_data | length > 0 %}
{{ ((weekday_data | sum) / (weekday_data | length)) | round(2) }}
{% else %}
0
{% endif %}
{% else %}
0
{% endif %}
attributes:
days_count: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{% set count = 0 %}
{% for item in data[-30:] %}
{% set day_of_week = strptime(item.date, '%Y-%m-%d').weekday() %}
{% if day_of_week < 5 %}
{% set count = count + 1 %}
{% endif %}
{% endfor %}
{{ count }}
{% else %}
0
{% endif %}
# ========== 10. 周末平均用电 ==========
- name: "周末平均用电"
unique_id: csg_weekend_average_0800041935246530
unit_of_measurement: "kWh"
device_class: energy
icon: mdi:home-heart
state: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{% set weekend_data = [] %}
{% for item in data[-30:] %}
{% set day_of_week = strptime(item.date, '%Y-%m-%d').weekday() %}
{% if day_of_week >= 5 %}
{% set weekend_data = weekend_data + [item.kwh] %}
{% endif %}
{% endfor %}
{% if weekend_data | length > 0 %}
{{ ((weekend_data | sum) / (weekend_data | length)) | round(2) }}
{% else %}
0
{% endif %}
{% else %}
0
{% endif %}
attributes:
days_count: >
{% set data = state_attr('sensor.nanfangdianwanglishipipinjie', 'history_day_value') %}
{% if data and data|length > 0 %}
{% set count = 0 %}
{% for item in data[-30:] %}
{% set day_of_week = strptime(item.date, '%Y-%m-%d').weekday() %}
{% if day_of_week >= 5 %}
{% set count = count + 1 %}
{% endif %}
{% endfor %}
{{ count }}
{% else %}
0
{% endif %}
# ========== 11. 预计本月电费 ==========
- name: "预计本月电费"
unique_id: csg_estimated_cost_0800041935246530
views:
- title: 电力监控
path: power-monitor
icon: mdi:flash
cards:
- type: vertical-stack
cards:
# 仪表盘部分
- type: grid
columns: 2
square: false
cards:
- type: gauge
entity: sensor.0800041935246530_yesterday_kwh
name: 昨日用电
unit: kWh
min: 0
max: 50
severity:
green: 0
yellow: 30
red: 40
needle: true
segments:
- from: 0
color: '#4CAF50'
- from: 30
color: '#FFC107'
- from: 40
color: '#F44336'
- type: gauge
entity: sensor.0800041935246530_this_month_total_usage
name: 当月电量
unit: kWh
min: 0
max: 1000
severity:
green: 0
yellow: 600
red: 800
needle: true
segments:
- from: 0
color: '#4CAF50'
- from: 600
color: '#FFC107'
- from: 800
color: '#F44336'
# 关键数据卡片
- type: grid
columns: 3
square: false
cards:
- type: sensor
entity: sensor.0800041935246530_balance
name: 账户余额
icon: mdi:wallet
graph: none
- type: sensor
entity: sensor.0800041935246530_arrears
name: 欠缴电费
icon: mdi:alert-circle
graph: none
- type: sensor
entity: sensor.0800041935246530_last_month_total_cost
name: 上月电费
icon: mdi:currency-cny
graph: none
# 本月数据
- type: horizontal-stack
cards:
- type: sensor
entity: sensor.0800041935246530_this_month_total_usage
name: 本月用电
icon: mdi:flash
graph: none
- type: sensor
entity: sensor.0800041935246530_this_month_total_cost
name: 本月电费
icon: mdi:currency-cny
graph: none
# 上月数据
- type: horizontal-stack
cards:
- type: sensor
entity: sensor.0800041935246530_last_month_total_usage
name: 上月用电
icon: mdi:flash-outline
graph: none
- type: sensor
entity: sensor.0800041935246530_last_month_total_cost
name: 上月电费
icon: mdi:currency-cny
graph: none
# 今年数据
- type: horizontal-stack
cards:
- type: sensor
entity: sensor.0800041935246530_this_year_total_usage
name: 今年用电
icon: mdi:calendar-star
graph: none
- type: sensor
entity: sensor.0800041935246530_this_year_total_cost
name: 今年电费
icon: mdi:currency-cny
graph: none
# 去年数据
- type: horizontal-stack
cards:
- type: sensor
entity: sensor.0800041935246530_last_year_total_usage
name: 去年用电
icon: mdi:calendar-clock
graph: none
- type: sensor
entity: sensor.0800041935246530_last_year_total_cost
name: 去年电费
icon: mdi:currency-cny
graph: none
# 30日统计卡片
- type: grid
columns: 3
square: false
cards:
- type: markdown
content: |
**📈 最高用电**
{% set data = state_attr('sensor.0800041935246530_this_month_total_usage', 'this_month_by_day') %}
{% if data and data|length > 0 %}
<h3 style="color: #EF4444; margin: 5px 0;">{{ (data[-30:] | map(attribute='kwh') | max) | round(1) }} kWh</h3>
<small style="color: #666;">
{% set max_kwh = data[-30:] | map(attribute='kwh') | max %}
{% set max_item = data[-30:] | selectattr('kwh', 'equalto', max_kwh) | first %}
{{ max_item.date[5:7] }}/{{ max_item.date[8:10] }}
</small>
{% else %}
<h3 style="color: #EF4444; margin: 5px 0;">暂无数据</h3>
{% endif %}
- type: markdown
content: |
**📉 最低用电**
{% set data = state_attr('sensor.0800041935246530_this_month_total_usage', 'this_month_by_day') %}
{% if data and data|length > 0 %}
<h3 style="color: #3B82F6; margin: 5px 0;">{{ (data[-30:] | map(attribute='kwh') | min) | round(1) }} kWh</h3>
<small style="color: #666;">
{% set min_kwh = data[-30:] | map(attribute='kwh') | min %}
{% set min_item = data[-30:] | selectattr('kwh', 'equalto', min_kwh) | first %}
{{ min_item.date[5:7] }}/{{ min_item.date[8:10] }}
</small>
{% else %}
<h3 style="color: #3B82F6; margin: 5px 0;">暂无数据</h3>
{% endif %}
- type: markdown
content: |
**🎯 平均用电**
{% set data = state_attr('sensor.0800041935246530_this_month_total_usage', 'this_month_by_day') %}
{% if data and data|length > 0 %}
<h3 style="color: #10B981; margin: 5px 0;">{{ ((data[-30:] | map(attribute='kwh') | sum) / (data[-30:] | length)) | round(1) }} kWh</h3>
<small style="color: #666;">近30日平均</small>
{% else %}
<h3 style="color: #10B981; margin: 5px 0;">暂无数据</h3>
{% endif %}
# 近30日用电趋势图
- type: custom:apexcharts-card
header:
show: true
title: 📊 近30日用电趋势
show_states: true
colorize_states: true
graph_span: 30d
apex_config:
chart:
height: 300px
dataLabels:
enabled: false
stroke:
curve: smooth
width: 3
fill:
type: gradient
gradient:
shadeIntensity: 1
opacityFrom: 0.7
opacityTo: 0.3
markers:
size: 4
hover:
size: 6
tooltip:
x:
format: MM月dd日
grid:
borderColor: '#e0e0e0'
strokeDashArray: 4
series:
- entity: sensor.0800041935246530_this_month_total_usage
type: area
name: 日用电量
color: '#8B5CF6'
unit: kWh
curve: smooth
data_generator: |
const dailyData = entity.attributes.this_month_by_day || [];
const recentData = dailyData.slice(-30);
return recentData.map(item => {
const date = new Date(item.date);
return [date.getTime(), parseFloat(item.kwh) || 0];
});
yaxis:
- min: 0
decimals: 1
apex_config:
title:
text: 用电量 (kWh)
# 当月每日用电详情
- type: custom:apexcharts-card
header:
show: true
title: 📅 当月每日用电详情
show_states: true
graph_span: 35d
span:
start: month
apex_config:
chart:
height: 320px
plotOptions:
bar:
borderRadius: 4
columnWidth: 70%
dataLabels:
enabled: false
stroke:
width:
- 0
- 3
tooltip:
x:
format: MM月dd日
shared: true
series:
- entity: sensor.0800041935246530_this_month_total_usage
type: column
data_generator: |
const data = entity.attributes.this_month_by_day || [];
return data.map(item => {
return [new Date(item.date).getTime(), parseFloat(item.kwh) || 0];
});
extend_to: false
float_precision: 2
name: 每日电量
color: '#2196F3'
yaxis_id: power
- entity: sensor.0800041935246530_this_month_total_cost
type: line
data_generator: |
const data = entity.attributes.this_month_by_day || [];
return data.map(item => {
return [new Date(item.date).getTime(), parseFloat(item.cost || item.fee) || 0];
});
extend_to: false
float_precision: 2
name: 每日电费
color: '#FF9800'
yaxis_id: fee
curve: smooth
yaxis:
- id: power
decimals: 2
apex_config:
title:
text: 电量 (kWh)
- id: fee
opposite: true
decimals: 2
apex_config:
title:
text: 电费 (元)
# 上月每日用电详情
- type: custom:apexcharts-card
header:
show: true
title: 📊 上月每日用电详情
show_states: true
graph_span: 35d
span:
start: month
offset: '-1M'
apex_config:
chart:
height: 300px
plotOptions:
bar:
borderRadius: 4
columnWidth: 70%
dataLabels:
enabled: false
stroke:
width:
- 0
- 3
tooltip:
x:
format: MM月dd日
shared: true
series:
- entity: sensor.0800041935246530_last_month_total_usage
type: column
data_generator: |
const data = entity.attributes.last_month_by_day || [];
return data.map(item => {
return [new Date(item.date).getTime(), parseFloat(item.kwh) || 0];
});
extend_to: false
float_precision: 2
name: 每日电量
color: '#9C27B0'
yaxis_id: power
- entity: sensor.0800041935246530_last_month_total_cost
type: line
data_generator: |
const data = entity.attributes.last_month_by_day || [];
return data.map(item => {
return [new Date(item.date).getTime(), parseFloat(item.cost || item.fee) || 0];
});
extend_to: false
float_precision: 2
name: 每日电费
color: '#E91E63'
yaxis_id: fee
curve: smooth
yaxis:
- id: power
decimals: 2
apex_config:
title:
text: 电量 (kWh)
- id: fee
opposite: true
decimals: 2
apex_config:
title:
text: 电费 (元)
# 今年每月用电趋势
- type: custom:apexcharts-card
header:
show: true
title: 📈 今年每月用电趋势
show_states: true
graph_span: 1y
span:
start: year
apex_config:
chart:
height: 320px
plotOptions:
bar:
borderRadius: 6
columnWidth: 60%
dataLabels:
enabled: true
enabledOnSeries:
- 0
style:
fontSize: 11px
stroke:
width:
- 0
- 3
tooltip:
x:
format: yyyy年MM月
series:
- entity: sensor.0800041935246530_this_year_total_usage
type: column
data_generator: |
const data = entity.attributes.this_year_by_month || [];
return data.map(item => {
return [new Date(item.month || item.date).getTime(), parseFloat(item.kwh || item.usage) || 0];
});
extend_to: false
float_precision: 2
name: 每月电量
color: '#4CAF50'
yaxis_id: power
- entity: sensor.0800041935246530_this_year_total_cost
type: line
data_generator: |
const data = entity.attributes.this_year_by_month || [];
return data.map(item => {
return [new Date(item.month || item.date).getTime(), parseFloat(item.cost || item.fee) || 0];
});
extend_to: false
float_precision: 2
name: 每月电费
color: '#FF5722'
yaxis_id: fee
curve: smooth
yaxis:
- id: power
decimals: 0
apex_config:
title:
text: 电量 (kWh)
- id: fee
opposite: true
decimals: 2
apex_config:
title:
text: 电费 (元)
# 今年vs去年对比
- type: custom:apexcharts-card
header:
show: true
title: 🔄 今年 vs 去年用电对比
graph_span: 1y
span:
start: year
apex_config:
chart:
height: 340px
type: bar
plotOptions:
bar:
horizontal: false
columnWidth: 65%
borderRadius: 4
dataLabels:
enabled: false
stroke:
show: true
width: 2
colors:
- transparent
tooltip:
x:
format: MM月
shared: true
legend:
position: top
series:
- entity: sensor.0800041935246530_this_year_total_usage
type: column
data_generator: |
const data = entity.attributes.this_year_by_month || [];
return data.map(item => {
return [new Date(item.month || item.date).getTime(), parseFloat(item.kwh || item.usage) || 0];
});
extend_to: false
float_precision: 2
name: 今年
color: '#00BCD4'
- entity: sensor.0800041935246530_last_year_total_usage
type: column
data_generator: |
const currentYear = new Date().getFullYear();
const data = entity.attributes.last_year_by_month || [];
return data.map(item => {
const date = new Date(item.month || item.date);
date.setFullYear(currentYear);
return [date.getTime(), parseFloat(item.kwh || item.usage) || 0];
});
extend_to: false
float_precision: 2
name: 去年同期
color: '#FFC107'
yaxis:
- decimals: 0
apex_config:
title:
text: 用电量 (kWh)
# 去年每月用电详情
- type: custom:apexcharts-card
header:
show: true
title: 📉 去年每月用电详情
graph_span: 1y
span:
start: year
offset: '-1y'
apex_config:
chart:
height: 300px
plotOptions:
bar:
borderRadius: 4
stroke:
width:
- 0
- 3
tooltip:
x:
format: yyyy年MM月
series:
- entity: sensor.0800041935246530_last_year_total_usage
type: column
data_generator: |
const data = entity.attributes.last_year_by_month || [];
return data.map(item => {
return [new Date(item.month || item.date).getTime(), parseFloat(item.kwh || item.usage) || 0];
});
extend_to: false
float_precision: 2
name: 去年每月电量
color: '#9C27B0'
yaxis_id: power
- entity: sensor.0800041935246530_last_year_total_cost
type: line
data_generator: |
const data = entity.attributes.last_year_by_month || [];
return data.map(item => {
return [new Date(item.month || item.date).getTime(), parseFloat(item.cost || item.fee) || 0];
});
extend_to: false
float_precision: 2
name: 去年每月电费
color: '#E91E63'
yaxis_id: fee
curve: smooth
yaxis:
- id: power
decimals: 0
apex_config:
title:
text: 电量 (kWh)
- id: fee
opposite: true
decimals: 2
apex_config:
title:
text: 电费 (元)
🔌 南方电网电力监控完整配置指南
📋 目录
前置要求
必需组件
- ✅ Home Assistant 2023.x 或更高版本
- ✅ 南方电网集成(HACS安装)
- ✅ ApexCharts Card(HACS前端安装)
安装必需组件
# 1. HACS → 集成 → 搜索 "南方电网" → 安装
# 2. HACS → 前端 → 搜索 "ApexCharts Card" → 安装
# 3. 重启 Home Assistant
完整配置文件
📝 configuration.yaml
将以下内容添加到 configuration.yaml:
template:
- sensor:
# ==================== 1. 历史数据拼接(上月+本月) ====================
- name: "南方电网历史拼接"
unique_id: csg_history_combined_0800041935246530
state: "{{ now().strftime('%Y-%m-%d') }}"
icon: mdi:chart-line
attributes:
history_day_value: >
{% set last_month = state_attr('sensor.0800041935246530_last_month_total_usage', 'last_month_by_day') %}
{% set this_month = state_attr('sensor.0800041935246530_this_month_total_usage', 'this_month_by_day') %}
{% set l_m = last_month if last_month is not none else [] %}
{% set t_m = this_month if this_month is not none else [] %}
{{ l_m + t_m }}
total_days: >
{% set last_month = state_attr('sensor.0800041935246530_last_month_total_usage', 'last_month_by_day') %}
{% set this_month = state_attr('sensor.0800041935246530_this_month_total_usage', 'this_month_by_day') %}
{% set l_m = last_month if last_month is not none else [] %}
{% set t_m = this_month if this_month is not none else [] %}
{{ (l_m + t_m) | length }}
last_month_days: >
{% set last_month = state_attr('sensor.0800041935246530_last_month_total_usage', 'last_month_by_day') %}
{{ (last_month | length) if last_month else 0 }}
this_month_days: >
{% set this_month = state_attr('sensor.0800041935246530_this_month_total_usage', 'this_month_by_day') %}
{{ (this_month | length) if this_month else 0 }}
date_range: >
{% set last_month = state_attr('sensor.0800041935246530_last_month_total_usage', 'last_month_by_day') %}
{% set this_month = state_attr('sensor.0800041935246530_this_month_total_usage', 'this_month_by_day') %}
{% set l_m = last_month if last_month is not none else [] %}
{% set t_m = this_month if this_month is not none else [] %}
{% set all_data = l_m + t_m %}
{% if all_data | length > 0 %}
{{ all_data[0].date }} 至 {{ all_data[-1].date }}
{% else %}
无数据
{% endif %}
last_update: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
# ==================== 2. 年度历史拼接(去年+今年) ====================
- name: "南方电网年度历史拼接"
unique_id: csg_yearly_history_combined_0800041935246530
state: "{{ now().strftime('%Y-%m') }}"
icon: mdi:calendar-month
attributes:
history_month_value: >
{% set last_year = state_attr('sensor.0800041935246530_last_year_total_usage', 'last_year_by_month') %}
{% set this_year = state_attr('sensor.0800041935246530_this_year_total_usage', 'this_year_by_month') %}
{% set l_y = last_year if last_year is not none else [] %}
{% set t_y = this_year if this_year is not none else [] %}
{{ l_y + t_y }}
total_months: >
{% set last_year = state_attr('sensor.0800041935246530_last_year_total_usage', 'last_year_by_month') %}
{% set this_year = state_attr('sensor.0800041935246530_this_year_total_usage', 'this_year_by_month') %}
{% set l_y = last_year if last_year is not none else [] %}
{% set t_y = this_year if this_year is not none else [] %}
{{ (l_y + t_y) | length }}
last_year_months: >
{% set last_year = state_attr('sensor.0800041935246530_last_year_total_usage', 'last_year_by_month') %}
{{ (last_year | length) if last_year else 0 }}
this_year_months: >
{% set this_year = state_attr('sensor.0800041935246530_this_year_total_usage', 'this_year_by_month') %}
{{ (this_year | length) if this_year else 0 }}
last_update: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
# ==================== 3. 近30日统计 ====================
- name: "近30日最高用电"
unique_id: csg_30d_max_usage_0800041935246530
unit_of_measurement: "kWh"
icon: mdi:arrow-up-bold
state: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set max_item = recent | sort(attribute='kwh', reverse=true) | first %}
{{ max_item.kwh if max_item else 0 }}
{% else %}
0
{% endif %}
attributes:
date: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set max_item = recent | sort(attribute='kwh', reverse=true) | first %}
{{ max_item.date if max_item else 'N/A' }}
{% else %}
N/A
{% endif %}
formatted_date: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set max_item = recent | sort(attribute='kwh', reverse=true) | first %}
{% if max_item %}
{{ as_timestamp(max_item.date) | timestamp_custom('%m月%d日') }}
{% else %}
N/A
{% endif %}
{% else %}
N/A
{% endif %}
weekday: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set max_item = recent | sort(attribute='kwh', reverse=true) | first %}
{% if max_item %}
{% set weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'] %}
{{ weekdays[as_timestamp(max_item.date) | timestamp_custom('%w') | int] }}
{% else %}
N/A
{% endif %}
{% else %}
N/A
{% endif %}
- name: "近30日最低用电"
unique_id: csg_30d_min_usage_0800041935246530
unit_of_measurement: "kWh"
icon: mdi:arrow-down-bold
state: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set min_item = recent | sort(attribute='kwh') | first %}
{{ min_item.kwh if min_item else 0 }}
{% else %}
0
{% endif %}
attributes:
date: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set min_item = recent | sort(attribute='kwh') | first %}
{{ min_item.date if min_item else 'N/A' }}
{% else %}
N/A
{% endif %}
formatted_date: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set min_item = recent | sort(attribute='kwh') | first %}
{% if min_item %}
{{ as_timestamp(min_item.date) | timestamp_custom('%m月%d日') }}
{% else %}
N/A
{% endif %}
{% else %}
N/A
{% endif %}
weekday: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set min_item = recent | sort(attribute='kwh') | first %}
{% if min_item %}
{% set weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'] %}
{{ weekdays[as_timestamp(min_item.date) | timestamp_custom('%w') | int] }}
{% else %}
N/A
{% endif %}
{% else %}
N/A
{% endif %}
- name: "近30日平均用电"
unique_id: csg_30d_avg_usage_0800041935246530
unit_of_measurement: "kWh"
icon: mdi:chart-bell-curve
state: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set total = recent | map(attribute='kwh') | map('float') | sum %}
{{ (total / recent | length) | round(2) if recent | length > 0 else 0 }}
{% else %}
0
{% endif %}
attributes:
total_usage: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{{ (recent | map(attribute='kwh') | map('float') | sum) | round(2) }}
{% else %}
0
{% endif %}
days_count: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{{ data[-30:] | length if data else 0 }}
# ==================== 4. 近7日统计 ====================
- name: "近7日最高用电"
unique_id: csg_7d_max_usage_0800041935246530
unit_of_measurement: "kWh"
icon: mdi:arrow-up-bold
state: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-7:] %}
{% set max_item = recent | sort(attribute='kwh', reverse=true) | first %}
{{ max_item.kwh if max_item else 0 }}
{% else %}
0
{% endif %}
- name: "近7日最低用电"
unique_id: csg_7d_min_usage_0800041935246530
unit_of_measurement: "kWh"
icon: mdi:arrow-down-bold
state: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-7:] %}
{% set min_item = recent | sort(attribute='kwh') | first %}
{{ min_item.kwh if min_item else 0 }}
{% else %}
0
{% endif %}
- name: "近7日平均用电"
unique_id: csg_7d_avg_usage_0800041935246530
unit_of_measurement: "kWh"
icon: mdi:chart-bell-curve
state: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-7:] %}
{% set total = recent | map(attribute='kwh') | map('float') | sum %}
{{ (total / recent | length) | round(2) if recent | length > 0 else 0 }}
{% else %}
0
{% endif %}
attributes:
total_usage: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-7:] %}
{{ (recent | map(attribute='kwh') | map('float') | sum) | round(2) }}
{% else %}
0
{% endif %}
days_count: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{{ data[-7:] | length if data else 0 }}
# ==================== 5. 工作日vs周末 ====================
- name: "工作日平均用电"
unique_id: csg_weekday_avg_usage_0800041935246530
unit_of_measurement: "kWh"
icon: mdi:briefcase
state: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set weekday_data = [] %}
{% for item in recent %}
{% set day_of_week = as_timestamp(item.date) | timestamp_custom('%w') | int %}
{% if day_of_week >= 1 and day_of_week <= 5 %}
{% set weekday_data = weekday_data + [item.kwh | float] %}
{% endif %}
{% endfor %}
{{ (weekday_data | sum / weekday_data | length) | round(2) if weekday_data | length > 0 else 0 }}
{% else %}
0
{% endif %}
attributes:
days_count: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set count = 0 %}
{% for item in recent %}
{% set day_of_week = as_timestamp(item.date) | timestamp_custom('%w') | int %}
{% if day_of_week >= 1 and day_of_week <= 5 %}
{% set count = count + 1 %}
{% endif %}
{% endfor %}
{{ count }}
{% else %}
0
{% endif %}
- name: "周末平均用电"
unique_id: csg_weekend_avg_usage_0800041935246530
unit_of_measurement: "kWh"
icon: mdi:home
state: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set weekend_data = [] %}
{% for item in recent %}
{% set day_of_week = as_timestamp(item.date) | timestamp_custom('%w') | int %}
{% if day_of_week == 0 or day_of_week == 6 %}
{% set weekend_data = weekend_data + [item.kwh | float] %}
{% endif %}
{% endfor %}
{{ (weekend_data | sum / weekend_data | length) | round(2) if weekend_data | length > 0 else 0 }}
{% else %}
0
{% endif %}
attributes:
days_count: >
{% set data = state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') %}
{% if data %}
{% set recent = data[-30:] %}
{% set count = 0 %}
{% for item in recent %}
{% set day_of_week = as_timestamp(item.date) | timestamp_custom('%w') | int %}
{% if day_of_week == 0 or day_of_week == 6 %}
{% set count = count + 1 %}
{% endif %}
{% endfor %}
{{ count }}
{% else %}
0
{% endif %}
# ==================== 6. 预测与对比 ====================
- name: "预计本月用电"
unique_id: csg_predicted_month_usage_0800041935246530
unit_of_measurement: "kWh"
icon: mdi:crystal-ball
state: >
{% set current_usage = states('sensor.0800041935246530_this_month_total_usage') | float(0) %}
{% set today = now().day %}
{% set days_in_month = (now().replace(day=1) + timedelta(days=32)).replace(day=1) - timedelta(days=1) %}
{% set total_days = days_in_month.day %}
{% if today > 0 %}
{{ ((current_usage / today) * total_days) | round(2) }}
{% else %}
0
{% endif %}
- name: "预计本月电费"
unique_id: csg_predicted_month_cost_0800041935246530
unit_of_measurement: "元"
icon: mdi:calculator
state: >
{% set current_cost = states('sensor.0800041935246530_this_month_total_cost') | float(0) %}
{% set today = now().day %}
{% set days_in_month = (now().replace(day=1) + timedelta(days=32)).replace(day=1) - timedelta(days=1) %}
{% set total_days = days_in_month.day %}
{% if today > 0 %}
{{ ((current_cost / today) * total_days) | round(2) }}
{% else %}
0
{% endif %}
- name: "环比上月用电变动"
unique_id: csg_mom_usage_change_0800041935246530
unit_of_measurement: "%"
icon: mdi:trending-up
state: >
{% set this_month = states('sensor.0800041935246530_this_month_total_usage') | float(0) %}
{% set last_month = states('sensor.0800041935246530_last_month_total_usage') | float(0) %}
{% if last_month > 0 %}
{{ (((this_month - last_month) / last_month) * 100) | round(2) }}
{% else %}
0
{% endif %}
attributes:
trend: >
{% set this_month = states('sensor.0800041935246530_this_month_total_usage') | float(0) %}
{% set last_month = states('sensor.0800041935246530_last_month_total_usage') | float(0) %}
{% if this_month > last_month %}
上升
{% elif this_month < last_month %}
下降
{% else %}
持平
{% endif %}
- name: "同比去年用电变动"
unique_id: csg_yoy_usage_change_0800041935246530
unit_of_measurement: "%"
icon: mdi:calendar-compare
state: >
{% set this_year = states('sensor.0800041935246530_this_year_total_usage') | float(0) %}
{% set last_year = states('sensor.0800041935246530_last_year_total_usage') | float(0) %}
{% if last_year > 0 %}
{{ (((this_year - last_year) / last_year) * 100) | round(2) }}
{% else %}
0
{% endif %}
attributes:
trend: >
{% set this_year = states('sensor.0800041935246530_this_year_total_usage') | float(0) %}
{% set last_year = states('sensor.0800041935246530_last_year_total_usage') | float(0) %}
{% if this_year > last_year %}
上升
{% elif this_year < last_year %}
下降
{% else %}
持平
{% endif %}
# ==================== 7. 预算管理 ====================
- name: "本月电费剩余预算"
unique_id: csg_budget_remaining_0800041935246530
unit_of_measurement: "元"
icon: mdi:cash-multiple
state: >
{% set budget = 200 %}
{% set current_cost = states('sensor.0800041935246530_this_month_total_cost') | float(0) %}
{{ (budget - current_cost) | round(2) }}
attributes:
budget: 200
used: >
{{ states('sensor.0800041935246530_this_month_total_cost') | float(0) | round(2) }}
budget_usage_percent: >
{% set budget = 200 %}
{% set current_cost = states('sensor.0800041935246530_this_month_total_cost') | float(0) %}
{{ ((current_cost / budget) * 100) | round(2) if budget > 0 else 0 }}
status: >
{% set budget = 200 %}
{% set current_cost = states('sensor.0800041935246530_this_month_total_cost') | float(0) %}
{% set percent = (current_cost / budget) * 100 if budget > 0 else 0 %}
{% if percent < 50 %}
✅ 预算充足
{% elif percent < 80 %}
⚠️ 预算适中
{% elif percent < 100 %}
🔶 预算紧张
{% else %}
🚨 超出预算
{% endif %}
📊 仪表板配置(dashboard.yaml)
创建新仪表板或添加到现有仪表板:
views:
- title: 电力监控
path: power-monitor
icon: mdi:flash
badges:
- entity: sensor.0800041935246530_balance
- entity: sensor.yu_ji_ben_yue_dian_fei
- entity: sensor.jin_30_ri_ping_jun_yong_dian
cards:
# ========== 顶部仪表 ==========
- type: grid
columns: 2
cards:
- type: gauge
entity: sensor.0800041935246530_yesterday_kwh
name: 昨日用电
min: 0
max: 50
needle: true
segments:
- from: 0
color: green
- from: 30
color: yellow
- from: 40
color: red
- type: gauge
entity: sensor.0800041935246530_this_month_total_usage
name: 当月电量
min: 0
max: 1000
needle: true
segments:
- from: 0
color: green
- from: 600
color: yellow
- from: 800
color: red
# ========== 关键数据 ==========
- type: grid
columns: 3
cards:
- type: sensor
entity: sensor.0800041935246530_balance
name: 账户余额
icon: mdi:wallet
- type: sensor
entity: sensor.0800041935246530_arrears
name: 欠缴电费
icon: mdi:alert-circle
- type: sensor
entity: sensor.yu_ji_ben_yue_dian_fei
name: 预计本月
icon: mdi:calculator
# ========== 预测对比 ==========
- type: grid
columns: 3
cards:
- type: sensor
entity: sensor.yu_ji_ben_yue_yong_dian
name: 预计用电
- type: sensor
entity: sensor.huan_bi_shang_yue_yong_dian_bian_dong
name: 环比上月
- type: sensor
entity: sensor.tong_bi_qu_nian_yong_dian_bian_dong
name: 同比去年
# ========== 预算状态 ==========
- type: markdown
content: |
## 💰 本月预算
**剩余:**{{ states('sensor.ben_yue_dian_fei_sheng_yu_yu_suan') }} 元
**使用率:**{{ state_attr('sensor.ben_yue_dian_fei_sheng_yu_yu_suan', 'budget_usage_percent') }}%
**状态:**{{ state_attr('sensor.ben_yue_dian_fei_sheng_yu_yu_suan', 'status') }}
# ========== 阶梯电价 ==========
- type: grid
columns: 3
cards:
- type: sensor
entity: sensor.0800041935246530_current_ladder
name: 阶梯档位
- type: sensor
entity: sensor.0800041935246530_current_ladder_remaining_kwh
name: 阶梯剩余
- type: sensor
entity: sensor.0800041935246530_current_ladder_tariff
name: 当前电价
# ========== 本月/上月 ==========
- type: grid
columns: 2
cards:
- type: sensor
entity: sensor.0800041935246530_this_month_total_usage
name: 本月用电
- type: sensor
entity: sensor.0800041935246530_this_month_total_cost
name: 本月电费
- type: grid
columns: 2
cards:
- type: sensor
entity: sensor.0800041935246530_last_month_total_usage
name: 上月用电
- type: sensor
entity: sensor.0800041935246530_last_month_total_cost
name: 上月电费
# ========== 30日统计 ==========
- type: grid
columns: 3
cards:
- type: sensor
entity: sensor.jin_30_ri_zui_gao_yong_dian
name: 30日最高
- type: sensor
entity: sensor.jin_30_ri_zui_di_yong_dian
name: 30日最低
- type: sensor
entity: sensor.jin_30_ri_ping_jun_yong_dian
name: 30日平均
# ========== 工作日vs周末 ==========
- type: grid
columns: 2
cards:
- type: sensor
entity: sensor.gong_zuo_ri_ping_jun_yong_dian
name: 工作日平均
- type: sensor
entity: sensor.zhou_mo_ping_jun_yong_dian
name: 周末平均
# ========== 近30日趋势图 ==========
- type: custom:apexcharts-card
header:
show: true
title: 📊 近30日用电趋势
graph_span: 30d
series:
- entity: sensor.nan_fang_dian_wang_li_shi_pin_jie
type: area
name: 日用电量
color: purple
data_generator: |
const data = entity.attributes.history_day_value || [];
return data.slice(-30).map(item => {
return [new Date(item.date).getTime(), parseFloat(item.kwh) || 0];
});
# ========== 近7日柱状图 ==========
- type: custom:apexcharts-card
header:
show: true
title: 📅 近7日用电详情
graph_span: 7d
apex_config:
chart:
type: bar
series:
- entity: sensor.nan_fang_dian_wang_li_shi_pin_jie
type: column
name: 日用电量
color: blue
data_generator: |
const data = entity.attributes.history_day_value || [];
return data.slice(-7).map(item => {
return [new Date(item.date).getTime(), parseFloat(item.kwh) || 0];
});
# ========== 当月每日详情 ==========
- type: custom:apexcharts-card
header:
show: true
title: 📅 当月每日用电
span:
start: month
series:
- entity: sensor.0800041935246530_this_month_total_usage
type: column
name: 每日电量
data_generator: |
const data = entity.attributes.this_month_by_day || [];
return data.map(item => {
return [new Date(item.date).getTime(), parseFloat(item.kwh) || 0];
});
# ========== 今年月度趋势 ==========
- type: custom:apexcharts-card
header:
show: true
title: 📈 今年每月用电
span:
start: year
series:
- entity: sensor.0800041935246530_this_year_total_usage
type: column
name: 每月电量
data_generator: |
const data = entity.attributes.this_year_by_month || [];
return data.map(item => {
return [new Date(item.month || item.date).getTime(), parseFloat(item.kwh || item.usage) || 0];
});
# ========== 今年vs去年 ==========
- type: custom:apexcharts-card
header:
show: true
title: 🔄 今年 vs 去年
span:
start: year
series:
- entity: sensor.0800041935246530_this_year_total_usage
type: column
name: 今年
data_generator: |
const data = entity.attributes.this_year_by_month || [];
return data.map(item => {
return [new Date(item.month || item.date).getTime(), parseFloat(item.kwh || item.usage) || 0];
});
- entity: sensor.0800041935246530_last_year_total_usage
type: column
name: 去年
data_generator: |
const year = new Date().getFullYear();
const data = entity.attributes.last_year_by_month || [];
return data.map(item => {
const date = new Date(item.month || item.date);
date.setFullYear(year);
return [date.getTime(), parseFloat(item.kwh || item.usage) || 0];
});
安装步骤
1️⃣ 安装依赖
# HACS → 集成 → 南方电网
# HACS → 前端 → ApexCharts Card
# 重启 Home Assistant
2️⃣ 配置传感器
1. 编辑 configuration.yaml
2. 添加上面的传感器配置
3. 开发者工具 → YAML → 检查配置
4. 重启 Home Assistant
5. 等待 3-5 分钟传感器初始化
3️⃣ 创建仪表板
1. 设置 → 仪表板 → 添加仪表板
2. 名称:电力监控
3. 编辑仪表板 → 原始配置编辑器
4. 粘贴仪表板配置
5. 保存
调试方法
🔍 检查传感器状态
# 开发者工具 → 模板
{{ states('sensor.nan_fang_dian_wang_li_shi_pin_jie') }}
{{ state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value') | length }}
🔍 查看所有传感器
# 开发者工具 → 状态
# 搜索:nan_fang 或 jin_30 或 gong_zuo
🔍 检查数据结构
# 开发者工具 → 模板
{{ state_attr('sensor.nan_fang_dian_wang_li_shi_pin_jie', 'history_day_value')[:3] }}
🔍 验证图表数据
// 浏览器控制台(F12)
console.log(entity.attributes.history_day_value);
常见问题
❌ 传感器显示 unknown
**原因:**南方电网集成未配置或数据未加载
解决:
1. 检查南方电网集成是否正常
2. 等待数据更新(可能需要24小时)
3. 手动触发更新:开发者工具 → 服务 → homeassistant.update_entity
❌ 图表不显示
**原因:**ApexCharts Card 未安装
解决:
1. HACS → 前端 → ApexCharts Card → 安装
2. 清除浏览器缓存(Ctrl+F5)
3. 重启 Home Assistant
❌ 实体ID不匹配
**原因:**您的户号与示例不同
解决:
1. 开发者工具 → 状态 → 搜索 "0800041935246530"
2. 找到您的实际户号
3. 全局替换配置中的户号
❌ 配置检查失败
**原因:**YAML 语法错误
解决:
1. 检查缩进(使用2个空格,不是Tab)
2. 检查引号配对
3. 使用在线YAML验证器检查
📌 重要提示
- **户号替换:**将所有
0800041935246530替换为您的实际户号 - **预算调整:**修改
budget: 200为您的实际预算 - **数据延迟:**南方电网数据通常延迟1-2天
- **定期更新:**建议每月检查一次配置
🎯 功能清单
✅ 实时余额与欠费
✅ 本月/上月用电统计
✅ 今年/去年对比
✅ 阶梯电价监控
✅ 30日/7日趋势分析
✅ 工作日vs周末对比
✅ 预算管理与预警
✅ 环比/同比变动
✅ 多维度图表展示
配置完成后,您将拥有一个功能完整、美观实用的电力监控仪表板! 🎉