@mkanet Per your suggestion to show my full code, here are those details. I moved this part of the conversation back to this thread because I was having issues with formatting so much information through github.
Hardware Setup - PV System with Tesla Gateway and 2x Tesla Powerwalls 2
Software Setup
- Hardware connected to HA through the native Tesla Powerwall integration
- [Power Flow Card Plus] to visualize Active Power and Daily Energy
- Utility Meter Helpers - used to calculate Daily Energy for solar, house, battery, and grid
- Utility Meter Helpers - used to calculate peak and OFFPEAK import and export of energy to/from grid
- Automation - used trigger the PEAK/OFFPEAK selection on specific utility meters per the grid specifics outlined below
- APF Template Sensors - tested several times now to see if it matches Tesla app values better than native HA integration, sample of results here - no longer using these sensors.
Grid Specifics - Time-of-use plan with a different rate during PEAK/OFFPEAK times (M-F 10A-7P) and Season (June-Oct for SUMMER), other times are OFFPEAK or WINTER.
Sensors
Active Power Sensors in kWh |
|
|
|
Name |
Entity |
Type |
Source Sensor |
Grid Power Now |
sensor.powerwall_site_now |
Native Powerwall Integration |
Powerwall |
Solar Power Now |
sensor.powerwall_solar_now |
Native Powerwall Integration |
Powerwall |
House Power Now |
sensor.powerwall_load_now |
Native Powerwall Integration |
Powerwall |
Battery Power Now |
sensor.powerwall_battery_now |
Native Powerwall Integration |
Powerwall |
Grid to Battery Power Now |
sensor.powerwall_grid_to_battery |
Template Sensor |
Template Sensor shared below |
Grid to Battery Power Now Template Sensor
{% set grid_power = states('sensor.powerwall_site_now') | float %}
{% set house_power = states('sensor.powerwall_load_now') | float %}
{% set battery_power = states('sensor.powerwall_battery_now') | float %}
{% set solar_power = states('sensor.powerwall_solar_now') | float %}
{% if grid_power > house_power %}
{{ grid_power - house_power }}
{% else %}
0
{% endif %}
Cumulative Energy Sensors in kWh |
|
|
|
Name |
Entity |
Type |
Source Sensor |
Grid Energy Export |
sensor.powerwall_site_export |
Native Powerwall Integration |
Powerwall |
Grid Energy Import |
sensor.powerwall_site_import |
Native Powerwall Integration |
Powerwall |
Solar Energy Export |
sensor.powerwall_solar_export |
Native Powerwall Integration |
Powerwall |
House Energy Import |
sensor.powerwall_load_import |
Native Powerwall Integration |
Powerwall |
Battery Energy Export |
sensor.powerwall_battery_import |
Native Powerwall Integration |
Powerwall |
Battery Power Import |
sensor.powerwall_battery_import |
Native Powerwall Integration |
Powerwall |
Grid to Battery Energy Import |
sensor.powerwall_grid_to_battery_energy |
Integration - Riemann Sum |
sensor.powerwall_grid_to_battery |
Daily Energy Sensors in kWh |
|
|
|
Name |
Entity |
Type |
Source Sensor |
Grid Energy Export Daily |
sensor.site_energy_export_daily |
Utility Meter |
sensor.powerwall_site_export |
Grid Energy Import Daily |
sensor.site_energy_usage_daily |
Utility Meter |
sensor.powerwall_site_import |
Solar Energy Export Daily |
sensor.solar_production_daily |
Utility Meter |
sensor.powerwall_solar_export |
House Energy Import Daily |
sensor.load_energy_import_daily |
Utility Meter |
sensor.powerwall_load_import |
Grid to Battery Energy Import Daily |
sensor.powerwall_grid_to_battery_energy_daily |
Utility Meter |
sensor.powerwall_grid_to_battery_energy |
Grid Energy Export Daily |
select.dte_daily_export |
Utility Meter |
sensor.powerwall_site_export |
Grid Energy Export Daily PEAK |
sensor.dte_daily_export_peak |
Utility Meter |
sensor.powerwall_site_export |
Grid Energy Export Daily OFFPEAK |
sensor.dte_daily_export_offpeak |
Utility Meter |
sensor.powerwall_site_export |
Grid Energy Import Daily |
select.dte_daily_consumption |
Utility Meter |
sensor.powerwall_site_import |
Grid Energy Import Daily PEAK |
sensor.dte_daily_consumption_peak |
Utility Meter |
sensor.powerwall_site_import |
Grid Energy Import Daily OFFPEAK |
sensor.dte_daily_consumption_offpeak |
Utility Meter |
sensor.powerwall_site_import |
Powerwall Charge Actual
- sensor:
- name: "powerwall_charge_actual"
unique_id: "powerwall_charge_actual"
state_class: "measurement"
unit_of_measurement: "%"
device_class: "battery"
state: >-
{% set percent = ((states('sensor.powerwall_charge') | float(0) / 100.0) - (0.05)) / (0.95) | float(0)%}
{{ (percent * 100) | round(1) }}
Power Flow Card Plus Code
type: custom:power-flow-card-plus
entities:
battery:
state_of_charge: sensor.powerwall_charge_actual
entity: sensor.powerwall_battery_now
display_state: one_way_no_zero
display_zero_tolerance: 20
grid:
entity: sensor.powerwall_site_now
power_outage:
entity: binary_sensor.grid_status
state_alert: 'off'
secondary_info:
template: '{{ states(''sensor.site_energy_usage_daily'') | round(1) }} kWh'
display_state: one_way_no_zero
color_circle: true
use_metadata: false
display_zero_tolerance: 99
solar:
entity: sensor.powerwall_solar_now
display_zero_state: true
use_metadata: false
display_zero_tolerance: 10
secondary_info:
template: '{{ states(''sensor.solar_production_daily'') | round(1) }} kWh'
home:
entity: sensor.powerwall_load_now
secondary_info:
template: '{{ states(''sensor.load_energy_import_daily'') | round(1) }} kWh'
individual1:
entity: sensor.emporiavue2_total_fcsp_power
icon: mdi:car-pickup
secondary_info:
unit_of_measurement: '%'
entity: sensor.bluey_battery_level
name: Bluey
calculate_flow_rate: true
display_zero: true
individual2:
entity: sensor.direct_wire_indoor_outdoor_smart_switch_electric_production_w
secondary_info:
entity: sensor.dayman_battery_level
unit_of_measurement: '%'
icon: mdi:car-sports
name: DayMan
color_icon: false
calculate_flow_rate: true
show_direction: false
inverted_animation: false
color_value: false
display_zero: true
display_zero_state: false
fossil_fuel_percentage:
icon: mdi:home-export-outline
display_zero_state: false
display_zero: true
name: Export
state_type: power
secondary_info:
template: '{{ states(''sensor.site_energy_export_daily'') | round(1) }} kWh'
display_zero_tolerance: 0
unit_white_space: true
entity: sensor.powerwall_site_export
clickable_entities: true
display_zero_lines:
mode: hide
transparency: 50
grey_color:
- 189
- 189
- 189
use_new_flow_rate_model: true
w_decimals: 0
kw_decimals: 1
min_flow_rate: 0.75
max_flow_rate: 6
max_expected_power: 2000
min_expected_power: 0.01
watt_threshold: 1000
transparency_zero_lines: 0
My focus has been on trying to get the data shown in Home Assistant to match what’s reported in the Tesla App, but be more flexible to show the detail I care about. e.g. PEAK/OFFPEAK export and import, and Grid to Battery charging so the energy dashboard can properly calculate costs.
I was hopeful that the APF sensors would solve this, but as I shared above, I found the DAILY sensors based off of the native integration sensors to be more accurate for all except for House Import, which could be the inverter sensor calculation for real_house?
To summarize the persistent issues:
- Utility Meters for PEAK/OFFPEAK add up to the total for Daily IMPORT and EXPORT, but the split between PEAK/OFFPEAK does not match what’s visible in the Tesla app (usually 0 import during peak hours).
- Power Flow Card Plus does not properly show GRID to BATTERY charging, except for when solar is producing energy. I’ve been tracking this issue here.
There’s a lot here and the formatting is horrible (apologies for that). The net of this appears to be that the native Powerwall integration for Grid Import is increasing during PEAK hours even though the Tesla app shows 0 importing during those windows. And per my original thread, it did not always do this.
So, am I doing something wrong, is the native Powerwall integration reporting false data, or the Tesla app reporting false data?