Code examples for Home Assistant energy management. Focus on optimizing self-consumption, reducing costs, and improving efficiency with batteries, solar, and EV charging.
Warning
Hobby project – shared as-is, use at your own risk.
Important
You have du adjust the code to your setup.
The smart charging logic search for cheap charging intervals when new electricity prices are published. Then it calculates how much energy is needed between the charging intervalls. A solar forecast is included to increase self-sufficiency. If solar power isn’t enough and the price is very low (set in the UI), the battery charges extra from the grid. If prices are high now but low at the next charging window, any surplus will be sold.
💥 BONUS!
- Battery discharge can be limited to only cover the home’s demand, which is useful when charging an EV (battery_luna_2000_S1_ev_protection.yaml in dictionary automations)
Bilden ovan visar adminvyn via Home Assistant
- PV
- Battery (Luna 2000 S1)
- Smart Power Meter
- Wallbox Pulsar Max
-
Skapa en template som håller koll på husets aktuella effekt. I min setup valde jag att exkludera laddningen av elbilen. Du hittar den via filen template.yaml och där heter den huseffekt_exl_elbil
-
Skapa därefter en sensor (finns i sensors.yaml) som ackumulerar kWh som du namnger enligt följande energy_total_exl_elbil.
Important
Min kod förutsätter att du har en smartmätare via Huawei intergrationen samt att du justerat dayily_yail enligt följande
Note
Om din setup ser ut på annat sätt kan du utgå från min kod för att skapa en sensor som håller koll på husets aktuella effekt. Kan du inte koda är CHAT-GPT duktig på att justera.
Skapa SQL-sensorer (finns i mappen sql-sensor) för att följa din energiförbrukning. SQL-sensorer beräknar kWh/h för de senaste 3 dagarna. Antalet dagar går att justera i koden. Skapar SQL-sensorer via integrationer
- Namn: Använd samma namn som filen som du hämtar frågan (välj fråga) ifrån
- Databas URL: LÄMNA TOMT
- Kolumn: avg_kwh_per_hour
- Välj-fråga: Finns i filerna i mappen sql-sensorer
- Måttenhet: kWh/h
- Värdemall: LÄMNA TOMT
- Enhetsklass: LÄMNA TOMT
- Tillståndsklass: LÄMNA TOMT
Important
Ersätt sensor.energy_total_exl_elbil om du valde något annat namn i steg 1.
Skapa en command line sensor (finns i command_line.yaml) för solelsprognos
Important
Om du ändrar namnet på sensorn måste du justera resten av koden. Mitt råd är att använda ett annat friendly name om du önskar ett annat namn. Detta kommer inte påverka resterande kod
I filen comman_line.yaml finns mer information om hur du ställer in solprognosen.
Skapa tre template sensorer (finns i template.yaml) som söker upp billiga laddningsfönster. Template sensorerna har nedanstående namn i filen template.yaml.
- battery_charge_window_cheapest_1a
- battery_charge_window_cheapest_1b
- battery_charge_window_cheapest_2
Important
Template sensorerna ska ha en egen trigger
Lägg in din Nordpool sensor i template koden (min är i SEK/kWh).
Skapa tre input_number (via helper). Ge dem följande värden:
-
battery_charge_duration_hours
- Lägsta värde: 1
- Högsta värde: 6
- Visningsläge: Inmatningsfält
- Steglängd: 1
- Måttenhet: h
-
battery_total_capacity_kwh
- Lägsta värde: 0
- Högsta värde 100
- Visningsläge: Inmatningsfält
- Steglängd: 0,1
- Måttenhet: kWh
-
price_limit_supercheap
- Lägsta värde: 0
- Högsta värde: 5
- Visningsläge: Inmatningsfält
- Steglängd: 0,01
- Måttenhet: SEK/kWh
Skapa en input_button (via helper) för uppdateringen av laddningsfönster. Knappen bidrar till smidig manuell uppdatering vid behov, men även för den automatiska uppdateringen. Ge den följande namn:
- update_battery_cheapest_charge
Skapa en template sensor som håller koll på om nya elpriser finns tillgängliga. Du hittar denna kod i filen template.yaml och koden heter Nordpool Tomorrow Prices Available
Important
Template sensorn ska ligger som en binary_sensor under template
Lägg till din Nordpool-sensor i koden.
Skapa en automation (battery_update_charge_interval.yaml i mappen automations) som styr uppdateringen av laddningsfönsterna. När du gjort detta har du tre laddningsfönster som uppdateras när nya elpriser släpps och som kommer att användas för att ladda batteriet. Sensorernas namn hittar du i steg 4.
Skapa två template sensorer (finns i template.yaml) som beräknar energibehovet. Template sensorerna har nedanstående namn i filen template.yaml.
- battery_charge_energy_1a_2
- battery_charge_energy_2_1b
Important
Observera att koden är lång och att dessa sensorer INTE ska ha en egen trigger.
Lägg till din Nordpool-sensor
Justera din solprognos (om du ändrade namnet på den)
Justera SQL-sensorerna om du ändrade namnet på dem
Warning
För att sensorerna ska fungera krävs sensor.batteries_state_of_capacity som visar aktuell batterinivå. Du behöver även number.batteries_end_of_discharge_soc som visar lägsta urladdninvsnivå i %. Båda entiterna följer med Huawei Solar Integration. Finns inte dessa behöver du justera koden eller din sensorers namn.
Skapa en input_number (via helper) för att addera kWh till energibehovet vilket skapar en möjlighet att trimma in logiken utifrån ditt energibehov. Ge sensorn följande värden:
- battery_buffer_kwh
- Lägsta värde: 0
- Högsta värde: 10
- Visningsläge: Inmatningsfält
- Steglängd: 1
- Måttenhet: kWh
Skapa två automationer som kommer att styra om batteriet ska laddas eller inte. I mappen automations heter dessa
- battery_luna_2000_S1_interval_1a_2.yaml
- battery_luna_2000_S1_interval_2_1b.yaml
Warning
Automationerna är byggda utifrån Huawei Solar Integration och utifrån batteriet Luna2000 - S1. Om du har en annan setup kan du behöva justera koden.
Important
Lägg till ditt Huawei device_id i automationerna
Note
Du hittar ditt Huawei device_id på följande sätt:
Utvecklarverktyg -> Åtgärder -> Klicka på åtgärd -> Skriv huawei -> Välj forcible charge -> Klicka på gå till UI-läge -> Välj Batteries i rullgardinen på raden battery -> Klicka på gå till YAML-läge - Då ska du få fram till device_id
Skapa två input_boolean (via helper) för att inte laddningsautomationerna ska påverka varandra. Ge dem följande namn:
- interval_1a
- interval_2
Skapa en automation som kommer att användas för att starta och avslutla laddning manuellt. I mapppen automation heter denna
- battery_luna_2000_S1_manual_charge.yaml
Important
Lägg till ditt Huawei device_id i automationen
Skapa en input_boolean (via helper) som startar/avslutar laddningen manuellt. Ge den följande namn:
- manual_charge
Skapa en automation som kommer att styra om batteriet ska sälja om elpriser är högt och kommande elpris är lågt. I mappen automations heter denna
- battery_luna_2000_S1_discharge.yaml
Important
Lägg in din Nordpool-sensor i automationen
Skapa en input_boolean (via helper) som används för att kontrollera om systemet säljer energi från batteriet. Ge den följande namn:
- discharge
Skapa två input_number (via helper) för att kunna justera gränsvärdena för att sälja överskottet. Ge input_number förljande värden.
-
battery_charge_price
- Lägsta värde: 0
- Högsta värde: 5
- Visningsläge: Inmatningsfält
- Steglängd: 0,01
- Måttenhet: SEK/kWH
-
expensive_electricity
- Lägsta värde: 0
- Högsta värde: 10
- Visningsläge: Inmatningsfält
- Stegläng: 0,1
- Måttenhete SEK/kWH
Skapa två input_bolean (via helper) för kontroll om exporten av solel ska tillåtas eller begränsas. Ge dem följande namn
- export_limit_active (används för att aktivera eller avaktivera funktionen)
- max_export_active (används för att visa i UI om exporten är begränsad eller inte)
Skapa en automation som kommer kommer att tillåta eller brgränsa export av överskottet från solcellerna. Då elpriset är 0 eller negativt begränsas exporten. I mappen automations heter denna
- battery_luna_2000_S1_solar_export.yaml
Important
Lägg in din Nordpool-sensor i automationen
Lägg till ditt Huawei device_id i automationen
Skapa en ny vy i Home Assistant och lägg in koden från filen admin_view.yaml. Via den nya vyn kan du nu justera värdena som styr laddningslogiken men även följa hur laddningslogiken arbetar.
Important
Klistra in koden genom att klicka på "pennan" som finns brevid din nya vy i "rubriken". Välj därefter redigera i YAML. Klistra sen in hela koden där.