FHEM – Wasserzähler auslesen mit Hilfe von MySensors

Wasseruhr mit metallischen Halbmond
Wasseruhr mit metallischen Halbmond (Abb.1)

Wasserzähler die mit einem metallischen Messrad (Halbmond aus Metall) ausgestattet sind (Abb. 1), können mit Hilfe eines induktiven Näherungssensor (Abb. 2) ausgelesen werden. Dabei wird beim Erkennen eines metallischen Objektes ein Reedkontakt im inneren des Sensors geschlossen. Diesen Implus kann man zum Beispiel mit Hilfe von MySenors.org „WaterMeter – Sketch“ ausgewertet werden und nach FHEM übertragen werden. Das setzt noch zusätzliche Hardware voraus, wie den notwendigen Gateway. Weiterhin ist MySensors fester Bestandteil in FHEM.

Bei einem Qn 2,5 (2,5 m3/h) Wasserzähler entspricht ein Impuls 1 Liter. Die Erkennungsrate beträgt nahezu 100 %, wenn der Sensor durch etwas probieren ausgerichtet wurden ist. Dabei sollte der Sensorkopf möglichst den gesammten Halbmond abdecken können.

So ein selbstgebauter Sensor kostet ohne den Anteil der MySensor-Komponeten etwa 12 €. Ein fertiger Sensor zum reinen Erkennen einer Umdrehung der Scheibe würde um die 60 € kosten.

induktiver Näherungssensor
induktiver Näherungssensor (Abb. 2)

Meine Zutaten:
MySensors.org Standardsensorverkabelung und Hardware (Sensornode)
Induktiver Näherungssensor (LJ12A3-4-Z/BY PNP NO) für den Wasserzähler (12V – 36 V) ~ 4 €
(dies ist ein Sensor für 4mm Abstandserkennung, wenn das Glas dicker ist einen mir 8mm nehmen)
12 V Reed Relais (Meder SIL12-1A72-71D Relais 12V 1xEIN 1000) ~ 2 €
Step Up für 5 V auf 12 V (DC-DC XL6009) für Spannungsversorgung für den induktiven Näherungssensor ~ 2 €
– Winkel für Wasserzähler ~ 2 €
– Rohrschelle für Wasserzähler ~ 2 €

Zutaten WaterMeter
Zutaten WaterMeter (Näherungssensor, nano, StepUp, NRF24L01+, Winkel, Rohrschelle, Abzweigdose)

Einfache Montage
Wie oben erwähnt, muss der Sensor exakt positioniert werden. Dafür eignet sich ein Winkel mit variabler Befestigung (Schiene). Der Winkel wir mit Hilfe einer passenden Rohrschelle am Zähler befestigt. Ein Vorteil ist, das die gesamte Montage rückstandslos entfernbar ist.

Elektrischer Anteil
Der Sensor kann erst mit einer Spannung von 12 Volt betrieben werden. Ein Arduino Nano hingegen wird mit 5 Volt versorgt und die Eingänge sind maximal bis 5 Volt tolerant.

Also muss ein Step-Up die Spannung für den Sensor anheben und über ein Reed-Relay (12 Volt) den Sensor vom Arduino isolieren. Das bedeutet, das ein Eingangspin auf Ground geschaltet wird, sobald der Sensor ein Objekt erkannt hat.

Schaltplan Watermeter
Schaltplan Watermeter (schemenhaft)

 

montierter induktiver Näherungssensor
montierter induktiver Näherungssensor

Mein modifizierter Beispiel Sketch für den Wasserzähler liegt auf GitHub (WaterMeterPulseSensor on GitHub).

 

Hier noch zwei Bilder von der Elektronik. 🙂

 

Fertig zusammengebaut
Fertig zusammengebaut

 

Fertig verpackt
Fertig verpackt

31 thoughts on “FHEM – Wasserzähler auslesen mit Hilfe von MySensors

  1. Es lässt sich auch ein Wasserzähler mit Reedkontakt verwenden. Parallel zum Reedkontakt ein 0,1 bis 0,47 uF Kondensator schalten. Original Reedkontakte gibt es zwischen 40 und 130 Euro. Ein Fenster-Reedkontakt kostet ca 3 Euro und lässt sich mit der Feile etwas anpassen.
    Auf keinen Fall versuchen Kommastellen mit Float zu rechnen. Ich habe es so gelöst das in einem Byte von 0 – 100 die Kommastellen gezählt werden und dann in einem Long (4 Byte breit) die ganzen m3 gezählt werden.
    Dadurch gibt es keine Kommafehler mehr.
    Ich habe am ATMega328 ein I2C Display zur Anzeige. Der IC hat ja auch EEPROM um den Zählerstand bei Stromausfall zu speichern. Das EEPROM ist Byte-weise organisiert.
    Zur Stromversorgung reicht ein kleines 5V Netzteil von 500mA.

  2. Hallo,
    beim kompilieren deines sketches mit der Arduino IDE 1.8.9 kommt folgende Fehlermeldung

    Arduino: 1.8.9 (Linux), Board: „Arduino Nano, ATmega328P (Old Bootloader)“

    sketch_jun28c:32:1: error: ‚MySensor‘ does not name a type
    MySensor gw;
    ^
    /home/pi/Arduino/sketch_jun28c/sketch_jun28c.ino: In function ‚void setup()‘:
    sketch_jun28c:65:3: error: ‚gw‘ was not declared in this scope
    gw.begin(incomingMessage);
    ^
    /home/pi/Arduino/sketch_jun28c/sketch_jun28c.ino: In function ‚void loop()‘:
    sketch_jun28c:83:3: error: ‚gw‘ was not declared in this scope
    gw.process();
    ^
    exit status 1
    ‚MySensor‘ does not name a type

    Dieser Bericht wäre detaillierter, wenn die Option
    „Ausführliche Ausgabe während der Kompilierung“
    in Datei -> Voreinstellungen aktiviert wäre.
    Könntest du deinen Sketch daraufhin mal checken?

    Vielen Dank
    LG Rudi

    1. Hallo Rudi,

      das sieht nach nicht vollstädnig eingebundener MySensors Bibliothek aus. Der Sktech lässt sich mit IDE 1.8.9 erfolgreich übersetzen. Ich nutze sogar noch die Lib Version 1.4.1.

      Verschiebe die .cpp und .h Dateien nach …\Arduino\libraries\MySensors oder setze den Path in der IDE dorthin.

      Hier gibt es noch zusätzliche Informationen:
      https://www.arduino.cc/en/Guide/Libraries

      Viele Grüße

  3. Hallo,
    ich nutze die akguelle Arduino IDE. Beim testen deines originalen Sketches kommen Fehler-Meldungen.
    Könntest du den Sketch auf die aktuelle arduino IDE hin mal aktuell maachen?

    Das wäre ganz toll.
    LG Rudi

  4. Die Schaltung ist eigentlich cool und simple. Ich frage mich nur, ob man das Reed-Relais nicht noch umgehen kann, indem der Hallsensor mit dem Ausgang direkt an den Arduino-input gelegt wird?
    Würde das auch klappen?

  5. Hallo,

    Vielen Dank für die super Anleitung.

    Es gibt für den induktiven Näherungsschalt​er diverse Modelle NPN – NO / PNP – NO / NPN – NC / PNP – NC.
    Welche Variante muss benutzt werden für diesen Aufbau?

    Vielen Dank

      1. Hallo,

        Vielen Dank für deine schnelle Rückmeldung und nochmals danke dafür, dass du deine Ideen hier zur Verfügung stellst.
        Bei mir ist der Wasserzähler heute in den Testbetrieb gegangen!

        Gruß Patrick

  6. Servus,

    versuche das Ganze gerade zu vertehen. Ich habe zwar (fast) keine Ahnung, aber irgendwas zwischen dem Foto und dem Schema passt meiner Meinnung nach nicht??? (lasse mich natürlich gerne eines Besseren behleren).

    …also wenn ich die Bilder vergleiche, dann müsste doch das Schema so aussehen:
    – Sensor + (rot) müsste NUR an StepUp + gehen (nicht auch noch an ReedRelais +)
    – Sensor out(gelb/grün) müsste im Schema an ReedRelais + gehen (nicht -)
    – Sensor – (schwarz) an – (auf dem Foto an – StepUp) gehen

    oder seh ich das falsch?

    Gruß

  7. Kann mir jemand einen Tipp geben, wo ich einen passenden Winkel bekomme? Die Winkel im Baumarkt haben meist kein Langloch, und die Löcher sind zu klein im Durchmesser…

  8. Hallo zusammen. Ich bin neu hier und finde die Idee, den Wasserzähler per FHEM abzulesen sehr spannend.
    Nun habe ich Homematic und möchte wissen, ob es hier auch geht.
    Ich denke, es wäre möglich, zusätzlich noch einen ESP8266 dranzuhängen, um die Systemvariablen per WLAN zu füllen. CuXD ist bereits installiert und arbeitet.
    Weiter habe ich leider auch keinen „Halbmond“ sondern nur einen Zeiger für die Liter-Anzeige.
    Der ist aus Plastik.
    Ist das so machbar?

  9. Habe alles so verkabelt wie angegeben, an einem GPIO Port meines Rspi 3 angeschlossen un die Geschichte mit FHEM ausgelesen. So weit so gut. Leider musste ich feststellen, das der hier vorgeschlagene Sensor zwar bei größeren metalischen Objekten gut fuktioniert, aber bei dem metallischen Halbmond der Wasseruhr nicht ausschlägt. Ich denke, das Glas der Wasseruhr ist zu dick oder am Halbmond ist nicht genug Metall um den Sensor zu beieindrucken. Kennst du vielleicht empfindlichere Nährungssensoren für Metall?

      1. Wie zuvor beschrieben, der Sensor mit einer Messtiefe von 8mm (LJ18A3-8-Z / BY) hats gebracht. Auch bei geringen Spannungen vollständige Messung. Wahrschinlich würden auch die 5V vom Pi reichen um eine Messung zu bekommen.

        1. Okay das ist doch sehr gut. Kannst Du die Zählerbezeichnung noch posten? Falls auch jemand den gleichen hat, dann sollte er gleich den für 8mm nehmen.

          Danke für Info.

    1. Was man noch machen kann, wenn der Sensor nicht triggert: mit einem kleinen Stückchen Alufolie (fingernagelgroß) den Bereich des metallischen Halbmonds überdecken, der Induktionseffekt der beiden Metallteile addiert sich dann und die Schaltschwelle wird etwas empfindlicher. Ist etwas fummelig, aber funktioniert bei mir jetzt zuverlässig.
      Ich hab mir außerdem das externe Reed-Relais gespart und mit einem hochohmigen Spannungsteiler den 12V Schaltpegel auf 5V gebracht.

  10. Hallo,

    würde die Sache gerne nachbauen, aber da ich kein größeren elektronischen Kenntnisse habe kannst du mir vielleicht weiterhelfen.
    – Beim Nährungssensor: welche der Adern ist was (ich vermute Blau-Sensor, Schwarz-Ground, Braun-Plus) Richtig?
    – Beim Reedrelais: Welche der 4 Pole sind was?
    – Beim Step-Up: Am Eingang liegen 5 V an und er gibt dann am Ausgang die 12 V aus. Richtig?

    Evtl. hast du ja noch ein Foto vom fertig verlötetem.

    Danke!

    1. Hallo,

      beim Näherunsgsensor ist Braun +, Blau = – und Schwarz der Sensor.
      Für das verlinkte Reed-Relais sind die Anschlüsse hier im Specifikationsdokument beschrieben.
      Bei dem verwendeten Step-Up sind 3 Volt – 35 Volt am Eingang möglich. Der Ausgang kann zw. 5 und 35 Volt eingestellt werden. Hier am Besten mit meinem Voltmeter die Spannung einstellen.

      Bilder habe ich im Beitrag ergänzt. 🙂

    1. Hi Jörg,

      hier die FHEM config für das Device inkl. Log und Plot.

      define WaterMeter MYSENSORS_DEVICE 100
      attr WaterMeter IODev MySensorsGateway
      attr WaterMeter fp_EnergieFloorPlan 357,891,3,floorplantext,Wasser
      attr WaterMeter mapReading_flow3 3 flow
      attr WaterMeter mapReading_value13 3 value1
      attr WaterMeter mapReading_volume3 3 volume
      attr WaterMeter mode node
      attr WaterMeter room Energie,Keller
      attr WaterMeter setReading_value13 1
      attr WaterMeter stateFormat volume3 m3, flow3 l/min, water l/h
      attr WaterMeter userReadings water:statVolume3 { SplittedStatisticReading("WaterMeter","statVolume3","Hour")*1000;; },floorplantext { ''.(SplittedStatisticReading("WaterMeter","statVolume3","Hour")*1000).' l/h
      '.(SplittedStatisticReading("WaterMeter","statVolume3","Day")*1000).' l/d
      '.(SplittedStatisticReading("WaterMeter","statVolume3","Month")*1000).' l/m
      '.(SplittedStatisticReading("WaterMeter","statVolume3","Year")*1000).' l/y' }
      attr WaterMeter version 1.4.1

      define FileLog_WaterMeter FileLog ./log/WaterMeter-%Y.log WaterMeter
      attr FileLog_WaterMeter group Keller
      attr FileLog_WaterMeter room Log

      define weblink90_WaterMeter SVG FileLog_WaterMeter:SVG_FileLog_WaterMeter_1:CURRENT
      attr weblink90_WaterMeter fp_EnergieFloorPlan 300,45,0,
      attr weblink90_WaterMeter label "Wasser Min $data{min1}, Max $data{max1}, Last $data{currval1} at ".ts2text($data{currdate1},"all")
      attr weblink90_WaterMeter room Energie,Keller,Plots

  11. Hallo,

    ich habe im FHEM Forum gelesen, das Du auch deinen Ferraris Stromzähler ausliest mit mysensors „abließt“.
    Bei meinem Aufbau (TCRT5000 und Energy Meter Sketch) Leider werden Die Pulse nicht richtig gezählt. Bei einer Umdrehung der Scheibe werden manchmal 2 Pulse gezählt und manchmal nur Einer. Hast Du einen Tip für mich? Hast du den Sketch Original (bis auf die Einstellungen) übernommen?

    Vielen Dank Marco

    1. Hallo Marco,

      ich habe den original Sketch angepasst. Zum einen, weil ich damit auch den Gaszähler auslese und bedingt durch den Ardunio nutze einen Ananlogeingang für den Sensor (Ardunio hat ständig mit USB Ladegerät Interrupts ausgelöst). Damit ich die Fehlimpulse minimieren kann, habe ich eine Messung der Werte am Pin beim erkennen und nicht erkennen der roten Markierung vorgenommen. Damit habe ich dann die obere und untere Grenze festgelegt. Im Sketch habe ich dann die Schwellwerterkennung implementiert. Seitdem habe ich kaum Abweichungen.

      https://github.com/matscher2004/MySensors/tree/master/EnergyMeterPulseSensor

      Gruß,
      Matscher

  12. Hallo Jarnsen,

    kannst Du am Sensor per Serial Console den output loggen? Dort sollte kein st=fail: auftauchen. Wenn nicht schauen wir weiter. Btw. ich habe noch gegen die MySenosrs API 1.4 gebaut. Bei FHEM habe ich auch noch kein Update der MySensors Module vollzogen. Momentan ist die 1.5 die aktuellste. Ich meine im FHEM Forum (http://forum.fhem.de/index.php/topic,26807.0.html) über Probleme was gelesen zu haben.

    Gruß,
    Matscher

  13. Hallo, habe es mit deinem Script nachgebaut aber anstelle Hallsensor nen TCRT5000 IR wie im orginal Projekt. Leider aktualisiert sich der flow und das volumen nicht. Kannst du mir helfen?? Benutze auch FHEM.

    THX Jarnsen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.