Modbus > Register bei E3DC S10 Energy Storage - Readings scrambled?

Begonnen von juanmax, 26 Juli 2017, 21:10:36

Vorheriges Thema - Nächstes Thema

hasenhirn

Hallo daelch,

dazu kann ich in der Modbusdoku keine Register finde.
Eventuell werden die Werte einfach aufgerechnet

Gruß

Thomas

daelch

Vielen Dank für deine  schnelle Antwort! Dann werde ich es Mal mit FHEM versuchen.

hasenhirn

Hallo daelch,

ich habe noch mal in der Dokumentation der S10 nachgeschaut und Du kannst es über das RSCP-TAG TAG_DB_DC_POWER mit RSCP auslesen. Das ist natürlich eine andere Hausnummer als Modbus ;-)

Gruß

Thomas

daelch

Danke, Hasenhirn. Das schaue ich mir mal an.

An alle gerichtet: springt Eure Anlage auch öfter mal auf disconnect? Ich muss dann entweder die Anlage neustarten oder  DHCP an und ausschalten, damit aus e3dc Portal oder auch FHEM wieder eine Verbindung bekommt. Im Netzwerk (Fritzbox 7590 und unifi 48 Port PoE Switch ist nichts Auffälliges zu sehen.

hasenhirn

das Problem mit disconnect konnte ich bei mir noch nicht beobachten.
Hast Du die IP fest vergeben / von Hand oder Mischbetrieb?

Yeeha

Hallo zusammen,

ihr seid offenbar ein paar Schritte weiter als ich. Wäre jemand von euch so nett, mir mit den ersten Schritten zu helfen von der S10 via Modbus zu Fhem?
Um diesen Thread nicht zu stören, habe ich einen neuen aufgemacht:
https://forum.fhem.de/index.php/topic,109735.msg1037180.html#msg1037180
Danke!

Yeeha

daelch

Zitat von: hasenhirn am 24 März 2020, 13:08:41
das Problem mit disconnect konnte ich bei mir noch nicht beobachten.
Hast Du die IP fest vergeben / von Hand oder Mischbetrieb?

Danke für den Hinweis. Ich habe die IP nun fest im Menü der S10 eingetragen. Die via DHCP zugeteilte IP 192.168.178.92 ist in der Anlage immer auf 192.168.192.168 umgesprungen.
Nach Ausschalten von DHCP im Menü und Router gibt seitdem keine Disconnects mehr.

Yeeha

So, dank daelch bin ich jetzt auch fast soweit. Allerdings muss irgendwo ein Fehler stecken, und ich weiß nicht wie ich den einkreisen kann.

Grundsätzlich ist eine Verbindung von meiner S10 zu FHEM da. Wenn ich die Modbus auf der S10 mal weg- und wieder zuschalte, dann sehe ich den Log-Eintrag.
2020.04.03 18:23:23 3: 192.168.178.27:502 disconnected, waiting to reappear (S10)
2020.04.03 18:24:29 3: 192.168.178.27:502 reappeared (S10)

Ich sehe beim Objekt S10 außerdem u.a.
LASTOPEN 1585931069.10524 (das ist 04/03/2020 @ 4:24pm (UTC))
lastUpdate 1585931288.36823 (das ist 04/03/2020 @ 4:28pm (UTC))

Und außerdem
Readings:
state opened 2020-04-03 18:24:29

Ich habe ein Device EnergieLog, da steht u.a.
Regexp parts
S10:Leistung:.*   
S10:battsoc:.*   
S10:battwatt:.*   
S10:gridwatt:.*   
S10:homewatt:.*   

Außerdem steht da
STATE active
TYPE FileLog

Allerdings ist e3dc-2020-04.log leer. Zeitstempel der Datei übrigens von gestern Abend, als ich das erstemals aufgesetzt habe.

Wo muss ich den Fehler suchen?

daelch

Was steht bei Dir im Modbus Menü am Display der Anlage, wenn Du den Pfeil nach rechts klickst? Protokoll E3DC, Gerät 1, Port 502?
Ist dort Modbus TCP auch aktiviert?

Yeeha

Jep. Dort habe ich testhalber mal TCP aus- und wieder angeschaltet. Daraufhin kam das "disconnected" und "reappeared" im Log von FHEM. Tut also soweit.
Der Lastopen und der Lastupdate sind wohl auch davon ausgelöst - war jedenfalls alles heute am späten Nachmittag.

Yeeha

Hat denn tatsächlich keiner eine Idee, wie ich den Fehler einkreisen kann?

Wenn ich scanModbusObjects setze, dann bekomme ich übrigens aktualisierte ,,Readings", also generell können da schon Daten fließen.

Beispiel:
scan-h00019
hex=5331, string=S1, s=12627, s>=21297, S=12627, S>=21297
2020-04-10 09:43:23

Aber warum ist der Intervall (bei mir: 60) unwirksam, und warum kommt nichts ins Logfile?

Yeeha

Ok, anscheinend rede ich hier mit mir selber.  :(
Sonst keiner mehr da?

Ich habe mal alle devices, die mit der S10 zu tun haben, gelöscht. Dann FHEM neu gestartet. Neu das Device S10 angelegt. Logfile genau gelesen. Da steht:

2020.04.12 23:17:59 3: S10: defined with id 1, interval 20, protocol TCP, mode master, connection to 192.168.178.27:502
2020.04.12 23:17:59 3: Opening S10 device 192.168.178.27:502
2020.04.12 23:17:59 3: S10 device opened
2020.04.12 23:18:01 1: PERL WARNING: Argument "" isn't numeric in numeric le (<=) at (eval 79) line 1.
2020.04.12 23:18:01 3: eval: { if (ReadingsVal("S10", "gridwatt0", "") <= 32768 ) {(ReadingsVal("S10", "gridwatt0", ""))} else {(ReadingsVal("S10", "gridwatt0", "")) - 65536 }; }
2020.04.12 23:18:01 1: PERL WARNING: Argument "" isn't numeric in numeric le (<=) at (eval 80) line 1.
(...)

Ok, es sind nur Warnungen, keine Fehlermeldungen. Tapfer weiter gemacht. Was zeigt die S10?

S10   Batterie    -276 Watt
S10 Batterie_Status 75.0 %
S10 Gesamleistung 0 Watt
S10 Verbrauch 276 Watt
S10 Netz -2 Watt
S10 NotStrom 0

Oh, da kommen ja aktuelle Werte!? Ich meine, ich hätte alles genauso gemacht wie beim ersten Mal, aber manchmal hilft wohl der alte Trick mit dem Löschen und nochmal Neuaufsetzen...  :D Das Diagramm scheint sich auch allmählich zu füllen.

Also, wo auch immer das Problem lag: Es läuft anscheinend jetzt. Danke für eure Vorarbeiten, das hätte ich alleine nie hin bekommen!

daelch


hdgucken

Hallo Leute,

erst mal vielen, vielen Dank für Eure super Arbeit ! Das hat mir viel Zeit erspart  :)
Habe dann hier angesetzt:

Zitat von: blofield am 02 September 2017, 16:04:19
Hallo Juanmax, ...

Das interessante ist, dass alle Readings im Register jeweils -2 zur E3DC Dokumentation sind...

Das hat mir auch keine Ruhe gelassen, weshalb ich das Ganze genauer betrachtet habe.
Dabei ist mir aufgefallen, dass man alle Register ab 40067 mit -1 auslesen kann, wenn man sie abweichend zur E3DC Doku als 16 Bit Werte betrachtet !
Dann noch das passende unpack s> für die signed Werte gewählt und es passt alles  8)
Damit spart man sich die komplizierten Konstrukte in den User Readings  ;)
Bei den String Strömen muss man noch die Kommastelle mit "expr $val / 100" korrigieren.

Hier meine Konfig:
(die hier fehlenden "userattrib" erstellt das Modul selbstständig)

Update vom 03.05.2020:
obj-h-40083-map 0:nicht unterstützt, ... (erspart uns das User Reading Notstrom)
obj-h-40083-reading Notstrom (das Reading EPS-Status umbenannt in Notstrom)
;)



define S10E ModbusAttr 1 20 192.168.123.456:502 TCP
attr S10E alias E3/DC S10E
attr S10E devStateIcon opened:rc_WEB@32CD32  disconnected:rc_WEB@red
attr S10E event-min-interval .*:3600
attr S10E event-on-change-reading .*
attr S10E icon measure_photovoltaic_inst@yellow
attr S10E obj-h40003-len 16
attr S10E obj-h40003-poll 1
attr S10E obj-h40003-reading Hersteller
attr S10E obj-h40003-unpack a16
attr S10E obj-h40019-len 16
attr S10E obj-h40019-poll once
attr S10E obj-h40019-reading Modell
attr S10E obj-h40019-unpack a16
attr S10E obj-h40035-len 16
attr S10E obj-h40035-poll once
attr S10E obj-h40035-reading Seriennummer
attr S10E obj-h40035-unpack a16
attr S10E obj-h40051-len 16
attr S10E obj-h40051-poll once
attr S10E obj-h40051-reading Firmware
attr S10E obj-h40051-unpack a16
attr S10E obj-h40067-poll 1
attr S10E obj-h40067-reading Solarleistung
attr S10E obj-h40069-poll 1
attr S10E obj-h40069-reading Batterieleistung
attr S10E obj-h40069-unpack s>
attr S10E obj-h40071-poll 1
attr S10E obj-h40071-reading Hausleistung
attr S10E obj-h40073-poll 1
attr S10E obj-h40073-reading Netzleistung
attr S10E obj-h40073-unpack s>
attr S10E obj-h40077-poll 1
attr S10E obj-h40077-reading Wallboxleistung
attr S10E obj-h40079-poll 1
attr S10E obj-h40079-reading WallboxSolarleistung
attr S10E obj-h40081-poll 1
attr S10E obj-h40081-reading Netzstatus
attr S10E obj-h40082-poll 1
attr S10E obj-h40082-reading Batterieladezustand
attr S10E obj-h40083-map 0:nicht unterstützt, 1:aktiv, 2:inaktiv, 3:nicht verfügbar, 4:MSS aus oder falsche Pos.
attr S10E obj-h40083-poll 1
attr S10E obj-h40083-reading Notstrom
attr S10E obj-h40084-poll 1
attr S10E obj-h40084-reading EMS-Status
attr S10E obj-h40087-poll 1
attr S10E obj-h40087-reading Wallboxstatus
attr S10E obj-h40095-poll 1
attr S10E obj-h40095-reading String1-Spannung
attr S10E obj-h40096-poll 1
attr S10E obj-h40096-reading String2-Spannung
attr S10E obj-h40098-expr $val / 100
attr S10E obj-h40098-poll 1
attr S10E obj-h40098-reading String1-Strom
attr S10E obj-h40099-expr $val / 100
attr S10E obj-h40099-poll 1
attr S10E obj-h40099-reading String2-Strom
attr S10E obj-h40101-poll 1
attr S10E obj-h40101-reading String1-Leistung
attr S10E obj-h40102-poll 1
attr S10E obj-h40102-reading String2-Leistung
attr S10E userReadings Eigenverbrauch { ReadingsVal("S10E","Netzstatus",0) & 0xFF;; },
Autarkie { (ReadingsVal("S10E","Netzstatus",0) & 0xFF00) >> 8;; },
Abregelung { ( ReadingsVal("S10E","EMS-Status","") & 0x10 ) == 16 ? return "aktiv" : return "inaktiv";; }



Gruß Thomas

hdgucken

#59
Hier noch meine "Anzeige" für Euch ...  ;)

Auf neuesten Stand aktualisiert (30.04.2020) :)



define E3DC readingsGroup S10E:<Batteriestatus>,Batterieladezustand S10E:<Solarleistung>,Solarleistung
S10E:<Hausverbrauch>,Hausleistung S10E:<Netzbezug>,Netzleistung S10E:<Batterieleistung>,Batterieleistung
S10E:<Wallboxverbrauch>,Wallboxleistung S10E:<Wallbox-Sonnenstrom>,WallboxSolarleistung
S10E:<Autarkie>,Autarkie S10E:<Eigenverbrauch>,Eigenverbrauch S10E:<Abregelung-70%>,Abregelung S10E:<NotStrom>,Notstrom
attr E3DC valueFormat {
  Batterieladezustand => "%d %%", Hausleistung => "%d Watt", Solarleistung => "%d Watt",
  Netzleistung => "%d Watt", Batterieleistung => "%d Watt", Wallboxleistung => "%d Watt",
  WallboxSolarleistung => "%d Watt", Autarkie => "%d %%", Eigenverbrauch => "%d %%"
}
attr E3DC valueStyle {    if($READING eq "Batterieladezustand" && $VALUE > 85) { 'style="color:limegreen;;text-align:right"' }
  elsif($READING eq "Batterieladezustand" && $VALUE > 60) { 'style="color:forestgreen;;text-align:right"' }
  elsif($READING eq "Batterieladezustand" && $VALUE  > 35) { 'style="color:yellow;;text-align:right"' }
  elsif($READING eq "Batterieladezustand" && $VALUE  > 19) { 'style="color:orange;;text-align:right"' }
  elsif($READING eq "Batterieladezustand" && $VALUE  < 20 ) { 'style="color:red;;text-align:right"' }
  elsif($READING eq "Hausleistung" && $VALUE > 3000){ 'style="color:red;;text-align:right"' }
  elsif($READING eq "Hausleistung" && $VALUE > 1500){ 'style="color:tomato;;text-align:right"' }
  elsif($READING eq "Hausleistung" && $VALUE > 500) { 'style="color:orange;;text-align:right"' }
  elsif($READING eq "Hausleistung" && $VALUE >= 0) { 'style="color:limegreen;;text-align:right"' }
  elsif($READING eq "Solarleistung" && $VALUE > 0){ 'style="color:yellow;;text-align:right"' }
  elsif($READING eq "Solarleistung" && $VALUE == 0){ 'style="color:gray;;text-align:right"' }
  elsif($READING eq "Netzleistung" && $VALUE < 0){ 'style="color:limegreen;;text-align:right"' }
  elsif($READING eq "Netzleistung" && $VALUE > 0){ 'style="color:red;;text-align:right"' }
  elsif($READING eq "Netzleistung" && $VALUE == 0){ 'style="color:gray;;text-align:right"' }
  elsif($READING eq "Batterieleistung" && $VALUE > 0){ 'style="color:yellow;;text-align:right"' }
  elsif($READING eq "Batterieleistung" && $VALUE == 0){ 'style="color:gray;;text-align:right"' }
  elsif($READING eq "Batterieleistung" && $VALUE < 0){ 'style="color:limegreen;;text-align:right"' }
  elsif($READING eq "Notstrom" && $VALUE eq "inaktiv") { 'style="color:gray;;text-align:right"' }
  elsif($READING eq "Notstrom" && $VALUE eq "aktiv") { 'style="color:lime;;text-align:right"' }
  elsif($READING eq "Notstrom" && $VALUE eq "nicht verfügbar") { 'style="color:orange;;text-align:right"' }
  elsif($READING eq "Notstrom" && $VALUE eq "unbekannt") { 'style="color:red;;text-align:right"' }
  elsif($READING eq "Wallboxleistung" && $VALUE == 0) { 'style="color:gray;;text-align:right"' }
  elsif($READING eq "Wallboxleistung" && $VALUE > 0) { 'style="color:limegreen;;text-align:right"' }
  elsif($READING eq "WallboxSolarleistung" && $VALUE == 0) { 'style="color:gray;;text-align:right"' }
  elsif($READING eq "WallboxSolarleistung" && $VALUE > 0) { 'style="color:yellow;;text-align:right"' }
  elsif($READING eq "Abregelung" && $VALUE eq "inaktiv") { 'style="color:gray;;text-align:right"' }
  elsif($READING eq "Abregelung" && $VALUE eq "aktiv") { 'style="color:red;;text-align:right"' }
  elsif($READING eq "Autarkie" && $VALUE == 0) { 'style="color:gray;;text-align:right"' }
  elsif($READING eq "Autarkie" && $VALUE > 0)  { 'style="color:limegreen;;text-align:right"' }
  elsif($READING eq "Eigenverbrauch" && $VALUE == 0) { 'style="color:gray;;text-align:right"' }
  elsif($READING eq "Eigenverbrauch" && $VALUE > 0)  { 'style="color:limegreen;;text-align:right"' }
}