Stan zasobnika opału - odejmowanie zużycia od wartości początkowej

Mam taki kafelek - stan zasobnika pelletu.
image

Gdy zasypuję cały zasobnik, za pomocą przycisku obok kotła lub “pomocnika” w HA resetuję stan zasobnika do wartości początkowej 120 kg. Przy mniej niż 20 kg chcę ustawić powiadomienie o koniecznej wizycie w kotłowni. To ogarnę. Do Was mam prośbę o pomoc w zrobieniu flow, które będzie odejmować mi zużycie pelletu (może być co godzinę) od tej encji. Zużycie mam zrobione na tej encji (narastająco od początku każdego roku):


Proszę o wskazówki :slight_smile:

W celu wykrywania ilości peletu w zasobniku poszedłbym w kierunku esphome
Potrzebujesz ESP8266 kontratron i magnes neodymowy który musiał by być przyczepiony do wału ślimaka podającego pelet .
Zliczał byś ilość impulsów które można przeliczyć na objętość. Tak samo jak w przepływomierzu Prościej do obliczeń przyjąć procentowe wypełnienie zasobnika.

@marek_k
Zdecydowanie nie o to zapytałem :slight_smile:
zliczanie pelletu (spalanie) mam ogarnięte przez przekaźnik 230v wpięty przed ślimakiem + esp, który zlicza mi czas pracy ślimaka pomnożony przez współczynnik spalania i działa to idealnie.
image

A wracając do tematu: szukam wskazówki do N-R, która będzie mi co godzinę odejmowała encję X (zużycie przez ostatnią godzinę) od encji Y (ilość pelletu w zasobniku)

Może coś takiego ? To tylko przykład dodawania ,odejmowania i mnożenia .Oczywiście dopasować musisz do swoich potrzeb :slight_smile:
/config/configuration.yaml

template:
  - sensor:
      - name: "Moc L1+L2+L3"
        unit_of_measurement: "W"
        state: >
          {% set mocL1 = states('sensor.electricity_meter_power_active_phase_1') | float %}
          {% set mocL2 = states('sensor.electricity_meter_power_active_phase_2') | float %}
          {% set mocL3 = states('sensor.electricity_meter_power_active_phase_3') | float %}

          {{ (mocL1 + mocL2 + mocL3) | round(2, default=0) }}
      - name: "Energia Magazynie PGE 2023"
        unit_of_measurement: "kWh"
        state: >
          {% set energia_oddana = states('sensor.electricity_meter_total_reverse_active_energy_balanced') | float %}

          {{ ((energia_oddana - 958) * 0.8) | round(2, default=0) }}

@marek_k
nigdy nie pisałem nic typowo w yamlu :confounded: wszystko trzymam w NR- ale może brakuje mi tylko jednego noda. Mam takie flow:

Wygooglowałem funkcję do odejmowania:
image

Teraz muszę przez call service nadpisać wartość encji “pellet - zasobnik” encją “różnica”.

Może masz pomysł jak to ogarnąć?

w function

msg.payload = msg.zasobnik - msg.spalanie
return msg;
# na pewno tu jest jakaś literówka 

zamiast call service utworzył bym nowy sensor w nodered

1 polubienie

pokaż co podaje debug z noda wynik odejmowania, ale wydaje mnie się , że błąd robisz tu →


u Ciebie payload to roznica

1 polubienie

Dzięki, poprawiłem i odejmowanie teraz działa poprawnie.

image

Odejmuje dobrze, dzięki podpowiedzi @marek_k,
Stan początkowy (106 kg) - spalanie (0,49…kg) daje wynik 105.51… i do tego momentu jest ok, tylko call service nie wrzuca mi tej wartości (105.51…) tylko zaokrągla do 105 kg. Efekt jest taki, że przy każdym wyzwoleniu flow, call service zapisuje mi encję o 1 mniejszą.


Myślałem, że ma to związek z ustawieniem skoku przy tworzeniu pomocnika (domyślnie skok = 1), ale to nie to.

EDIT: Zamieniłem counter na input_number. Wygląda na to, że problem tkwił w pomocniku :slight_smile: na ten moment śmiga, Marek, Mariusz - dziękuję.

przecież sam mu kazałeś zaokrąglić do całkowitej

msg.roznica = Math.round(msg.roznica);
return msg;

@MariuszAK screenshot z debugami z mojego ostatniego posta dotyczy tej funkcji:

tutaj nie ma zaokrąglenia :+1:

skoro tak to pomocnik typu licznik zwiększa lub zmniejsza (w zależności od ustawienia) ilość wystąpień o zadany krok a nie konkretną wartość (działa na liczbach całkowitych) to dopiero zamiana go jak zrobiłeś na input_number pozwala ustawić “licznik” na oczekiwane wartości (zmiennoprzecinkowe).

1 polubienie