SMA Energy Meter

Das SMA Energy Meter ist eine 4TE Baugruppe mit integriertem Smartmeter-Chip, welches die aktuellen Leistungen und weitere Daten des Stromnetzes mittels Multicast im Heimnetzwerk verteilt. Das Energy Meter ist als Zweirichtungszähler aufgebaut und im Gegensatz zu den SmartMetern der Energieversorger sehr schnell. Die Montage erfolgt gleich nach dem Hauptschalter und ermöglicht Stromstärken von 65A je Phase.

Normalerweise dient das SMA Energy Meter als Grundvoraussetzung zum Betrieb eines SMA SunnyIsland Stromspeichersystems. Natürlich kann man auch einen D0 Adapter am SMA Home Manager anschließen, aber ich rate davon ab. Der Energy Meter macht dies deutlich besser und man muss nach Ablauf der Eichfrist (8 Jahre) des Smartzählers nicht mit einem Wechsel gegen einen völlig anderen, vielleicht nicht mehr unterstützen Typ rechnen.

So kann das EM eingebaut aussehen.

DSC03198

Das Energy Meter besitzt eine eigene interne Webseite mit grundlegenden Konfigurationen, wie Netzwerkeinstellungen und ein Firmwareupdate. Dazu kann man die Seite (Beispiel IP) http://192.168.10.28/setup.php aufrufen und erhält folgenden JSON String:

{„ieq_serial“:“1900202586″,
„sma_version“:“1.01.00.R“,
„mac_address“:“00:D0:93:2A:35:43″,
„ip_address“:“192.168.10.28″,
„gateway“:“192.168.10.1″,
„localtime“:“01.01.1970 19:37:17″,
„utctimestamp“:67037}

Die eigentlichen Messerwerte verschweigt das SMA EM dort. Diese werden per Multicast im Netz an die Adresse 239.12.255.254 gesendet. Ein Multicast ist NICHT mit einem Broadcast zu verwechseln. Um ein Multicast auf einem Client zu empfangen, muss man sich auf dem Gerät über den Netzwerkstack registrieren. Der Netzwerkstack lauscht danach auf Pakete, die an die spezielle Adresse gesendet werden und kann sie nun verarbeiten. Der Vorteil: x-beliebig viele Geräte im Netzwerk können die Daten empfangen. Bei SMA EM sind je 600 Byte Nutzdaten.

Schaut man sich die 600 Bytes der Ausgabe des Energy Meter genauer an (hexadezimal)

534d4100000402a000000001024400106069010e7142ca5a002d897400010400000013f2000108000000000000519708
00020400000000000002080000000000000c675000030400000000000003080000000000000125e80004040000000716
0004080000000000006795a8000904000000152a0009080000000000007e68a0000a040000000000000a080000000000
001aab58000d0400000003ae001504000000057200150800000000000016968000160400000000000016080000000000
0007350000170400000000000017080000000000000456f000180400000001f70018080000000000003cdbd8001d0400
000005ca001d080000000000003036a8001e040000000000001e080000000000001eebc8001f04000000029f00200400
0003813c00210400000003ad00290400000005840029080000000000000d2f00002a040000000000002a080000000000
002257e0002b040000000000002b080000000000000089d0002c040000000373002c080000000000002dafc800310400
000006820031080000000000001eba9000320400000000000032080000000000002c6c58003304000000040c00340400
000382330035040000000350003d0400000008fb003d080000000000004af5b0003e040000000000003e080000000000
00000000003f040000000000003f0800000000000002f1c000400400000001ab00400800000000000003b53800450400
000009230045080000000000004b64c80046040000000000004608000000000000000000004704000000046c00480400
00037fc700490400000003d7900000000101005200000000

so fällt einem relativ schnell eine Struktur auf, die anscheinend mit 0400 oder 0800 endet.

Zerlegt man dies vorsichtig, ergeben sich kleine Gruppen mit Adressierungen. Teil man das weiter auf, so kommen 4 und 8 Bytes zum Vorschein, was wohl auch mit 04 und 08 gemeint ist. 🙂

Das ganze Datagram beginnt mit einem Header von 28 Byte.

Der erste Block ist die Summe an Werten aus Block 2, 3 und 4. Daher ist davon auszugehen, dass es sich folgt aufteilt:

Datenblock 1: Gesamtsummen
Datenblock 2: Messwerte an L1
Datenblock 3: Messwerte an L2
Datenblock 4: Messwerte an L3

534d41 00 000402a0 0000 0001 0244 0010 6069 010e 7142ca5a 002d8974 <== SMA, SUSyID, Seriennummer, milliseconds since start

00 0104 00 000013f2 000108 00 0000000000519708 <== 5106 (0x20) P Bezug gesamt in 0,1W => 510,6 W
00 0204 00 00000000 000208 00 00000000000c6750 <== 0 (0x34) P Einspeisung gesamt in 0,1W => 0 W
00 0304 00 00000000 000308 00 00000000000125e8 <== 0 (0x48) 00 0404 00 00000716 000408 00 00000000006795a8 <== 1814 (0x5c) Q gesamt in 0,1var => 181,4 var
00 0904 00 0000152a 000908 00 00000000007e68a0 <== 5418 (0x70) S Bezug gesamt in 0,1VA => 541,8 VA
00 0a04 00 00000000 000a08 00 00000000001aab58 <== 0 (0x84) S Einspeisung gesamt in 0,1VA => 0 VA
00 0d04 00 000003ae <== 942 (0x98) Leistungsfaktor cos phi gesamt => 0,942

00 1504 00 00000572 001508 00 0000000000169680 <== 1394 (0xa0) P Bezug L1 in 0,1W => 139,4 W
00 1604 00 00000000 001608 00 0000000000073500 <== 0 (0xb4) P Einspeisung L1 in 0,1W => 0 W
00 1704 00 00000000 001708 00 00000000000456f0 <== 0 (0xc8) 00 1804 00 000001f7 001808 00 00000000003cdbd8 <== 503 (0xdc) Q L1 in 0,1var => 50,3 var
00 1d04 00 000005ca 001d08 00 00000000003036a8 <== 1482 (0xf0) S Bezug L1 in 0,1VA => 148,2 VA
00 1e04 00 00000000 001e08 00 00000000001eebc8 <== 0 (0x104) S Einspeisung L1 in 0,1VA => 0 VA
00 1f04 00 0000029f <== 671 (0x118) THD 0,671 % auf L1?
00 2004 00 0003813c <== 229692 (0x120) Spannung in mV auf L1
00 2104 00 000003ad <== 941 (0x128) Leistungsfaktor cos phi L1 => 0,941

00 2904 00 00000584 002908 00 00000000000d2f00 <== 1412 (0x130) P Bezug L2 in 0,1W => 141,2 W
00 2a04 00 00000000 002a08 00 00000000002257e0 <== 0 (0x144) P Einspeisung L2 in 0,1W => 0 W
00 2b04 00 00000000 002b08 00 00000000000089d0 <== 0 (0x158) 00 2c04 00 00000373 002c08 00 00000000002dafc8 <== 883 (0x16c) Q L2 in 0,1var => 88,3 var
00 3104 00 00000682 003108 00 00000000001eba90 <== 1666 (0x180) S Bezug L2 in 0,1VA => 166,6 VA
00 3204 00 00000000 003208 00 00000000002c6c58 <== 0 (0x194) S Einspeisung L2 in 0,1VA => 0 VA
00 3304 00 0000040c <== 1036 (0x1a8) THD 1,036 % auf L2
00 3404 00 00038233 <== 229939 (0x1b0) Spannung in mV auf L2
00 3504 00 00000350 <== 848 (0x1b8) Leistungsfaktor cos phi L2 => 0,848

00 3d04 00 000008fb 003d08 00 00000000004af5b0 <== 2299 (0x1c0) P Bezug L3 in 0,1W => 229,9 W
00 3e04 00 00000000 003e08 00 0000000000000000 <== 0 (0x1d4) P Einspeisung L3 in 0,1W => 0 W
00 3f04 00 00000000 003f08 00 000000000002f1c0 <== 0 (0x1e8) 00 4004 00 000001ab 004008 00 000000000003b538 <== 427 (0x1fc) Q L3 in 0,1var => 42,7 var
00 4504 00 00000923 004508 00 00000000004b64c8 <== 2339 (0x210) S Bezug L3 in 0,1VA => 233,9 VA
00 4604 00 00000000 004608 00 0000000000000000 <== 0 (0x224) S Einspeisung L3 in 0,1VA => 0 VA
00 4704 00 0000046c <== 1132 (0x238) THD 1,132 % auf L3?
00 4804 00 00037fc7 <== 229319 (0x240) Spannung in mV auf L3
00 4904 00 000003d7 <== 983 (0x248) Leistungsfaktor cos phi L3 => 0,983

900000000101005200000000 <== Endstring

P = Wirkleistung (W) P = U · I · cosφ = S · cosφ
Q = Blindleistung total (var) Q = U · I · sinφ = S · sinφ
S = Scheinleistung (VA) S = U · I

Nun sind fast alle der 4 Byte Live-Daten bekannt. Viele davon sind für eine Regelung sehr wichtig. Dennoch ist es von Vorteil, die aufgelaufen Werte (Arbeit) zu kennen. So kann man Verbrauchskurven über Tage, Monate oder Jahre realisieren.

Die oben stehenden fett & kursiv gedruckten Werte sind die summierende Zähler der vorderen Werte, also die Arbeitswerte (z.B. kWh). Interessant ist vor allem die Gesamtbetrachtung der Wirkleistung auf den drei Phasen, also Bezug in kWh und Einspeisung in kWh. Die Adressen für die Zäherstände sind: Bezug 0x28 und für Einspeisung 0x3c. Um die 8 Bytes umzurechnen, ist ein int64 nötig.

Bezugszähler HEX: 0000000000519708 => 5347080 / 3600s => 1485,3 Wh / 1000 => 1,4853 kWh
Einspeisezähler HEX: 00000000000c6750 => 812880 / 3600s => 225,8 Wh / 1000 => 0,2258 kWh

Hier mal ein anderes Beispiel.

L1: es wird mehr verbraucht, als die 1.PV Anlage produziert
L2: es fließt von der 2.PV Anlage Leistung ins Netz
L3: es wird ausschließlich Leistung bezogen
gesamt: es wird insgesamt mehr ins Netz eingespeist, als verbraucht

534d41 00000402a0 00000001024400106069010e 7142ca5a 70973890
00010400 00000000 00010800 000000003e0a0a08 <= 0 0 W P Bezug 00020400 000002e1 00020800 0000000000e2f338 <= 737 73,3 W P Einspeisung 00030400 00000000 00030800 000000000017b3f8 <= 0 00040400 000010a5 00040800 00000000194931a8 <= 4261 426,1 var Q total 00090400 00000000 00090800 00000000464a1578 <= 0 0 VA S Bezug 000a0400 000010e4 000a0800 0000000001f3d418 <= 4324 432,4 VA S Einspeisung 000d0400 000000aa <= 170 0,17 cos phi 00150400 0000018f 00150800 00000000193dfe50 <= 399 39,9 W P Bezug 00160400 00000000 00160800 0000000000e34ea0 <= 0 0 W P Einspeisung 00170400 00000000 00170800 000000000027c3d8 <= 0 00180400 00000a19 00180800 000000000cba0cf0 <= 2585 258,5 var Q total 001d0400 00000a38 001d0800 000000001dfe3680 <= 2616 261,6 VA S Bezug 001e0400 00000000 001e0800 0000000003925bf0 <= 0 0 VA S Einspeisung 001f0400 00000518 <= 1304 1,304 % THD 00200400 000393f6 <= 234486 234,5V Spannung 00210400 00000098 <= 152 0,152 cos phi 00290400 00000000 00290800 0000000013c790d0 <= 0 0 W P Bezug 002a0400 00000d92 002a0800 0000000001e1f428 <= 3474 347,4 W P Einspeisung 002b0400 00000000 002b0800 000000000004ca40 <= 0 002c0400 000004d4 002c0800 000000000e0ee288 <= 1236 123,6 var Q total 00310400 00000000 00310800 00000000190ae128 <= 0 0 VA S Bezug 00320400 00000e67 00320800 0000000002ce7eb0 <= 3687 368,7 VA S Einspeisung 00330400 00000704 <= 1796 1,796 % THD 00340400 000393a5 <= 234405 234,4V Spannung 00350400 000003ae <= 942 0,942 cos phi 003d0400 00000923 003d0800 0000000012e6c7a8 <= 2339 233,9 W P Bezug 003e0400 00000000 003e0800 0000000000000000 <= 0 0 W Einspeisung 003f0400 00000000 003f0800 0000000001a6f238 <= 0 00400400 000001b7 00400800 00000000003c0ff0 <= 439 43,9 var Q total 00450400 0000094b 00450800 00000000130e2208 <= 2379 237,9 VA S Bezug 00460400 00000000 00460800 0000000000000000 <= 0 0 VA S Einspeisung 00470400 00000438 <= 1080 1,080 THD 00480400 0003916c <= 233836 233,8V Spannung 00490400 000003d7 <= 983 0,983 cos phi 900000000101005200000000

Schreibt man nun ein kleines Test C-Programm und wertet einige Datagramme aus, so ergeben sich nachfolgende Ansichten.

reiner Verbrauch am frühen Morgen (Kaffeemaschine auf L1)

425 W | 231 231 230 V | 237 667 941 mA
426 W | 231 231 230 V | 236 670 942 mA
424 W | 231 231 230 V | 234 665 942 mA
455 W | 231 231 230 V | 345 672 959 mA
1007 W | 230 231 230 V | 2764 669 943 mA
1007 W | 230 231 230 V | 2762 670 941 mA
1006 W | 230 231 230 V | 2761 667 943 mA
1006 W | 230 231 230 V | 2760 668 942 mA
1010 W | 230 232 230 V | 2759 664 962 mA

Einspeisung auf einzelnen Phasen und Verbrauch auf Anderen (Tagesmitte)

153 W | 233 234 233 V | -169 -88 918 mA
151 W | 233 234 233 V | -173 -93 917 mA
152 W | 233 234 233 V | -173 -105 932 mA
150 W | 233 234 233 V | -169 -103 916 mA
152 W | 233 234 233 V | -174 -88 916 mA
152 W | 233 234 233 V | -174 -87 917 mA
152 W | 233 234 233 V | -174 -89 918 mA
151 W | 233 234 233 V | -174 -107 933 mA
148 W | 233 234 233 V | -174 -104 917 mA
150 W | 233 234 233 V | -169 -102 917 mA

Bezugs- & Einspeisezähler mit Wirkleistung gesamt (Auto lädt auf L1)

3498 W | 230 233 232 V | 11752 2764 650 mA | 41.5 2.8 kWh
3400 W | 229 233 232 V | 11800 2367 632 mA | 41.5 2.8 kWh
3519 W | 229 233 232 V | 11809 2866 633 mA | 41.5 2.8 kWh
3514 W | 229 233 232 V | 11832 2823 634 mA | 41.5 2.8 kWh
3520 W | 229 233 231 V | 11882 2796 637 mA | 41.5 2.8 kWh
3538 W | 229 232 232 V | 11879 2878 647 mA | 41.6 2.8 kWh
3450 W | 229 233 232 V | 11881 2500 634 mA | 41.6 2.8 kWh
3474 W | 229 233 231 V | 11878 2608 635 mA | 41.6 2.8 kWh
3545 W | 229 233 231 V | 11881 2908 636 mA | 41.6 2.8 kWh
3520 W | 229 233 231 V | 11880 2801 635 mA | 41.6 2.8 kWh

Hier auch mal mit cos phi

455 W | 235 236 235 V | 459 667 808 mA | 119.9 3.3 kWh | cos phi 0.973
443 W | 235 237 235 V | 459 665 757 mA | 119.9 3.3 kWh | cos phi 0.971
440 W | 236 237 235 V | 457 669 738 mA | 119.9 3.3 kWh | cos phi 0.970
438 W | 236 237 235 V | 457 665 737 mA | 119.9 3.3 kWh | cos phi 0.970
439 W | 236 237 235 V | 460 665 737 mA | 119.9 3.3 kWh | cos phi 0.970
440 W | 236 237 235 V | 457 667 741 mA | 119.9 3.3 kWh | cos phi 0.970
438 W | 236 237 235 V | 458 665 735 mA | 119.9 3.3 kWh | cos phi 0.970
439 W | 236 236 235 V | 458 672 734 mA | 119.9 3.3 kWh | cos phi 0.971
438 W | 236 237 235 V | 457 667 732 mA | 119.9 3.3 kWh | cos phi 0.970
438 W | 236 237 235 V | 458 667 733 mA | 119.9 3.3 kWh | cos phi 0.970

SMA hat das Multicast-Datagramm sehr ähnlich dem normalen Speedwire-Datagrammen aufgebaut. Dort nutzen Sie auch 4 und 8 Byte values. Das Ganze ist zuverlässig und für kleine CPUs mit Hilfe von Structs eine schnelle Sache.

Damit sind bisher folgende Werte entschlüsselt:

– aktuelle Spannung auf L1 in V
– aktuelle Spannung auf L2 in V
– aktuelle Spannung auf L3 in V
– aktuelle Bezugs-Wirkleistung gesamt in W
– aktuelle Einspeise-Wirkleistung gesamt in W
– aktuelle Bezugs-Wirkleistung auf L1 in W
– aktuelle Einspeise-Wirkleistung auf L1 in W
– aktuelle Bezugs-Wirkleistung auf L2 in W
– aktuelle Einspeise-Wirkleistung auf L2
– aktuelle Bezugs-Wirkleistung auf L3 in W
– aktuelle Einspeise-Wirkleistung auf L3 in W
– aktuelle Bezugs-Scheinleistung gesamt in VA
– aktuelle Einspeise-Scheinleistung gesamt in VA
– aktueller Leistungsfaktor cos phi gesamt
– aktuelle Bezugs-Scheinleistung auf L1 in VA
– aktuelle Einspeise-Scheinleistung auf L1 in VA
– aktueller Leistungsfaktor cos phi L1
– aktuelle Bezugs-Scheinleistung L2 auf in VA
– aktuelle Einspeise-Scheinleistung auf L2 in VA
– aktueller Leistungsfaktor cos phi L2
– aktuelle Bezugs-Scheinleistung auf L3 in VA
– aktuelle Einspeise-Scheinleistung auf L3 in VA
– aktueller Leistungsfaktor cos phi L3
– Wirkarbeit Bezug gesamt in kWh
– Wirkarbeit Einspeisung gesamt in kWh
– Wirkarbeit Bezug von L1 in kWh
– Wirkarbeit Einspeisung von L1 in kWh
– Wirkarbeit Bezug von L2 in kWh
– Wirkarbeit Einspeisung von L2 in kWh
– Wirkarbeit Bezug von L3 in kWh
– Wirkarbeit Einspeisung von L3 in kWh
– Scheinarbeit Bezug gesamt in VAh
– Scheinarbeit Einspeisung gesamt in VAh
– Scheinarbeit Bezug von L1 in VAh
– Scheinarbeit Einspeisung von L1 in VAh
– Scheinarbeit Bezug von L2 in VAh
– Scheinarbeit Einspeisung von L2 in VAh
– Scheinarbeit Bezug von L3 in VAh
– Scheinarbeit Einspeisung von L3 in VAh
– Seriennummer
– Timestamp (zyklisch)
– Blindleistung total gesamt in var
– Blindleistung total von L1 in var
– Blindleistung total von L2 in var
– Blindleistung total von L3 in var
– Blindarbeit total gesamt in varh
– Blindarbeit total von L1 in varh
– Blindarbeit total von L2 in varh
– Blindarbeit total von L3 in varh
– THD auf L1
– THD auf L2
– THD auf L3

console

Hier können Sie die iOS App „EMVíew“ laden und die Echtzeitdaten des Energy Meter visualisieren.

(reverse engineering by german law: § 69d UrhG Nr.3)

Translate »