Einleitung
Auch bei mir bestand der Bedarf nach einer Messmöglichkeit einer DC-Insel-Solaranlage.
Konkret für eine InselPVThermie-Anlage, welche in meinem Mietshaus den Warmwasserspeicher aufheizen soll.
Als Vermieter bin ich gesetzlich gezwungen, alle Primärenergie, die dem Haus zugeführt wird, zu erfassen und dem Abrechnungsunternehmen, zur Erstellung der jährlichen Heizkostenabrechnung, zu Verfügung zu stellen.
Ein geeichtes Messsystem ist hier nicht notwendig, da die Solarenergie den Mietern kostenlos zur Verfügung gestellt wird.
Die Anforderungen an das Messsystem sind sehr wohl: hohe Linearität und einen Gesamt-Messfehler von unter 5%.
Shelly Öko-System
Meine komplettes Heizungssystem wird mit Shellys überwacht.
Die zeitliche Auflösung beträgt 1 Minute. D.h., jede Minute übertragen die Shellys ihre Daten per http-Request an ein Hosting-Paket im Internet.
Auch das DC-Messsystem muss diesen Anforderungen genügen.
Shelly Plus UNI
Ich hatte mich ja schon in der Vergangenheit mit dem Plus UNI beschäftigt und heraus gefunden, dass der Analog-Eingang alles andere als genau ist.
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.
D.h., den Bereich unterhalb von 3,0V kann man getrost vergessen.
Mir ist auch echt schleierhaft, wie man bei Allterco einen 12-Bit Analogeingang derart verbocken kann.
Messkonzept
Der Plus UNI hat ja nur einen Eingang zum Messen einer analogen Spannung (in Volt oder Analog in Prozent).
Was der gute Shelly aber hat, sind zwei Digital Out-Kanäle!
Die kann man gut nutzen, um einen analogen Multiplexer zu steuern.
Wie oben schon geschrieben, benötige ich jede Minute einen neuen Wert.
Somit habe ich eine Minute lang Zeit, den Strom und die Spannung zu messen.
BTW: ich messe und übertrage mit dem Plus UNI (und auch mit den anderen Shellys) immer nur die RAW-Daten. Auswertungen, Multiplikationen, etc. erledige ich auf dem Server, weil ich da mehr Performance habe.
Also schreibe ich mir ein mJS-Script mit einer State-Machine, die zuerst die Spannung (in %) und dann den Strom (in %) misst.
Danach alle Daten zu einem Paket schnürt und dann versendet.
von der Theorie zur Praxis
Tja, wenn der Shelly ordentlich messen würde, wäre es damit getan gewesen - tut er aber nicht.
Aber es gibt ja noch ein paar technische Kniffe und die Mathematik.
Dann legen wir doch einfach den Nullpunkt (Offset) der Spannung/Strom höher. Konkret ausgewählt bei 3,8V.
Jetzt besteht aber die Gefahr, dass ich auf dem Server immer diese Konstante von den übertragenen Werte abziehe, obwohl die Spannung in der DC-Messbox wegen Temperatur oder Alterung schon längst bei, sagen wir 3,7Volt oder 3,9Volt ist.
Dann bauen wir halt einen 4-fach Multiplexer ein (CD4066) und benötigen dazu zur Selektion der Analog-Schalter noch etwas Digitaltechnik (CD4093).
Somit ändert sich der zeitliche Ablauf in der State-Machine wie folgt:
function FuncScheduler() {
//Timer-States
cycles_counter_v = cycles_counter_v + 1;
if ( cycles_counter_v == 1 ) {
Switch_Meas_Offset();
}
else if ( cycles_counter_v == 16 ) {
Get_Meas_Offset();
Switch_Meas_Voltage();
}
else if ( cycles_counter_v == 26 ) {
Get_Meas_Voltage();
Switch_Meas_Current();
}
else if ( cycles_counter_v == 36 ) {
Get_Meas_Current();
body_string_v = FuncLoadDataPlusUni();
//for Debugg only: print(body_string_v);
FuncShellyCall2(body_string_v);
}
else if ( cycles_counter_v == 60 ) {
cycles_counter_v = 0;
}
}
Alles anzeigen
Zuerst den Schalter auf die Offset-Spannung stellen, warten, Spannung messen, warten, Strom messen, Paket bauen und versenden, warten
Schaltplan
Im Schaltplan kann man zentral den Analog-Multiplexer erkennen.
Unten die Referenzspannungserzeugung für den Offset.
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.
Auf der rechten Seite gibt es oben die Spannungsmessung über einen Spannungsteiler direkt am Anschluss des Generator-Anschluss-Kasten (GAK).
Ich muss hier noch erwähnen, dass die Spannung dort lebensgefährlich hoch ist, dass elektrotechnische Laien daran nichts zu suchen haben.
Also Finger weg!
Die Strommessung erfolgt potenzialfrei über einen LEM LA-55P.
Aufbau Elektronik
Im ersten Schritt habe ich zur Zeit dort eine Lochrasterplatine verwendet, die demnächst noch gegen eine ordentliche Leiterplatte ersetzt wird.
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.
Auf dem obigen Foto kann man das vollständige DC-Messsystem sehen.
Links ist ein 30mA RCD, daneben ein B6 LSS, sowie 2 Meanwell HDR-15-15 Netzteile.
Aus den beiden 15V Netzteilen erzeuge ich auf der Leiterplatte eine +/-15V Spannungsversorgung.
Server-Software / Datenbank
Wenn der http-Request auf dem Server ankommt, werden die %-Werte des Plus UNI in echte Spannung / Strom mit dem gemessenen Offset umgerechnet.
Das ist einfache Mathematik in den Grundrechenarten.
In einem weiteren Schritt werden dann die korrigierten Werte miteinander zur Leistung multipliziert.
Alle Daten, also die %-Daten, Spannung/Strom/Offset und berechnete Spannung/Strom/Leistung, lege ich dann mit dem Unix-Zeitstempel in einer Datenbank-Tabelle ab.
Kalibrierung
Als die InselPVThermie-Anlage in Gänze stand und Strom produzierte, habe ich die Kalibrierung vorgenommen.
Dazu habe ich mit meinen Fluke Messsystemen an der DC-Messbox den realen Strom und die reale Spannung gemessen und protokolliert.
Gleichzeitig dazu dann in meiner APP den im Server-Script berechneten Strom, Spannung und Leistung ebenfalls protokolliert und mit den realen Werten verglichen.
Die Strommessung zeigte lediglich einen Fehler von etwa 1-1,5% auf.
Bei der Spannungsmessung hatte ich etwa konstant 10V zu viel berechnet.
Diese 10V habe ich Serverseitig wieder rausgerechnet, so dass auch die Spannungsmessung meiner Anforderung genügt.
Fazit
Für technisch Visierte, die auch mit hohen Spannungen arbeiten dürfen, ist das eine feine Lösung zur DC-Leistungsmessung.
Sie passt wunderbar in mein Shelly-Öko-System und ich kann die Messdaten nach belieben auswerten.
Man kann natürlich die Offset-Korrekturrechnung sowie die Multiplikation zur Leistung auch im mJS-Script auf dem Plus UNI machen.