xPL enabled utility meter monitor


When built our house, we took measures to ensure that we would consume little energy to keep our place to live warm and cosy. For this, we added extra insulation, we kept the number of air leaks as small as possible, and added a ventilation system that recycles the energy from the extracted air into the fresh air that is brought into our home.

Since the proof of the pudding is in the eating, I need a way to monitor the resources used. A logical way to go is to tap into the existing utility grid meters. The meters are already in place, they are nicely calibrated (I hope), and they can easily be interfaced without having to fiddle with the interior of the meter itself.

What do I want to monitor: gas usage and water usage. Interfacing to the electricity meter is a bit more difficult, as it can spin in both directions in our situation (we also produce electricity). In the end, our yearly electricity consumption is covered by what we produce. I already monitor the production, so I feel little need in monitoring the main electricity meter.

Next question: how to interface with the meters? Several sensor types are available.

  • Optical (the lowest digit of the meter has a reflective part) is not cool, as the interface will be influenced by lights being switched on.
  • Infrared might be an option, but is like the optical a bit ugly. I can imagine that the meter-man is not keen on seeing some electronics glued in front of the meter readouts.
  • Magnetic: closer inspection of the gas and water meter discloses some clues on the fact that the meters are prepared for electronic readout. For the gas meter, this is visible as a small rectangular indent in the meter housing right above the meter digits. For the water meter, a drilling is made in the side of the meter that is sealed with a removable rubber plug.

Aha, maybe a Hall sensor will do? In fact, both meters contain a magnet that is strong enough to trigger a Hall effect sensor. The sensor I use is a A3214EUA-T from Allegro Microsystems (Farnell order code: 1651972).

Water meter with Hall sensor inserted
Gas meter with Hall sensor glued into place

A test circuit is quickly built and shows that both sensors produce pulses when the meters are rotating. For the gas meter, I get a single pulse per .01 m3. The water meter generates a pulse for every .5 liter of water that is used.

Time to build a more robust circuit to measure the pulses. I decided to build an xPL enabled sensor node that can report sensor readings over the local network to my home server. The sensor node reports the readings through the sensor.basic message scheme and uses the type ‘count’.

Hardware

The node is built around a PIC18F2520 and an XPORT. Both are mounted on the netnode PCB that I designed previously. PCB and schematics are available here.

Firmware

The software is written in MPLAB and can be compiled with the free version of the Microchip C18 compiler.

The basic idea of the software is to continuously run the function ‘xpl_handler’ from the xPL lib that was written by me and Dirk. All events (sensor triggers, serial IO) are handled through interrupts. To offload the storage of received characters to the receive buffers of the XPORT (that device has 2k buffers built in) a software handshaking is implemented in the firmware.

The sensornode keeps track of the number of pulses that are produced by the Hall sensors and transmits an xpl-trig message when a pulse is detected. The server software can interrogate the accumulated pulses with an cmnd.basic message, after which the sensornode responds with a status message.
The device presents itself to the xPL network as ‘hollie-utilmon’.
The next screenshot shows the basic communication between the server software and the netnode for a single sensor readout.


Next to sensor reporting, the firmware of the netnode also supports initial configuration of the name of the netnode in the xPL network. Filters and group membership is currently not supported.

Code is available in SVN.

Software

On the PC side, we need a script to poll the sensornode are regular intervals. This is done with software of choice, and an example Perl script built on the excellent xpl-perl library is located here. This script pulls the values from the sensornodes and stores them in an RRD database for archiving and graph generation.

Results

The data stored in the RRD database is then graphed. The daily usage statistics look like this:

Gas usage per day the last month

Water usage per day

XPORT configuration

I have not found a way to include the configuration of the XPORT in the SVN repo. Relevant settings are shown below.

,

25 responses to “xPL enabled utility meter monitor”

  1. Lieven,

    Ik leer altijd wel iets bij van Uw elektronica bezigheden. Zo heb ik hier de Xport ontdekt.

    Wat die xPL betreft, ik kan niet direct fabrikanten vinden die kant en klare sensors op de markt brengen….die ik dan op mijn LAN zou kunnen aansluiten

    Kan je mij a.u.b eens de juiste weg wijzen.

  2. Hallo Johan,

    ikzelf heb geen weet van ‘ready-made’ hardware die xPL ondersteunt. Reden te meer om het zelf te bouwen natuurlijk 🙂

    Ik zou zeggen: best eens een berichtje posten op het forum van http://xplproject.org.uk/

    Groeten!
    Lieven.

  3. Dag Lieven,

    Heel knap van je om met dit type Hall sensor de omwentelingen van de meter in pulsen om te zetten!

    Ik heb hetzelfde type water meter dan die van jou. Binnenkort dus eens experimenteren met een Hall sensor. Ik vraag me wel af waar de tweede opening dan wel voor dient?

    Flukso is ook een open source hard- en software project voor het visualiseren en on-line vergelijken van (energie)stromen in het huis. We hebben tot hiertoe vnl. gefocust op het meten van het electrisch verbruik met stroomklemmen. Wanneer je het aansluitpunt van je PV invertor uitgang in je meterkast juist kiest, dan kan je zowel PV productie als consumptie apart meten. Ook wanneer je netto stroom aan het net levert.

    Cheers!
    Bart.

  4. Dag Bart,

    die tweede opening is volgens mij intern voorzien van schroefdraad, dus mogelijks dient deze gewoon om de sensor+een printje vast op de meter te bevestigen.

    Die Flukso: ziet er mooi uit! Ik ben ‘tempted’ om er eentje te kopen, het matched eigenlijk zeer goed met wat ik gemaakt heb om mijn PV installatie te monitoren. Ik ben momenteel aan het spelen met de devices van Plugwise voor de monitoring van de verbruikers, maar die devices hebben het nadeel dat het hele platform closed is. Niet dat dit natuurlijk verhindert dat ik het toch kan inpassen in mijn meetsysteem, maar handig is anders…

    Dan is het open model van Flukso zeker een voordeel!

    Groeten,
    Lieven.

  5. Dag Lieven,

    Jullie hebben ook een knap stukje open hardware ontwikkeld door het koppelen van een PIC aan een Xport. Van xPL had ik tot hiertoe nog niet gehoord. Daar moet ik nog wat meer over lezen.

    De Fluksometer heeft zowel analoge als digitale ingangen. We gebruiken de digitale ingang voor het aansluiten van de open-collector S0 uitgang van een DIN-rail kWh meter (zoals die van de GSC teller). De Hall sensor switch van Allegro heeft ook een open-collector uitgang. We gaan dus enkel de meterconstante correct moeten bepalen en instellen.

    Naast rapportering naar de Flukso server, hebben we ook een demo versie draaien die een locale JSON/REST type interface aanbiedt (work in progress!). We willen dit gaan combineren met het Avahi/Bonjour protocol voor
    service discovery alle in de LAN aanwezige sensoren.

    Ik verwijs je ook naar een blog post van David Rowe die toont hoe je je PV productie en huishoudelijke consumptie apart kan meten: http://www.rowetel.com/blog/?p=135.

    Cheers!
    Bart.

  6. Hoi Bart,

    die PIC + Xport (ik noem het de netnode) gebruik ik ondertussen een beetje voor vanalles in huis: rolluiksturing, gas/water teller monitoring, zonneboiler en PV monitor, balansventilatie monitor. Alle benodigde firmware en software is open en ik log alles in RRD databases, net als jij doet.
    Alleen heb ik het niet opengetrokken naar het web. Dit betekent dat ik een energiezuinig servertje heb op het LAN vanwaar alle sensorwaarden gepolld worden. Voordeel is dat ik alles intern heb en dat ik kan knutselen zoveel ik wil, nadeel is dat als er mensen zijn die mijn opstelling willen dupliceren, ze ook een servertje nodig hebben.

    En ik heb er ook geen professionele enclosure voor zoals jij die wel hebt!

    Maar nu weet ik in ieder geval al naar wie ik ze kan doorverwijzen als ze hun PV installatie willen monitoren he 🙂

  7. Lieven,

    Leuke website! Zou je mischien ook het circuit wat je voor de Allegro Hall sensor hebt gebruikt kunnen beschrijven? Heb je een plaatje? Ik heb dezelfde Hall sensor en dezelfde gasmeter, maar het lukt mij niet om er signaal uit te krijgen.

    Ik heb zelf +3V op pin1, GND op pin 2. Pin 3 is aangesloten op de analoge input van een Arduino. Tussen pin 1 en pin 3 heb ik nog een weerstand gezet van 1K.

    Groeten,

    Pieter

  8. Dag Pieter,

    ik gebruik een gelijkaardig circuit als jij doet (het is een PIC ipv een Atmel controller, maar dat doet er niet toe). Belangrijk is dat je inderdaad een pull-up weerstand hebt naar Vcc. Let er echter op dat deze weerstand groot genoeg is! De Hall sensor kan maar maximum 1 mA sinken. Als jij 3V met een 1k pullup op de output aangesloten hebt, dan probeer je 3 mA door de chip te jagen… Mag ik trouwens eens vragen hoe jij die 3V gemaakt hebt? Is dat de Vcc van de Arduino? Is dat dan niet 3V3 of 5V?

    Verder is het wel zo dat je enig experimenteerwerk zal hebben om de juiste plaats te vinden om de sensor op de gasteller te bevestigen. De logo-zijde van de sensor moet naar het telwerk gericht zijn, en dan recht boven het laatste wieltje geplaatst worden.

    Vriendelijke groeten,
    Lieven.

  9. Hoi Lieven,

    Het is gelukt! Bij het vervangen van de weerstand door 5kOhm viel het me op dat de Hall sensor verkeerd om in mijn breadboard zat. Even omdraaien gaf direct een mooi signaal met een testprogrammaatje. Bedankt voor de hulp.

    Ik gebruik niet de officiele arduino, maar een afgeleide variant: de JeeNode (zie http:/www.jeelabs.org). De JeeNode is afgeleid van de Arduino, maar dan met een 868Mhz tranceiver om draadloos te kunnen communiceren. Die JeeNode draait op 3V ipv 5V van een standaard Arduino.

    Groeten,

    Pieter

  10. Lieven

    Ik heb me rot zitten zoeken waar ik zo’n Hall sensor kan kopen. Idd, bij farnell. Maar particulieren moeten wel min 50€ kopen vooraleer je iets kan bestellen.
    Nu ben ik opzoek naar mensen die me aan zo’n sensor kunnen helpen. Maar in mijn zoektoch ben ik ook naar enkele alternatieven gaan kijken, voor in het geval dat ik geen Hall sensor op de kop kan tikken. Blijkt dat het ook zou werken met een reed contact uit een snelheidsmeter van een fiets. dit is de link waar ik het gevonden heb heb je dit ook al eens geprobeerd?

    Wouter

  11. Dag Wouter,

    het zou kunnen dat je met een reed relais ook de magneetjes in de meter kan detecteren. Ik heb dat niet getest, een geintegreerde oplossing lijkt me robuuster dan een mechanische…

    Het is niet absoluut noodzakelijk dat je exact dezelfde sensor koopt natuurlijk, zorg er gewoon voor dat de gevoeligheid dezelfde is en dan zit het wel snor.

    Je kan eens kijken bij Conrad of Digikey als Farnell je niet direct ligt.

    Succes met je zoektocht!
    Lieven.

  12. Dag Lieven,

    getriggerd door je site zelf ook maar eens begonnen om de watermeter te onderzoeken. Afdekkapje was er. Grote glimlach. Ik had echter alleen nog een SS443A hallsensor liggen. Proefopstelling met een gewone magneet werkt. Echter, deze sensor heeft een zuidpool nodig om te schakelen. En natuurlijk lukt het niet, jammer. Jouw sensor is ondertussen obsolete, dus dat wordt moeilijker. Na wat zoeken op internet een beetje info tegengekomen. Er zijn probes te koop van Kent zelf. Ter info : de meter is door Kent in Engeland gemaakt (tegenwoordig noemen ze blijkbaar Elster en zitten ook in Belgie).
    Site met beknopte info : http://www.elstermetering.com/en/V100.html
    Goed, verder zoeken dus. Een reedcontact dan maar proberen. Alleen heb je dat op zaterdagavond niet zo direct bij de hand. Maar ik had nog wel een raamcontact liggen voor een alarm systeem. En daar zat ook een reedcontact in. Gedemonteerd en mee in het testcircuit geplaatst. Nog altijd geen puls waar te nemen. Nuja, het contact moet natuurlijk in de juiste positie liggen.

    Bij deze site : http://www.domoticaforum.eu/viewtopic.php?f=7&t=1815&start=0
    had ik nog goede hoop om een reedcontact bij Conrad te ( http://www2.conrad.be/goto.php?artikel=502036 )bestellen, maar ik heb toch voor alle zekerheid contact opgenomen met Kent in Engeland zelf.
    Vandaag mailtje van de Belgische afdeling gehad dat je eerst eigenlijk toestemming moet hebben van de leverancier (AWW in ons geval). AWW kan het als beschadiging zien enz enz. Maar als ik toestemming heb van AWW en AWW kan me geen probe leveren, dan kan ik eventueel met terug contact opnemen voor de levering van een probe. Kostprijs : 20 euro. Niet te duur naar mijn mening, maar natuurlijk nog altijd duurder dan een sensor van 2 euro. Maar bij Conrad is het ook nog altijd bijna 17 euro + verzendkosten.

    Een andere mogelijke leverancier die ze doorgeven is http://www.bitsbytes.be in Hasselt.

    Dus ik wacht even AWW af en kijk nog even de kat uit de boom. Een beetje een lang verhaal, maar ik hoop dat de bezoekers van je site er ook mee geholpen zijn.

    Ik zal proberen om je op de hoogte houden van het verdere verloop.

    Joost

  13. Dag Joost,

    interessant, ik had er eigenlijk niet aan gedacht om contact op te nemen met de fabrikant 🙂

    Het in het artikel genoemde sensortype is inderdaad obsolete, maar volgens mij is het vervangen door het model A3214 met Farnell ordernummer 1791389.

    Succes met je experiment!
    Lieven.

  14. Joost, blijf weg van de sensor van AWW. Ik heb deze een tijdje gehad, en na een paar maanden is die niet meer betrouwbaar. Het is trouwens een gewoon reed kontact. Ik heb deze dan zelf vervangen door de Allegro Hall effect sensor, en sindsdien geen pulse meer gemist.
    Groetjes,
    Eric

  15. Hallo,

    Interessante website, maar ik ben niet zo een elektronica specialist. Als ik een PLC heb met analoge ingang, zou ik dan die Hall sensor niet rechtstreeks op de PLC kunnen hangen en dan een counter programmeren ?
    Of kan ik met het kant-en-klare Arduino circuit ook een netwerk-uitleesbaar register kunnen maken ?

    mvg,
    Geert

  16. Hoi Geert,

    dat mag gerust ook een digitale ingang zijn hoor. De Hall sensor levert je een digitale puls per keer dat de magneet passeert, als je daar een counter aan hangt op je PLC die trigger op de edge van de sensor ben je vertrokken!
    Een Arduino is zeker ook een optie. Maar voor die prijs schaf je jezelf dan beter een Flukso-meter aan, daar heb je dan geen programmeer-werk aan (http://www.flukso.net)

    Groeten,
    Lieven.

  17. Ik heb zelf mijn watermeter uitgelezen met een zelfbouw mbus converter. Deze levert een XML bestand met daarin alle gegevens die vervolgens in perl/php in een grafiek wordt omgezet. het voordeel is dat ik maar een converter nodig heb voor water/gas. nadeel per meter (water/gas) moet ik een uitlees adapter erop zetten (www.itron.com)
    maar voor diegene die geintresseerd is ik krijg de volgende gegevens die in perl (XML::parser) worden ingelezen in een mysql database waar je alles mekan doen:

    /opt/program$ mbus-tcp-request-data 10.0.0.61 5001 0

    90144432
    ACW
    20
    Water
    6
    00
    0000

    Instantaneous value
    Fabrication number
    90144432

    Instantaneous value
    cust. ID
    0A10612345

    Instantaneous value
    Time Point (time & date)
    295047210

    Instantaneous value
    bat. time
    3303

    Instantaneous value
    Volume (m m^3)
    11

    Instantaneous value
    Volume (m m^3)
    0

    Instantaneous value
    Volume (m m^3)
    11

    Manufacturer specific

  18. Hoi Lieven,

    Ter info: chrome en xport is geen goede combinatie. Ik ben moeten overschakelen op firefox dat leek wel te werken,
    In chrome kan je wel de settings veranderen van de xport, maar opslaan lijkt niet te lukken.
    OS: MAC OS 10.6

    Roeland

  19. Als er nog mensen zijn die op zoek zijn naar de Hall sensoren waarover in deze post sprake is: ik heb een webshop opgezet waar je ze kan kopen.

  20. Met mijn water- en gasmeter kan ik niet werken met een externe detectie zoals een hall-sensor; blijkbaar komt er geen of te weinig magneetveld naar buiten.
    Ook is er geen cijferwieltje met een opvallend punt dat ik zou kunnen detecteren met bvb een IR-sensor.
    Zou er een sensor te vinden zijn die de kleine streepjes op een cijferwieltje kan lezen?
    Voor elektriciteit heb ik reeds een draadloos systeem (ecowatt 850), dat echter slechts per uur de verbruikte kWH opslaat. Het signaal van de meetsonde wordt echter om de 6 seconden doorgestraald naar de ontvanger.
    Iemand een idee om dit signaal te kunnen capteren met eventueel een self-made ontvanger om dit dan verder te bewerken naar iets bruikbaars (database vullen met ethernetkaart zoals arduino en dan kan ik wel verder)?
    Dank voor ideeën.

  21. Hallo Lieve,

    ik heb ongeveer dezelfde infrastructuur (voor watermeting) als jou.
    Met een Hall sensor meet ik op dezelfde type watermeter de pulsen (via interrupts op een jeenode-arduino die ik dan doorstuur naar een Beaglebone met een perl deamon die een database opvult en grafieken publiceert).

    Eigenaardig is dat 1 puls ongeveer 0.7 liter is (gem gemeten over 9000 l water).
    Als ik enkele metingen uitzet van de echte watermeter, tegenover de gemeten pulsen bv.
    meting teller genormal teller HA l water/puls

    meting “teller” “pulsen” “aantal l water/puls”

    9/8/2012 0 0
    18/8/2012 2855.93 3551 0.804260772
    5/9/2012 6664.43 9166 0.727081606
    12/9/2012 8213.23 12010 0.683865945

    Zie je dat mijn metingen precies soms afwijken. De laatste kolom geeft het aantal liter/pulse.

    Heb jij iets gelijkaardigs ervaren ? Enig idee wat de oorzaak kan zijn ?

    Alvast enorm bedankt,
    Jeroen.

  22. Hallo Jeroen,

    hmm, dat is vreemd. Welke sensor gebruik je precies? Zou het kunnen dat hij soms 2x triggert terwijl er maar 1 echte puls geweest is doordat het een ander type is? Heb je hem op dezelfde plaats gemonteerd als ik?

    Als de watermeter dezelfde is als de mijne zou je elke halve liter een puls moeten krijgen.

    Vriendelijke groeten,
    Lieven.

  23. Dag Lieven,

    ik gebruik de A1120EUA-T hall sensor.

    Het rare is dat de ratio liter/pulse over enkele meetperiodes niet constant blijft (en gaat hier toch over 20 m3 verbruik over de 3 periodes:
    18/8/2012 0.804260772
    5/9/2012 0.727081606
    12/9/2012 0.683865945

    Heb je de sensor op een bepaalde manier in de watermeter gestoken, speciaal gericht of zo , want dit kan ik niet zien op de foto ?

    Heb jij bij je eigen installatie als eens een ijking gedaan over meedere periodes. Blijft bij jou de liter/pulse steeds op 0,5 ?

    Alvast bedankt,
    jeroen

  24. Dag Lieven,
    heb je al eens tijd gehad om mijn vorige vraag te bekijken.

    Alvast bedankt,
    Jeroen

  25. Hallo Jeroen,

    oeps, je vorige berichtje heb ik gemist blijkbaar, bedankt voor de reminder 🙂

    Ik heb de datasheet van de sensor die jij gebruikt eens bekeken: jouw sensor is enkel gevoelig voor de zuidpool van een magneet, terwijl deze die ik gebruik gevoelig is voor beide zijden.

    Wat we eerst zouden moeten te weten komen om dit de troubleshooten: mist jouw sensor pulsen, of telt hij er teveel? Ik zou denken dat je met een sensor die maar gevowelig is aan 1 kant van de magneet je maar 1 puls per liter zou mogen tellen. Ik tel er in mijn watermeter 2 per liter.

    Wat het ijken betreft: nee, dat heb ik nog niet gedaan. Maar ik hou wel het totale verbruik per dag in het oog zoals de monitor me weergeeft en als ik dat vergelijk met ons jaarverbruik dan lijkt dat te kloppen. Ik zal het eens in het oog houden.

    Mijn sensor zit met de gevoelige kant naar het midden van de meter in de meetopening.

    Vriendelijke groeten,
    Lieven.