Skip to content

Instantly share code, notes, and snippets.

@Seafo
Last active April 25, 2025 11:11
Show Gist options
  • Select an option

  • Save Seafo/729e033d1f5f907697288ccc6ad7f395 to your computer and use it in GitHub Desktop.

Select an option

Save Seafo/729e033d1f5f907697288ccc6ad7f395 to your computer and use it in GitHub Desktop.
# Home Assistant kod för att hantera effekttoppar i Ellevios nät
# Koden kommer till största del från bloggen: https://www.ontour.ollivergarden.se/berakna-effekttaxta-enl-ellevio-i-homeassistant/
# Där finns en utförlig beskrivning av kod och logik. Läs!
# Utöver logiken som bekrivs av Tobias i bloggen har jag även skapat:
# sensor.estimated_hourly_consumption, input_number.effektgransvarde, samt en notifierings vid risk att överstiga nuvarnde effekttop
# Viktigt! sensor.timmkonsumption behöver bytas ut till din egen sensor från tex Tibber etc
#5 input.numbers:
input_number.hus_daglig_maxeffekt
input_number.effektgransvarde
input_number.hus_top1
input_number.hus_top2
input_number.hus_top3
# Tre Sensorer (Helpers/Template/Template as a Sensor/State template)
sensor.estimated_hourly_consumption:
{% set current_energy = states('sensor.timmkonsumption') | float(0) %}
{% set elapsed_minutes = now().minute + now().second / 60 %}
{% if elapsed_minutes > 0 %}
{{ (current_energy / elapsed_minutes) |round(3) * 60 }}
{% else %}
0
{% endif %}
sensor.hus_justerad_effekttimme:
{% set current_time = now().hour %}
{% set power = states('sensor.timmkonsumption') | float(0) %}
{% if current_time >= 22 or current_time < 6 %}
{{ power / 2 }}
{% else %}
{{ power}}
{% endif %}
sensor.hus_medel_effekttoppar:
{% set top1 = states('input_number.hus_top1') | float(0) %}
{% set top2 = states('input_number.hus_top2') | float(0) %}
{% set top3 = states('input_number.hus_top3') | float(0) %}
{{ (top1 + top2 + top3) / 3 }}
# Sex stycken automationer
# 1. Uppdatera dagligt maxvärde - Vid varje timmes slut jämfärs nuvarande timme med dagens högsta topp
# 2. Uppdatera månadstoppvärden - Vid midnatt jämförs dagens högsta topp med de tre högsta månadstopparna
# 3. Uppdatera Effektgränsvärde - Vid midnatt sätts Effektgränsvärde till den tredje högts månadstoppen om det inte är första veckan i månaden för då används förra månadens top3 istället
# 4. Återställ dagligt maxvärde - Vid midnatt nollställs dagens maxtopp
# 5. Återställ månatligt toppvärde - Vid ny månad nollställs topparna
# 6. 'Notifikation - hög effekt' - Jämför Effektgränsvärdet med estimerade energianvändningen för nuvarande timme och skickar en varning.
- id: '1735228987466'
alias: Uppdatera dagligt maxvärde
description: ''
triggers:
- minutes: '59'
trigger: time_pattern
seconds: '55'
conditions: []
actions:
- variables:
current_power: '{{ states(''sensor.hus_justerad_effekttimme'') | float(0) }}'
current_max: '{{ states(''input_number.hus_daglig_maxeffekt'') | float(0) }}'
- choose:
- conditions:
- condition: template
value_template: '{{ current_power > current_max }}'
sequence:
- data:
entity_id: input_number.hus_daglig_maxeffekt
value: '{{ current_power }}'
action: input_number.set_value
mode: single
- id: '1735229247312'
alias: Uppdatera månadstoppvärden
description: ''
triggers:
- at: '23:59:59'
trigger: time
conditions: []
actions:
- variables:
dagens_topp: '{{ states(''input_number.hus_daglig_maxeffekt'') | float(0) }}'
topp1: '{{ states(''input_number.hus_top1'') | float(0) }}'
topp2: '{{ states(''input_number.hus_top2'') | float(0) }}'
topp3: '{{ states(''input_number.hus_top3'') | float(0) }}'
- choose:
- conditions:
- condition: template
value_template: '{{ dagens_topp > topp1 }}'
sequence:
- data:
entity_id: input_number.hus_top3
value: '{{ topp2 }}'
action: input_number.set_value
- data:
entity_id: input_number.hus_top2
value: '{{ topp1 }}'
action: input_number.set_value
- data:
entity_id: input_number.hus_top1
value: '{{ dagens_topp }}'
action: input_number.set_value
- conditions:
- condition: template
value_template: '{{ dagens_topp > topp2 }}'
sequence:
- data:
entity_id: input_number.hus_top3
value: '{{ topp2 }}'
action: input_number.set_value
- data:
entity_id: input_number.hus_top2
value: '{{ dagens_topp }}'
action: input_number.set_value
- conditions:
- condition: template
value_template: '{{ dagens_topp > topp3 }}'
sequence:
- data:
entity_id: input_number.hus_top3
value: '{{ dagens_topp }}'
action: input_number.set_value
mode: single- id: '1735228878214'
- id: '1735408411461'
alias: Uppdatera Effektgränsvärde
description: ''
triggers:
- trigger: time_pattern
hours: '0'
minutes: '01'
conditions:
- condition: template
value_template: '{{now().day > 7 }}'
actions:
- action: input_number.set_value
metadata: {}
data:
value: '{{ states(''input_number.hus_top3'') }}'
target:
entity_id: input_number.effektgransvarde
mode: single
alias: Återställ dagligt maxvärde
description: ''
triggers:
- at: 00:00:05
trigger: time
conditions: []
actions:
- data:
entity_id: input_number.hus_daglig_maxeffekt
value: 0
action: input_number.set_value
mode: single
- id: '1735229313442'
alias: Återställ månatligt toppvärde
description: ''
triggers:
- at: 00:00:01
trigger: time
conditions:
- condition: template
value_template: '{{ now().day == 1 }}'
actions:
- data:
entity_id: input_number.hus_top1
value: 0
action: input_number.set_value
- data:
entity_id: input_number.hus_top2
value: 0
action: input_number.set_value
- data:
entity_id: input_number.hus_top3
value: 0
action: input_number.set_value
mode: single
- id: '1735453330342'
alias: 'Notifikation - hög effekt'
description: ''
triggers:
- trigger: time_pattern
seconds: '55'
conditions:
- condition: template
value_template: '{{ now().minute >= 20 }}'
- condition: time
after: 06:00:00
before: '22:00:00'
actions:
- if:
- condition: numeric_state
entity_id: sensor.estimated_hourly_consumption
above: input_number.effektgransvarde
- condition: numeric_state
entity_id: sensor.estimated_hourly_consumption
above: input_number.hus_daglig_maxeffekt
then:
- action: notify.mobile_app_pixel_8
metadata: {}
data:
message: 'Den estimerade förbrukningen för denna timme är {{ states(''sensor.estimated_hourly_consumption'')
}} kWh. Den tredje högsta effektoppen är {{ states(''input_number.effektgransvarde'')
}} '
- delay:
hours: 0
minutes: 15
seconds: 0
mode: queued
max: 10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment