# Jak zapamiętać dwie kolejne wartości encji?

**URL:** <https://forum.arturhome.pl/t/jak-zapamietac-dwie-kolejne-wartosci-encji/12410>\
**Category:** Konfiguracja HA\
**Created:** [29 Maj 2024 17:08 UTC](https://forum.arturhome.pl/t/jak-zapamietac-dwie-kolejne-wartosci-encji/12410 "2024-05-29T17:08:28Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Autor:** ![Piter](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/p/b3f665/32.png) [@Piter](https://forum.arturhome.pl/u/Piter)\
**Data wpisu:** [29 Maj 2024 17:08 UTC](https://forum.arturhome.pl/t/jak-zapamietac-dwie-kolejne-wartosci-encji/12410/1 "2024-05-29T17:08:28Z")

</div>

Zainspirowany kompasem z [Integracja Burze\_dzis\_net, odczytująca ilość wyładowań w pobliżu - Node-RED - ArturHome](https://forum.arturhome.pl/t/integracja-burze-dzis-net-odczytujaca-ilosc-wyladowan-w-poblizu/5762/21)  
próbuję zrobić prawie to samo, ale korzystając z integracji.  
Do określenia informacji czy burza się zbliża czy oddala potrzebuję zapamiętać dwie wartości encji: aktualną i poprzednią. Niestety nie mam pomysłu jak to ugryźć.  
Odczytuję atrybut:

```-
      unit_of_measurement: km
      state: >
        {{ state_attr('binary_sensor.burze_dzis_net_wyladowania_w_poblizu', 'distance') | float(100) }}
      attributes:
        last_value: "{{ states('sensor.burza_odleglosc') }}"

```

ale nie mam pojęcia jak i gdzie zapisać poprzednią wartość bo last\_value przyjmie wartość state encji ?  
Potem chciałem to wstawić do szablonu:

```-
   # unit_of_measurement: km
      state: >
        {% set distance = states('sensor.burza_odleglosc') | int %}
        {% set last_distance = states('sensor.burza_odleglosc', 'last_value') | int %}
        {% set dist = last_distance-distance %}
        {% if (dist < 0 ) %}
             -1
        {% elif (dist > 0 ) %}
             1
        {% else %}
             0   
        {% endif %}   

```

Ktoś podpowie jak to ogarnąć ? W NR myślę, że wiem jak, ale nie chcę tam tworzyć encji.

---

<div class="post-metadata">

**Autor:** ![oomichalekoo](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/oomichalekoo/32/23352_2.png) [@oomichalekoo](https://forum.arturhome.pl/u/oomichalekoo)\
**Data wpisu:** [29 Maj 2024 18:20 UTC](https://forum.arturhome.pl/t/jak-zapamietac-dwie-kolejne-wartosci-encji/12410/2 "2024-05-29T18:20:42Z")

</div>

Może to pomoże mi pokazuje odległość w km

```auto
type: conditional
conditions:
  - entity: binary_sensor.burze_dzis_net_wyladowania_w_poblizu
    state: 'on'
card:
  type: entity-filter
  entities:
    - entity: binary_sensor.burze_dzis_net_wyladowania_w_poblizu
      type: attribute
      attribute: distance
      secondary_info: true
      style:
        hui-generic-entity-row:
          $: |
            .text-content {
              font-size: 10px;
            }
            .text-content.pointer:not(.info)::before {
              content: "Odległość:";
              color: black;
            }
            .info .secondary {
              color: black;
            }
            .info .secondary::before {
              content: "Kierunek: ";
              color: black;
              font-size: 10px;
            }
            .info .secondary::after {
              content: "{{state_attr(config.entity,'direction')}}";
              color: black;
              font-size: 10px;
            }
        card_mod: null
        style: |
          :host {
            --paper-item-icon-color: #00afff;
          }
    - entity: binary_sensor.burze_dzis_net_ostrzezenie_aktywne_traba
      type: attribute
      attribute: description
      secondary_info: true
      style:
        hui-generic-entity-row:
          $: |
            .text-content {
              font-size: 10px;
            }
            .info .secondary {
              color: black;
            }
            .info .secondary::before {
              content: "Poziom: ";
              color: black;
              font-size: 10px;
            }
            .info .secondary::after {
              content: "{{state_attr(config.entity,'level')}}";
              color: black;
              font-size: 10px;
            }
        style: |
          :host {
            --paper-item-icon-color: black;
          }
  state_filter:
    - 'on'
  card:
    type: entities
    title: null
    card_mod:
      style: |
        ha-card {
          background: #32323200;
          box-shadow: none;
        }

```

---

<div class="post-metadata">

**Autor:** ![Piter](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/p/b3f665/32.png) [@Piter](https://forum.arturhome.pl/u/Piter)\
**Data wpisu:** [2 Czerwiec 2024 15:43 UTC](https://forum.arturhome.pl/t/jak-zapamietac-dwie-kolejne-wartosci-encji/12410/3 "2024-06-02T15:43:05Z")

</div>

W przytoczonym wątku kolega @RobinI30 w NR liczył czy burza się zbliża czy oddala (odległość maleje lub rośnie) i na tej podstawie wyświetlał strzałkę do wewnątrz lub na zewnątrz.  
Będę kombinował z dodaniem atrybutu czasu i zapamiętywaniem dwóch wartości encji, a tymczasem liczę gradient odległości: jak jest ujemny to burza się zbliża, jak dodatni to oddala:

```-
    sensors:
      burza_trend:
        entity_id: sensor.burza_odleglosc
        sample_duration: 1800
        max_samples: 5

```

---

<div class="post-metadata">

**Autor:** ![gregusz](https://forum.arturhome.pl/user_avatar/forum.arturhome.pl/gregusz/32/2271_2.png) [@gregusz](https://forum.arturhome.pl/u/gregusz)\
**Data wpisu:** [6 Czerwiec 2024 19:16 UTC](https://forum.arturhome.pl/t/jak-zapamietac-dwie-kolejne-wartosci-encji/12410/4 "2024-06-06T19:16:16Z")

</div>

Może coś takiego w NR:

```auto
[
    {
        "id": "process_storm_data",
        "type": "function",
        "z": "75a368fecd04c615",
        "name": "Przetwórz dane o burzy",
        "func": "const data = msg.payload.return;\nconst record = {\n liczba: data.liczba.$value,\n odleglosc: parseFloat(data.odleglosc.$value),\n kierunek: data.kierunek.$value,\n okres: data.okres.$value,\n timestamp: Date.now()\n};\n\n// Pobierz poprzednie dane z kontekstu\nlet stormData = context.get('stormData') || [];\n\n// Dodaj nowe dane\nstormData.push(record);\n\n// Zachowaj tylko ostatnie 6 zapisów (ostatnia godzina)\nif (stormData.length > 6) {\n stormData.shift();\n}\n\n// Zapisz dane w kontekście\ncontext.set('stormData', stormData);\n\nmsg.payload = stormData;\nreturn msg;",
        "outputs": 1,
        "timeout": "",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 850,
        "y": 80,
        "wires": [
            [
                "af74adccd16db17b",
                "4f329dff26e49519"
            ]
        ]
    },
    {
        "id": "af74adccd16db17b",
        "type": "function",
        "z": "75a368fecd04c615",
        "name": "Analizuj dane o burzy",
        "func": "let stormData = msg.payload;\nif (stormData.length < 2) {\n msg.payload = {status: 'Zbyt mało danych do analizy'};\n return msg;\n}\n\nlet latest = stormData[stormData.length - 1];\nlet previous = stormData[stormData.length - 2];\n\nlet trend = {\n liczba: latest.liczba - previous.liczba,\n odleglosc: latest.odleglosc - previous.odleglosc,\n kierunek: latest.kierunek,\n okres: latest.okres\n};\n\nlet status = '';\n\nif (trend.liczba > 0) {\n status += 'Więcej wyładowań. ';\n} else if (trend.liczba < 0) {\n status += 'Mniej wyładowań. ';\n} else {\n status += 'Liczba wyładowań stabilna. ';\n}\n\nif (trend.odleglosc < 0) {\n status += 'Burza się zbliża. ';\n} else if (trend.odleglosc > 0) {\n status += 'Burza się oddala. ';\n} else {\n status += 'Odległość do burzy stabilna. ';\n}\n\nmsg.payload = {trend: trend, status: status};\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 1100,
        "y": 80,
        "wires": [
            [
                "4f329dff26e49519"
            ]
        ]
    }
]

```

W jednym node zbiera do 6 pomiarów z burze net (pobieram po soap), a w drugim mam analizę czy się zbliza, czy oddala oraz czy wyładowań jest wiecej/mniej

---

<div class="post-metadata">

**Autor:** ![Piter](https://forum.arturhome.pl/letter_avatar_proxy/v4/letter/p/b3f665/32.png) [@Piter](https://forum.arturhome.pl/u/Piter)\
**Data wpisu:** [7 Czerwiec 2024 19:52 UTC](https://forum.arturhome.pl/t/jak-zapamietac-dwie-kolejne-wartosci-encji/12410/5 "2024-06-07T19:52:40Z")

</div>

Niestety nie dałem rady zrobić na samych pomocnikach. Dodatkowa encja z platformy statystyki robi robotę.  
Ale aby mieć obecną i poprzednią wartość encji zrobiłem dwa pomocniki typu tekst i w automatyzacji przepisuję wartości:

```auto
- alias: Zapis stanu encji
  trigger:
    platform: state
    entity_id: sensor.sonoff_do_pompy_co_ds18b20_1_temperature  
  action:
  - service: input_text.set_value
    data_template:
      entity_id: input_text.saved_state_2
      value: "{{ states('input_text.saved_state_1') }}"       
  - service: input_text.set_value
    data_template:
      entity_id: input_text.saved_state_1
      value: "{{ trigger.to_state.state }}"
```
