@Herr.Vorragend You need to replace the text yyyy-mm-dd with todays date so you will have something like as_timestamp(“2023-07-09”)
Also the default option is only needed if the first value fails the conversion to UNIX timestamp. In my example this shouldn’t occur, so for simplicity I didnt include it. You can if you want to. If you had “yyyy-mm-dd” in the first value it will always fail and give you the default, since you can’t convert the text yyyy-mm-dd into a timestamp.
Oh, how stupid. I didn’t read this. Thank you.
I seem to have done things somewhat differently from others – a meter permanently showing 0
and a total cost sensor that increments daily:
- trigger:
- platform: time
at: "00:00:05"
sensor:
- name: "Smart Meter Electricity: Standing Charge"
unique_id: smart_meter_electricity_standing_charge
device_class: monetary
unit_of_measurement: "GBP"
state_class: "total"
icon: mdi:cash
state: >
{% if as_datetime(this.last_changed) > today_at('00:00')
and has_value('sensor.smart_meter_electricity_standing_charge') %}
{{ states('sensor.smart_meter_electricity_standing_charge') }}
{% else %}
{{ states('sensor.smart_meter_electricity_standing_charge') | float(0) +
states('sensor.smart_meter_electricity_import_standing_charge') | float }}
{% endif %}
- name: "Smart Meter Electricity: Standing Charge Usage"
unique_id: 6280CFF8-3B92-46D1-9BDF-4C386E85D818
device_class: energy
state_class: total_increasing
unit_of_measurement: kWh
state: "0"
Those sensors are then set up for use like this:
Alt text: The “Configure grid consumption” dialog from the energy dashboard configuration view. The “Smart Meter Electricity: Standing Charge Usage” sensor is used for the “Consumed Energy” field, and cost tracking is done by “Use an entity tracking the total cost” with the “Smart Meter Electricity: Standing Charge” sensor being the entity tracking the total costs.
I have the current standing charge supplied in sensor.smart_meter_electricity_import_standing_charge
over MQTT, you’ll need to make sure it’s available. It works by adding the current daily standing charge to the existing value of the sensor if its last update wasn’t after today at midnight – the template is set to only trigger once daily, but it’ll still work if it’s triggered more often.
I have the same setup for gas, which works nicely as during the summer it’s plausible that the house won’t actually use any gas some days. So I avoid registering even a nominal amount of fake usage.
nope cant get this to work dont have a clue what i am doing
Quick question here. From NZ and we have the same sort of charge here. I have an entity which is Powershop Daily Charge, which is currently = $1.03 and gets updated on a daily basis (it has not changed for a while tho). Would there be a way to use this as the price rather than using a static number?
Hmmm - tricky. If there is a web page or app with the daily charges on it, you maybe able to download it to a separate entity and then use it with the “Use an entity with current price” option in your energy dashboard. Also this guy @joem seems to have managed to do a bit with Powershop data. Scrape sensor improved - scraping multiple values - #280 by stepsolar
Maybe ask him if he’s solved it ?
Yea so thats the exact code im using to bring the data into the entity. Using your original suggestion and having a bit of a play with it after i posted yesterday, i have it working! This morning it added $1.03 as a fixed charge for the day. Super happy with the result, thanks for sharing your solution. I actually ended up using the same thing for my gas bottle monitoring as well.
What i had todo is create an entity as follows, and then select that as the entity with current price (sensor.powershop_daily_charge being the scraped charge in $) in the energy dashboard:
- platform: template
sensors:
powershop_supply_charge_nzd_wh:
friendly_name: "Powershop Supply Charge NZD Wh"
unit_of_measurement: "NZD/kWh"
device_class: monetary
value_template: "{{ (states('sensor.powershop_daily_charge') | float * 1000) | round(3) }}"
@muzzak - One of the things I have observed is that the daily charge is added at 10pm each evening. Would this be because I setup the entity in your code around then? I was looking for a way to change it so that it is added at the beginning of the day so it shows as part of that days charges.
@Greminn - If you’ve set it up as I did (below for ref) then the sensor will be “total_increasing” every day. That’s using timestamp_custom(“%d”). At midnight it will increase by 1. You can easily check this by looking at the values for sensor “Supply Charge” through HA - Settings, Devices and Services, Entities and search for Supply Charge. It should increase by 1 at midnight every day.
If I take this variant, the counter is reset at the beginning of the month (day 1). Is that correct?
{{ int(as_timestamp(now()) | timestamp_custom("%d")) + 1 - int(as_timestamp("2023-07-01",default=0) | timestamp_custom("%d")) }}
Yep, here is my setup:
- sensor:
- name: "Powershop Supply Charge"
unit_of_measurement: "Wh"
device_class: energy
state_class: total_increasing
state: >-
{{ int(as_timestamp(now()) | timestamp_custom("%d")) + 1 - int(as_timestamp("2023-08-03") | timestamp_custom("%d")) }}
But as you can see its adding at 10pm…
Looks like a problem with your clock or maybe your timezone settings. You may want to work your way through this How to set time? as your problem looks similar.
Just some backgrounds before I answer.
int(as_timestamp(now()) | timestamp_custom("%d"))
will give you the day of the month as an integer. ie 12th July 2023 returns 12. 31st July returns 31
1st August returns 1
If you are using %d, you could use this as your counter and it would work fine, since the total_increasing sensor will take care of the drop from 31 to 1 New sensor state class: total_increasing | Home Assistant Developer Docs
The second part + 1 - int(as_timestamp(“yyyy-mm-dd”) | timestamp_custom("%d")) is really just to make things nice for other values so you don’t end up with -ve values at the start, in certain cases.
@Herr.Vorragend in your variant you have used “2023-07-01”.
int(as_timestamp(“2023-07-01”) | timestamp_custom("%d")) will always = 1 as explained above, so you’ll have +1 -1 which is 0. Hence you could just use the first part int(as_timestamp(now()) | timestamp_custom("%d")) and still get the same result : Counter = Day of Month
Can you share your card yaml for the grid energy please, I’m looking for this exact card for my dashboard
entities:
- color: '#27ae60'
entity: sensor.grid_sold_energy_day
name: Energy Sold
- color: '#e74c3c'
entity: sensor.grid_consumed_energy_day
name: Consumed from Grid
show_state: true
- aggregate_func: min
color: gray
entity: binary_sensor.night
name: Night Time
show fill: true
show legend: false
show_line: false
show_points: false
show_state: false
smoothing: false
y_axis: secondary
points_per_hour: 16
show:
graph: line
extrema: false
labels: false
labels_secondary: false
smoothing: false
state_map:
- label: Day
value: 'off'
- label: Night
value: 'on'
hours_to_show: 24
name: Grid Energy Sold & Bought
type: custom:mini-graph-card
Or this one?
type: horizontal-stack
cards:
- type: custom:bignumber-card
entity: sensor.daily_grid_sold
title: Sold Today
scale: 20px
- type: custom:bignumber-card
entity: sensor.daily_grid_cost
title: Bought Today
scale: 20px
- type: custom:bignumber-card
entity: sensor.daily_cost_less_sold
title: Net Cost Today (incl. daily service fee of $1.26)
scale: 20px
awesome thanks, and for the sensors like daily_grid_sold, i take it i just create a sensor that multiplies the grid total kw / kw/h?
- platform: template
sensors:
grid_usage_pos:
value_template: "{{ ( -1 * states('sensor.fronius_grid_usage') |float) }}"
fronius_house_load_pos:
value_template: "{{ (states('sensor.fronius_house_load') |float) | abs }}"
daily_grid_cost:
friendly_name: 'Daily Grid Cost'
value_template: >
{% set value = (states('sensor.grid_consumed_energy_day') | float * 0.307 | round(2) ) %}
${{ '{:.2f}'.format(value) }}
daily_grid_sold:
friendly_name: 'Daily Grid Sold'
value_template: >
{% set value = (states('sensor.grid_sold_energy_day') | float * 0.08 | round(2) ) %}
${{ '{:.2f}'.format(value) }}
daily_cost_less_sold:
friendly_name: 'Daily Cost less Sold'
value_template: >
{% set value = ((states('sensor.grid_consumed_energy_day') | float * 0.307) - (states('sensor.grid_sold_energy_day') | float * 0.08 )) + 1.18 %}
${{ '{:.2f}'.format(value) }}
We have fixed costs in The Netherlands so this argument isn’t correct.
Love to see a UX based solution nevertheless
Disappointing that something as simple as a daily charge hasn’t been added yet, I cant imagine it being too difficult to implement, but would really make the energy dashboard more useful, specially for those on variable tariffs like myself.