Im August 2016 habe ich begonnen ein Stromzähler-Modul für den Raspberry Pi zu erstellen. Die Idee dafür entstand im Solartechnik-Unterricht. Wir haben die Aufgabe bekommen, den Stromzähler täglich abzulesen. Bereits zu diesem Zeitpunkt fand ich es zu langweilig jeden Tag in den Keller zu rennen und den Stand abzulesen. Deshalb dachte ich mir: „Das muss doch anders gehen!“.
Als ich mich im Internet informiert habe, bin ich auf ein Design vom volkszaehler gestoßen. An diesem habe ich orientiert und den Schaltplan sowie die Platine entworfen.
Mit Hilfe eines optischen Sensors (Reflexlichtschranke) können die Helligkeitsunterschiede auf der rotierenden Alu-Scheibe eines Energiezählers erfasst werden.Dadurch wird der Unterschied der roten und silbernen Fläche des Ferraris-Zählers erkannt. Diese Daten (Wechsel von „0“ und „1“) können dann über die GPIO-Pins des Raspberry Pis ausgelesen werden.
Schaltplan
Die Erkennung der Rotation übernimmt das Bauteil CNY70. Der Transistor der Optischen Diode benötigt als Spannung 5V, das bedeutet das hinter der Diode noch eine Schaltung muss um von 5V auf 3V3 zu kommen, damit das Signal am Raspberry Pi ausgewertet werden kann. Diese Aufgabe übernimmt der Phototransistor CNY17. Zur Feinjustierung der Sensibilität der Optischen Diode, wird ein 25k Poti am OpAmp TCL271CP verwendet.
WICHTIG! Hier ist ein TLC271CP verbaut, dies ist ein Differenz Verstärker und ein Compartor. Hier gilt wenn Eingang A ein kleines bisschen größer ist als Eingang B gibt es einen Output!
Die Platine wurde geätzt und in ein Gehäuse eingebaut. Für die Platine hat ein 50x35x20mm ABS Gehäuse gereicht.
Probleme
Während der Installation, Programmierung und beim Bauen des Moduls bin ich auf ein paar ärgerliche Probleme gestoßen. Falls ihr ähnliche Probleme habt, solltet ihr den Lösungsansatz auf jeden Fall mal ausprobieren
- Der TLC271CP macht nicht das was er soll -> Falscher Baustein wurde geliefert
- Der Differenz Verstärker wurde heiß -> Verpolung
- Flanke stieg nur langsam -> Falscher GPIO Input benutzt (Keine I2C Schnittstelle verwenden!)
Backend
Das Backend ist in Python geschrieben. Grundlegend gibt es ein Script (pull.py) welches den wechselnden Zustand ausliest und die Werte alle 15 Minuten in eine MySQL-Datenbank schreibt.
Code ausschnitt:
try: while True: if GPIO.input(PIN) == TRIGGER_IF: if not changed: changed = True current_turn += 1 logging.debug(" => " + str(current_turn)) else : changed = False if time.time() >= until_time: insert_data(until_time, current_turn) logging.debug("In 15 Minutes => " + str(current_turn) + "t") time.sleep(1) until_time = get_next_15_min(datetime.datetime.now()) logging.debug("Next counting till => " + datetime.datetime.fromtimestamp(until_time).strftime("%Y-%m-%d %H:%M:%S") + "(" + str(until_time) + ")") current_turn = 0 time.sleep(INTERRUPT)
Alles weitere findet man auf GitHub.
https://github.com/Gurkengewuerz/smartmeter/tree/master/backend
Frontend
Das Frontend ist mit Hilfe von Bootstrap und jQuery responsive und dynamisch gestaltet worden.
https://github.com/Gurkengewuerz/smartmeter/tree/master/frontend
Installation
- Modul auf dem Stromzähler installieren (erfordert Geduld – Tipp: Panzerband ist dein bester Freund!)
- RaspberryPi mit NGINX/Apache, PHP, MySQL und Python 3 aufsetzten
- SQL File installieren
- Python Script laufen lassen
Herzlichen Dank! Das funktioniert sehr fluffig.
Jetzt muss ich das noch mit dem Gaszähler zum Laufen bringen.
🙂