ESPHome użycie zmiennej globalnej

Cześć. Nie taki już nowy w temacie ale utknąłem na użyciu Global Variables w ESPHome. Chcę w prosty sposób zliczać obroty podajnika ślimakowego w celu obliczenia zużycia ekogroszku na dobę. Sprzętowo wszystko działa.

Konfiguracja

# tutaj wszystko gra i buczy

globals:
  - id: co_tank_rotary_counter
    type: int
    restore_value: yes
    initial_value: '0'

binary_sensor:
  - platform: gpio
    id: co_tank_rotary_meter
    name: "Co Tank Rotary Meter"
    pin: 
      number: D4
      mode: INPUT_PULLUP
    filters:
      - delayed_on: 300ms
      - delayed_off: 300ms
    on_press:
      then:
        - lambda: |-
              id(co_tank_rotary_counter) += 1;

# chce teraz wyświetlić sobie wartości w oparciu o tą zmienną globalną ale 
# pokonało mnie konwertowanie wartości int na string :confused: 

text_sensor:
  - platform: template
    name: "Coal Conspumption"
    id: coal_consumption
    icon: "mdi:water-boiler"
    lambda: |-
      return printf("Consumption: %d", id(co_tank_rotary_counter));
    update_interval: 5s
    filters:
      - append: 'kg/day'

dostaję błąd konwersji int na string

error: could not convert 'printf(((const char*)"Consumption: %d"), co_tank_rotary_counter->esphome::globals::RestoringGlobalsComponent<int>::value())' from 'int' to 'esphome::optional<std::__cxx11::basic_string<char> >'
  123 |       return printf("Consumption: %d", id(co_tank_rotary_counter));
      |              ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
      |                    |
      |                    int
*** [.pioenvs/watertermstat/src/main.cpp.o] Error 1

próbowałem już wiele patentów z internetów ale kurcze utyka w podobnym miejscu. Ma ktoś z Was pomysł jak rozwiązać problem z konwersją.

P.S.
Do tego patentu nie nadaje się pulse_meter ani pulse_counter.

To kwestia typu danych, proponuję zamiast text_sensor zrobić jak należy Template Sensor — ESPHome. Dzięki temo będziesz mógł mieć w HA wykresy, statystyki, liczniki itd.

1 polubienie

Faktycznie działa wyśmienicie

  - platform: template
    name: "Coal Consumption (kg/day)"
    id: coal_consumption
    icon: mdi:fireplace
    lambda: |-
      return id(co_tank_rotary_counter) * 4.76;
    update_interval: 300s
    filters:
      - round: 1

Dziękuję :slight_smile:

Proszę bardzo :slightly_smiling_face:.

Może wyrzuć jednostki z opisu encji i dodaj je do encji w ten sposób:

unit_of_measurement:

Zakladam, że o północy kasujesz ten licznik? Bo w jednostce masz [kg/day]. Możesz to robic inaczej: zliczać kilogramy a do pomiaru zużycia ekogroszku dziennie, w tygodniu, miesiącu itd możesz użyć Utility Meter - Home Assistant wtedy nie musisz kasować w ESPHome liczników. To tak samo ja w wodomierzu, trzeba odczytać bieżące użycie, reszta obliczeń dzieje sie w HA.

Proszę podziel się swoim rozwiazaniem, napewno będziesz inspiracją dla innych chcących zrobić to samo.
Na forum brakuje kompleksowych (ze wszystkimi detalami i szczegółami) rozwiązań DIY nawet jak nie są “idealne” ale działają wg zamierzonego celu.

1 polubienie