Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

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

Moderator: Co-Administratoren

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

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von mschneider » 12.03.2019, 23:14

Ich werde vermutlich in den nächsten Monaten eine Anleitung schreiben wie man mit der CCU3 Modbus Register schreiben kann ohne etwas Kompliziertes installieren zu müssen. Meine bisherigen Entwicklungen/Anleitungen (Modbus lesen, SMA Energy Meter lesen) habe ich mit Hilfe meiner SMA Geräte Programmieren und Testen können. Eine Wall-be Wallbox für ein Elektroauto ist bereits bestellt (verwendet einen Phoenix Contact EV Controller). Wenn die installiert ist, dann geht es los mit der Programmierung dafür. Ein Elektroauto habe ich auch noch nicht. Daher dauert es noch etwas mit einer Anleitung dafür (Modbus TCP Register schreiben mit CCU3).

rucksman007
Beiträge: 51
Registriert: 04.11.2018, 13:17

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von rucksman007 » 15.03.2019, 18:07

Tolle Arbeit!

Bislang lese ich meinen SMA SB 3600SE-10 zur Überwachung über ein PHP-Skript aus und schreibe die Daten in eine Datenbank. Dazu nutze ich die Klasse https://github.com/krakorj/phpmodbus.

Der relevante Teil meines Skripts sieht wie folgt aus:

Code: Alles auswählen

$modbus = new ModbusMaster($wrip, $modbusprotocol);
$recDataTotal = $modbus->readMultipleRegisters(3, 30529, 2);
$recDataTotal = array_reverse($recDataTotal);
$total = PhpType::bytes2unsignedInt($recDataTotal, 1) / 1000;
Worauf ich hinaus will: Entscheidend in meinem PHP-Skript ist das array_reverse. Würde ich das nicht machen, würde totaler Schrott rauskommen. Das Register 30529 beinhaltet den "Total Yield (Wh)" und ist U32 FIX0 RO.

Beispiel: mit array_reverse erhalte ich als $total den korrekten Wert von 5581.941. Würde ich array_reverse weglassen, bekäme ich 1949062.4.

Mit Deiner Lösung erhalte ich bei Ausgabe von "lGetOut" das hier (also ohne StrValueByIndex):

Code: Alles auswählen

85 11385
Und nun die Frage: Da ich weder bei Modbus noch bei tcl der Held bin: Wie muss ich Dein(e) Skripte ändern bzw. lGetOut umformen, damit ich das korrekte Ergebnis bekomme?

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

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von mschneider » 16.03.2019, 10:26

Hallo rucksman007,

Modbus register können 32 bit lang sein oder auch nur 16 bit. Mein Skript gibt immer 32 bit Werte zurück in Form von 2 Integer zahlen die durch ein Leerzeichen getrennt sind. In deinem Fall: 85 und 11385. Um den 32 bit Wert zu erhalten müsstest du folgendes machen:

32bitwert = 85 * 256 * 256 + 11385.

Code: Alles auswählen

32bitwert = lGetOut.StrValueByIndex(" ", 0) * 256 * 256 + lGetOut.StrValueByIndex(" ", 1) 
Gruss, M. Schneider

rucksman007
Beiträge: 51
Registriert: 04.11.2018, 13:17

Re: Homematic und SMA Sunny Boy mit SHM, PV Erzeugung lesen über ModBus

Beitrag von rucksman007 » 18.03.2019, 10:14

Super, vielen Dank! Es gibt auch den ein oder anderen Wert als U64 (in meinem Fall zB die Register 30513, 30517 oder 30521), aber da es die aus irgendwelchen Gründen zusätzlich auch als U32 gibt (Register 30529, 30535 und 30541), muss ich mich darum nicht kümmern...

Antworten

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