Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Trigger i sensor-mal


stigvi

Anbefalte innlegg

Innlegget er ment som et tips eller noe en kan dra nytte av til andre ting.

Når en lager en malsensor, vil denne malen evalueres hver gang en entitet som er brukt i malen, endres. Dette er stort sett ønskelig, men noen ganger er det en hindring. I eksempelet under, beregner jeg oppvarmingstid for VVB og setter en binær sensor til På i de billigste timene og i så mange timer som det er nødvendig å varme vann. Problemet oppstår når temperaturen i vannet øker og da vil beregnet oppvarmingstid synke. Dette lager kluss når en skal plukke de billigste timene. En kan starte å varme vann i den billigste timen, men når en kommer til den nest billigste kan oppvarmingstiden sunket så mye at denne timen utelates. Å varme vannet krever bare en time til og den billigste timen er jo nettopp passert.

Denne problemstillingen kan en omgå ved å bruke en ny funksjonalitet i HA. Så veldig ny er den derimot ikke. Mulig den har eksistert i et par år nå.
Det dreier seg om å skille trigger / evaluering av mal til noe en selv bestemmer. Det kan være tid, tilstand, hendelse eller egentlig hva som helst.
Dokumentasjon for dette, finner en her: https://www.home-assistant.io/docs/automation/trigger/ Triggere for automatisering er prikk lik triggere en kan bruke i maler og dokumentasjonen for disse er lik.

I eksempelet nedenfor, trigger jeg beregning av oppvarmingstid kun i start på hver time og kun hvis VVB er avslått. Så snart en starter på å varme vann, vil ikke ny oppvarmingstid bli beregnet. Unntaket er når en setter ny temperatur en skal varme til, bare for å ta med det og å vise at en kan ha mange triggere.

Etter min mening er dette en svært nyttig egenskap til mal-sensorer som ofte kan forenkle ganske mye.

template:
  - trigger:
      - platform: template
        value_template: "{{ now().minute == 0 and states('sensor.effekt_varmtvann')|float(0) == 0 }}"
      - platform: state
        entity_id:
          - input_number.vvb_temperatur
    sensor:
      - unique_id: vvb_heating_time
        name: "vvb oppvarmingstid"
        unit_of_measurement: 'h'
        device_class: duration
        state: >-
          {{ ((states('input_number.vvb_temperatur')|float(80)
            - average(states('sensor.varmtvannstank_topp_temperatur')|float(60),
              states('sensor.varmtvannstank_senter_temperatur')|float(60),
              states('sensor.varmtvannstank_bunn_temperatur')|float(60)))
            / (iif(float(states('sensor.effektbegrensing')) > 8, 1.0, 2.0) / 194.0 / 0.001163))|round(1) }}

  - binary_sensor:
    - unique_id: billigste_timer_vvb
      name: billigste_timer_vvb
      state: >-
        {% set l=state_attr('pyscript.strompris', 'prices')[14:39]|sort(attribute='totalprice') %}
        {% set t = now().hour %}
        {% set d = now().day %}
        {% set h = states('sensor.vvb_oppvarmingstid')|float(0) %}
        {{ iif(h > 0, (t == as_datetime(l[0].start).hour and d == as_datetime(l[0].start).day), false)
          or iif(h > 1, (t == as_datetime(l[1].start).hour and d == as_datetime(l[1].start).day), false)
          or iif(h > 2, (t == as_datetime(l[2].start).hour and d == as_datetime(l[2].start).day), false)
          or iif(h > 3, (t == as_datetime(l[3].start).hour and d == as_datetime(l[3].start).day), false)
          or iif(h > 4, (t == as_datetime(l[4].start).hour and d == as_datetime(l[4].start).day), false)
          or iif(h > 5, (t == as_datetime(l[5].start).hour and d == as_datetime(l[5].start).day), false)
          or iif(h > 6, (t == as_datetime(l[6].start).hour and d == as_datetime(l[6].start).day), false) }}


 

Endret av stigvi
  • Like 2
Lenke til kommentar
Del på andre sider

Et annet eksempel er strømpris for forrige time. Som kjent vil strømmåler i huset sende forbruk noen sekunder etter hver hele time. I "Energi" oppsettet til HA kan en knytte opp en sensor som inneholder strømpris, men dette bør da være pris som var i forrige time og ikke i den gjeldende timen.

 

template:
  - trigger:
      - platform: time_pattern
        minutes: 59
    sensor:
      - unique_id: be7b58ab-a2da-4f51-b770-9583e1da4cb9
        name: "Energy price last hour"
        unit_of_measurement: "NOK/kWh"
        device_class: monetary
        state: "{{ states('pyscript.totalstrompris')|round(6) }}"

 

Lenke til kommentar
Del på andre sider

Dette med strømpris siste time var et eksempel og ikke noe jeg bruker selv. Min mal for strømpris siste time ser slik ut:

 

    - unique_id: be7b58ab-a2da-4f51-b770-9583e1da4cb9
      name: "Energy price last hour"
      unit_of_measurement: "NOK/kWh"
      device_class: monetary
      state: >-
            {% set s = (now()-timedelta(hours=1))|as_timestamp|timestamp_custom('%Y-%m-%dT%H:00:00+01:00') %}
            {{ (state_attr("pyscript.strompris", "prices")|selectattr("start", "eq", s)|list)[0].totalprice }}


Den gjør samme jobben, bortsett fra at den endres på hver hele time istedenfor 1 minutt før. Men den er mer kryptisk og å bruke en mal-trigger istedenfor, viser at det går å lage slikt enkelt. Sannsynligvis er mal-triggere også mer effektive i og med at den evalueres en gang i timen, mens denne som er i dette innlegget evalueres hvert minutt.

Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.