Solar EPEVER EPSOLAR u.ä. [98_ModbusEPEVER] [98_ModbusUPOWER] [98_ModbusIPOWER]

Begonnen von laserrichi, 09 Juni 2020, 20:05:50

Vorheriges Thema - Nächstes Thema

laserrichi

Hallo zusammen,

hier möchte ich euch mein erstelltes Modul vorstellen zur Anbindung von Solar Ladegeräten des Herstellers EPEVER.
Getestet wurde es mit einen  EPSolar Tracer 2210A. Die Modbus Readings sind bei allen EPSOLAR und baugleichen Geräten vermutlich gleich. Nicht alle Geräte können aber alle Readings.
Neu jetzt auch für die UPOWER Geräte das 98_ModbusUPOWER.pm Modul da diese abweichen. Leider kann ich das nicht testen da ich kein Upower Gerät habe.

Ich habe soweit möglich alle Readings eingebaut. Sie werden mit dem Intervall den man bei define mitgibt abgefragt. Zumindest die Realtime Werte werden genau in dem Intervall gelesen.
Die anderen Werte werden mit Faktor 180 abgefragt. Tägliche Statistikwerte werden mit Faktor 60 abgerufen.

Das setzen der Uhrzeit funktioniert jetzt auch aus FHEM, einfach nachdem man abgefragt hat genauso entsprechend editieren und setzen. Ebenso die Schaltzeiten können gesetzt werden.

Zwecks besserer Darstellung und Handhabung verwende ich hier folgende Attribute:

Stateformat:

<b>Batterie:</b> <span style='color:#AAFF00'> BattStatus <br>Spannung: BattSpannung Strom: BattStrom A </span><br>
<b>Solarlader:</b><div style='color:#22FFFF'>LadePower: BattLadeLeistung LadeStrom: BattLadeStrom </div>
<b>Panel:</b> <div style='color:#FFDD00'> Leistung: PanelLeistung Spannung: PanelSpannung Strom: PanelStrom</div>
<b>Last:<br> Leistung: </b><span style='color:red'>LastLeistung </span>Spannung: <span style='color:red'>LastSpannung </span> Strom:<span style='color:red'> LastStrom </span><br>
<b>Status: <span style='color:#3333FF'>SolarladerStatus</b>

WebCmd:

ChargingOnOff:ManualControlLoad:DefaultControlLoad:LoadControllingMode:EnableLoadTest:ForceLoad

webCmdLabel:

ChargingOnOff:ManualControlLoad
:DefaultControlLoad:LoadControllingMode
:EnableLoadTest:ForceLoad

Ich hoffe das ist dem einen oder anderen nützlich ist.

Über Feedback freue ich mich natürlich. Anregungen für Verbesserungen oder Änderungen nehme ich gerne entgegen.

PS:Manche Readings sind English Deutsch etwas gemixt, bei so vielen Readings mit Spannungen Load usw... war es nicht einfach sinnlich auch zu erkennen für was das alles ist.

01.05.2021 Update Modul, diverse Anpassungen (Changelog im Modul)

Modul Du darfst diesen Dateianhang nicht ansehen.

14.10.2021 Modul Du darfst diesen Dateianhang nicht ansehen.

30.03.2022 Modul Du darfst diesen Dateianhang nicht ansehen.

04.04.2022 Modul Du darfst diesen Dateianhang nicht ansehen.

06.03.2024 Modul Du darfst diesen Dateianhang nicht ansehen.
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

the ratman

jetzt muß er auch noch bilder zu machen ... wie soll ich mich da beherrschen und die neue fw nicht aufspielen? die gier übersteigt langsam die angst vor dem verbruzzeln des teils *g*.
→do↑p!dnʇs↓shit←

mfischer-ffb

Hallo laserrichi,

vielen Dank für dein Modul, funktioniert hier soweit an meinen beiden EPEVER XTRA4415N und Tracer 1210AN ganz gut.

Aufgefallen ist mir dass der BattCapacityRemaining Wert (SOC) nur selten aktualisiert wird und ich das Laden nicht ausschalten kann, es steht zwar dann off im reading aber es wird weiter geladen....

Hab aber im quelltext keinen fehler entdecken können..
geht das bei dir problemlos ??

Danke
Gruß
Markus


laserrichi

Hallo Markus,

BatteryCapacityRemaining  kann ich bestätigen, gerade ausprobiert. Wird obwohl es eigentlich jedesmal abgefragt werden soll nicht immer aktualisiert. Evtl. ein Thema der Anzahl Readings die in einem rutsch gelesen werden, das er sich da verschluckt.

Was meinst du mit Laden ausschalten ? Die ganzen Parameter hab ich von der epever modbus doku eingepflegt, es gehen nicht alle parameter bei jedem Laderegler. Und manche haben abhängigkeiten zueinander.
Welches Reading meinst du ? (ManualControlLoad  wenn du meinst, das ist der Lastausgang)
Soweit ich weis kann man das Laden der Batterie nicht abschalten, nur die Last.
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

laserrichi

Ok, habe bei mir mit verbose 4 gesehen das ich viele ProcessRequestQueue called from HandleTimeout  bekomme.

Ich habe mal im Modul die zusammengefassten Readings reduziert:

"i" =>  {       'combine' => '8',

somit hat es BattcapacityRemaining auch aktualisiert. Aber trotzdem hab ich noch HandleTimeout.
Vieleicht ist der einfach mit der Summe an Readings auf einmal überfordert. Evtl. noch weiter reduzieren. Standard wäre hier 1, aber dann wird für jedes Reading eine Abfrage gestartet.... Oder man baut hier delay noch mit ein zwischen den Requests.
Hier könnte man jetzt sagen, ich will manch werte doch nicht so oft lesen um den Traffic zu reduzieren.
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

mfischer-ffb


Danke jetzt gehts mit

"i" =>  {       'combine' => '8',

ich meinte "ChargingOnOff"  damit sollte ja eigentlich das Laden abgeschaltet werden... ist aber nicht so wichtig, wollte ich nur nutzen zur Notabschaltung falls eine Zellenspannung zu hoch ist.

Danke
Gruß
Markus

laserrichi

ah ok, jetzt weis ich was du meinst. In den älteren Dokus steht das nicht drin.

Charging device on/off  Coil 0
1 Charging device on 0 Charging device off

Vieleicht ist das vorgesehen für die Zukunft oder ein anderes Gerät. Bei mir steht bzw. stand der immer auf Off.

mich würde interessieren was bei dir mit verbose im log steht, ob du auch diese HandleTimeout hast.

RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

mfischer-ffb

#7
Hi,

Ja ab und zu kommt auch ein Timeout aber sonst läuft jetzt alles prima...


laserrichi

Update des Moduls, korrektur der Batterietemperatur, Register zählt rückwärts bei negativen Temperaturen und hatte 655°C   :-)
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

springber

#9
Hallo,

ich habe mir auch ein Device (kein Modul) für einen Solarlader EPEVER LS2024B erstellt. Als Beitrag für das Modul meine Einstellung für das Schreiben von Datum und Uhrzeit:

wenn man bei setexpr einen Einzeiler eingibt, ist der zwar ziemlich lang aber es geht. Also habe ich das geändert und kann Datum und Zeit vom Solarlader über set ändern. Das Eingabeformat für das set ist wie das reading TT.MM.YYYY hh.mm.ss also z.B. 02.02.2021 12:04:36. Zu beachten ist, die Zahlen müssen immer 2 (oder 4) Stellig sein - also 3.2.21 12:4:56 geht nicht - aber 03.02.2021 12:04:56 schon.  :)

attr EPSOLAR_1 obj-h36883-expr sprintf("%02d.%02d.20%02d %02d:%02d:%02d", hex(substr($val,4,2)), hex(substr($val,10,2)), hex(substr($val,8,2)), hex(substr($val,6,2)), hex(substr($val,0,2)), hex(substr($val,2,2)))
attr EPSOLAR_1 obj-h36883-len 3
attr EPSOLAR_1 obj-h36883-poll 1
attr EPSOLAR_1 obj-h36883-polldelay X1
attr EPSOLAR_1 obj-h36883-reading RTC
attr EPSOLAR_1 obj-h36883-set 1
attr EPSOLAR_1 obj-h36883-setexpr sprintf("%02X", substr($val,14,2)).sprintf("%02X", substr($val,17,2)).sprintf("%02X", substr($val,0,2)).sprintf("%02X", substr($val,11,2)).sprintf("%02X", substr($val,8,2)).sprintf("%02X", substr($val,3,2))
attr EPSOLAR_1 obj-h36883-showGet 1
attr EPSOLAR_1 obj-h36883-textArg 1
attr EPSOLAR_1 obj-h36883-unpack H*



Das Thema mit falschen Temperaturwerten habe ich mit unpack "s>" gelöst (unpack "s>" = signed short integer in big endian -> high order byte at the lowest address)


attr EPSOLAR_1 obj-i12561-expr $val/100
attr EPSOLAR_1 obj-i12561-poll 1
attr EPSOLAR_1 obj-i12561-reading Temperature
attr EPSOLAR_1 obj-i12561-showGet 1
attr EPSOLAR_1 obj-i12561-unpack s>



Für die Aktualisierung habe ich auch ein at Device erstellt - das ist inaktiv und ich aktualisiere Datum und Uhrzeit manuell über "execNow". Das ist für mich OK weil die Urzeit genau genug läuft so dass ich eigentlich nur zur Zeitumstellung die Zeit aktualisieren muss (ja auch das ist noch eine Idee zum Automatisieren... ;)).

defmod EPSOLAR_1_set_date_time at *01:01:01 {\
  my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);;\
  $year = $year+1900;;\
  $mon = $mon+1;;\
  #$sec = 00;;\
  #$min = 00;;\
  #$hour = 10;;\
  #$mday = 02;;\
  #$mon = 03;;\
  #$year=21;;\
  #print "Aktuelles Datum ist : $mday.$mon.$year $hour:$min:$sec\n\r\n\r";;\
  my $alles = sprintf("%02d", $mday)."\.".sprintf("%02d", $mon)."\.".sprintf("%04d", $year)." ".sprintf("%02d", $hour).":".sprintf("%02d", $min).":".sprintf("%02d", $sec);;\
  Log 1, "set EPSOLAR_1 RTC $alles";;\
  fhem("set EPSOLAR_1 RTC $alles");;\
}

springber

Hallo,

ich habe das aktualisierte Modul mal getestet. :) :) :) gefällt mir gut -prima!

Bei den Statistikwerten stimmt es bei mir nicht. (ich habe einen LS3024B im Einsatz). Die Werte wären schön, sind aber zu hoch. Im Anhang zwei screenshots, einmal aus der EPEVER Solarstation Monitor V1.95 und einmal aus fhem mit dem Modul ModbusEPEVER Stand 9.2.21.

Der Wert für EnergieGewinnJahr mit 31.5 kWh stimmt in fhem und im Solarstation Monitor überein. Im Modul ist hier keine unpack Funktion angegeben. Es wird auch nur ein Register gelesen.
Die anderen Werte unterschieden sich stark, im Modul werden 2 Register gelesen und die unpack Funktion 'N' verwendet. in der Perl Dokumentation finde ich für 'N' [long integer in network order]. Leider bin ich nicht Spezialist genug - und in der Dokumentation ist der Variablentyp nicht angegeben. Ich habe verschiedene Pack funktionen ausprobiert aber keine hat die gleichen Werte ergeben. Wenn ich die pack Funktion auskommentiert habe, haben die Werte übereingestimmt. Siehe drittes angehängtes Bild.

Die Readings BatteryRatedPower ratedInputPower haben mit der unpack Funktion 'N' zu hohe Werte angegeben (167936.25 W und 336159.45 W) mit der unpack Funktion auskommentiert ist die Größenordnung schon besser:

Die Werte von BatteryRatedPower (64.64 W bei BatteryRatedCurrent 30A und BatteryRatedVoltage 24V) scheint nicht zu stimmen. Es müsste ca, 720W herauskommen. Wenn man großügig ist, stimmt der Wert um Faktor 10 nicht - die Dokumentation (V2.3) sagt aber aus dass der Wert durch 100 zu teilen ist (aber da steht auch dass BatteryRatedPower in °C ist) also könnte die Dokumentation durchaus falsch sein.

Ähnlich mit ratedInputPower (189.28 W bei ratedInputCurrent 30 A und ratedInputVolt 60 V) meiner Rechnung nach müsse das 1800 W ergeben.

Wir bei den beiden Reading statt geteilt durch 100 nur durch 10 geteilt stimmen die Werte mit 646 W (24V*30A=720W) und 1892 W (60 V * 30A = 1800 W) näherungsweise.

Statt: 'expr' => '$val=($val/100)." W"' mit 'expr' => '$val=($val/10)." W"' gerechnet.

Viele Grüße und Danke für das Modul  :)

springber



laserrichi

also ich kann das nicht so nachvollziehen. Bei mir stimmen die Werte.
und habe auch mal mit unpack gespielt und bekomme nur mit N die richtigen Werte

Lasse ich unpack bei den Readings weg dann habe ich überall 0
EnergiegewinnJahr lese ich jetzt auch das 2 Register mit aus.

ratedinput hat dein Regler 1500W  denn der ist mit 50V eigentlich angegeben, ok vieleicht hat er ja doch 60V und nicht 50V wie im China Datenblatt :)
Aber 189.28W ist schon ein sehr seltsamer wert.

Hast du das Modul auch so rein oder nur teile in dein Modul so eingebaut ?
Denn ich habe global im Modul für h und i  das defrefregs gesetzt das bei 2 gelesenen readings beide vertauscht damit high register auch vorne dran steht, das sieht mir nach dem Problem bei Dir aus.

my %ModbusEPEVERdeviceInfo = (
               "c" =>  {       'defPoll' => '1',
                                'defSet' => '1',
                            'defShowGet' => '1',
                                 'write' => '5',
                       },
               "d" =>  {       'defPoll' => '1',
                            'defShowGet' => '1',
                       },
               "h" =>  {       'combine' => '8',
                               'defPoll' => '1',
                            'defRevRegs' => '1',
                            'defShowGet' => '1',
                                 'write' => '16',
                       },
               "i" =>  {       'combine' => '8',
                               'defPoll' => '1',
                            'defRevRegs' => '1',
                            'defShowGet' => '1',
                          }
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

kurt6908

Hallo,

ich bin auf dieses Modul gestoßen und bin hoch erfreut ;=)

Ich erwarte Mitte Mai meinen neuen UP3000-M6322 Inverter/Charger von EPever (damit will ich mit meiner Inselanlage meinen Plug-In-Hybriden laden).

So wie ich es verstanden habe, sollte das Modul ja auch mit diesem Gerät gehen. Aber meine Frage:

Wie schließe ich das Gerät an? Ich habe mir das RS485 an USB-Anschluss dazu gekauft, reicht das oder muss ich noch ein anderes Modul oder Installation vornehmen?

Wenn das Gerät da ist und die Anlage umgestellt ist, dann stelle ich mich natürlich gerne zum testen bereit ;=)

Viele Grüße

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger

laserrichi

Hallo Kurt,
freut mich zu lesen was du vor hast.
Ich vermute das es auch mit dem Teil laufen wird, denn es gibt von epever nur eine Doku zu dem Modbus Protokoll.

Aber der RS485 zu USB von denen wird mit dem Raspberry nicht laufen.
Denn der USB Treiber im Linux bildet hier keine serielle Schnittstelle nach sondern erscheint als Modem.
Hatte das schon mal bei einem User hier der das verzweifelt versuchte.
Es gibt aber einfache RS485 Serial to USB Adapter. Dann muss man nur die RJ45 Verbindung auf den Adapter herstellen.
Ich habe das nicht direkt mit USB  an den Raspberry sondern gehe über einen ESP mit wlan da ich das ja im Garten habe.

Wird sicher interessant da du ja auch gleich Wechselrichter mit drin hast.
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

kurt6908

Hallo laserrichi,

vielen Dank für den Hinweis .... hätte mich da wohl dämlich gesucht, wenn es nicht gegangen wäre.

Dann werde ich mich mal auf die Suche nach einem seriellen USB-Adapter mit RJ45 machen, sollte ja machbar sein ;=)

Ich habe mir auch noch den WLAN-Adapter von EPEver als Notlösung in der Garage besorgt. Da meine Garage aber vom Haus entfernt ist, manage ich alles über einen mit LTE/VPN-verbundenen Rapsi .... bis jetzt funzt es tatellos ;=)

Brauche ich zu Deinem Modul noch das 98_Modbus.pm oder reicht Deines alleine?

Wenn der Wechselrichter geliefert und montiert ist, kann ich technisch mit einsteigen und kann testen, ob Alles so richtig ankommt. Wäre schön, wenn Dein Modul dann im automatischen Update mitkommen würde ;=)

Jetzt brauche ich noch eine Lösung um von FHEM auf das VW-WeConnect zu kommen, dann kann der automatische Ladevorgang bei genügen Sonneneinstrahlung starten ;=)

Viele Grüße und bis bald (wenn die Montage erfolgt ist ;=)

Kurt
3* Raspberry Pi (2 über LTE/VPN), 5* Cul, 3* FS20, 4* FHT, 6* HM, Somfy, Solarlog, WMBus/EnergyCam, AVM FritzBox, 3* AVM Powerline, Alexa, Tasmota/MQTT, Rademacher DuoFern, EPEver HiPower/ModBus, go-eCharger