ESPHOME licznik imp...
 
Powiadomienia
Wyczyść wszystko

Home Assistant ESP8266/ESP8285 ESPHOME licznik impulsów.

7 Wpisów
4 Użytkownicy
1 Reactions
158 Wyświetleń
(@marcin_kutno)
Wpisów: 6
Bywalec
Autor tematu
 

Witam.

Czy w ESPHOME istnieje "gotowiec" zwykłego licznika inkrementalnego? Szukałem na wszelkie mi znane sposoby, niestety nic nie znajduję. Niestety również pisanie wszelkich "dodatków" do czujników sprawia mi problemy - najzwyczajniej nie ogarniam tego. Uczę się ale mój poziom można określić jako zielony - może ciemno zielony 🙂 .

Popełniłem sobie czujnik na bazie komparatora z czujnikiem Halla (i to jako switch działa poprawnie), do tego obręcz z ośmioma magnesami. Zamontowane na wale który się obraca ok 1,1 obr/min. Chcę kontrolować ilość wykonanych obrotów w ciągu doby.

Czy mógłby mnie ktoś chociaż naprowadzić na poprawne rozwiązanie? (pulse counter - jak bym nie ustawił pokazuje wariactwa - chyba że na jego podstawie coś drążyć?)

Marcin.

 


 
Dodane : 01/11/2025 5:32 pm
 jarn
(@jarn)
Wpisów: 45
Kontrybutor
 

Wrzuć kod jaki masz. Może coś nie tak z hardwarem jest, że wyniki głupieją.

Podpowiedź od Groka:

binary_sensor:
  - platform: gpio
    pin:
      number: 4  # Pin GPIO dla sygnału z Halla
      mode: INPUT_PULLUP  # Wewnętrzny pull-up, by uniknąć szumów
      inverted: true  # Zależnie od czujnika – przetestuj, czy impulsy są na LOW czy HIGH
    name: "Czujnik Halla"
    on_press:  # Opcjonalnie: loguj impulsy
      then:
        - logger.log: "Impuls wykryty!"

# Główny licznik impulsów
sensor:
  - platform: pulse_counter
    pin: 4  # Ten sam pin co wyżej
    name: "Impulsy surowe"
    unit_of_measurement: "impulsy"
    accuracy_decimals: 0
    filters:
      - multiply: 60.0 / 8.0  # Przeliczenie: (imp/min) / magnesy * 60 = RPM
    update_interval: 1s  # Aktualizacja co 1 sekundę
    internal_filter_mode: PASS
    internal_filter: 200ms  # Filtr na szumy (dostosuj, jeśli impulsy są krótkie)

 
Dodane : 01/11/2025 5:46 pm
(@marcin_kutno)
Wpisów: 6
Bywalec
Autor tematu
 

Na chwilę obecną znalazłem w sieci kodzik który odnosi się do pomiaru wody z licznika wody na podstawie zwarć kontaktronu. Po drobnych modyfikacjach działa u mnie prawidłowo. Ale za nic nie pojmuję jak licznik impulsy/czas przekształcane są na inkrementację tych impulsów w zasadzie z pominięciem jednostki czasu.

A że platforma HA jest w wersji eksperymentalnej :). Dużo się tam zmienia i nie ma kluczowych zadań (głównie podgląd z dużej ilości czujników, a układów wykonawczych - kluczowych niewiele), no może poza sterowaniem bramą i oświetleniem zewnętrznym, to mogę i będę eksperymentował tylko nie wszystko rozumiem (czasem się podpieram metodą kopiuj/wklej).

Co chcę przez to powiedzieć, że pewnie niejednokrotnie wyląduję na forum z durnym pytaniem i proszę o cierpliwość.

I na pewno powyższy kod wykorzystam również, a przynajmniej będę próbował - w celach edukacyjnych. 

sensor:
  - platform: pulse_counter
    pin: D7


    name: "Masa"
    update_interval : 60s
    filters:
      - lambda: |-
          static float total_value = 0.0;
          total_value += x * 0.023;
          return total_value;
    unit_of_measurement: "kg"
    accuracy_decimals: 3

 
Dodane : 02/11/2025 8:06 pm
Mariusz
(@mariusz-2)
Wpisów: 239
Weteran Donator 2K23
 

Dodane przez: @marcin_kutno

Na chwilę obecną znalazłem w sieci kodzik

Nie musisz szukać ... skoro używasz ESPHome to czytaj dokumentację.

https://esphome.io/components/sensor/pulse_counter/

 

https://esphome.io/components/


 
Dodane : 02/11/2025 10:25 pm
(@marcin_kutno)
Wpisów: 6
Bywalec
Autor tematu
 

Czytam dokumentację, i nawet staram się to robić ze zrozumieniem. A ideę "pulse_counter" zrozumiałem jako licznik impulsów w czasie (jak sobie stworzyłem "platformę" testową to wyniki wskazywały że tak jest, chyba że się mylę to mnie popraw). Idealny jest do wskazywania np obrotów na minutę (często również wykorzystywany do zliczania kW-h). A mnie nie interesuje prędkość obrotowa (ją znam i na razie nigdzie nie wykorzystam), mnie interesuje ile obrotów wykonał mój "czujnik", i czy to będzie w minutę, godzinę czy tydzień nie ma znaczenia. Interesuje mnie prosty licznik kroków (czy incr, czy decr nie ma znaczenia, i w jakim czasie to osiągnął tez jest zbędną informacją), a takowego nie znalazłem w dokumentacji.

Co prawda na podstawie tego licznika wskazania jakie widzę są właściwe ale nie mogę sobie przekalkulować jak to jest ogarnięte...

Tak dla wyjaśnienia : przeliczam obroty na wagę w kotle na ekogroszek. Wiem że jeden obrót ślimaka to ok 0,181 kg wysuniętego opału. Sumuję całość i przeliczam dobowe, tygodniowe, miesięczne zużycie.  


 
Dodane : 03/11/2025 2:27 am
Mariusz zareagował
pawell32
(@pawell32)
Wpisów: 1451
Guru Moderator
 

masz "total counter" do dyspozycji.

# licznik obrotów
sensor:
  - platform: pulse_counter
    pin: GPIO1
    unit_of_measurement: 'kg'
    name: 'waga ekogroszku'
    filters:
      - multiply: 60  # (obrotów na min.)

    total:
      unit_of_measurement: 'kg'
      name: 'całkowita waga'
      filters:
        - multiply: 1

nie jestem pewien co do przelicznika, trzeba sprawdzić


 
Dodane : 03/11/2025 8:47 am
 jarn
(@jarn)
Wpisów: 45
Kontrybutor
 

Taki mam kod gazomierza:

api:
  reboot_timeout: 60min
  encryption:
    key: "g/="
  services:
    - service: gazu_licznik
      variables:
        new_pulse_total: float
      then:
        - pulse_meter.set_total_pulses:
            id: gas
            value: !lambda 'return (new_pulse_total * 100);'
#web_server:
#  port: 80
#  version: 1
ota:
  - platform: esphome
    password: ""

wifi:
  ssid: !secret ssid
  password: !secret password
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  reboot_timeout: 60min
  ap:
    ssid: "Gazomierz Fallback Hotspot"
    password: ""

substitutions:
  devicename: "gazomierz"
  device_description: "Measure your natural gas consumption with the magnetic pulse of gas meter."
  status_led: GPIO02
  pulse_pin: GPIO12
  pulse_rate: '100' # imp/m3
  
captive_portal:
light:
  - platform: status_led
    id: status
    name: "State"
    pin: ${status_led}
sensor:
  - platform: homeassistant
    id: wspolczynnik
    name: "Współczynnik konwersji"
    entity_id: input_number.gaz_kwh_wspolczynnik
    internal: True
# Gas meter
  - platform: pulse_meter
    pin:
      number: GPIO12
      mode: INPUT_PULLUP
    internal_filter: 500ms
    internal_filter_mode: PULSE
    timeout: 901s
    name: "Gaz przepływ"
    filters:
      - multiply: 0.36
    unit_of_measurement: "m³/h"
    id: gas
    accuracy_decimals: 5
    on_value:
      then:
        - lambda: 
            id(kw_godzine).publish_state( x * id(wspolczynnik).state);
    icon: 'mdi:fire'
    total:
      name: 'Gaz licznik'
      state_class: total_increasing
      device_class: gas
      unit_of_measurement: "m³"
      accuracy_decimals: 2
      filters:
        - lambda: 
            id(kwh_godzine).publish_state( x * id(wspolczynnik).state / ${pulse_rate});
            return x * (1.0 / ${pulse_rate});
  - platform: template
    device_class: power
    name: "Gaz przepływ kW"
    id: kw_godzine
    unit_of_measurement: "kW"
  - platform: template
    device_class: energy
    name: "Gaz przepływ kWh"
    id: kwh_godzine
    unit_of_measurement: "kWh"
  - platform: wifi_signal
    name: "${devicename} - Wifi Signal"
    update_interval: 120s
    icon: mdi:wifi

 
Dodane : 03/11/2025 10:01 am
Udostępnij: