Esp licznik wody

cześć,
Panowie potrzebuje pomocy. Próbuje zrobić licznik wody zgodnie z

Build a cheap water usage sensor using ESPhome and a proximity sensor - PieterBrinkman.com

ale pojawia się to

o co chodzi???

pulse_counter - to jest do ESPHome config a nie do HA.

sensor:
- platform: pulse_counter
    pin: GPIO12
    update_interval : 6s
    name: "water pulse"
    id: water_pulse

- platform: pulse_meter
    pin: GPIO12
    name: "Water Pulse Meter"
    unit_of_measurement: "liter/min"
    icon: "mdi:water"
    total:
      name: "Water Total"
      unit_of_measurement: "liter"

  - platform: pulse_meter
    pin: GPIO12
    name: "Water Pulse Meter"
    unit_of_measurement: "liter/min"
    icon: "mdi:water"
    total:
      name: "Water Meter Total"
      unit_of_measurement: "m³"
      id: water_meter_total
      accuracy_decimals: 3
      device_class: water
      state_class: total_increasing
      filters:
        - multiply: 0.001

  - platform: template
    name: "Water Usage Liter"
    id: water_flow_rate
    accuracy_decimals: 1
    unit_of_measurement: "l/min"
    icon: "mdi:water"
    lambda: return (id(water_pulse).state * 10);
    update_interval: 6s

^^ to powinno być w yaml do ESPHome a nie HA.

1 polubienie

bardzo dziękuje :slight_smile: ESP dla mnie to coś nowego

Inny problem - nie zlicza impulsów, dioda na czujniku przy odkręconej wodzie zapala się i gaśnie natomiast HA nie rejestruje impulsów ktoś tak miał i może pomóc ??

Zrobiłem ten sam projekt i po prostu musisz dać czasu systemowi;) Ja dałem ogólnie ciała, bo pod zły “zegar” podstawiłem czujnik i zliczać mi zlicza ale złe wartości. Do tego muszę znaleźć jakąś nakładkę na licznik aby to wyglądało jakoś estetycznie, bo póki co wygląda dość “laboratoryjnie”:smiley:

Panowie nie mam nic w wartościach poniżej

image

konfiguracja jak powyżej

Odkopię temat, bo już dłuższy czas walczę z konfiguracją pod licznik impulsowy dla wodomierza i nie znajduję rozwiązania.
Moja konfiguracja dla ESPHome poniżej. Zaczerpnięta z materiałów linkowanych w tym temacie. Modyfikacja kodu pod płytkę HW-622 (esp-12e), impulsy prawidłowo podawane na GPIO5.

substitutions:
  devicename: "hw-622"
  upper_devicename: "licznik wody"

esphome:
  name: $devicename
  platform: ESP8266
  board: esp12e

# Enable logging
logger:
#  baud_rate: 0

# Enable Home Assistant API
api:

# Enable over the air updates
ota:

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
#  fast_connect: on

# see: https://esphome.io/components/time.html
time:
  - platform: homeassistant
    id: homeassistant_time

# Enable Web server
web_server:
  port: 80

text_sensor:
  - platform: version
    name: "${devicename} - Version"
    icon: mdi:cube-outline
  - platform: wifi_info
    ip_address:
      name: IP Address

captive_portal:

switch:
  - platform: gpio
    pin: GPIO4
    name: "zawór wodomierz"
    id: relay
    icon: mdi:pipe-valve
#    internal: true

binary_sensor:

  - platform: status
    name: "${devicename} - Status"
    device_class: connectivity

sensor:
  - platform: pulse_counter
    pin:
      number: GPIO5
      mode:
        input: true
        pullup: true
    update_interval : 6s
    name: "water pulse"
    id: water_pulse

  - platform: pulse_meter
    pin:
      number: GPIO5
      mode:
        input: true
        pullup: true
    name: "Water Pulse Meter"
    unit_of_measurement: "l/min"
    icon: "mdi:water"
    total:
      name: "Water Total"
      unit_of_measurement: "litr"

  - platform: pulse_meter
    pin:
      number: GPIO5
      mode:
        input: true
        pullup: true
    name: "Water Pulse Meter"
    unit_of_measurement: "l/min"
    icon: "mdi:water"
    total:
      name: "Water Meter Total"
      unit_of_measurement: "m³"
      id: water_meter_total
      accuracy_decimals: 3
      device_class: water
      state_class: total_increasing
      filters:
        - multiply: 0.001

  - platform: template
    name: "Water Usage Liter"
    id: water_flow_rate
    accuracy_decimals: 1
    unit_of_measurement: "l/min"
    icon: "mdi:water"
    lambda: return (id(water_pulse).state * 10);
    update_interval: 6s

  - platform: wifi_signal
    name: sygnał WiFi 
    update_interval: 60s
  - platform: uptime
    name: "Uptime"

Nie mam pojęcia dlaczego nie otrzymuję żadnych wartości dla Water Total oraz Water Usage Liter. @Robert80 - znalazłeś rozwiązanie?

Płytka jest o tyle ciekawa, że pozwala mi na zasilanie 12VDC i podpięcie czujnika indukcyjnego o tym napięciu przez gotowe wejście z transoptorem. Dodatkowo jest na pokładzie przekaźnik, który planuję wykorzystać do siłownika zaworu.

EDIT:
Mam trop:

Może warto zobaczyć jak to robią inni, np. GitHub - klaasnicolaas/home-assistant-glow: ⚡ The power of energy measurements in your house z wykorzystaniem impulsów.

Dzięki za link, lubię proste rozwiązania i jeszcze bardziej takie, które rozumiem jak działają. Poniżej spełniający moje oczekiwania kod dla sensora (mała hybryda podpatrzonych konfiguracji) :

sensor:
  - platform: pulse_meter
    name: "Przepływ wody"
    pin:
      number: GPIO5
#      inverted: true 
      mode:
        input: true
        pullup: true
    internal_filter_mode: PULSE
    unit_of_measurement: "l/min."
    accuracy_decimals: 0
    icon: "mdi:gauge"
    internal_filter: 100ms
    timeout: 1min
    total:
      id: water_usage_total
      name: "Woda zużycie total"
      icon: "mdi:water"
      unit_of_measurement: "m³"
      accuracy_decimals: 3
      device_class: water
      state_class: total_increasing
      filters:
        - multiply: 0.001

Mam średni przepływ i zużycie total na bazie, którego mogę stworzyć pomocników i korzystać z zakładki Energia. Encja przepływu l/min do wykorzystania w automatyzacjach.


EDIT:
Garść foto przed i po montażu.
Czujnik dobrany drogą empiryczną, dopiero przy modelu z 8mm zasięgu działa z moim wodomierzem.


2 polubienia

Licznik wody według twojego rozwiązania działa idealnie.
Zaimplementowałem ten sam kod do licznika gazu. Zużycie zlicza, ale problem jest w chwilowym. Różnica jest taka, że jeden impuls w liczniku gazu to 10 litrów a nie jeden litr, więc zamiast np. 30 pokazuje 3. Gdzie dodać mnożnik?

Jeśli mówisz o YAMLu post wyżej

      filters:
        - multiply: 0.01
1 polubienie

Tak jak uprzedził mnie @szopen - zmieniasz multiply. Licznik impulsów przepracował miesiąc i odczyty w HA są tożsame ze wskazaniem wodomierza. Odczyt z sensora total stworzonego w ESPHome zeruje się po restarcie ESP, dlatego w samym HA, na jego bazie dodałem pomocnika “licznik mediów” bez cyklu zerowania i wówczas otrzymujemy encję, która zwiększa się zawsze przyrostowo, niezależnie od zachowania sensora po restarcie urządzenia ESP.
Następnym etapem będzie montaż jakiegoś elektrozaworu.

1 polubienie

Dzięki panowie, za podpowiedzi, ale chyba coś schrzaniłem, bo teraz mam ciągle odczyt zerowy.
image
wklejam poniżej config esphome:

 - platform: pulse_meter
    name: "Przepływ gazu"
    pin:
      number: D6 
      mode:
        input: true
        pullup: true
    internal_filter_mode: PULSE
    unit_of_measurement: "l/min."
    accuracy_decimals: 0
    icon: "mdi:gauge"
    internal_filter: 100ms
    timeout: 1min
    filters:
      - multiply: 0.010
    total:
      id: gas_usage_total
      name: "Gaz"
      icon: "mdi:fire"
      unit_of_measurement: "m³"
      accuracy_decimals: 3
      device_class: gas
      state_class: total_increasing
      filters:
      - multiply: 0.010

Może to jedno zero ma znaczenie?

obraz

Jak dla mnie to nie kumam, czemu jest 2x

Jeśli się coś dzieli przez 100 i ma to dać wartość właściwą, a potem jeszcze raz dzieli przez 100 to wychodzi 1% wartości oczekiwanej.

W sumie to nie wiem skąd to pierwsze dzielenie, skoro w kodzie @angler na którym jak piszesz się wzorowałeś (copy+paste?) jest tylko raz dzielenie przez 1000 (w formie mnożenia przez 1/1000), co jak twierdziłeś daje wynik zaniżony 10-krotnie.

Poprawiłem w/g waszych uwag. Bez zmian. Zastanawia mnie jeszcze timeout. Czy w ogóle potrzebna ta definicja, skoro z tego co gdzieśtam doczytałem i tak jest domyślnie 60 sekund

5 minut
Proponuję zawsze zaczynać analizę od zajrzenia do aktualnej dokumentacji

metr sześcienny ma 1000 litrów, spróbuj przeanalizować samodzielnie na podstawie dokumentacji jak powinieneś skonfigurować w swoich warunkach tą integrację.

Super. Znowu po angielsku… i po kiego wała mi niemiecki, rosyjski i hiszpański na poziomie C1. Dobra, wrzucę w translatora

Rosyjski wbrew pozorom jest bardzo użyteczny, przynajmniej w dziedzinach, którymi zajmuje się to forum oraz w wielu pokrewnych. Natomiast, hmm, angielski jest językiem “międzynarodowym” przynajmniej od połowy XX wieku, w tym jest kluczowy w technice czy elektronice, nie mówiąc już o technologiach informatycznych.


Edit - haha potwierdzenie moich słów w innym wątku, gdzie jest post sprzed chwili

2 polubienia

Zgadzam się z tobą. A czasy są jakie są

Mam i działa. Zlicza co trzeba bez błędów.

  - platform: pulse_meter
    name: "Przepływ gazu"
    pin:
      number: D6
#      inverted: true 
      mode:
        input: true
        pullup: true
    internal_filter_mode: PULSE
    unit_of_measurement: "l/min."
    accuracy_decimals: 0
    icon: "mdi:gauge"
    internal_filter: 50ms
    timeout: 5min
    filters:
      - multiply: 10
    total:
      id: gas_usage_total
      name: "Gaz"
      icon: "mdi:fire"
      unit_of_measurement: "m³"
      accuracy_decimals: 3
      device_class: gas
      state_class: total_increasing
      filters:
        - multiply: 0.01
1 polubienie