Water meter - Reading continuous pulse even when water is shut off

I’m trying to connect a water meter to HA using a ESP32 board, but HA is showing continuous pulses from the water meter that are obviously wrong.

Setup:

Water meter - EKM SPWM-100-NSF. Specs - https://documents.ekmmetering.com/EKM-SPWM-075-HD-water-meter-spec-sheet.pdf

ESP32 board - MELIFE ESP-32S . See pinout in picture below.

ESPHome yaml file:

sensor:
  - platform: uptime
    name: "${esphome_name}_Uptime Sensor"
    
  - platform: wifi_signal
    name: "${esphome_name} WiFi Signal"
    update_interval: 60s

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

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

  - platform: pulse_meter
    pin: GPIO4
    name: "Water Pulse Meter"
    unit_of_measurement: "gallons/min"
    icon: "mdi:water"
    total:
      name: "Water Meter Total"
      unit_of_measurement: "ft³"
      id: water_meter_total
      accuracy_decimals: 3
    device_class: water
    state_class: total_increasing
    filters:
      - multiply: 0.748052
      
  - platform: template
    name: "Water Usage Gallons"
    id: water_flow_rate
    accuracy_decimals: 1
    unit_of_measurement: "Gallons/min"
    icon: mdi:water
    lambda: return (id(water_pulse).state * 10);
    update_interval: 6s  

I’m powering the ESP32 board with a USB cable and put together two mini breadboards to make the temporary connections while I’m testing this out. I’ve tried using the GND and GPIO4 pins on the right side of the board. I’ve also tried the GND and GPIO14 pins on the left side of the board. In both cases I get continuous pulses even with all the water in the house turned off and our well pump is not running.

Here is a picture of the connections with the two wires from the water meter connected to jumper wires through Wago connectors:

Here is a log file from the ESP32:

INFO Reading configuration /config/esphome/basement_esp32.yaml...
WARNING 'basement_esp32': Using the '_' (underscore) character in the hostname is discouraged as it can cause problems with some DHCP and local name services. For more information, see https://esphome.io/guides/faq.html#why-shouldn-t-i-use-underscores-in-my-device-name
INFO Detected timezone 'America/Denver'
WARNING GPIO2 is a Strapping PIN and should be avoided.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
WARNING GPIO4 is a Strapping PIN and should be avoided.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
WARNING GPIO4 is a Strapping PIN and should be avoided.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
WARNING GPIO4 is a Strapping PIN and should be avoided.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Starting log output from basement_esp32.local using esphome API
INFO Successfully connected to basement_esp32.local
[19:46:08][I][app:102]: ESPHome version 2023.2.2 compiled on Feb 19 2023, 16:31:02
[19:46:08][C][wifi:504]: WiFi:
[19:46:08][C][wifi:362]:   Local MAC: [redacted]
[19:46:08][C][wifi:363]:   SSID: [redacted]
[19:46:08][C][wifi:364]:   IP Address: 192.168.1.160
[19:46:08][C][wifi:366]:   BSSID: [redacted]
[19:46:08][C][wifi:367]:   Hostname: 'basement_esp32'
[19:46:08][C][wifi:369]:   Signal strength: -74 dB ▂▄▆█
[19:46:08][C][wifi:373]:   Channel: 11
[19:46:08][C][wifi:374]:   Subnet: 255.255.255.0
[19:46:08][C][wifi:375]:   Gateway: 192.168.1.1
[19:46:08][C][wifi:376]:   DNS1: 192.168.1.1
[19:46:08][C][wifi:377]:   DNS2: 0.0.0.0
[19:46:08][D][sensor:127]: 'Water Pulse Meter': Sending state 6411.87451 gallons/min with 2 decimals of accuracy
[19:46:08][D][sensor:127]: 'Water Meter Total': Sending state 7069.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][logger:293]: Logger:
[19:46:09][C][logger:294]:   Level: DEBUG
[19:46:09][C][logger:295]:   Log Baud Rate: 115200
[19:46:09][C][logger:296]:   Hardware UART: UART0
[19:46:09][D][sensor:127]: 'Water Pulse Meter': Sending state 0.00000 gallons/min with 2 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7079.00000 ft³ with 3 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Pulse Meter': Sending state 5610.39014 gallons/min with 2 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7085.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][switch.gpio:076]: GPIO Switch 'basement_esp32-Onboard-LED'
[19:46:09][C][switch.gpio:084]:   Inverted: YES
[19:46:09][C][switch.gpio:099]:   Restore Mode: restore defaults to OFF
[19:46:09][C][switch.gpio:031]:   Pin: GPIO2
[19:46:09][D][sensor:127]: 'Water Pulse Meter': Sending state 0.00000 gallons/min with 2 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7095.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][uptime.sensor:031]: Uptime Sensor 'basement_esp32_Uptime Sensor'
[19:46:09][C][uptime.sensor:031]:   Device Class: 'duration'
[19:46:09][C][uptime.sensor:031]:   State Class: ''
[19:46:09][C][uptime.sensor:031]:   Unit of Measurement: 's'
[19:46:09][C][uptime.sensor:031]:   Accuracy Decimals: 0
[19:46:09][C][uptime.sensor:031]:   Icon: 'mdi:timer-outline'
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7105.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][template.sensor:023]: Template Sensor 'Water Usage Gallons'
[19:46:09][C][template.sensor:023]:   State Class: ''
[19:46:09][C][template.sensor:023]:   Unit of Measurement: 'Gallons/min'
[19:46:09][C][template.sensor:023]:   Accuracy Decimals: 1
[19:46:09][C][template.sensor:023]:   Icon: 'mdi:water'
[19:46:09][C][template.sensor:024]:   Update Interval: 6.0s
[19:46:09][D][sensor:127]: 'Water Pulse Meter': Sending state 5610.39014 gallons/min with 2 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7113.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][homeassistant.time:010]: Home Assistant Time:
[19:46:09][C][homeassistant.time:011]:   Timezone: 'MST7MDT,M3.2.0,M11.1.0'
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7119.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][restart:076]: Restart Switch 'basement_esp32-restart'
[19:46:09][C][restart:078]:   Icon: 'mdi:restart'
[19:46:09][C][restart:099]:   Restore Mode: restore defaults to OFF
[19:46:09][D][sensor:127]: 'Water Pulse Meter': Sending state 0.00000 gallons/min with 2 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7126.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][pulse_counter:160]: Pulse Counter 'water pulse'
[19:46:09][C][pulse_counter:160]:   State Class: 'measurement'
[19:46:09][C][pulse_counter:160]:   Unit of Measurement: 'pulses/min'
[19:46:09][C][pulse_counter:160]:   Accuracy Decimals: 2
[19:46:09][C][pulse_counter:160]:   Icon: 'mdi:pulse'
[19:46:09][C][pulse_counter:161]:   Pin: GPIO4
[19:46:09][C][pulse_counter:162]:   Rising Edge: INCREMENT
[19:46:09][C][pulse_counter:163]:   Falling Edge: DISABLE
[19:46:09][C][pulse_counter:164]:   Filtering pulses shorter than 13 µs
[19:46:09][C][pulse_counter:165]:   Update Interval: 6.0s
[19:46:09][D][sensor:127]: 'Water Pulse Meter': Sending state 5610.39014 gallons/min with 2 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7145.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][pulse_meter:074]: Pulse Meter 'Water Pulse Meter'
[19:46:09][C][pulse_meter:074]:   State Class: 'measurement'
[19:46:09][C][pulse_meter:074]:   Unit of Measurement: 'gallons/min'
[19:46:09][C][pulse_meter:074]:   Accuracy Decimals: 2
[19:46:09][C][pulse_meter:074]:   Icon: 'mdi:water'
[19:46:09][C][pulse_meter:075]:   Pin: GPIO4
[19:46:09][C][pulse_meter:077]:   Filtering rising edges less than 13 µs apart
[19:46:09][C][pulse_meter:081]:   Assuming 0 pulses/min after not receiving a pulse for 300s
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7155.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][pulse_meter:074]: Pulse Meter 'Water Pulse Meter'
[19:46:09][C][pulse_meter:074]:   Device Class: 'water'
[19:46:09][C][pulse_meter:074]:   State Class: 'total_increasing'
[19:46:09][C][pulse_meter:074]:   Unit of Measurement: 'gallons/min'
[19:46:09][C][pulse_meter:074]:   Accuracy Decimals: 2
[19:46:09][C][pulse_meter:074]:   Icon: 'mdi:water'
[19:46:09][C][pulse_meter:075]:   Pin: GPIO4
[19:46:09][C][pulse_meter:077]:   Filtering rising edges less than 13 µs apart
[19:46:09][C][pulse_meter:081]:   Assuming 0 pulses/min after not receiving a pulse for 300s
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7166.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][mdns:108]: mDNS:
[19:46:09][C][mdns:109]:   Hostname: basement_esp32
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7170.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][ota:093]: Over-The-Air Updates:
[19:46:09][C][ota:094]:   Address: basement_esp32.local:3232
[19:46:09][C][ota:097]:   Using Password.
[19:46:09][W][ota:103]: Last Boot was an unhandled reset, will proceed to safe mode in 8 restarts
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7178.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][api:138]: API Server:
[19:46:09][C][api:139]:   Address: basement_esp32.local:6053
[19:46:09][C][api:143]:   Using noise encryption: NO
[19:46:09][D][sensor:127]: 'Water Pulse Meter': Sending state 0.00000 gallons/min with 2 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7186.00000 ft³ with 3 decimals of accuracy
[19:46:09][C][wifi_signal.sensor:009]: WiFi Signal 'basement_esp32 WiFi Signal'
[19:46:09][C][wifi_signal.sensor:009]:   Device Class: 'signal_strength'
[19:46:09][C][wifi_signal.sensor:009]:   State Class: 'measurement'
[19:46:09][C][wifi_signal.sensor:009]:   Unit of Measurement: 'dBm'
[19:46:09][C][wifi_signal.sensor:009]:   Accuracy Decimals: 0
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7194.00000 ft³ with 3 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Pulse Meter': Sending state 5610.39014 gallons/min with 2 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7198.00000 ft³ with 3 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7201.00000 ft³ with 3 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7204.00000 ft³ with 3 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7206.00000 ft³ with 3 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7209.00000 ft³ with 3 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Pulse Meter': Sending state 0.00000 gallons/min with 2 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7214.00000 ft³ with 3 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7218.00000 ft³ with 3 decimals of accuracy
[19:46:09][D][sensor:127]: 'Water Meter Total': Sending state 7224.00000 ft³ with 3 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Pulse Meter': Sending state 5610.39014 gallons/min with 2 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Meter Total': Sending state 7228.00000 ft³ with 3 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Meter Total': Sending state 7234.00000 ft³ with 3 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Meter Total': Sending state 7238.00000 ft³ with 3 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Pulse Meter': Sending state 0.00000 gallons/min with 2 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Meter Total': Sending state 7242.00000 ft³ with 3 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Meter Total': Sending state 7246.00000 ft³ with 3 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Meter Total': Sending state 7250.00000 ft³ with 3 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Meter Total': Sending state 7254.00000 ft³ with 3 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Pulse Meter': Sending state 5610.39014 gallons/min with 2 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Meter Total': Sending state 7258.00000 ft³ with 3 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Meter Total': Sending state 7263.00000 ft³ with 3 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Pulse Meter': Sending state 0.00000 gallons/min with 2 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Meter Total': Sending state 7267.00000 ft³ with 3 decimals of accuracy
[19:46:10][D][sensor:127]: 'Water Pulse Meter': Sending state 5610.39014 gallons/min with 2 decimals of accuracy

Can someone help me figure out why I’m getting continuous pulses from this setup?

To help me understand the ESP32 code better, what is the function of each of the sections named plateform:pulse_counter, platform: pulse_meter, platform: pulse_meter and platform:template? I though I’d just need to count the pulses and multiple them by the conversion factor (0.748052) to get gallons.

Thank you for your help.

First how many wires from the meter pickup unit? 2 or 3, Any information on what is needed to dive the pickup for a good clean signal of pulses versus noise on the lines (ripple voltages) that can be counted as pulses? That some what important.

Since you not using their electronics to drive/count (says up to 200 ft of cable), I doubt you can even go that far. Your electronics might have to be up very close. A oscilloscope would be a great help to see the signal.

Thank you for your reply. The meter has two wires coming out of it. The manufacturer has said “we recommend no more than 20mA and 24V for reading the pulse on all our water meters. So please use a resistor to limit the current, otherwise the reed switch could be damaged.”

I’m still learning about all of this stuff. The water meter does not use electricity. What might cause ripple voltages? I’ve tried two different USB power blocks/cables. Could using USB as the power source for the ESP32 board cause this problem?

I will post in the manufacturer’s forum to see if I can get more information about what is needed to drive the pickup of a clean signal of pulses. Any ideas from you would be appreciated. I don’t have an oscilloscope.

Depending on the manufacturer, USB power adapters are not the cleanest in DC voltage output. Do you have something heftier? Like a old AP power supply that you could change out the barrel end for a USB end or look for a USB with a barrel input.
But what is needed by the MELIFE ESP-32S to operate?

Thanks again. I’ll look into it. I need to do more research to understand the different ways to power the ESP32 board.

I don’t see this mentioned: Are you sure your pullup and inverted settings are correct? If the part generating the pulses go low (normally open) when it pulses, this it’s fine, but it could be the other way around, in which case the pin is floating when there’s no pulse (also, it can damage your controller). If you have a multimeter, use a low flow rate and the continuity tester to check which way around your pulses are generated.

Thank you Pieter. I’m not sure if the pullup and inverted settings are correct. I added those settings after initially getting the continuous pulses and reading the ESPHome documentation that says:

Blockquote
Wiring
If you want to count pulses from a simple reed switch, the simplest way is to make use of the internal pull-up/pull-down resistors.

You can wire the switch between a GPIO pin and GND; in this case set the pin to input, pullup and inverted:

# Reed switch between GPIO and GND
sensor:
  - platform: pulse_counter
    pin:
      number: 12
      inverted: true
      mode:
        input: true
        pullup: true
    name: "Pulse Counter"

Blockquote

I’ll ask the water meter manufacturer about how the pulses are generated.

I’m on a water well and know that the well pump is off most of the time, but the ESP32 board is picking up many pulses per minute. I suspect something, besides water flow, is generating the pulses. I don’t know anything electrical engineering but the suggestion from @lordwizzard about ripple voltages is something I plan to investigate.

One problem solved! It seems that the continuous pulse readings were caused by the power supply for the ESP32 board. I was using a mobile phone charging block and cable to power the ESP32 board. I am now using the USB port out of my laptop computer to power the ESP32 board. Now, I only get pulses when the well pump is drawing water out of our well.

Can anyone help me understand the ESP32 code better? What is the function of each of the sections named plateform:pulse_counter, platform: pulse_meter, platform: pulse_meter and platform:template? My calculations seem to be off. One pulse from my water meter should equal approximately 0.075 gallons. Home Assistant is showing water meter readings that don’t make sense.

This should help to explain at least the difference between the pulse counter and pulse meter: Pulse_counter vs pulse_meter - ESPHome - Home Assistant Community (home-assistant.io). In short, you probably need only one of them. Since the template sensor uses the pulse counter value (and neither of the two pulse meters below), you can probably just keep that one.

This looks like an unintended duplication, because these have the same name:

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

  - platform: pulse_meter
    pin: GPIO4
    name: "Water Pulse Meter"
    unit_of_measurement: "gallons/min"
    icon: "mdi:water"
    total:
      name: "Water Meter Total"
      unit_of_measurement: "ft³"
      id: water_meter_total
      accuracy_decimals: 3
    device_class: water
    state_class: total_increasing
    filters:
      - multiply: 0.748052

You should probably remove the first, since the second is the more complete definition (that is if you want to use this at all). The effect of the current situation is that you are probably seeing both sensor.water_pulse_meter and sensor.water_pulse_meter_2 on the HA side.

1 Like

Oh right, one problem down now unto the next one. :+1: :heart_eyes:

@parautenbach below is what the manufacturer had to say about the pulse mechanism of the water meter. After reading it, do you have any thoughts on whether the pullup and inverted settings are correct?

Our water meters have a basic, non-powered, Reed Switch, 2-wire, open/close pulse output. Your device will need to put a low voltage on the line and sense when the circuit closes at the water meter end. One close of the circuit = 1/10th cubic foot of water.

We recommend no higher than 20mA and 24V for reading the pulse on all our water meters.

The smallest dial on the water meter - the dial with the finest granularity - measures down to .01 cubic feet. The pulse is generated every time this dial goes around (so every 0.1 cubic feet).

The pulse frequency and width on the water meters are variable. This is due to the fact that the pulse is generated by a Reed switch that is closed via a magnet on one of the water meter dials. If the magnet were to stop rotating when the switch was closed, the pulse width would be infinitely wide until the dial moved again. Conversely, the faster the dials spin the shorter period of time the contact is closed.

Given this, your settings are correct. The pull-up in this case is to give the circuit a way to let the current flow and dissipate the energy when the circuit is closed (otherwise the 3.3V is directly connected to ground at the time of the pulse, which will make sparky stuff). When the circuit is open, you want the pin to sit at high (3.3V).

Thanks for linking to the post about pulse counter vs pulse meter. After reading that post a number of times and the ESPHome documentation about those sensors, I still don’t see significant differences between those two sensors. As you had previously mentioned compared to Pulse Meter, Pulse Counter seems to have more flexibility with its configuration variables. In the end, aren’t both of those sensors just outputting pulses/minute? Then, by using filters one can convert the pulses per minute to other units such a gallons, liters, kW, etc?

It seems you were right in that I only needed one of the sensors. Based on a post in another thread (Water usage sensor - #3 by mightybosstone) this is the code that I’m currently using.

- platform: pulse_counter
    name: "Water Rate"
    id: water_rate
    pin: 
      number: GPIO4
      mode:
        input: true
        pullup: true
    update_interval: 10s
    count_mode:
      rising_edge: DISABLE
      falling_edge: INCREMENT
    unit_of_measurement: "gal/hr"
    accuracy_decimals: 3
    filters:
     - debounce: 1.0s
     - lambda: return (x / 13.36898395721925) * 60;  
    total:
      name: "Water Tot al"
      unit_of_measurement: "gal"
      id: water_total
      accuracy_decimals: 3
      device_class: water
      state_class: total_increasing
      filters:
        - multiply: 0.0748 

Now I plan to confirm the readings from the sensor matches the readings on the face of my actual water meter.

1 Like

Pulse counter aggregates over a period and sends that to HA. The pulse meter sends on every pulse. Both count pulses.

Thanks for taking the time to help me understand. When I get more time, I’ll run a few tests to better understand the differences in those two sensors. The confusing thing for me is that the ESPHome documentation for those two sensors is identical in a number of respects. For example, the documentation for the Pulse Counter sensor says:

Converting units

The sensor defaults to measuring its values using a unit of measurement of “pulses/min”.

And the documentation for the Pulse Meter says:

Converting units

The sensor defaults to units of “pulses/min”.

Yes, it’s confusing at first, but it’s really just this: Pulse counter aggregates over a period and sends that to HA (a value based on an interval). The pulse meter sends on every pulse (an immediate value when the pulse occurs). Both count pulses.

Let’s say a pulse counter sends data every minute. Let’s also assume this is our sequence of pulses (format minutes and seconds). Let’s also say this is unitless (just a count).

00:05
00:12
00:26
00:38
00:40
00:59

At one minute, the pulse counter will report 6 pulses/min (just the total of pulses in that minute). The pulse meter will report 3.2 pulses/min at that point in time (the time between the last and second last pulse is 19 seconds apart).

The example was super helpful. Now I understand. Thank you!

1 Like

How can I confirm the volts and amps that my ESP32 is using to sense the pulses on my meter? Per the information below from the water meter manufacturer, there are recommended voltage and amperage limitations for the sensing circuit.

Our water meters have a basic, non-powered, Reed Switch, 2-wire, open/close pulse output. Your device will need to put a low voltage on the line and sense when the circuit closes at the water meter end. One close of the circuit = 1/10th cubic foot of water.

We recommend no higher than 20mA and 24V for reading the pulse on all our water meters.

The smallest dial on the water meter - the dial with the finest granularity - measures down to .01 cubic feet. The pulse is generated every time this dial goes around (so every 0.1 cubic feet).

The pulse frequency and width on the water meters are variable. This is due to the fact that the pulse is generated by a Reed switch that is closed via a magnet on one of the water meter dials. If the magnet were to stop rotating when the switch was closed, the pulse width would be infinitely wide until the dial moved again. Conversely, the faster the dials spin the shorter period of time the contact is closed.

You would need to use a VOM (Volt Ohm Meter). Put it on VDC in a range or auto to measure the DCV applied to the module (from the positive side to the negative/ground). For current you need to put the meter in Current mode in the appropriate mA range or auto. Then you need to put the meter in series in the circuit.

They have them at Lowe’s, Home Depot, etc. Do not go cheap. You may need it on other projects.

In case it might be helpful for others, I’ve stumbled upon a thread that might give the origin story of Pulse Meter and how it differs from Pulse Counter - How to count pulse frequency accurately with ESPHome? - #10 by stevebaxter

2 Likes