Hyperion und Webcam mit OCR

Antworten
Obendroben
Beiträge: 23
Registriert: Freitag 25. Juli 2014, 21:49

Hyperion und Webcam mit OCR

Beitrag von Obendroben » Sonntag 28. September 2014, 23:50

Wie andernorts schon versprochen möchte ich hier von meiner eher eigenwilligen Methode berichten mit der unser Zweiwege-Stromzähler, ein Bauer BSM-QD36A-001-1101-0000, über Hyperion als Datenlogger an den SA angeschlossen ist. Das ganze ist Stoff für mehrere Teile, ich will ja meine geneigten Leser auch eine Weile bei der Stange halten ;-)

Infos über diesen Zähler sind fast nicht existent (und eine der aktuell 7 Google-Fundstellen bin ich schon selber), aber jenseits der verplombten Anschlüsse hat er als Schnittstelle jedenfall nur ein Blinksignal mit 10000 Impulsen pro kWh. Dafür gibt's aber für Menschen ein Display welches alle paar Sekunden zwischen 3 verschiedenen mehrzeiligen Anzeigen wechselt, wobei jede Anzeige unterschiedlich lange verweilt. Der Thread "Erfassung Eigenverbrauch" hier im Forum brachte mich auf die Idee diese Anzeigen per Webcam zu erfassen und per OCR auszuwerten, das war zwar einiges an (durchaus spaßigem) Gefrickel, hat aber prima funktioniert.

Erstmal war eine Webcam nötig welche noch zwischen Zählerschrank-Türinnenseite und Display passt, es mußte also ein kurzes Modell sein welches sich auch im einige-cm-Abstand noch scharfstellen ließ. Meine Wahl fiel auf ein 8 Euro-Modell von LogiLink namens UA0072 (300K-Pixel, mehr braucht's nicht, für ein Bild bitte selber googeln). Diese Webcam hat auch noch eine abschaltbare LED-Beleuchtung, dank beleuchtetem Zähler-Display war aber zusätzliches Licht gar nicht nötig. Mit etwas roher Gewalt war dann auch bald der Klemmfuß ab, und ich durfte endlich wieder ganz offiziell mit Lego spielen um eine Halterung zu basteln:
Webcam.jpg
Von den 3 Anzeigen wurden nur zwei gebraucht ("Bezug" und "Lieferung"), die dritte zeigt nur kurz die Firmwareversion. Hier beide in halbierter Größe mit dem Originalbildausschnitt der Webcam, wie man sieht wäre etwas mehr Weitwinkel doch noch ganz nett gewesen...
Anzeigen.jpg
Die Webcam ist mit dem selben 6W Mini-PC von Intel verbunden der auch schon Hyperion und SA betreibt, der zusätzliche Stromverbrauch hält sich also sehr in Grenzen. Alle 15s wird dort ein Bild erfasst und verarbeitet, wobei es reine Glückssache ist welche Anzeige gerade erwischt wird, im Durchschnitt reicht es aber für ein Update von Bezugs- und Lieferungs-Zähler alle 1-2 Minuten.

Bevor man nun erfolgreich eine der existierenden Freeware-OCRs auf das Bild loslassen kann, muß dieses erstmal per Bildbearbeitung umfangreich vorbereitet werden, denn sowohl die verschiedenen Zeilen mit unterschiedlicher Schriftgröße und Grafikelementen als auch die pixelige Schrift selber sind Gift für eine halbwegs reibungslose Erkennung. Ich zerlege daher erstmal per Skript jedes Bild in Teilbilder und beackere diese mit einigen Bildbearbeitungs-Funktionen. Dafür braucht's natürlich skriptfähige Bildbearbeitungsprograme, ich setze IrfanView und ImageMagick für insgesamt 20 Bearbeitunsschritte pro Webcam-Bild ein, zusammengefasst sehen die Ergebnisse pro Teilbild in Originalgröße so aus:
Bildbearbeitung.jpg
So, das war's erstmal für heute, im nächsten Teil geht es dann um die eigentliche OCR und das Logging per Hyperion-Spezialversion :-)

bis demnächst,
Thomas

Roland
Beiträge: 214
Registriert: Montag 29. Oktober 2012, 18:19

Re: Hyperion und Webcam mit OCR

Beitrag von Roland » Montag 29. September 2014, 19:28

Hallo Thomas

Klasse Projekt! Mir als Legofan gefällt natürlich besonders die Halterung :mrgreen: 8-)
Freue mich schon auf die Fortsetzung :D

Obendroben
Beiträge: 23
Registriert: Freitag 25. Juli 2014, 21:49

Re: Hyperion und Webcam mit OCR

Beitrag von Obendroben » Mittwoch 1. Oktober 2014, 03:07

Dankeschön, Lego hat uns schon so einige Male geholfen, selbst unser Hausbau begann mit einem maßstabsgerechten Prototyp aus 4000 Teilen, nach diesem haben wir dann erst die Pläne gezeichnet :-D Diese Halterung hat übrigens insgesamt 5 Abstandshalter zum Zählergehäuse damit die Kamera immer exakt genau die gleiche Position zum Display hat und nicht schwingt wenn man z.B. die Tür öffnet oder das Kabel berührt.

Kommen wir zur OCR, also der Buchstaben- bzw. Ziffernerkennung in Bildern. Dafür gibt's meiner Meinung nach nur zwei ernstzunehmende kostenlose und skriptaugliche Kandidaten: Tesseract von Google ( https://code.google.com/p/tesseract-ocr/ ) und GOCR in Version 0.49 ( http://jocr.sourceforge.net/ ) oder 0.50 ( http://www.seeingwithsound.com/ocr.htm ). Auch wenn Tesseract die Entwicklermacht von Google hinter sich und bei Scans ganzer Textseiten vermutlich die Nase vorn hat: In meinem konkreten Fall machte ihm die Display-Schriftart und vor allem die 0 mit schrägem Balken schwere Probleme. Die beiden GOCR-Versionen sind zwar scheinbar eine ältere und neuere Version mit gleicher Syntax, aber innerlich offenbar recht verschieden, bei mir klappte die 0.49 besser. Im Vergleich zu Tesseract ist es einfach zu benutzen (keine Installation nötig) und man kann mit ihm eine kleine Datenbank problematischer Muster anlegen, das sollte man auch nutzen. Generell scheint eine Bildbearbeitung vor dem OCR-Einsatz zwingend nötig um pixelige Schrift in rundlicher geschwungene zu verwandeln. Im letzten Bild oben ergeben z.B. das linke Wort, der große Zählerstand, und die kleine Leistungsanzeige jeweils paarweise vor und nach Bildbearbeitung folgende OCR-Ergebnisse:

___t'__t-'_.___'1_
ieferun9

__.'"'____=__'_i_____=__''____,___'_:=''.'=_=_.08..
13955.08

t,___
_t,_^,^_
,__.,_•
0.392

Wie man sieht, man darf sich da von den ersten scheinbar Totalschaden-Ergebnissen nicht entmutigen lassen und muß beharrlich weitertüfteln... 8-)

In der weiteren Verarbeitung von Worten aus Buchstaben muß man fehlertolerant sein, je nach winzigen Unterschieden durch Bildrauschen ergibt z.B. das "ieferung" auch schon mal folgende Variationen: ieFerun9, ierefung, iererun9 etc. Ich benötige das Wort an der Stelle aber nur zu Unterscheidung ob die große Zahl der Bezug- oder Lieferung-Zählerstand ist, das kann man auch mit solchen Fehlern noch zuordnen.

Reine Zahlen sind nach der Bildbearbeitung etwas sicherer in der Erkennung, insbesondere der große Zählerstand ist nach Verkleinerung und Bearbeitung ja (wie oben zu sehen) schon sehr schön geschwungen. Die kleine Leistung-Zahl neigt da noch eher mal zu Fehlerkennungen, das sieht dann z.B. so aus: "0.3_2", solche Werte muß man in der weiteren Verarbeitung dann verwerfen. Generell neigt hier die kleine 4 manchmal zur 9 zu werden, da hab' ich noch Optimierungspotential und versuche derzeit in der weitern Verarbeitung solches per Plausibilitätskriterien wegzubügeln...

Soviel zum zweiten Teil, im nächsten kommen wir dann aber wirklich endlich mal zum Logging per Hyperion ;-)

bis demnächst,
Thomas

Obendroben
Beiträge: 23
Registriert: Freitag 25. Juli 2014, 21:49

Re: Hyperion und Webcam mit OCR

Beitrag von Obendroben » Donnerstag 2. Oktober 2014, 21:32

So, jetzt hätten wir also also in unregelmäßigen-weil-zufälligen Abständen die aktuellen Werte des Bezugs- und des Lieferungs-Zählers in Textform mit zwei Nachkommastellen, dazu jedesmal Watt-genau die aktuelle Leistung, wie kommt das alles nun in den SA? Hier hat Roland seinen Auftritt, er hat mir nämlich extra eine Hyperion-Beta gebaut welche einen Stromzähler in Form einer Datei statt einer Hardware-Schnittstelle auslesen und loggen kann. Ich aktualisiere einfach immer Zahlenwerte in der Datei wenn diese grade frisch reinkommen, und Hyperion loggt dann alles in seinem eigenen Rhythmus. Das ganze funktioniert prima, nochmals vielen Dank dafür an Roland :!: Obendrein hat er diese Beta noch um einen ebenso virtuellen dateibasierten Wechselrichter ergänzt, diese Funktion hab' ich noch gar nicht ausprobiert, das kommt aber bestimmt noch (z.B. wenn ich nächstes Jahr mal mit einer Wetterstation und anderen Sensoren anfange zu spielen)

Ein Problem gab es aber noch zu lösen, das Display hat nämlich kein Vorzeichen für die Flußrichtung der aktuellen Leistung, stattdessen gibt es rechts oben nur eine links- oder rechtsdrehende Animation welche auf einem Standbild rein gar nichts aussagt. In der Hyperion-Datei wird dagegen per Vorzeichen angegeben ob man Strom bezieht oder liefert, das ist ja nun auch eine nicht gerade unwichtige Information für einen PV-Betreiber ;-) Wenn sich wenigstens die beiden Zähler bei jeder Erfassung im Wert ändern würden, dann wäre das Vorzeichen einfach durch die Differenz der beiden Deltas bestimmbar. Bei 2 Nachkommastellen verändert sich der Zähler aber erst ab einer Dauerleistung von 600W in jeder Minute, bei deutlich geringer Leistung also entsprechend seltener. Die Lösung besteht daher in einem Schieberegister welches die Zählerwerte der letzten 12 Minuten verwaltet, darin betrachte ich unterschiedliche Zeiträume mit unterschiedlicher Gewichtung und kann mir so auch bei sehr geringer Leistung noch ein halbwegs klares Bild über die vermutliche Flußrichtung machen, und das bestimmt dann letztendlich das Vorzeichen für die Leistung.

Insgesamt finden so pro Standbild doch eine Menge Rechen- und Dateioperationen statt. Nun hat der Rechner als Disk zwar eine kleine SSD, aber auch diese leidet wenn ich jahrelang alle 15s diverse Zwischenbilder und andere Zwischenergebnisse speichere. Ich arbeite daher auf einer 100MB-Ramdisk welche beim Booten mit allem Nötigen versorgt wird, fast alle Dateioperation laufen dort ab, nur die eigentlichen Ergebnisse (also die Hyperion-Logs) landen direkt auf der echten Disk.

Im nächsten Teil geht es um virtuelle PV-Anlagen im SA, mir reicht nämlich die Auswertung bzw. Anzeige der Stromzählerdaten dort noch nicht aus, also gieße ich weitere Auswertungen in die Form von Hyperion-Logdateien fiktiver PV-Anlagen. Dazu gibt's dann auch wieder mehr Bilder... :-D

bis demnächst,
Thomas

Obendroben
Beiträge: 23
Registriert: Freitag 25. Juli 2014, 21:49

Re: Hyperion und Webcam mit OCR

Beitrag von Obendroben » Sonntag 5. Oktober 2014, 23:40

Und jetzt endlich das Finale, in Farbe und Bunt ;-)

SA kennt grundsätzlich Zweiwege-Stromzähler, lässt einen diese aber scheinbar (noch?) nicht getrennt auswerten. Stattdessen bekommt man eine Grafik folgender Art, wobei ich anfangs nicht verstanden hatte was genau nun die zusätzlichen Kurven eigentlich anzeigen, das wurde mir erst im Vergleich mit meinen selbst erzeugten klar. Erschwerend kam hinzu dass die Zahlen im Kasten "Energiebilanz" bei mir offensichtlich nicht stimmen konnten:
01_standard.png
Also mußten erstmal weitere eigene Auswertungen her, und zwar in Form von virtuellen PV-Anlagen (und samt deren gewohnten Summenkurven) welche scheinbar von nicht minder virtuellen Hyperions geloggt werden. In Wirklichkeit werden aber alle zusätzlichen Tagesdateien jeweils kurz nach Mitternacht aus den Gesamtdaten des Vortags der echten PV sowie der Stromzähler generiert, der Ertragswert dieser virtuellen PVs entspricht dabei immer dem jeweiligen Thema.

Als erstes wollte ich eine Sicht auf die zum Stromversorger gelieferte Energiemenge:
02_lieferung.png
Diese schreit natürlich geradezu danach mit den Daten der echten PV verglichen zu werden ;-)
03_pv-mit-lieferung.png
Wie man sich leicht vorstellen kann entspricht die Differenz dieser Kurven dem Eigenverbrauch. Leichte Abweichungen erklären sich u.a. mit der nicht so ganz synchronen Datenerfassung der Webcam+OCR-Zählerdaten zu den Wechselrichter-Daten, die Zähler hinken da gerne mal 1-2 Minuten hinterher, das gibt Dreckeffekte die ich wiederum u.a. durch Filtern und Glätten dämpfen, aber eben auch nicht ganz wegzaubern kann:
04_eigenverbrauch.png
Dann gibt's ja noch den Bezugszähler, der brachte gestern folgendes Bild:
05_bezug.png
(Oops, maximale Anzahl an Bildern erreicht, der Rest folgt sogleich:)

Obendroben
Beiträge: 23
Registriert: Freitag 25. Juli 2014, 21:49

Re: Hyperion und Webcam mit OCR

Beitrag von Obendroben » Sonntag 5. Oktober 2014, 23:54

Insbesondere der angeschrägte Block kurz nach Sonnenaufgang erklärt sich besser wenn man nun den bezogenen sowie selbst verbrauchten PV-Strom addiert, das ergibt dann den eigentlichen Gesamt-Stromverbrauch:
06_gesamtverbrauch.png
Um diese Kurve zu deuten muß man natürlich seine eigenen Stromverbraucher kennen (bzw. man kann sie damit gut kennenlernen), der jetzt halbwegs wagrechte Block mit Zackenkrone nach Sonnenaufgang ist z.B. die Wärmepumpe unserer Heizung, der konstante Grundverbrauch davor ist hauptsächlich der Lüfter der Lüftungsanlage (+ ein paar kleine Dauerläufer wie natürlich auch der Mini-PC zur PV-Datenerfassung). Jetzt erst war mir auch klar was die rote Original-Kurve im SA beim Stromzähler-WR D0-INOUT bedeutet, das ist genau dieser Gesamtstromverbrauch, nur (zumindest bei mir) mit falscher Summenkurve.

Überlagert man diese Kurve mit der PV bekommt man wieder was bekanntes, nämlich eine Grafik wie die Original-SA-Darstellung, nur gibt's jetzt zwei Summenkurven und man kann den Eigenverbrauch dank anderen Farben besser erkennen ;-)
07_pv-mit-gesamt.png
Ein Monatsvergleich von Lieferung und Bezug ist auch interessant, insbesondere die tägliche Differenz dieser Werte sagt einem schnell wie der Monat so gelaufen ist. Da SA aber natürlich keine negativen Zahlen darstellen kann (wozu auch, ist nun wirklich nicht sein Job) hab' ich diese Differenz in gleich 2 PVs gegossen welche nur zusammen in einer Monatsansicht Sinn machen, blau sind sozusagen negative Werte (also Tage an denen wir mehr Strom bezogen als geliefert haben):
09_deltas.png
Ebenfalls interessant ist der Vergleich von PV mit Eigenverbrauch (und ich werde mir wohl noch eine zusätzliche Kurve zur Eigenverbrauchsquote basteln):
10_pv-mit-eigenverbrauch.png
Last but not least, und weil wir auch ein wenig stolz darauf sind: Unser Rennen um die Frage "Haben wir eigentlich in Wirklichkeit ein Plusenergie-Haus?". Dazu gibt's zwei virtuelle 500kWp-Anlagen (zwecks anderer Skalierung der Grafik), diese zeigen die tägliche Differenz von Lieferzähler und Bezugszähler (die Summenkurve ist hier natürlich völlig sinnbefreit):
12_ueberschuss.png
Stand heute haben wir seit Baubeginn in 2012 über 2000 kWh mehr geliefert als bezogen, und da Heizung und Warmwasser per Wärmepumpe laufen und wir auch sonst nichts weiter verbrennen,ist das schon die gesamte Energiebilanz des Hauses samt seinen Bewohnern. Natürlich darf man dazu nur ganze Jahre betrachten, aber ich hoffe doch wir kommen aus 2014 noch mit einem leichten Plus raus :-D

bis demnächst,
Thomas

Roland
Beiträge: 214
Registriert: Montag 29. Oktober 2012, 18:19

Re: Hyperion und Webcam mit OCR

Beitrag von Roland » Montag 6. Oktober 2014, 10:06

Hallo Thomas

Hut ab kann ich da nur sagen! Klasse was du alles für Auswertungen hinzauberst :shock: War mir selber nicht bewusst für was sich Hyperion alles missbrauchen lässt :lol:

Obendroben
Beiträge: 23
Registriert: Freitag 25. Juli 2014, 21:49

Re: Hyperion und Webcam mit OCR

Beitrag von Obendroben » Dienstag 7. Oktober 2014, 20:36

Hallo Roland,

Dankeschön, hat Spaß gemacht damit rumzuspielen 8-) Besonders kurios finde ich ja selber die Benutzung des Hyperion-Formats um damit am Ende nur einen einzigen Wert pro Tag zu visualisieren, eine seltsame Eigenschaft von SA zwingt einen z.B. dafür vier Ertragszeilen zu generieren obwohl der eigentliche Wert nur in der letzten Zeile steckt.

drongo
Beiträge: 51
Registriert: Freitag 14. Februar 2014, 11:54

Re: Hyperion und Webcam mit OCR

Beitrag von drongo » Donnerstag 16. Oktober 2014, 16:14

:o
Boah!
Nette und informative Spielereien.
Zum Glück stimmt bei mir die Verbrauchs-Summenkurve. Mir würde es schlicht an technischem Sachverstand fehlen, das so nachzumachen.

Glückwunsch zum bewiesenen Plusenergiehaus!
Wir sind offenbar ganz ähnlich konfiguriert. PV mit Kostal-WR und Wärmepumpe. Habe außerdem noch solare WW-Bereitung dran, so dass die Wärmepumpe diesen Herbst noch nicht laufen musste. Die Bilanz sagt nach jetzt fast genau zwei Jahren 5000 kWh plus pro Jahr bedingt durch die milden Winter (kalkuliert waren 3500kWh).
Bin ganz zufrieden.

Viele Grüße!

Antworten