Postać stanu encji

Proszę o pomoc w rozwikłaniu pewnego problemu.
Dlaczego dzieje się tak i jaki ja mogę mieć na to wpływ, że stan encji jest pokazywany różnie w zależności od wyboru rodzaju karty.
Wygląda to tak:
gdy wybiorę kartę typu encje uzyskuję coś takiego:

01

gdy wybiorę kartę typu encja mam coś takiego:

02

Wyprzedzam od razu odpowiedzi typu zajrzyj do atrybutów encji, bo nie ma tam możliwości wyboru tego co mnie interesuje.

03

Wiem, że kluczowym elementem który może tu pomóc jest informacja device_class: timestamp, ale jak tego użyć żeby niezależnie od wyboru rodzaju karty uzyskać zawsze stan encji w postaci przedziału czasu jaki upłynął od poprzedniego rozruchu a nie w postaci daty jego wykonania.

Skorzystaj z template np:

- platform: template
  sensors:
  ostatni_restart_ha:
      friendly_name: "Ostatni restart HA"
      value_template: >-
        {% set up_time =  as_timestamp(now()) - as_timestamp(states('sensor.ha_czas_dzialania')) %}
        {% if up_time == 0 %}
          Właśnie uruchomiony ponownie...
        {% else %}
          {% set minutes = (up_time // 60) | int %}
          {% set hours = (minutes // 60) %}
          {% set days = (hours // 24) %}
          {% set weeks = (days // 7) %}
          {% set minutes = (minutes % 60) %}
          {% set hours =  (hours % 24) %}
          {% set days = (days % 7) %}
          {% macro phrase(value, name) %}
                    {%- set value = value %}
                    {%- set end = '' if value > 1 else '' %}
                    {{- '{} {}{}'.format(value, name, end) if value | int > 0 else '' }}
          {%- endmacro %}
          {% set text = [ phrase(weeks, 'tyg'), phrase(days, 'dn'), phrase(hours, 'godz'), phrase(minutes, 'min') ] | select('!=','') | list | join(', ') %}
          {% set last_comma = text.rfind(',') %}
          {% if last_comma != -1 %}
          {% set text = text[:last_comma] + '' + text[last_comma + 1:] %}
          {% endif %}
        {{ text }}
        {% endif %}

podstaw Swoją encję.

3 Likes

Wielkie dzięki :+1:
Drobna kosmetyka i uzyskałem dokładnie to na czym mi zależało:

04

poprzedni_rozruch_nas:
        friendly_name: "Poprzedni rozruch"
        value_template: >-
          {% set up_time =  as_timestamp(now()) - as_timestamp(states('sensor.dysksieciowy_last_boot')) %}
          {% if up_time == 0 %}
            Właśnie teraz
          {% else %}
            {% set minutes = (up_time // 60) | int %}
            {% set hours = (minutes // 60) %}
            {% set days = (hours // 24) %}
            {% set minutes = (minutes % 60) %}
            {% set hours =  (hours % 24) %}
            {% macro phrase(value, name) %}
                      {%- set value = value %}
                      {%- set end = '' if value > 1 else '' %}
                      {{- '{} {}{}'.format(value, name, end) if value | int > 0 else '' }}
            {%- endmacro %}
            {% macro phrase1(value, name) %}
                      {%- set value = value %}
                      {%- set end = 'ni' if value > 1 else 'zień' %}
                      {{- '{} {}{}'.format(value, name, end) if value | int > 0 else '' }}
            {%- endmacro %}
            {% set text = [ phrase1(days, 'd'), phrase(hours, 'godz'), phrase(minutes, 'min'),'temu' ] | select('!=','') | list | join(' ') %}
            {% set last_comma = text.rfind(',') %}
            {% if last_comma != -1 %}
            {% set text = text[:last_comma] + '' + text[last_comma + 1:] %}
            {% endif %}
          {{ text }}
          {% endif %}

Moglibyscie mi pomoc z moim problemem.
Mianowicie obliczam COP pompy ciepla ale jak startuje to pokazuje cuda 50-180 COP bo bardzo maly pobor z poczatku i tak wychodzi z wyliczenia…
Podpowie ktos jakby to zrobic aby liczylo mi moj COP powyzej energi pobieranej 1KW i dodatkowo jesli nie ma stanu defrost. ??
obecnie COP liczy mi to w configuration.yaml

- sensor:
    - name: Moc_wymiennika
      unit_of_measurement: W
      state: "{{(states('sensor.delta_wody')|float * 4.19 * 995 * states('sensor.esp_przeplyw_przeplyw_wody')|float / 3600)| round(1)}}"

  - sensor:
    - name: Moc_wymiennika_kW
      state: "{{(states('sensor.moc_wymiennika')|float  * 0.001)| round(1)}}"
      unit_of_measurement: kW

  - sensor:
    - name: COP
      state: "{{(states('sensor.moc_wymiennika_kw')|float / states('sensor.energia_chwilowy_pobor')|float)| round(1)}}"
      unit_of_measurement: COP

Bylbym ogromnie wdzieczny Wam za pomoc nie radze sobie z tym :frowning:

Jeśli spełni warunek to “wylicz” jeśli nie spełnia to N/A :thinking:

  - sensor:
    - name: COP
      state: >-
          {% if states('sensor.energia_chwilowy_pobor')|float > 1000 and states('sensor.stan_defrost') == 'off' %}
            {{ (states('sensor.moc_wymiennika_kW')|float / states('sensor.energia_chwilowy_pobor')|float) | round(1) }}
          {% else %}
            {{ 'N/A' }}
          {% endif %}
      unit_of_measurement: COP

Może tak tez spróbować

- sensor:
    - name: COP
      state: >-
        {% set power = states('sensor.moc_wymiennika_kw')|float %}
        {% set energy = states('sensor.energia_chwilowy_pobor')|float %}
        {% set defrost = states('sensor.stan_defrostu') %}
        {% if power > 1 and not defrost %}
          {{ (power / energy)|round(1) }}
        {% else %}
          N/A
        {% endif %}
      unit_of_measurement: COP

:o zadziałało
DZIEKUJE OGROMNIE krskrab i MariuszAK
nie moge pojac tego pisania kodow :(( moze macie spr jakis kurs bo ja 2 dni siedzialem nad tym, poprostu nie znam zasady skladni itp :frowning:

Edit:

A podpowiecie jeszcze jak zrobic aby czujnik odswiezal sie np co 2-3 min ??

on sam z siebie się nie odświeża , zależy jak często odświeżają się sensory, których użyłeś do jego stworzenia.

1 Like

Wyzwalaczem jest przedział czasowy np. co 3 minuty. Co 3 minuty, nastąpi przeanalizowanie sensor.
Jeśli ustawisz co 2 godziny, HA przeanalizuje co 2 godziny tylko ten sensor pod który jest dopisany do trigger ( triger i sensor tworzą jedną całość.

  - trigger:
    - platform: time_pattern
      minutes: "/3"
    sensor:
    - name: COP
      unit_of_measurement: COP  
      state: >-
         ............

Zwróć uwagę na wcięcia

# Example configuration.yaml entry with two sections
template:
  # Define state-based template entities
  - sensor:
      ...
  - binary_sensor:
      ...

  # Define trigger-based template entities
  - trigger:
      ...
    sensor:
      ...
    binary_sensor:
      ...
# przykłady

    - platform: time_pattern
      # Matches every hour at 5 minutes past whole
      minutes: 5

    - platform: time_pattern
      # Trigger once per minute during the hour of 3
      hours: "3"
      minutes: "*"

    - platform: time_pattern
      # You can also match on interval. This will match every 5 minutes
      minutes: "/5"
1 Like