Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?
Moderator: Co-Administratoren
-
- 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 ?
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"?
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"?
-
- 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 ?
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
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
-
- 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 ?
Ja ich meinte das Beispiel von Indi55.
Fehler :
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]
-
- 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 ?
mein Script sieht so aus:
Ich habe dementsprechend meine IP Vom Wechselrichter eingetragen und Port 1502
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.
-
- 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 ?
Versuch mal die Variable wert auch zu deklarieren - ein var vor wert = .. setzen:
Gruß
Jens
Code: Alles auswählen
var wert = ((wert1 * 65536) + wert2) /1000; ! oder über wert.Exp10()
Jens
-
- 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 ?
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");
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");
-
- 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 ?
Bau mal das Skript Schritt für Schritt, Zeile für Zeile auf und teste jeweils - irgendwo muss da ja noch was sein..
-
- 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 ?
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
PV-Momentanleistung, PV-Gesammtleistung, PV-Status und PV-Fehlernummer"
Die Sytemvariablen müssen aber PV Momentanleistung, PV Gesammtleistung usw. sein
-
- Beiträge: 109
- Registriert: 04.02.2015, 02:15
- System: CCU und Access Point
- Wohnort: Bochum
- Hat sich bedankt: 10 Mal
- Danksagung erhalten: 17 Mal
Re: Solaredge WR über RS485 / Modbus TCP auslesen und Daten in die Homematic schreiben ?
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
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
1 x CCU3 mit aktuell 66 Geräten (HM, HmIP, HmIPW)
2 x CCU2 und einen Schrank voll mit Restbeständen