Sharing for those searching for a similar solution, and thanks to @chris.huitema for the guidance
This solution reads my existing water meter and integrates the usage into Home Assistant, including the Energy dashboard.
Water Meter
Analog water meters (Read your water meter | South East Water - Type 1) in my area contain a port that can be used to measure usage through a reed switch. This port is located at the top left of the meter display and will have a black cap on it.
Hardware:
- Raspberry Pi Pico W (but any ESPHome device with GPIO and GND pins will do)
- 3-core irrigation cable (0.5mm)
- Plastic Reed Switch (normally open)
Installation
Attach reed switch to 2 of the irrigation wires and double back one side. Make sure you keep this as thin as possible so it will fit in the port. I personally was lazy and just tied the wires around each other and sealed with electrical tape, but I would recommend soldering. Remove the black cap from the meter and insert the switch as far as it will go. Run the irrigation cable to where you will keep your Pico, with access to power and Wi-Fi. On the other end of the irrigation cable, attach one wire to GPIO7 (any GPIO pin will do) and GND (any GND pin) of the Pico.
I have the cable running about 25m from the meter into my attic to an outdoor enclosure for power boards. You should be able to run the cable up to 50m while still reading the switch. The Pico is then powered from mains and is within reach of my Wi-Fi network.
Configuration
I’m using ESPHome on the Pico W as I find the integration with Home Assistant to be excellent and it is very easy to make configuration changes over the air.
Below is the sensor configuration to add:
sensor:
- platform: pulse_counter
pin:
number: GPIO7
inverted: true
mode:
input: true
pullup: true
update_interval : 10s
name: "pulse water"
id: pulse_water
- platform: pulse_meter
pin:
number: GPIO7
inverted: true
mode:
input: true
pullup: true
name: "Water Pulse Meter"
id: water_pulse_meter
unit_of_measurement: 'l/min'
icon: "mdi:water"
internal_filter: 100ms
timeout: 30s
filters:
- throttle: 10s
total:
name: "Water Usage Total"
id: water_meter_total
unit_of_measurement: "mÂł"
accuracy_decimals: 3
device_class: water
state_class: total_increasing
filters:
- multiply: 0.001
Once configured, you can add sensor.water_usage_total to the Energy dashboard and configure your price per m3 (which is equivalent to kl that my provider uses).