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.
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 delivers the water meters allowed to be installed.
In dialoge with Øwre-Johnsen as, I ended up installing Elster V200 (KVM-T). In addition I ordered and installed the Falcon PR6 pulse module. This one you can install your self.
I chose to use a tessel.io microcontroller, because it has both analog and digital gpio ports that is very easy to interact with using javascript.
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.
And when/if you order a Tessel 2, remember to also order a set of jumper wiresthat fits.
Here is a class to read the pulse indicating one liter used.
constEventEmitter = require('events'),tessel = require('tessel')const pin = tessel.port.A.pin[4]class PulseReader extends EventEmitter {constructor() {super()this.previous = falsesetInterval(() => {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 pulseif (val && val !== this.previous) {this.emit('value', true)this.blink()}this.previous = val})}}module.exports = PulseReader
It can be used like this:
let d = new Database()let p = new PulseReader()p.on('value', (value) => {d.post(1)})