Du kan få en finfin og detaljert oversikt over strømforbruket ditt i HA dersom du tar deg tid til å lære deg litt kode. Du må ha tilgang til forbruksdata fra strømmåleren din, ellers trenger du ikke noe ekstrautstyr.
![]() |
Du kan tegne pene grafer med Apexcharts. |
OBS: Denne saken forutsetter at du har grunnleggende kjennskap til koding i Yaml og kjenner til hvordan sensorer og slikt fungerer.
Jeg har en enhet på HAN-porten i strømskapet mitt som leser av forbruket. Gjennom Tibber-integrasjonen får jeg en sensor i HA som heter tibber_pulse_<adresse>_accumulated_consumption_current_hour. Dette er motoren i systemet.
Strømprisen får jeg fra Nordpool-integrasjonen i HA. Den installeres via Hacs; det er kommet en ny integrasjon med desember-oppdateringen av HA, men den avviker noe fra Hacs-versjonen, og jeg har ikke byttet ennå.
Hos meg ser sensoren slik ut: nordpool_kwh_no5_nok_3_05_025. Jeg bor i Bergen og får strømprisen fra område 05. Jeg henter ut prisen i NOK/kWh (ikke øre) og med mva.
La oss begynne med disse to sensorene, og lage en ny sensor som gir prisen på forbrukt strøm løpende per time og så nullstiller seg. Hos meg ser koden slik ut. Du må erstatte sensornavnene med dine egne, selvsagt.
Koden finner du her i et eget dokument som er litt enklere å kopiere fra.
totalpris_forbrukt_strom_nok:
friendly_name: "Totalpris forbrukt strøm i NOK"
unique_id: "totalpris_forbrukt_strom_nok"
unit_of_measurement: "NOK"
value_template: >
{% set spotpris = states('sensor.nordpool_kwh_no5_nok_3_05_025') | float(0) %}
{% set forbruk = states('sensor.tibber_pulse_<adresse>_accumulated_consumption_current_hour') | float(0) %}
{% set time = now().hour %}
{% set maned = now().month %}
{% set er_dagtid = (6 <= time < 22) %}
{% if maned in [1, 2, 3] %}
{% set nettleie = 0.5025 if er_dagtid else 0.3786 %}
{% else %}
{% set nettleie = 0.5925 if er_dagtid else 0.4652 %}
{% endif %}
{% set totalpris_per_kwh = spotpris + nettleie %}
{% set forbruk_nok = totalpris_per_kwh * forbruk %}
{{ forbruk_nok | round(2) }}
Her er også nettleien lagt inn, den vil variere etter hvor du bor, men dette er satsene for Bergen.
Nå har vi altså brutto strømkostnad for hver time. Fra denne kostnaden skal vi trekke fra strømstøtten slik at vi får en nettopris. Du får refundert 90 prosent av strømprisen som er over 73 øre/kWh, eller 0,9125 NOK, fra staten. Dermed må vi lage en sensor som regner ut fratrekket dersom prisen kommer over støttegrensen. Husk at det ikke er rabatt på nettleien, så du må bruke spotpris fra Nordpool som utgangspunkt. Da blir utregningen slik:
totalpris_etter_stromstotte_nok:
friendly_name: "Totalpris etter strømstøtte i NOK"
unique_id: "totalpris_etter_stromstotte_nok"
unit_of_measurement: "NOK"
value_template: >
{% set totalpris = states('sensor.totalpris_forbrukt_strom_nok') | float(0) %}
{% set spotpris = states('sensor.nordpool_kwh_no5_nok_3_05_025') | float(0) %}
{% set forbruk = states('sensor.tibber_pulse_<adresse>_accumulated_consumption_current_hour') | float(0) %}
{% set terskelverdi = 0.9125 %}
{% set overstigende_pris = spotpris - terskelverdi %}
{% set stromstotte_per_kwh = (overstigende_pris * 0.9) if spotpris > terskelverdi else 0 %}
{% set stromstotte = stromstotte_per_kwh * forbruk %}
{{ (totalpris - stromstotte) | round(2) }}
Jeg ser at noen av variabelnavnene mine kan være mer entydige, men du kan døpe dem om slik du ønsker.
Om du lurer på bruken av float(0), bruker jeg dette når jeg henter inn verdier fra sensorer som jeg ikke selv kontrollerer. De sikrer at verdien fra sensoren konverteres til et flyttall, som jeg kan bruke i beregninger, og at verdien settes til 0 dersom en sensor returnerer en strengverdi med "none" eller "Mikke Mus" (ikke fullt så vanlig).
Round(2) gir et pent formatert kronebeløp med to desimaler - husk at vi bruker NOK gjennomgående, og ikke øre.
Da har vi to sensorer vi kan bruke som utgangspunkt for en pen graf i apexchart. I tillegg henter jeg strømforbruket for hver time rett fra Tibber-sensoren. Koden jeg bruker ser slik ut:
type: custom:apexcharts-card
graph_span: 24h
header:
title: Strømkost inkl nettleie og med/uten strømstøtte
show: true
show_states: false
apex_config:
chart:
type: bar
legend:
show: true
position: bottom
horizontalAlign: center
labels:
useSeriesColors: true
fontSize: 12
xaxis:
type: datetime
labels:
datetimeFormatter:
hour: HH:mm
series:
- entity: sensor.totalpris_forbrukt_strom_nok
type: column
name: Strømkost før støtte
group_by:
func: max
duration: 1h
yaxis_id: Pris
color: red
- entity: sensor.totalpris_etter_stromstotte_nok
type: column
name: Strømkost etter støtte
group_by:
func: max
duration: 1h
yaxis_id: Pris
color: orange
- entity: sensor.tibber_pulse_<adresse>_accumulated_consumption_current_hour
type: line
name: Strømforbruk
group_by:
func: avg
duration: 1h
yaxis_id: Strømforbruk
color: "#2a6bcc"
stroke_width: 2
yaxis:
- id: Pris
min: 0
decimals: 2
opposite: true
- id: Strømforbruk
min: 0
decimals: 1
opposite: false
Noen viktige poeng:
graph_span angir hvor langt tilbake grafen skal vise.
show_states angir om sensorverdiene skal vises i toppen av grafen og dersom legend_show: true vises sensorverdiene under grafen.
Siden vi er interessert i maksverdiene for hver time, bruker vi func: max i group_by.
Under yaxis kan vi sette minimumsverdi til 0 på begge sider, men la maksverdien være dynamisk, ved ikke å angi den.
Jeg er ingen ekspert på apexcharts, og har fått hjelp av ChatGPT til å lage denne, men leser man dokumentasjon og prøver og feiler, er det utrolig hva man får til.
Lykke til! Legg gjerne igjen en kommentar her eller på Face dersom du finner feil eller har forbedringer.
Ingen kommentarer:
Legg inn en kommentar