ModBus TCP Interface

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Balisto
Beiträge: 50
Registriert: 14.03.2016, 08:11
Hat sich bedankt: 10 Mal
Danksagung erhalten: 1 Mal

Re: ModBus TCP Interface

Beitrag von Balisto » 04.02.2024, 15:19

Ich möchte mir den pv Überschuss in eine Systemvariable schreiben und dann diese über modbus an meine Warmwasserwärmepumpe senden.
Die pv Leistung fange ich über eine Messsteckdose ab und will diese dann an die WWP übergeben.

Wie kann ich im unteren code den Wert der Systemvariable einfügen?
Im code den Wert 600.
192.168.178.181 8899 01 05 2200 600

Code: Alles auswählen

! Lesen des Wertes
system.Exec("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.181 8899 01 05 2200 600",&lGetOut,&lGetErr);
! Schreiben in Systemvariable formatiert (lGetOut ist ein Sting, die Ausgabe dann ein Zahlenwert)
dom.GetObject('WWP_Warmwasseristwert').State(0 + lGetOut);
! Ausgabe 
WriteLine("WWP_Warmwasseristwert:  " + (0 + lGetOut));

Tyfys
Beiträge: 551
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: ModBus TCP Interface

Beitrag von Tyfys » 04.02.2024, 17:32

Ich würde es z.B. mal so versuchen :

Code: Alles auswählen

!Lesen der Systemvariablen
var sysvarname = "deineSystemvariable";
var Wert = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvarname).Value();
!ist Systemvariable schon als Zeichenkette sollte es so gehen
!falls Systemvariable  als Zahl angelegt - erst in einen String wandeln - ohne Nachkommastellen = ToString(0).
Wert = Wert.ToString(0);
!zur Kontrolle
WriteLine(Wert);
! Lesen des Wertes
system.Exec("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.181 8899 01 05 2200 "#Wert,&lGetOut,&lGetErr);
! Schreiben in Systemvariable formatiert (lGetOut ist ein Sting, die Ausgabe dann ein Zahlenwert)
dom.GetObject('WWP_Warmwasseristwert').State(0 + lGetOut);
! Ausgabe 
WriteLine("WWP_Warmwasseristwert:  " + (0 + lGetOut));
Gruß
Harry

Balisto
Beiträge: 50
Registriert: 14.03.2016, 08:11
Hat sich bedankt: 10 Mal
Danksagung erhalten: 1 Mal

Re: ModBus TCP Interface

Beitrag von Balisto » 08.02.2024, 15:33

Vielen Dank. Es funktioniert.

Für die, die es noch brauchen können....-->

Code: Alles auswählen

! Lesen der Systemvariablen
var sysvarname = "WWP_Solltemperatur";
var Wert = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvarname).Value();
! ist Systemvariable schon als Zeichenkette sollte es so gehen
! falls Systemvariable  als Zahl angelegt - erst in einen String wandeln - ohne Nachkommastellen = ToString(0).
Wert = Wert.ToString(0);
! zur Kontrolle
WriteLine(Wert);


! **************** Schreiben mit system.Exec ****************
string lGetOut;
string lGetErr;

! Schreiben des Wertes
system.Exec("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.181 8899 01 06 2200 "#Wert,&lGetOut,&lGetErr);

Gruß Thomas

Kellerbastler
Beiträge: 2
Registriert: 14.02.2024, 13:17
System: CCU und Access Point
Danksagung erhalten: 1 Mal

Re: ModBus TCP Interface

Beitrag von Kellerbastler » 14.02.2024, 15:00

Hallo zusammen,
ich habe Eure guten Beiträge mehrfach gelesen, hänge aber beim Auslesen meines WR Huawei SUN200-10KLT immer noch fest. Der Effekt ist genau der, den drose28357 hier am 10.04.2023 beschrieben hat.
Ich nutze auch die sehr hilfreichen TCL-Skripte von Indi55 und den Aufruf über system.Exec bzw. über CuXD. Die Skripte von Indi55 sind im richtigen Verzeichnis und melden sich z.B. bei fehlerhafter Parameteranzahl mit einer Fehlermeldung. Ich habe mehrere Register ab 30000 gelesen und bekomme als Antwort im Rückgabewert = 0 und auch Fehlerwert = 0. Mit dem Programm "modbustester.exe" klappt die Kommunikation mit dem WR einwandfrei. Einen Umstieg auf NodeRed mit Raspi wollte ich erst einmal nicht.

Mein Frage: Hat evt. jemand die Kommunikation mit einen Huawei SUN2000-Wechselrichter über ModBus-TCP innerhalb der CCU inzwischen gelöst oder ist das Problem, was auch drose28357 am 10.04.2023 angesprochen hat, noch offen?

Das Einzige, was mir bei den Beispielen hier im Forum aufgefallen ist, ist die kleine Nummer des auszulesenden Registers. Oft nur die 71 oder 11. Nur beim Huawei-WR muss man eben z.B. über Register 32016 die PV-Spannung lesen. Diese Adresse passt nicht mehr in 1 Byte, d.h. vielleicht gibt es da noch ein Problem mit den TCL-Skripten. Ich kenne mich bei der TCL-Programmierung nicht aus, daher ist das nur ein Bauchgefühl.

Danke Euch für Feedback!

Kellerbastler
Beiträge: 2
Registriert: 14.02.2024, 13:17
System: CCU und Access Point
Danksagung erhalten: 1 Mal

Re: ModBus TCP Interface

Beitrag von Kellerbastler » 19.02.2024, 20:29

Hallo zusammen,
ich habe mich jetzt noch mal mit den tcl-Skripten beschäftigt. Die Register-Startadresse wird als 2 Byte auf den ModBus gegeben, d.h. die max. Registernummer kann 65536 betragen. Auch die von Huawei empfohlenen Verzögerung beim Lesen des Rückgabewertes vom Wechselrichter von 2s ist realisiert.
Ergebnis: Ich komme auch nicht weiter und werden mich wohl oder übel mit dem ioBroker beschäftigen, was ich eigentlich nicht wollte.

Kellerbastler

Heimi
Beiträge: 1
Registriert: 09.03.2024, 12:40
System: CCU

Re: ModBus TCP Interface

Beitrag von Heimi » 09.03.2024, 12:50

Hallo Miteinander,

auf die Gefahr hin, dass ich womöglich gleich skalpiert werde…..
Bin seit Jahren stiller Mitleser in diesem Forum, und bin so auch recht gut durch die CCU3 Welt gekommen.
Nach das allerdings nur sehr selten.

Jetzt wollte ich meine Heizung via Modbus auslesen und hänge an der einfachsten Aufgabe:

auf Seite 1 dieses Beitrags hat der Verfassser (Indi55) geschrieben, die beiden Scripts unter /usr/local/addons/modbus auf der CCU zu speichern.

Genau hier komm ich nicht weiter. Könnte mir hier bitte jemand behilflich sein :oops:


Vielen Dank!

tulpenbieger
Beiträge: 2
Registriert: 19.02.2024, 14:39
System: CCU

Re: ModBus TCP Interface

Beitrag von tulpenbieger » 11.03.2024, 10:01

Hallo Leute, ich brauche mal Eure Hilfe.
Ich versuche von einem Kostal Smartmeter (KSEM) einen Wert für die Einspeiseleistung via Modbus in die CCU3 zu bekommen.
Es handelt sich hier um einen UINT32-Wert mit einer Auflösung von nur 0,1 W.
Soweit so gut. Die Abfrage funktioniert und die Werte sind erst einmal korrekt. Erst bei Überschreiten der 32768 (also 3,2 KW) kommt es zu fehlerhaften Werten.
Was mache ich falsch?
Vielen Dank!

Code: Alles auswählen

string lGetOut;
string lGetErr;
system.Exec("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.30 502 1 03 02 2",&lGetOut,&lGetErr);
var hword = lGetOut;                        !WriteLine(hword);
integer space_pos = hword.Find(" ");        !WriteLine(space_pos);

!var lword = 0 + hword.Substr(0,space_pos);  !bei datenfolge CDAB
var lword = 0 + hword.Substr(space_pos);  !bei datenfolge ABCD
if(lword < 0) {lword = lword + 32768;};      !WriteLine(lword); 

!hword = 0 + hword.Substr(space_pos);      !bei datenfolge CDAB  
hword = 0 + hword.Substr(0,space_pos);      !bei datenfolge ABCD   
if(hword < 0) {hword = hword + 32768;};      !WriteLine(hword); 

integer result = lword + (65536 * hword);      WriteLine(result); 
var wert = (0.0 + result) / 10000.0;                                  WriteLine(wert); 

dom.GetObject('KOSTAL_Einspeisung_Gesamt').State(wert);
Dateianhänge
BA_KOSTAL_Interface_KSEM_DE.pdf
(285.28 KiB) 15-mal heruntergeladen

mhowie1
Beiträge: 13
Registriert: 25.05.2020, 19:32
System: CCU

Re: ModBus TCP Interface

Beitrag von mhowie1 » 15.03.2024, 17:20

Hallo zusammen,

ich bin auf diese Seite gestoßen, weil ich mit dem Thema Modbus und der damit möglichen Verbindung von der CCU3 auf meine Logos beschäftigt habe.
So wie ich es hier rauslese und interpretiere könnte ich wohl mit diversen Modbus-Befehlen Programme in der Logo starten (also direkt über LAN mit der Logo kommunizieren, und müsste das nicht mehr über einen IP-Aktor am Eingang der Logo steuern).

Ist das so korrekt?

Ich versuche jetzt schon fast 2 komplette Tage zu verstehen wie das gehen könnte, stehe aber immer noch völlig auf dem Schlauch und hab überhaupt keinen Plan (hab mir auch schon jede Menge Büschel Haare ausgerissen - natürlich nur symbolisch :P ). Die Dateien hab ich (wie im ersten Post beschrieben) im entsprechenden Unterordner abgespeichert, und im Logo-Netzwerkprojekt auch die Homematic schonmal hinzugefügt. In den Logo-Programmen hab ich natürlich z.B. Netzwerkeingänge für die Verbindung mit der Homematic anlegt, und auch ein Script hab ich in dem Logo-Programm angelegt. Aber ich blick da einfach überhaupt nicht durch, wie z.B. das Script ausschauen soll, und ob ich in der Logo auch alles korrekt konfiguriert habe (bisher funktioniert leider überhaupt nichts).


Könnte mich da vielleicht Jemand von euch etwas unterstützen (gerne auch direkt per PN)?


Viele Grüße und besten Dank im Voraus
Manfred

klaustaler
Beiträge: 1
Registriert: 21.03.2024, 20:56
System: CCU

Re: ModBus TCP Interface

Beitrag von klaustaler » 23.03.2024, 12:01

Hallo Indi55

Gibt es mitlerweile eine Lösung um Huawei WR KTL10 direkt via TCP auszulesen. Ich konnte bisher nix finden und dein modbus.tcl script scheint dafür nicht zu funktionieren. Ich erhalte immer den Wert 0 zurück!

string lGetOut= ""; !- Ergebnise des HTTP-Abrufs
string lGetErr= ""; !- Fehler
! Lesen des Wertes
integer ErrorCode = system.Exec("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.xxx.xxx.xxx 502 1 04 32106 2",&lGetOut,&lGetErr);
!if (ErrorCode) { quit; } !- Abbruch bei Fehlercode <> 0
WriteLine ("Ausgabe");
WriteLine (ErrorCode);
WriteLine (lGetErr);
WriteLine (lGetOut);

Danke für deine Rückantwort

stromer1960
Beiträge: 2
Registriert: 29.03.2024, 17:11
System: Access Point
Hat sich bedankt: 1 Mal

Re: ModBus TCP Interface

Beitrag von stromer1960 » 29.03.2024, 18:03

Matsch hat geschrieben:
02.02.2024, 19:32
Ich verwende auch ELFIN11, klappt wunderbar. Zudem gibt es eine extrem umfangreiche Doku dazu - auf der Herstellerseite.
Hallo Matsch,
ich hätte gerne mehr Informationen über die PV-Überschussabfrage beim Wechselrichter und die weitere Verarbeitung dieser Information. Ich werde auch Homematic IP wired installieren und will den Überschuss auch verwerten.
Danke und lieber Gruß

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“