Seite 3 von 3

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Verfasst: 17.03.2024, 21:52
von robert0204
Hallo,
ich habe diesen Ablauf auch versucht, nur ich habe noch irgendwo einen Fehler drin. Beim CUXd Gerät System(28) und welche Funktion dann ? exec? und als Gerät 4 fach Wandtaster?
Beim erstellen der Systemvariablen als Typ "Zeichenkette"?

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Verfasst: 18.03.2024, 19:33
von JensDev
Auf welchen Beitrag beziehst du dich genau? Diesen hier viewtopic.php?f=19&t=53632#p553721 von Indi55 wahrscheinlich?

Wie weit bist du dabei? Details... Screenshots... Fehler...

ModBusTCP im WR schon freigeschaltet? Und erfolgreich getestet?

Funktions-Typ für die oben verlinkte Variante beim CUxD ist auf jeden Fall Exec. Das Geräte-Icon ist ziemlich egal für die Funktion.

Gruß
Jens

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Verfasst: 18.03.2024, 21:03
von robert0204
Ja ich meinte das Beispiel von Indi55.
Fehler :

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801003:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.80 1502 1 03 40093 1"); dom.GetObject("CUxD.CUX2801003:2.CMD_QUERY_RET").State(1); var wert1 = dom.GetObject("CUxD.CUX2801012:2.CMD_RETS").State(); ! Low Byte dom.GetObject("CUxD.CUX2801003:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.80 1502 1 03 40094 1"); dom.GetObject("CUxD.CUX2801003:2.CMD_QUERY_RET").State(1); var wert2 = dom.GetObject("CUxD.CUX2801012:2.CMD_RETS").State(); ! Skalierung dom.GetObject("CUxD.CUX2801003:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.80 1502 1 03 40095 1"); dom.GetObject("CUxD.CUX2801003:2.CMD_QUERY_RET").State(1); var scale = dom.GetObject("CUxD.CUX2801003:2.CMD_RETS").State();  scale = scale.ToInteger(); wert1 = wert1.ToInteger(); wert2 = wert2.ToInteger(); scale = scale *
Mar 18 20:54:02 ccu3-webui local0.err ReGaHss: ERROR: ScriptRuntimeError: !" PV Auslesen  ! Offset der Register =  -1 ! High Byte dom.GetObject("CUxD.CUX2801003:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.80 1502 1 03 40093 1"); dom.GetObject("CUxD.CUX2801003:2.CMD_QUERY_RET").State(1); var wert1 = dom.GetObject("CUxD.CUX2801003:2.CMD_RETS").State(); ! Low Byte dom.GetObject("CUxD.CUX2801003:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.80 1502 1 03 40094 1"); dom.GetObject("CUxD.CUX2801003:2.CMD_QUERY_RET").State(1); var wert2 = dom.GetObject("CUxD.CUX2801003:2.CMD_RETS").State(); ! Skalierung dom.GetObject("CUxD.CUX2801003:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.80 1502 1 03 40095 1"); dom.GetObject("CUxD.CUX2801003:2.CMD_QUERY_RET").State(1); var scale = dom.GetObject("CUxD.CUX2801003:2.CMD_RETS").State();  scale = scale.ToInteger(); wert1 = wert1.ToInteger(); wert2 = wert2.ToInteger(); scale = scale *[code]

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Verfasst: 18.03.2024, 21:15
von robert0204
mein Script sieht so aus:
Ich habe dementsprechend meine IP Vom Wechselrichter eingetragen und Port 1502

Code: Alles auswählen

!" PV Auslesen

! Offset der Register =  -1
! High Byte
dom.GetObject("CUxD.CUX2801003:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.80 1502 1 03 40093 1");
dom.GetObject("CUxD.CUX2801003:2.CMD_QUERY_RET").State(1);
var wert1 = dom.GetObject("CUxD.CUX2801003:2.CMD_RETS").State();
! Low Byte
dom.GetObject("CUxD.CUX2801003:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.80 1502 1 03 40094 1");
dom.GetObject("CUxD.CUX2801003:2.CMD_QUERY_RET").State(1);
var wert2 = dom.GetObject("CUxD.CUX2801003:2.CMD_RETS").State();
! Skalierung
dom.GetObject("CUxD.CUX2801003:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.80 1502 1 03 40095 1");
dom.GetObject("CUxD.CUX2801003:2.CMD_QUERY_RET").State(1);
var scale = dom.GetObject("CUxD.CUX2801003:2.CMD_RETS").State();

scale = scale.ToInteger();
wert1 = wert1.ToInteger();
wert2 = wert2.ToInteger();
scale = scale * (-1); ! oder scale.Abs()
! High + Low Byte
wert = ((wert1 * 65536) + wert2) /1000; ! oder  über wert.Exp10()
if (scale == 1)  { wert = wert / 10 ; }
if (scale == 2)  { wert = wert / 100; }
if (scale == 3) { wert = wert / 1000; }

dom.GetObject("PV Gesammtleistung").State(wert);
[code]

Ich habe dementsprechend meine IP Vom Wechselrichter eingetragen und Port 1502

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Verfasst: 18.03.2024, 21:17
von JensDev
Versuch mal die Variable wert auch zu deklarieren - ein var vor wert = .. setzen:

Code: Alles auswählen

var wert = ((wert1 * 65536) + wert2) /1000; ! oder über wert.Exp10()
Gruß
Jens

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Verfasst: 18.03.2024, 21:21
von robert0204
ist noch das selbe.
Mar 18 21:20:02 ccu3-webui local0.err ReGaHss: ERROR: ScriptRuntimeError: !" PV Auslesen ! Offset der Register = -1 ! High Byte dom.GetObject("CUxD.CUX2801003:2.CMD_SETS").State("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.80 1502 1 03 40093 1");

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Verfasst: 18.03.2024, 21:30
von JensDev
Bau mal das Skript Schritt für Schritt, Zeile für Zeile auf und teste jeweils - irgendwo muss da ja noch was sein..

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Verfasst: 19.03.2024, 20:35
von robert0204
Hallo, ich habe meinen Fehler gefunden! In der Beschreibung steht: "Systemvariablen vom Typ String anlegen.
PV-Momentanleistung, PV-Gesammtleistung, PV-Status und PV-Fehlernummer"
Die Sytemvariablen müssen aber PV Momentanleistung, PV Gesammtleistung usw. sein

Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?

Verfasst: 16.05.2024, 00:56
von Bembi
Moin Zusammen,

ich habe festgestellt, dass das ModBus Script für den acc32 Type (Total Lifetime Energy) Signed Integer Werte zurückliefert.
Also die Werte für den zweiten Wert kommen bei mir zwischen -32768 und +32768

Folglich müßte das Berechnen dann so exakt sein.

real I_AC_PowerTot = ((val1 * 65536) + val2 + 32768) * val5.Exp10() / 1000000;
hier kommen dann MWh raus
Val1 ist der erste Wert
val2 der zweite Wert
val5 ist der Scale Factor