Den 14.e oktober gick Ellevio ut med ett pressmeddelande att man inför effektabonnemang från och med den 1.a januari 2025 för privathushåll med säkring mellan 16 och 63 A
Idag betalar kunderna för den sammanlagda mängden el man använder över en månad. Den nya prismodellen utgår istället från att kunden betalar för snittet av de tre timmar effektuttaget varit som högst en månad. På så sätt blir det möjligt att påverka kostnaden under hela månaden, och kunden betalar för hur mycket effekt man använder och hur man nyttjar näten.
Men man vill också förskjuta förbrukningen mot nattetid.
– Ett riktmärke är att försöka förlägga det som kräver mest el, som uppvärmningen och elbilsladdning, till kvällar när belastningen på elnäten är mindre. Mellan kl 22 på kvällen och kl 6 på morgonen är det mindre tryck i näten, och då räknas bara halva effekttoppen och priset halveras.
https://www.ellevio.se/abonnemang/ny-prismodell-baserad-pa-effekt/#h-elnatsavgiftens-olika-delar
Jag har home assistant som hemautomationssystem. Det snurrar på en home assistant Green hårdvara och har fungerat mycket bra.
När en så här nyhet kommer vill man ju
- Se och lära sig hur ens mönster ser ut och vilket effekt det går att få.
- Mäta och förutspå effekterna
- Varna om man är på väg att höja månadskostnaden
- Styra relevanta förbrukare
Den här artikel hanterar de 2 första punkterna.
Jag tog hjälp av chatGPT med hur man skulle göra. Konceptet var helt ok men alla detaljer blev inte rätt här kommer mitt och chatGPT’s gemensamma förslag.
En kommentar innan vi börjar. Att ha en konsekvent namngivningsstandard är nått man bör ha, som jag inte har. I det här exemplet är det dessutom blandad mellan svenska och engelska. Gör inte så : ) Jag orkar dock inte snygga till det nu utan vill ha igång det. Fort och fel. Gör gärna bättre
Erik har jobbat vidare på koden, han presenterar den här i ett inlägg i ”Svenska Home Assistant -gruppen” på facebook ( du behöver vara medlem för att kunna läsa ) Han har även lagt upp koden på Github ( den kommer du åt utan att ha konto.
Förutsättningar för att kunna beräkna effekttaxan dynamiskt
Det viktigaste är att du har en mätning på import från nätet idag. Jag har det via solcellerna, lastbalanseringen i värmepumpen och lastbalanseringen i elbilsladdaren. Om du inte idag har mätning på din import så måste det till först. En möjlighet är Tibber pulse
Vi börjar med att skapa ett antal variabler eller hjälpare som det heter i home assistant. Du hittar dit via inställningar-Enheter och tjänster-hjälpare. Där kan du välja knappen skapa hjälpare.
Steg 1 skapa en template sensor för justerad effekt per timme.
Först behöver vi timmedelvärde på importerad effekt. Här använder vi statistics.
Detta går troligen att göra med hjälpare av typen statistics
Jag har en fil som heter sensors.yaml för att det ska fungera behöver man göra en hänvisning hit från configuration.yaml
Sensor: !include sensors.yaml
Text att lägga till i configuration.yaml
I filen sensors.yaml skapar timmedelvärde på följande sätt.
– platform: statistics
entity_id: sensor.solax_grid_import
state_characteristic: mean
max_age:
hours: 1
precision: 2
name: Import Stats 1h
unique_id: import_Stats_1hText att lägga till i sensors.yaml
Observera att YAML är känsligt för indentering, att kopiera in koden kommer med största sannolikhet att ge fel. Lös dem! sensor.solax_grid_import är min sensor för import, byt ut mot din egen.
Därefter kan vi gå vidare och skapa en template för justerat timmedelvärde. Detta behövs eftersom bara halva effekttoppen ska räknas mellan 23 och 06
Skapa en hjälpare av typen template och välj sen mall för sensor i GUIet
I fältet mall för tillstånd skriver du in följande kod
{% set current_time = now().hour %}
{% set power = states(’sensor.import_stats_1h’) | float(0) %}
{% if current_time >= 22 or current_time < 6 %}
{{ power / 2 / 1000 }}
{% else %}
{{ power / 1000 }}
{% endif %}
Nu har vi koll på den värdet som effekttoppatna ska beräknas på.
Steg 2 Använd en template sensorer och en automation för att spara maxvärdet.
En förutsättning i Ellevios modell är att taxan beräknas på medel av tre toppar men det är bara max en topp per dygn.
Skapa 4 st hjälpare av typen nummer/input_number. Jag har:
- Hus daglig maxeffekt
- Hus top1
- Hus top2
- Hus top3
Vi ska också skapa en template sensor av typen mall för sensor med följande kod.
- 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 }}
Och ja det blir fel första tre dagarna i månaden men det lever jag med. Är du perfektionist går det att lösa.
Nu är det dags att börja med lite automationer för att hantera värden.
ChatGPT föreslog att lägga in detta i automations.yaml och det har jag gjort. Skulle vilja hantera det i GUIet men det får bli senare.
– alias: ”Uppdatera dagligt maxvärde”
trigger:
– platform: time_pattern
minutes: ”/59” # Körs varje timme
action:
– variables:
current_power: ”{{ states(’sensor.hus_justerad_effekttimme’) | float(0) }}”
current_max: ”{{ states(’input_number.hus_daglig_maxeffekt’) | float(0) }}”
– choose:
– conditions: ”{{ current_power > current_max }}”
sequence:
– service: input_number.set_value
data:
entity_id: input_number.hus_daglig_maxeffekt
value: ”{{ current_power }}”Kod att lägga in i automations.yaml ( jag tror att den finns default ).
En gång i timmen jämför den aktuellt värde med det högsta under dagen och om det aktuella värdet är högre så sparas det undan.
– alias: ”Återställ dagligt maxvärde”
trigger:
– platform: time
at: ”00:00:00”
action:
– service: input_number.set_value
data:
entity_id: input_number.hus_daglig_maxeffekt
value: 0Kod att lägga in i automations.yaml.
Vid midnatt så nollas dagens högsta värde.
Steg 3: Automation för att Uppdatera Toppvärden Dagligen
Slutligen, en automation som uppdaterar de tre största toppvärdena baserat på den dagliga max-effekten:
– alias: ”Uppdatera toppvärden”
trigger:
– platform: time
at: ’23:59:59′
action:– variables:
dagens_topp: ”{{ states(’input_number.hus_daglig_maxeffekt’) | float(0) }}”
topp1: ”{{ states(’input_number.hus_top_1’) | float(0) }}”
topp2: ”{{ states(’input_number.hus_top_2’) | float(0) }}”
topp3: ”{{ states(’input_number.hus_top_3’) | float(0) }}”– choose:
– conditions: ”{{ dagens_topp > topp1 }}” sequence:
– service: input_number.set_value
data:
entity_id: input_number.hus_top_3
value: ”{{ topp2 }}”– service: input_number.set_value
data:
entity_id: input_number.hus_top_2
value: ”{{ topp1 }}”– service: input_number.set_value
data:
entity_id: input_number.hus_top_1
value: ”{{ dagens_topp }}”– conditions: ”{{ dagens_topp > topp2 }}” sequence:
– service: input_number.set_value
data:
entity_id: input_number.hus_top_3
value: ”{{ topp2 }}”– service: input_number.set_value
data:
entity_id: input_number.hus_top_2
value: ”{{ dagens_topp }}”– conditions: ”{{ dagens_topp > topp3 }}” sequence:
– service: input_number.set_value
data:
entity_id: input_number.hus_top_3
value: ”{{ dagens_topp }}”Kod att lägga in i automations.yaml.
Vid midnatt så utvärderas dagens högsta värde mot månads hittills 3 största värden. Om det är större än något av dessa så läggs dagen värde in och de andra skiftas ner ett steg.
Tillsist så behöver alla värden nollställas vid månadsskiftet.
– alias: ”Återställ månatligt maxvärde”
trigger:
– platform: time
at: ”00:00:01”
condition:
– condition: template
value_template: ”{{ now().day == 1 }}”
action:
– service: input_number.set_value
data:
entity_id: input_number.hus_top1
value: 0
– service: input_number.set_value
data:
entity_id: input_number.hus_top2
value: 0
– service: input_number.set_value
data:
entity_id: input_number.hus_top3
value: 0Kod att lägga in i automations.yaml.
Återigen YAML är känsligt för indentering. Fixa felen som blir av copy paste !!!
Den första varje månad klockan 00:00:01 så nollställs alla värden
Testa gärna och berätta hur det går. Nu när vi har mätning kan vi börja med styrning och att varna mm mm.
I Steg 3: Automation för att Uppdatera Toppvärden Dagligen, har du en sensor under variables dagens_topp: som heter sensor.daglig_effekttopp, hur får du ut den sensorn? ingen sensor som nämns tidigare
Tack för att du påpekade det!
Ska vara input_number.hus_daglig_maxeffekt
Ett resultat av att kopiera dels från chatGPT och dels ifrån koden…
Texten uppdaterad
Hej och tack för att du tagit dig tid att dokumentera detta 🙂
Blir lite förvirrad kring din första statistics-sensor, sensor.solax_today_s_import_energy_2. Blandar du inte effekt och energi då sensor.solax_today_s_import_energy_2 verkar vara energi dvs Wh/kWh. Sen i din ”justerat timmedelvärde” så hanterar du den som effekt helt plötsligt. Är det så att din sensor ”sensor.solax_today_s_import_energy_2” är effekt men bara har ett namn som indikerar nåt annat? Eller missar jag något kring hur det hänger ihop? Jag använder Tibber och försöker förstå vilken sensor jag ska använda i statistics-sensors och det hade känts mer naturligt att använda deras ”nuvarande effekt-sensor”, i.e. den som bara heter power.
Du har helt rätt. I mitt fall borde det vara sensor.solax_grid_import ( kW ) istället. Däremot så fungerar det eftersom det blir kWh/h vilket också blir kW. Jag har ändrat och ska låta det snurra ett tag för att se att allt hänger ihop innan jag ändrar texten. Vem vet, nästa gång är det medeleffekt över 30 minuter och då skulle det inte fungera.
Tack för din input.
Stort tack för kod och utförlig beskrivning!
Två dagar kvar nu tills vi får användning för detta 🙂
Här kommer lite återkoppling:
I automationen ”Uppdatera toppvärden” tror jag att ”input_number.top_1” bör vara ”input_number.hus_top1” (gäller alla input i den automationen)
Indenteringen blir fel som du nämnde, enklaste sättet för mig var att be ChatGTP rätta koden. Det gäller även alla ”- ”strecken som iaf för mig var fel typ vilket gav error.
Nu till mitt bidrag:
Jag bad ChatGTP skapa en ”sensor.estimated_hourly_consumption” som utifrån förbrukningen så här långt under nuvarande timme räknar ut vad förbrukningen kommer vara för hela timmen om samma förbrukning fortsätter. Detta använder jag för att trigga en notifikation om detta överstiger månadens top3 värde (eller föregående månads top3 värde om man är i första veckan av månaden.) På så sätt har man lite tid på sig att eventuellt pausa energitjuvarna till nästa timme. Estimeringen är ju ganska dålig i början av varje timme så notifieringen triggas först efter att minst 20 min har gått från hel timma.
Jag har inte hunnit utvärdera detta så många dagar än så några buggar finns det säkert.. 😅 men än så länge funkar det fint. Gott nytt år!
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(2) * 60 }}
{% else %}
0
{% endif %}
Tack för din input. Du har naturligtvis rätt och jag har uppdaterat texten. Tack också för din sensor. Den kommer jag också att lägga in.
Nästa artikel jag så smått filar på är ett larmsystem, inte som i inbrottslarm utan mer som i processlarm. ”Om mitt hus avviker från det önskvärda tillståndet” ungefär. Den här kommer att passa perfekt in i det.
{% if elapsed_minutes > 0 %} Skulle det ha varit 20 där eller hanterar du det någon annanstans?
{% if elapsed_minutes > 0 %} är där tror jag för att undvika division med noll i nästa steg.
Jag sätter begränsningarna i notifierings automationen istället. Försökte klistra in min automation kod här men får då ett felmeddelande:
”A potentially unsafe operation has been detected in your request to this site”
Hur har du valt att presentera resultat? Har du tänkt göra en graf med elförbrukningen med topparna markerade?
Hej,
Vilken fin artikel!
Inga planer på att göra en BluePrint av denna kod?
Mvh,
Anders
Hej!
Tanken har funnits men än så länge har jag inte kompetensen för det. Kanske kommer men inget jag törs lova
Hej,
Har inte fått effekttariff hos mig ännu. Men knåpade ihop sensorer och automation för att få fram olika sensorer för maximal effekt över en månad. Kan ta hänsyn till månader, dagar och timmar med högtariff, samt reduktion vid lågtariff. Länken pekar på min YAML-fil för min inverter. Men ni kan enkelt ändra så det passar er. Se https://github.com/slittorin/home-assistant-config/blob/master/packages/sma.yaml