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

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

robert0204
Beiträge: 9
Registriert: 19.03.2021, 23:09
System: CCU

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

Beitrag von robert0204 » 17.03.2024, 21:52

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"?

JensDev
Beiträge: 20
Registriert: 10.03.2020, 11:12
System: Alternative CCU (auf Basis OCCU)
Wohnort: Köln
Hat sich bedankt: 4 Mal
Danksagung erhalten: 2 Mal

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

Beitrag von JensDev » 18.03.2024, 19:33

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

robert0204
Beiträge: 9
Registriert: 19.03.2021, 23:09
System: CCU

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

Beitrag von robert0204 » 18.03.2024, 21:03

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]

robert0204
Beiträge: 9
Registriert: 19.03.2021, 23:09
System: CCU

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

Beitrag von robert0204 » 18.03.2024, 21:15

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
Zuletzt geändert von robert0204 am 18.03.2024, 21:17, insgesamt 1-mal geändert.

JensDev
Beiträge: 20
Registriert: 10.03.2020, 11:12
System: Alternative CCU (auf Basis OCCU)
Wohnort: Köln
Hat sich bedankt: 4 Mal
Danksagung erhalten: 2 Mal

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

Beitrag von JensDev » 18.03.2024, 21:17

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

robert0204
Beiträge: 9
Registriert: 19.03.2021, 23:09
System: CCU

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

Beitrag von robert0204 » 18.03.2024, 21:21

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");

JensDev
Beiträge: 20
Registriert: 10.03.2020, 11:12
System: Alternative CCU (auf Basis OCCU)
Wohnort: Köln
Hat sich bedankt: 4 Mal
Danksagung erhalten: 2 Mal

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

Beitrag von JensDev » 18.03.2024, 21:30

Bau mal das Skript Schritt für Schritt, Zeile für Zeile auf und teste jeweils - irgendwo muss da ja noch was sein..

robert0204
Beiträge: 9
Registriert: 19.03.2021, 23:09
System: CCU

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

Beitrag von robert0204 » 19.03.2024, 20:35

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

Bembi
Beiträge: 92
Registriert: 04.02.2015, 02:15
System: CCU und Access Point
Wohnort: Bochum
Hat sich bedankt: 7 Mal
Danksagung erhalten: 14 Mal

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

Beitrag von Bembi » 16.05.2024, 00:56

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
1 x CCU3 mit aktuell 36 Geräten (HM, HmIP, HmIPW)
1 x CCU3 mit aktuell 66 Geräten (HM, HmIP, HmIPW)
2 x CCU2 und einen Schrank voll mit Restbeständen

Antworten

Zurück zu „HomeMatic allgemein“