# Water metering

**Works in progress! I'm not done with migrating this setup to Homey yet!**

This article describes the setup of digitally measuring water usage, using a tessel.io microcontroller.

### Choosing the correct water meter <a href="#choosingthecorrectwatermeter" id="choosingthecorrectwatermeter"></a>

You are not allowed to install a water meter yourself. In dialog with the waterworks, ro replace or install a water meter you need to ask for a water meter that can support digital readings.

In Trondheim, Norway, [Øwre-Johnsen as](https://owre-johnsen.no/) delivers the water meters allowed to be installed.

In dialoge with Øwre-Johnsen as, I ended up installing [Elster V200 (KVM-T)](https://owre-johnsen.no/produkt/ringstempelmaler-v200-kvm-t/). In addition I ordered and installed the [Falcon PR6 pulse module](https://owre-johnsen.no/produkt/signalgiver-falcon-pr6/). This one you can install your self.

![](/files/-LtolRCFVRVdk0v6Hn12)

### Reading the pulse <a href="#readingthepulse" id="readingthepulse"></a>

I chose to use a [tessel.io](https://tessel.io/) microcontroller, because it has both analog and digital gpio ports that is very easy to interact with using javascript.

![](/files/-LtolZPls47hPBcsjBo1)

The Falcon PR6 contains a battery and gives a digital impulse every liter user detected. Connect the black wire to GND and the yellow to one of the numbered PINs.

![](/files/-LtoleqMw0zS-gUgLLuR)

And when/if you order a Tessel 2, remember to also order a set of [jumper wires](https://www.sparkfun.com/products/11709)that fits.

![](/files/-Ltom6OR6LKlqNMgg4i-)

Here is a class to read the pulse indicating one liter used.

```javascript
const  
  EventEmitter = require('events'),
  tessel = require('tessel')

const pin = tessel.port.A.pin[4]

class PulseReader extends EventEmitter {  
  constructor() {
    super()
    this.previous = false
    setInterval(() => {
      this.read()
    }, 50) // Read impulse every 50 ms
  }

  // Give a short blue LED blink to signal that an pulse is detected.
  blink() {
    blue.on()
    setTimeout(function () {
      blue.off()
    }, 100);
  }

  read() {
    pin.read((error, value) => {
      if (error) {
        console.error("Error reading analog input: " + error)
        return
      }
      let val = (value === 0)

      // Emit a value event every time a digital pulse is detected
      // Will discard all subsequent readins from the same pulse
      if (val && val !== this.previous) {
        this.emit('value', true)
        this.blink()
      }
      this.previous = val
    })
  }
}

module.exports = PulseReader
```

It can be used like this:

```javascript
let d = new Database()  
let p = new PulseReader()

p.on('value', (value) => {  
  d.post(1)
})
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://homey.solweb.no/custom-integrations/water-metering.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
