Mit CCU3 Homematic Skript SMA Energy Meter oder Sunny Home Manager 2 auslesen

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

mschneider
Beiträge: 12
Registriert: 07.01.2017, 18:57

Mit CCU3 Homematic Skript SMA Energy Meter oder Sunny Home Manager 2 auslesen

Beitrag von mschneider » 12.01.2019, 15:57

Ich habe eine Photovoltaik Anlage (PV) und auch einen SMA Home Manager 2 (SHM2) installiert. Nun würde ich gerne in meiner CCU3 Verbraucher abhängig vom Netzbezug oder der Netzeinspeisung steuern. Bisher habe ich noch keine zufriedenstellende Lösung gefunden.

Das SMA Energy Meter als auch der SHM2 senden jede Sekunde eine UDP Broadcast Telegramm in das Netzwerk. Hier nun ein Skript das einige Werte (Seriennummer, gesamte Einspeisung und gesamten Netzbezug aller 3 Phasen) liest und in Variablen der CCU schreibt. (Man kann noch viel mehr Daten lesen wenn man möchte).

Voraussetzung:
1) CCU3 und SHM2 oder Energy Meter im Netzwerk mit Switch verbunden. (Nicht über Router/Fritzbox da diese(r) Broadcast Telegramme wegfiltern). Der Switch kann natürlich mit einem Router verbunden werden.
2) Damit die CCU3 die Broadcast Telegramme auch empfangen kann, muss in der CCU folgendes eingestellt werden: Settings->Control Panel->Configure Firewall: Firewall Policy: Ports open.
3) Diese variablen in der CCU3 anlegen:
"EM Netzbezug", Zahl, 0..65000, Watt
"EM Netzeinspeisung", Zahl, 0..65000, Watt
"EM Zeitstempel", Zeichenkette, Uhr
4) Das folgene Skript ausführen oder so einstellen das es z.B. jede Minute ausgeführt wird.
SHM2 CCU3.txt
CCU3 Homematic Skript SMA Energy Meter / Home Manager 2 Verbrauchswerte lesen
(1.23 KiB) 66-mal heruntergeladen
Im Skript ist die IP Adresse 239.12.255.254 die Broadadresse des SHM2. Dies ist nicht die IP Adresse des SHM2. Daher bitte nur ändern falls der SHM2 eine andere Broadadresse verwendet.

Im Skript ist der Wert 9522 der Port an den der SHM2 die Broadcast Telegramme schickt. Daher bitte nur ändern falls der SHM2 einen anderen Port verwendet.

Falls mehrere SHM2 oder Energy Meter im Netzwerk sind, dann könnte man versuchen jedem SHM2 oder Energy Meter einen eigenen Port zuzuweisen. Dann kann man mehrere SHM2 oder Energy Meter im Netzwerk abfragen.

Falls es nicht funktioniert:
1) Mit Wireshark und einem PC die Broadcast Telegramme überprüfen. (Werden die gesendet?)
2) Ports eingeschalten in der CCU3?
3) Der system.Exec Skript Befehl ist recht empfindlich. Programme so planen dass die Befehle nicht gleichzeitig ausgeführt werden.
4) Port ist bereits belegt. Vermutlich durch abgestürztes Skript und der Prozess läuft noch). --> CCU3 Neu starten oder mit shell den Prozess entfernen.


Gruss, Martin Schneider
Zuletzt geändert von mschneider am 20.01.2019, 00:07, insgesamt 1-mal geändert.

Harpau
Beiträge: 17
Registriert: 08.01.2019, 13:17

Re: Mit CCU3 Homematic Skript SMA Energy Meter oder Sunny Home Manager 2 auslesen

Beitrag von Harpau » 16.01.2019, 00:25

Hallo Martin,

vielen Dank für die super Arbeit!
Zwei Anmerkungen aus meinen Experimenten:

Auch Powerline-Adapter filtern leider Multicasts aus (siehe auch die Beschreibung zu der App "EMView" im Apple App Store. Diese verwendet das selbe Prinzip).

Manchmal kommen vom SHM2 keine Werte zurück. Ich habe deshalb nach dem Befehl zum Auslesen eine Abfrage (if (lGetErr <> "")) eingefügt, damit die "alten" Werte (inkl. Zeitstempel) erhalten bleiben.

Viele Grüße

Harald

Harpau
Beiträge: 17
Registriert: 08.01.2019, 13:17

Re: Mit CCU3 Homematic Skript SMA Energy Meter oder Sunny Home Manager 2 auslesen

Beitrag von Harpau » 16.01.2019, 17:17

Hallo Martin,

ich würde diese Skript gerne so umstellen, dass die Abfrage der Multicasts statt über System.Exec asynchron über CUxD erfolgt, da die 1 Sekunde Laufzeit schon recht lang ist. Das Problem dabei ist jedoch, dass man bei Verwendung von CUxD nicht an den Wert in lGetErr herankommt, sondern nur in lGetOut.

Bei mir sieht das jetzt so aus:

Im ersten Programm läuft zeitgesteuert dieses Script:

dom.GetObject ("CUxD.CUX2801001:12.CMD_SETS").State ("socat -x -u -T 2 -t 2 UDP4-RECV:9522,ip-add-membership=239.12.255.254:0.0.0.0 STDOUT & pid=$! ; sleep 1 && kill $pid");
dom.GetObject ("CUxD.CUX2801001:12.CMD_RUNS").State (1);

Das zweite Programm löst bei einer Aktualisierung von CUxD.CUX2801001:12.CMD_RETS ein Script aus, in welchem ich dann gerne die empfangenen Werte auslesen möchte. Allerdings bekomme ich hier wohl nur den Wert aus STDOUT.

Könnte man Deinen System.Exec Aufruf irgendwie so umschreiben, dass der Rückgabewert in lGetOut landet statt in lGetErr?

Sorry dass ich das nicht genauer beschreiben kann!

Vielen Dank und viele Grüße

Harald

mschneider
Beiträge: 12
Registriert: 07.01.2017, 18:57

Re: Mit CCU3 Homematic Skript SMA Energy Meter oder Sunny Home Manager 2 auslesen

Beitrag von mschneider » 20.01.2019, 00:03

Hallo Harald,

system.Exec("socat -x -u -T 2 -t 2 UDP4-RECV:9522,ip-add-membership=239.12.255.254:0.0.0.0 STDOUT 2>&1 & pid=$! ; sleep 1 && kill $pid ",&lGetOut,&lGetErr);

das sollte alles in IGetOut senden. (Eingefügt wurde: 2>&1 ).

Gruss,

Martin

Harpau
Beiträge: 17
Registriert: 08.01.2019, 13:17

Re: Mit CCU3 Homematic Skript SMA Energy Meter oder Sunny Home Manager 2 auslesen

Beitrag von Harpau » 20.01.2019, 16:22

Hallo Martin,

erneut vielen Dank für Deine Unterstützung! Es hat funktioniert. Man muss allerdings bei Verwendung von CUxD die Positionen für das Auslesen der Werte aus lGetOut um +1 erhöhen.

Falls gewünscht, lasse ich Dir meine auf CUxD umgestellten Skripte gerne zukommen.

Viele Grüße

Harald

hobby_966
Beiträge: 3
Registriert: 16.06.2018, 09:11

Re: Mit CCU3 Homematic Skript SMA Energy Meter oder Sunny Home Manager 2 auslesen

Beitrag von hobby_966 » 29.01.2019, 10:50

Hallo.
Ich bin über die Suche auf dieses Thema gestoßen, da ich seit ca 2013 eine Photovoltaikanlage betreibe (mit SMA Homemanager 1, 2 Energy-Metern jeweils 1x für Bezug und Einspeisung und einen 2. für den Ertrag). Des weiteren hängt noch ein Batteriewechselrichter mit Speicher im Netz der seine Daten vom Energy-Meter bezieht. Da ich seit kurzem auch Homematic Komponenten installiert habe würde ich gerne verschiedene Verbraucher je nach Energiesituation steuern. Da ich allerdings hier absoluter Neuling bin und in Punkto Skript Programmierung bis jetzt absolut keine Ahnung habe brauch ich etwas Unterstützung. Den Skript im Forum habe ich getestet und der liest mir meinen Erzeugungszähler aus. Das Problem ist wie kann ich beide auslesen. Die Idee Broadcast-Adressen oder Ports zu ändern stößt bei mir auf Skepsis, da ich befürchte die Kommunikation der SMA Komponenten untereinander könnte unterbrochen werden. Ich habe mir den UDP Datenverkehr mit Wireshark angesehen und festgstellt das die beiden Energymeter nur über die Absendeadresse und Port zu unterscheiden sind. Die Frage ist ob sich ein Skript schreiben lässt, der nach diesen Kriterien den Datenverkehr selektiert und ausliest.

mschneider
Beiträge: 12
Registriert: 07.01.2017, 18:57

Re: Mit CCU3 Homematic Skript SMA Energy Meter oder Sunny Home Manager 2 auslesen

Beitrag von mschneider » 01.02.2019, 16:44

Hallo hobby_966,
ich lese aus deinem Text, dass du 2 SMA Energy Meter (EM) hast. Welche Ports und IP Adressen haben denn deine beiden EM in den Wireshark Telegrammen? Gleiche IPs oder gleiche Ports?

Der Einspeisezähler hat vermutlich IP 239.12.255.254 und Port 9522. Und der andere?

hobby_966
Beiträge: 3
Registriert: 16.06.2018, 09:11

Re: Mit CCU3 Homematic Skript SMA Energy Meter oder Sunny Home Manager 2 auslesen

Beitrag von hobby_966 » 01.02.2019, 18:39

Hallo
Das EM1 (Ertrag) hat Quelladresse 192.168.178.33 Port 55738; Zieladresse:235.12.255.254 Port 9522
Das EM2 (Bezug/Einspeisung) hat Quelladresse 192.168.178.35 Port 38949; Zieladresse 235.12.255.254 Port 9522.

mschneider
Beiträge: 12
Registriert: 07.01.2017, 18:57

Re: Mit CCU3 Homematic Skript SMA Energy Meter oder Sunny Home Manager 2 auslesen

Beitrag von mschneider » 03.02.2019, 19:43

Hallo hobby_966

Für EM1 Daten diese Zeile im Skript:

Code: Alles auswählen

system.Exec("socat -x -u -T 2 -t 2 UDP4-RECV:9522,ip-add-membership=239.12.255.254:0.0.0.0 STDOUT & pid=$! ; sleep 1 && kill $pid",&lGetOut,&lGetErr);
austauschen mit dieser hier:

Code: Alles auswählen

system.Exec("socat -x -u -T 2 -t 2 UDP4-RECV:9522,range=192.168.178.33/32,ip-add-membership=239.12.255.254:0.0.0.0 STDOUT & pid=$! ; sleep 1 && kill $pid",&lGetOut,&lGetErr);
Für EM2 Daten diese Zeile im Skript:

Code: Alles auswählen

system.Exec("socat -x -u -T 2 -t 2 UDP4-RECV:9522,ip-add-membership=239.12.255.254:0.0.0.0 STDOUT & pid=$! ; sleep 1 && kill $pid",&lGetOut,&lGetErr);
austauschen mit dieser hier:

Code: Alles auswählen

system.Exec("socat -x -u -T 2 -t 2 UDP4-RECV:9522,range=192.168.178.35/32,ip-add-membership=239.12.255.254:0.0.0.0 STDOUT & pid=$! ; sleep 1 && kill $pid",&lGetOut,&lGetErr);
Gruss, Martin
Zuletzt geändert von alchy am 03.02.2019, 19:59, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

Harpau
Beiträge: 17
Registriert: 08.01.2019, 13:17

Re: Mit CCU3 Homematic Skript SMA Energy Meter oder Sunny Home Manager 2 auslesen

Beitrag von Harpau » 04.02.2019, 10:10

Hallo Martin,

wäre es eventuell möglich, daraus ein TCL-Skript zu machen und darin das Ergebnis in eine Systemvariable zu schreiben?

Vielen Dank und viele Grüße

Harald

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“