Solceller og smarthome

Jeg har i rigtig lang tid ønsket solceller, og i år fik vi det endeligt.

Jeg vidste at det skulle bindes 100% sammen med vores smarthome, både fordi jeg elsker tal og statistik, men også for at bruge den energi vi producerer optimalt.

Efter solcellerne var sat op, var det første skridt for mig, at se hvordan jeg kunne få det til at snakke sammen med min smarthome hub, Home Assistant.
Jeg havde allerede inden solcellerne blev installeret, læst op på hvordan det skulle gøres med min Huawei inverter.

Jeg flashede en ny firmware på inverteren der tillod mig at aktivere modbus på TCP.
Derefter skulle jeg lave et mellemled imellem inverteren og mit eget netværk. Siden inverteren ikke kan koble på eget netværk direkte og eksponere sin modbus, måtte jeg sætte en router imellem. Jeg valgte at installere OpenWrt på en Raspberry Pi jeg havde liggende fra tidligere projekt. Jeg opsatte den som mellemled med NAT regler som giv mig adgang til modbus på mit LAN.

Nu var der oprettet forbindelse fra min inverter til Home Assistant, og så kunne jeg begynde at kode.
Mit første mål var at holde styr på, hvor meget strøm vi sparer, for at se om det var en god investering. Jeg oprettede flere templates der ville holde styr på dette for mig.

Her kan ses en af dem jeg oprettede:

- platform: template
  sensors:
    solceller_besparelse:
      friendly_name: "Solcelle besparelse" 
      unit_of_measurement: DKK
      value_template: >
        {{(states('sensor.solcelle_til_eget_brug')|float(0) * states('sensor.energi_data_service')|float(0)/1000
        + states('sensor.solar_grid_production')|float(0) * states('sensor.nettopower_salg')|float(0)/1000) | round(5)}}
      unique_id: solcelle_besparelse

Denne template udregner mit nuværende forbrug * med nuværende købspris for mit elselskab + overskudsstrøm sendt til el-nettet * nuværende salgspris.
Både forbrug, købspris, overskudsstrøm og salgspris er alle sammen templates jeg har lavet. Sammen giver det det mig den korrekte udregning.

Når jeg fik styr på tallene, kunne jeg sætte det op grafisk så det var nemmere at få et hurtigt overblik. En af graferne kan ses her.

Det næste jeg ville have konfigureret, var styring af andre smartenheder i hjemmet, baseret på solcelle produktion.

Jeg opsatte en automation der automatisk starter air condition på vores 1. sal hvor vi har sove- og børneværelser.
Den starter kun hvis at der er over 21 grader, og overskudsstrømmen er over 3000 watt.

For at undgå at der blev tændt og slukket ved udsving af strømproduktion. Så starter den kun ved 3000 watt overproduktion, men stopper kun igen hvis den er under 1000 overproduktion.
Udover det, så er der sat timere, så den skal være over 3000 watt i minimum 5 minutter, før den starter, og ligeså skal den være under 1000 watt i minimum 5 minutter før den stopper.

Det har været en rigtig god ting, for så behøver vi ikke at bruge aircondition nær så meget om aftenen når det er sengetid, da der allerede er kølet en del ned i løbet af dagen.

Det næste problem jeg skulle takle er, hvordan jeg undgå at betale for at sende strøm ud på el-nettet når spotprisen er så lav som den kan være.

Som nævnt tidligere, har jeg oprettet en del templates. Bl.a. en der holder styr på salgsprisen.

- platform: template
  sensors:
    nettopower_salg:
      value_template: '{{ (states("sensor.nordpool_kwh_dk2_dkk_5_10_0")|float - 0.00375 - 0.000875 - 0.04)|round(3, floor) }}'
      friendly_name: "Nettopower salgspris"
      unit_of_measurement: "DKK/kWh"
      unique_id: nettopower_salg
      attribute_templates:
        today: >
          {% if state_attr('sensor.nordpool_kwh_dk2_dkk_5_10_0', 'today') %}
            {% set ns = namespace(prices=[]) %}
            {% for h in range(24) %}
              {% set ns.prices = ns.prices + [(float(state_attr('sensor.nordpool_kwh_dk2_dkk_5_10_0', 'today')[h]) - 0.00375 - 0.000875 - 0.04) | round(3, floor)] %}
            {% endfor %}
            {{ ns.prices }}
          {% endif %}
        tomorrow: >
          {% if state_attr('sensor.nordpool_kwh_dk2_dkk_5_10_0', 'tomorrow') %}
            {% set ns = namespace(prices=[]) %}
            {% for h in range(24) %}
              {% set ns.prices = ns.prices + [(float(state_attr('sensor.nordpool_kwh_dk2_dkk_5_10_0', 'tomorrow')[h]) - 0.00375 - 0.000875 - 0.04) | round(3, floor)] %}
            {% endfor %}
            {{ ns.prices }}
          {% endif %}

Templaten bruger den aktuelle spotpris fra nordpool, og trækker de afgifter jeg har hos mit elselskab jeg har valgt at sælge strøm til.

Jeg læste dokumentationen for modbus til min inverter, og det var muligt at nedsætte produktionen via modbus kommando.

Jeg oprettede en automation der sætter produktionen til max at være 200 watt over det nuværende strømforbrug, hvis at salgsprisen er i negativ.
Jeg endte med at sætte den til 200 watt over nuværende forbrug, for at sikre at små udsving i strømforbruget i hjemmet, stadig kan dækkes af vores solcelle produktion.
På den måde begrænser jeg hvor meget strøm jeg sender ud når det koster penge, men stadig sparer penge ved at bruge den producerede strøm i eget hjem.
Og ja, det er er jo egentlig småpenge, men hvis det kan optimeres, hvorfor så ikke gøre det 🙂

Der er også oprettet simple automations der blot kun starter ting efter solopgang, såsom pumpen til vores udendørs pool.

Andre projekter

Teknologier
Home Assistant, OpenWrt, YAML, Routing