Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:meters:water:wasserzaehler_ohne_s0

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
hardware:channels:meters:water:wasserzaehler_ohne_s0 [2018/01/15 18:43] – [Arduino] info gelöscht jauhardware:channels:meters:water:wasserzaehler_ohne_s0 [2021/01/25 21:48] (aktuell) – interne Links repariert jau
Zeile 1: Zeile 1:
-====== Mechanischen Wasserzähler über Impulse auslesen ======+====== Mechanischen Wasserzähler auslesen ====== 
 + 
 +===== Ansatz 1: Text-/Mustererkennung ===== 
 + 
 +**Idee:** Die Ziffern und Rädchen des Wasserzählers über eine Text-/Mustererkennung auslesen und bereitstellen.\\ 
 +**Vorteil:** Auslesen des definierten Wertes des Wasserzählers mit geringen Kosten\\ 
 +**Nachteil:** Für die Erkennung benötigt der ESP32 ~3 Minuten Rechenzeit, sodass die Werte nicht kontinuierlich, sondern max. im 3-Minuten-Rhytmus bereitgestellt werden\\ 
 +{{https://raw.githubusercontent.com/jomjol/AI-on-the-edge-device/master/images/idea.jpg?600x184}} 
 +==== Hardware ==== 
 + 
 +Folgende Hardware (Gesamtkosten ~15€) wird benötigt: 
 +  * ESP32-CAM WiFi 
 +  * USB zu TTL UART Serial Converter zum Download des ESP32 
 +  * Stromversorgung des ESP32, z.B. über USB Breakout-Modul und USB-Netzteil 
 + 
 +==== Software ==== 
 + 
 +Die Idee und Software stammt von Jomjol - die Software und eine Anleitung sind hier hinterlegt: https://github.com/jomjol/AI-on-the-edge-device/wiki 
 +  * Für den ersten Download empfehle ich folgende Schaltung: https://www.fambach.net/esp32-cam-modul/ 
 +  * Bei Nichterkennung des Geräts: Gerätemanager -> Benötigte Treiber ggf. über optionale Windows Updates installieren 
 +  * Bei Verbindungsproblemen -> USB-TTL/UART-Schnittstelle anhängen und PC neu starten 
 + 
 +==== vzlogger-Integration ==== 
 + 
 +Hier der Code für die vzlogger.conf zum Abholen und Verknüpfen der Daten: 
 +<code> 
 +
 +  "enabled" : true, 
 +  "interval" : 180, 
 +  "channels" : [{ 
 +    "uuid": "UUID_FRONTEND", 
 +    "middleware" : "http://localhost/middleware.php", 
 +    "identifier" : "" 
 +    }], 
 +  "protocol" : "exec", 
 +  "command" : "curl -s http://IP-ADDRESS_ESP/setPreValue.html" 
 +
 +</code> 
 + 
 +Folgende Parameter müssen im Code ersetzt werden: 
 +  * UUID_FRONTEND: UUID des Kanals aus dem Frontend 
 +  * IP-ADDRESS_ESP: IP-Adresse des ESP32 zum Abrufen des aktuellen Werts 
 + 
 +Der Parameter 'interval' ist auf 180s / 3min gesetzt und kann auf die jeweilige Aktualisierungszeit des ESP32 angepasst werden. 
 + 
 + 
 +====Ansatz 2: Laser =====
  
 Idee: Das kleine Sternrad des Wasserzählers mit einem Laser anvisieren und die Reflexionen mit Photodiode und Arduino-Mikrocontroller auswerten. Idee: Das kleine Sternrad des Wasserzählers mit einem Laser anvisieren und die Reflexionen mit Photodiode und Arduino-Mikrocontroller auswerten.
  
-===== Hardware =====+==== Hardware ====
  
 <note important>Ein roter Laser mit einer Strahlungsleistung von 5mW entspricht der Laserklasse 3R. Die zugängliche Laserstrahlung liegt im Wellenlängenbereich von 302,5 nm bis 10^6 nm und **ist gefährlich für das Auge**.\\ Sicherheitsmaßnahmen:\\ Niemals direkt in den Strahlengang blicken.\\ Im Laserbereich sind gut reflektierende Flächen zu vermeiden.\\ Vorgeschriebene Laserschutzbrillen unbedingt tragen.</note> <note important>Ein roter Laser mit einer Strahlungsleistung von 5mW entspricht der Laserklasse 3R. Die zugängliche Laserstrahlung liegt im Wellenlängenbereich von 302,5 nm bis 10^6 nm und **ist gefährlich für das Auge**.\\ Sicherheitsmaßnahmen:\\ Niemals direkt in den Strahlengang blicken.\\ Im Laserbereich sind gut reflektierende Flächen zu vermeiden.\\ Vorgeschriebene Laserschutzbrillen unbedingt tragen.</note>
Zeile 35: Zeile 81:
 <note important>Fremdlicht beeinflusst das Signal der Photodiode enorm. Sobald die Justierung einigermaßen passt, den Aufbau am besten abdecken.</note> <note important>Fremdlicht beeinflusst das Signal der Photodiode enorm. Sobald die Justierung einigermaßen passt, den Aufbau am besten abdecken.</note>
  
-===== Über Script in die Datenbank =====+==== Über Script in die Datenbank ====
  
 Für Gas- und Wasserzähler, Eintrag per php direkt in die Datenbank. Für Gas- und Wasserzähler, Eintrag per php direkt in die Datenbank.
  
-==== Arduino ====+=== Arduino ===
  
 Das ist der Code auf dem Arduino. Die Idee ist die Differenz zwischen dem Tal und dem Berg bei dem analogen Sensor als Trigger zu verwenden Das ist der Code auf dem Arduino. Die Idee ist die Differenz zwischen dem Tal und dem Berg bei dem analogen Sensor als Trigger zu verwenden
Zeile 136: Zeile 182:
 </code> </code>
  
-==== Script zur Datenübernahme ====+=== Script zur Datenübernahme ===
  
 Der Code auf der PC/Raspberry-Seite: Der Code auf der PC/Raspberry-Seite:
Zeile 295: Zeile 341:
 <note tip>Oder den "Serial Plotter" der Entwicklungsumgebung verwenden.</note> <note tip>Oder den "Serial Plotter" der Entwicklungsumgebung verwenden.</note>
  
-===== Über vzlogger an die Middleware =====+==== Über vzlogger an die Middleware ====
  
 Für **nur einen** Wasserzähler, Erfassung der Impulse über USB-Schnittstelle und vzlogger. Datenbank kann ausgelagert sein. Für **nur einen** Wasserzähler, Erfassung der Impulse über USB-Schnittstelle und vzlogger. Datenbank kann ausgelagert sein.
  
-==== Arduino ====+=== Arduino ===
  
 Hier der Code für den Arduino. Verkürzte Version von oben, weil nur eine Diode ausgewertet wird und die Impulse im Arduino nicht gezählt werden. Hier der Code für den Arduino. Verkürzte Version von oben, weil nur eine Diode ausgewertet wird und die Impulse im Arduino nicht gezählt werden.
Zeile 366: Zeile 412:
 Die Differenz zwischen Hell und Dunkel muss für dieses Code-Beispiel mindestens 200 betragen, sonst wird kein Impuls erzeugt.  Die Differenz zwischen Hell und Dunkel muss für dieses Code-Beispiel mindestens 200 betragen, sonst wird kein Impuls erzeugt. 
  
-==== Frontend ====+=== Frontend ===
  
 Kanal erstellen als Wassermengenzähler mit einer Auflösung von 60 (Impulse/l, siehe Berechnung im Code) und Stil=steps. UUID notieren. Kanal erstellen als Wassermengenzähler mit einer Auflösung von 60 (Impulse/l, siehe Berechnung im Code) und Stil=steps. UUID notieren.
  
-==== Beispielkonfiguration ===+=== Beispielkonfiguration ===
 Exemplarische /etc/vzlogger.conf, Element der Aufzählung "meters": []: Exemplarische /etc/vzlogger.conf, Element der Aufzählung "meters": []:
- +<code base vzlogger.conf>
-<code>+
     {     {
             // Water as S0 meter             // Water as S0 meter
  
             "enabled": true,                // disabled meters will be ignored (default)             "enabled": true,                // disabled meters will be ignored (default)
-            "skip": true,                   // errors when opening meter may be ignored if enabled+            "allowskip": true,                   // errors when opening meter may be ignored if enabled
             "protocol": "s0",               // meter protocol, see 'vzlogger -h' for full list             "protocol": "s0",               // meter protocol, see 'vzlogger -h' for full list
             "device": "/dev/ttyUSB0",       // meter device             "device": "/dev/ttyUSB0",       // meter device
Zeile 398: Zeile 442:
 </code> </code>
  
 +===== Ansatz 3: grüne LED und Fototransistor =====
 +
 +Im [[https://homematic-forum.de/forum/viewtopic.php?t=23744|Homematic-Forum]] wird ein Ansatz beschrieben, bei dem man den roten Ein-Liter-Zeiger des Wasserzählers zur Kontrastverstärkung mit einer grünen LED anleuchtet, die Helligkeitsunterschiede mit einem Fototransistor auffängt und mit einem modifizierten TCRT500 (das ist eine fertige, justierbare Baugruppe, eigentlich für Reflexlichtschranken) digital aufbereitet.
 +
 +Beim Nachbau hat es sich gezeigt, dass es u.a. auf die Helligkeit der verwendeten LED ankommt. Die zuerst beschafft LED war nicht hell genug, um den Fototransistor selbst bei direkter Belichtung durchzusteuern. Mit der nachbeschafften Nichia NSPG300D gelang der Betrieb dann auf Anhieb.
 +
 +Wie in der Original-Anleitung beschrieben, ist die Justage der Lichtschranke auf dem Wasserzähler sehr fummelig. Die Fixierung mit dem Muttern-und-Epoxidharz-Trick gelang nicht. Nach dem Nachweis der theoretischen Machbarkeit habe ich dann aufgegeben und mir den alternativ genannten [[https://www.stall.biz/project/intelligenter-impulsgeber-w-mit-s0-schnittstelle-zum-nachruesten-fuer-konventionelle-wasserzaehler|Impulsgeber mit S0-Schnittstelle]] bestellt, der auch einen 3d-gedruckten Montageträger zum Aufsetzen auf den Wasserzähler beinhaltet.
 +
 +Dieser Impulsgenerator ließ sich dann einfach aufbauen und funktioniert in der Tat viel besser als die einfache Schaltung. Ob das an der Verwendung eines Mikrocontrollers oder an dem mit Linse fokussierten Lichtstrahl der LED liegt, ist unklar. Die Montage auf dem Wasserzähler und die Justage war jedenfalls in wenigen Minuten erledigt. Zum Schutz von Fremdlicht habe ich ein HT-Rohr mit Deckel über den Wasserzähler gestülpt.
 +
 +Nach Lektüre des Artikels über [[:hardware:controllers:s0-an-usb|S0-Schnittstelle am USB]] ist mir aufgefallen, dass die dort aufgebaute Schaltung dem Ausgangsteil des STALL-Impulsgebers nicht unähnlich ist und habe mir den Aufbau dieser Schaltung gespart. Statt dessen habe ich
 +  - Einen USB-to-Serial-Adapter mit extra herausgeführtem Vcc-Pin aus der Schublade geholt
 +  - diesen gleich zur Spannungsversorgung des STALL-Impulsgebers verwendet
 +
 +{{:hardware:channels:meters:water:screenshot_20190602_162649.png?direct&400|}}
 +
 +Die Idee ist wie bei der Schaltung aus [[:hardware:controllers:s0-an-usb|S0-Schnittstelle am USB,]] dass die Serielle Schnittstelle +5V sieht, wenn der Optokoppler hochohmig ist und von diesem beim Durchschalten des Impulsgebers gegen Masse gezogen wird. Die vzlogger-Konfiguration aus [[:hardware:controllers:s0-an-usb|S0-Schnittstelle am USB]] hat dann auf Anhieb funktioniert. Bei meiner Installation habe ich noch ca 7 Meter KNX-Leitung zwischen dem USB-to-Serial-Adapter und dem Impulsgeber.
 +
 +<code>
 +"meters" : [{
 +        "protocol" : "s0",
 +        "enabled" : true,
 +        "device" : "/dev/USBserialWasser",
 +        "aggtime" : -1, 
 +        "aggfixedinterval" : false,
 +        "channels": [{
 +                "uuid" : "fa6c4b30-8303-11e9-a746-5fe24f8ae232",
 +                "middleware" : "http://middleware.example/",
 +                "identifier" : "Impulse",
 +                "aggmode" : "none",
 +                }]
 +        }
 +]}
 +</code>
 +
 +{{:hardware:channels:meters:water:screenshot_20190602_142248.png?direct&400|}}
 +
 +So besonders gut scheint die Middleware mit den groben Impulsen (1 Impuls pro Liter) und dem oft stundenlangen Ruhen des Messwertes nicht klarzukommen; besonders bei kurzfristigem Verbrauch (z.B. Toilettenspülung) bleibt oft ein hoher Momentanverbrauch in der Tabelle stehen und der Strich in der Grafik geht erst in einer größeren Zoomstufe oder nach etlicher Zeit bis auf Null zurück. In der langfristigen Betrachtung (z.B. die Tagesgrafik) scheint das aber OK zu sein.
 +
 +{{:hardware:channels:meters:water:screenshot_20190602_143056.png?direct&400|}}
 +
 +{{:hardware:channels:meters:water:screenshot_20190602_143112.png?direct&400|}}
 +
 +===== Ansatz 4: 3D Druck Optik und OPT101 =====
 +Ich hatte den Laser-Ansatz für Jahre in Gebrauch. Abgesehen von den Sicherheitsproblemen hatte ich nach ein paar Jahren Algen im Wasserzähler.
 +Daher die Idee auch mit grüner LED zu arbeiten. Da 3D-Drucker vorhanden habe ich eine Halterung für eine Linse entworfen, deren Fokuspunkt direkt auf dem Rad liegt.
 +https://www.thingiverse.com/thing:4151977
 +Impulse werden mit einem OPT101 Chip (intgrierter Verstärker) abgenommen.
 +{{:hardware:channels:meters:water:featured_preview_halterung_linse4.png?400|}}
hardware/channels/meters/water/wasserzaehler_ohne_s0.1516038236.txt.gz · Zuletzt geändert: 2018/01/15 18:43 von jau