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

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

Vorheriges Thema - Nächstes Thema

blofield

Hallo Baeda,

schön das der Beitrag Dir weiterhelfen konnte.

Zu den negativen Werten: Ich frage bei mir jetzt etwas häufiger ab und habe festgestellt, dass ich hin und wieder negative oder aber auch hohe positive Werte auslese, welche den Graph zerlegen. Ich vermute, dass diese Werte bei Umkehr oder größeren Schwankungen entstehen oder aber durch die Latenz der Auslesung der einzelnen Werte in Kombination mit der Berechnung der Userreadings "entstehen". Das ist noch nicht 100%ig und daran arbeite ich noch ;)
Bei mir läuft FHEM auf einem Raspi3 und ich nutze DBLog, die recht groß ist. Das auslesen der S10 Parameter dauert daher schon etwas über eine Sekunde, da kann sich dann schon wieder viel geändert haben ...

Und bei der 4294900000 habe ich mir tatsächlich experimentell angenähert und dann willkürlich etwas festgelegt, denn mit dem richtigen uint32 Wert wollte es nicht funktionieren. Auch hier kann ich leider nicht sagen, warum das so ist, dazu finde ich auch die Doku über Modbus TCP und vor allem die Implementierung im S10 etwas sehr spärlich.
Funktioniert es denn bei Dir wenn Du richtigerweise 4294967295 setzt?

Grüße
blofield

Baeda

Hallo blofield,

ich habe den Wert jetzt einfach mal auf 4294967295 angepasst, was auch funktioniert, da ja nur in den seltenen Fällen (vermutlich) bei Erreichen des Schwellwertes die Option zum Tragen kommt, den Wert aus den anderen Werten zu errechnen.

Ich habe auch einen Raspi3, das log liegt (zum Teil noch) lokal.
Seit knapp 2 Monaten habe ich nun die E3DC angebunden und schon nach kurzer Zeit gemerkt, dass man mit dem lokalen Log nicht weit kommt. Daher habe ich diese Werte dann gleich in den DB Server umgeleitet.

Im Großen und Ganzen eine schöne Lösung, nur eine Sache wurmt mich persönlich noch:
Ich habe beim Kauf der Anlage die KfW Finanzierung in Anspruch genommen (es rechnet sich halt...), ergo wird bei 50% Einspeisung abgeregelt.
Man sieht das auch schön an den Graphen: Der Akku ist voll, und die Netzeinspeisung ist immer bei etwa 5kW.

Interessieren würde mich, wieviel Energie ich ab dem Zeitpunkt über die Zeit verschenke.
Es gibt ja (vermutlich) keine Möglichkeit, einen Wert zu ermitteln, etwa "mögliche Leistung - "aktuelle Leistung" = "verschenkte Leistung"?

Viele Grüße,
Baeda


blofield

Hallo Baeda,

schön das es klappt.
Poste doch mal einen Graphen, denn eigentlich müsste ja bei dem von Dir beschriebenen Fall "sunwatt" trotzdem mehr als 5kw anzeigen und dann könnte man sicher mit einer Funktion in myUtils arbeiten, wenn battsoc == 100 ist.
So könntest Du Dir den ungenutzten Überschuss errechnen und loggen.

Bei mir wird ab 70% abgeregelt, das kommt bisher bei mir aber nicht zum tragen, weil ich genug Grundlast habe. Was ich ungünstig finde ist, das zu keiner Zeit mehr in/aus den/dem Speicher geht/kommt als 3kw. Das schont die Batterien, aber das hat man vorher nicht erfahren und somit habe ich das unter anderen Annahmen berechnet. Für meine Grundlast sind dann selbst die großen Batterien zu klein, man sieht auf dem Graphen, das sie nur bis 1h nachts halten. Da ich tagsüber aber noch viel einspeise mache ich mir gerade Gedanken, wie ich mit FHEM die Netzeinspeisung reduziere und mehr (sinnvoll) selbst verbrauche. Ein elektrischer Heizstab für die Warmwasserbereitung, eine Brauch-Trinkwasser-Wärmepumpe oder ein selbstgebastelter Pumpspeicher sind da die ersten Ideen. :)

blofield

Baeda

Hallo blofield,

ich muss mich leider korrigieren.... :-\
Habe heute festgestellt, dass heute die Graphen nicht mehr passen, Ursache weiß ich noch nicht, die Werte haben zumindest realistisch ausgesehen...
(siehe Bild: Heute fehlen die Graphen zu Hausverbrauch und PV Leistung, waren gestern noch da / 2. Bild)

Ich habe das kurzfristig wieder auf den alten Wert geändert und verfolge einen anderen Ansatz:

In der Datenbank habe ich mal eine Abfrage auf Zeilen mit negativen "Homewatt" Werten gemacht.
Zu einem Eintrag habe ich dann jeweils die Werte zu dem Timestamp abgefragt - quasi "was für Werte liefern die anderen Readings zum Zeitpunkt, wo der Hausverbrauch negativ ist".

U.a. folgende Ergebnisse:

TIMESTAMP           | DEVICE | TYPE       | EVENT            | READING   | VALUE | UNIT |
+---------------------+--------+------------+------------------+-----------+-------+------+
| 2017-09-30 20:12:12 | E3DC   | MODBUSATTR | Gridwatt0: 63840 | Gridwatt0 | 63840 |      |
| 2017-09-30 20:12:12 | E3DC   | MODBUSATTR | Gridwatt: -1696  | Gridwatt  | -1696 |      |
| 2017-09-30 20:12:12 | E3DC   | MODBUSATTR | Homewatt: -1131  | Homewatt  | -1131 |      |
| 2017-09-30 20:12:12 | E3DC   | MODBUSATTR | Battwatt0: 63224 | Battwatt0 | 63224 |      |
| 2017-09-30 20:12:12 | E3DC   | MODBUSATTR | Battwatt: -2312  | Battwatt  | -2312 |      |
| 2017-09-30 20:12:12 | E3DC   | MODBUSATTR | Homewatt: 616    | Homewatt  | 616   |      |

oder:
TIMESTAMP           | DEVICE | TYPE       | EVENT                 | READING   | VALUE      | UNIT |
+---------------------+--------+------------+-----------------------+-----------+------------+------+
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Sunwatt: 325          | Sunwatt   | 325        |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Homewatt0: 4294902248 | Homewatt0 | 4294902248 |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Homewatt: 302         | Homewatt  | 302        |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Gridwatt0: 65016      | Gridwatt0 | 65016      |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Gridwatt: -520        | Gridwatt  | -520       |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Homewatt: -195        | Homewatt  | -195       |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Battwatt0: 64813      | Battwatt0 | 64813      |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Battwatt: -723        | Battwatt  | -723       |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Homewatt: 528         | Homewatt  | 528        |      |

oder:
TIMESTAMP           | DEVICE | TYPE       | EVENT                 | READING   | VALUE      | UNIT |
+---------------------+--------+------------+-----------------------+-----------+------------+------+
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Sunwatt: 325          | Sunwatt   | 325        |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Homewatt0: 4294902248 | Homewatt0 | 4294902248 |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Homewatt: 302         | Homewatt  | 302        |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Gridwatt0: 65016      | Gridwatt0 | 65016      |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Gridwatt: -520        | Gridwatt  | -520       |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Homewatt: -195        | Homewatt  | -195       |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Battwatt0: 64813      | Battwatt0 | 64813      |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Battwatt: -723        | Battwatt  | -723       |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Homewatt: 528         | Homewatt  | 528        |      |

Hier mal ein "positiver Hausverbrauch" :
TIMESTAMP           | DEVICE | TYPE       | EVENT                 | READING   | VALUE      | UNIT |
+---------------------+--------+------------+-----------------------+-----------+------------+------+
| 2017-09-15 20:33:07 | E3DC   | MODBUSATTR | Homewatt0: 4294904224 | Homewatt0 | 4294904224 |      |
| 2017-09-15 20:33:07 | E3DC   | MODBUSATTR | Gridwatt0: 1          | Gridwatt0 | 1          |      |
| 2017-09-15 20:33:07 | E3DC   | MODBUSATTR | Gridwatt: 1           | Gridwatt  | 1          |      |
| 2017-09-15 20:33:07 | E3DC   | MODBUSATTR | Homewatt: 2600        | Homewatt  | 2600       |      |
| 2017-09-15 20:33:07 | E3DC   | MODBUSATTR | Battwatt0: 62943      | Battwatt0 | 62943      |      |
| 2017-09-15 20:33:07 | E3DC   | MODBUSATTR | Battwatt: -2593       | Battwatt  | -2593      |      |
| 2017-09-15 20:33:07 | E3DC   | MODBUSATTR | Homewatt: 2594        | Homewatt  | 2594       |      |

Was ich nicht verstehe: Alle Daten werden in schöner Regelmäßigkeit alle 30 Sekunden in die DB geschrieben -  warum werden für Homewatt 2 Einträge angelegt?

Bezgl. Der E3DC:
Ich habe knapp 10kWp auf dem Dach (allerdings nicht optimal ausgerichtet...) und gut 9kW Batterien. Ich bin auch schon zu dem SChluß gekommen, dass es mehr Batteriekapazität sein könnte.
Aber das wird sich vermutlich nicht rechnen.
Allerdings komme ich aktuell gut über die Nacht, wenn der Akku Abends noch etwa 40%-50% voll ist. (Nachdem! Kochen o.ä. abgeschlossen ist  ;) )

Beim E3DC Support bin ich vermutlich most unwanted person, da ich verstehen wollte, warum das Teil so lädt.
So wurden dann auch Fehler eingestanden und korrigiert - mittlerweile muss ich sagen, ist es eine runde Sache.

In der Vergangenheit war eben im Sommer der Akku um 11-12 Uhr wieder voll, eine Stunde später über 5kw -> Abregeln.
(Ich wollte jetzt erst mal keine zus. Verbraucher wie Heizstab installieren)
Aber mit der prognosebasierenden Ladesperre klappt es nun: Der Zeitpunkt wird nach hinten gelegt, z.B. Laden erst ab 14 Uhr.

Intersanterweise wird diese Ladesperre aufgehoben, wenn die 5kW schon vor dem Termin überschritten werden (auch ein feature, wie ich erfahren konnte).

Der Wetterbericht liegt leider bei uns oftmals falsch (wo tut er das nicht...  ;) ), da wir direkt an den Alpen wohnen un der Föhn starken Einfluß auf das Wetter haben kann.

Um die Netzeinspeisung zu reduzieren, suche ich auch noch nahc Lösungen. Wir sind beide berufstätig, da gibts halt nicht viel, wo man tagsüber Strom "verbraten" könnte - Spülmaschine, ok. Waschmaschine gibt Frau schon das Veto, dass die Wäsche nicht zu lange rumliegen dürfe. Zudem muss ich noch prüfen, ob das gute Stück überhaupt über eine Funktsteckdose startet...


So long,
VG,
Baeda








blofield

Hallo Baeda,

erstmal vielen Dank für das Feeback, das hilft schonmal sehr gut.
Ich habe auch mehrere homewatt Einträge in der DB und das kommt offenbar vom rechnen im userreading. Das war mir bisher nicht so bewusst:

Userreading ist:
homewatt { if (ReadingsVal("S10", "homewatt0", "") < 4294900000 ) {(ReadingsVal("S10", "homewatt0", ""))} else {(((ReadingsVal("S10", "battwatt", "")) * -1 ) + (ReadingsVal("S10", "sunwatt", "")) + (ReadingsVal("S10", "gridwatt", "")))}; }

aus deinem Beispiel:
TIMESTAMP           | DEVICE | TYPE       | EVENT                 | READING   | VALUE      | UNIT |
+---------------------+--------+------------+-----------------------+-----------+------------+------+
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Sunwatt: 325          | Sunwatt   | 325        |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Homewatt0: 4294902248 | Homewatt0 | 4294902248 |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Homewatt: 302         | Homewatt  | 302        |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Gridwatt0: 65016      | Gridwatt0 | 65016      |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Gridwatt: -520        | Gridwatt  | -520       |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Homewatt: -195        | Homewatt  | -195       |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Battwatt0: 64813      | Battwatt0 | 64813      |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Battwatt: -723        | Battwatt  | -723       |      |
| 2017-09-14 14:35:17 | E3DC   | MODBUSATTR | Homewatt: 528         | Homewatt  | 528        |      |

folgt > wir arbeiten die else Bedingung ab:
->
-723 * -1 + 325 + (-520) = 528

Dies ist der korrekte Wert. Allerdings wird die Berechnung wohl jedes mal angestoßen, wenn ein anderes Userreading aktualisiert wird und dann wird mit den "aktuellen" Readings gerechnet, was dann die zus. Einträge und zudem Rechenfehler produziert. Das ist in der Tat sehr unschön und von mir nicht bedacht. Ich versuche mal einen anderen Ansatz und poste den Fortschritt wieder hier.

blofield

blofield

So,

bitte mal das Userreading korrigieren:

homewatt { if (ReadingsVal("S10", "homewatt0", "") <= 4294901759 ) {(ReadingsVal("S10", "homewatt0", ""))} else {(ReadingsVal("S10", "homewatt0", "")) - 4294967295 + 65536 }; }

und dann sollte es passen und auch keine doppelten Werte mehr geben.

Freue mich auf Feedback.

blofield

Baeda

Hallo blofield,

sehr fein - so sollte es passen, besten Dank dafür.

Habe jetzt die fhem.cfg entsprechend angepasst.
Und nach dem Löschen aller Zeilen Homewatt >10.000 in der DB waren die Graphen auch wieder da.

Vergleich mit dem E3DC Portal lieferte eine Abweichung von 1W (bei 520W Verbrauch, aber da kommt ja noch die Zeitverschiebung dazu, etc.) . Also perfekt.
Jetzt werde ich die Sache mal beobachten, vor allem auch die anderen Werte. Aber jetzt ist es erstmal finster, daher gehts morgen weiter, wenn neue Daten eintreffen...  :)


Beste Grüße,
Bäda

Inputsammler

Hallo zusammen,

Bei mir ist jetzt der Speicher installiert worden.
Leider muss ich noch warten bis ich ihn aktivieren darf wegen Zählertausch.... und das dauert wegen den Feiertagen bestimmt zu lange.

Aber wollte mich hier mal vorab informieren.

-->brauch keinen eigenen Adapter sondern nur den  Mobus im System einschalten, oder?
--> Protokoll E3DC oder Sun_SPEC
--> muß es so definieren wie du es gemacht hast?

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

ich habe es jetzt raus ;)
Ich habe es mit ModbusAttr umgesetzt und meinen S10 so definiert:

Anbei noch die aktuellste Daten für den MoBus für den Speicher .

Gruß Gerd
Rpi's und Bpi's und Hw von Dirk und locutus
CCU2,F20,Ks300,1-Wire,Homematic usw ...
vitodens 300 & IstrkrM372 auslesen über USB und FHEM
RUHE IN FRIEDEN AHA1805 RIP Mallorca +29.08.16
I miss you and your Family H.H.L.L.

blofield

Hallo Gerd,

ich hoffe Du konntest Dein Gerät inzwischen in Betrieb nehmen. Allerdings macht es gerade nicht so viel Spaß, wegen des Januar Wetters ;)

Du brauchst keinen Adapter, sondern schaltest im E3DC einfach Modbus an, nimmst das E3DC Protokoll und definierst dann in FHEM wie in diesem Beitrag beschrieben. Dann sollte es sofort klappen :)
Dein FHEM Host und der E3DC sollten IP-technisch im gleichen Subnetzwerk liegen.

Viel Erfolg.
blofield

rellla

Hallo,

hier kurz als Ergänzung die Register für Eigenverbrauch und Autarkie in %.


attr S10 obj-h40081-len 1
attr S10 obj-h40081-reading ae
attr S10 obj-h40081-unpack n

attr S10 userReadings \
autarkie { ((ReadingsVal("S10", "ae", "")) & 0xFF00) >> 8;; },\
eigenverbrauch { (ReadingsVal("S10", "ae", "")) & 0xFF;; }


Hinweis:
Der Eigenverbrauch [%] aus dem Registerwert ist nicht das gleiche wie der Eigenstrom [%] im Webfrontend bei "Aktuelle Werte".
Die Formeln für beide Werte sollten sein:


Eigenverbrauch [%] = 100 / Wechselrichter [W] * Hausverbrauch [W]
Eigenstrom [%] = 100 / Wechselrichter [W] * (Hausverbrauch [W] + Batterieladung [W])


Gruß
Andreas

JueFi

Danke für die Vorarbeit, ich werde mir das bestimmt mal ansehen.

Falls ihr noch eine sinnvolle Alternative für euren Stromüberschuss sucht, wie wäre es mit einem Elektroauto -:)
https://www.goingelectric.de/forum/
https://www.goingelectric.de/stromtankstellen/

Bussi

Hallo,

seit neusten besitze ich auch eine Speicherlösung von E3DC. Könnten Sie mir kurz erklären wie ich diese nun in die SMART-Home Zentrale (FHEM) einbinden kann?

Edit:
Fehler gefunden. Modbus war nicht komplett aktiviert.

Mit freundlichen Grüßen,
Manuel

rellla

Hallo Manuel,

im Prinzip kommst du schon ziemlich weit, wenn du dir den Thread ganz durchliest. blofield hat eine Beispielkonfiguration angegeben.
Ich z.B. habe meine E3DC so konfiguriert: https://github.com/rellla/fhemcfg/blob/master/fhem.cfg#L338

Bin mir nicht mehr sicher, aber ich meine, mehr hats gar nicht gebraucht, als das device zu definieren.

Gruß
Andreas

PS: Offtopic und passt nur als Ergänzung: E3DC lassen sich auch über das RSCP-Protokoll ansprechen. Darüber kann auch man auch Werte schreiben. Allerdings weiß ich nicht, ob es dazu schon was in FHEM gibt. Beispielcode zum Testen würde hier liegen: https://github.com/rellla/E3DC-Rscp ...

Bussi

Zitat von: rellla am 20 Dezember 2018, 10:59:46
Hallo Manuel,

im Prinzip kommst du schon ziemlich weit, wenn du dir den Thread ganz durchliest. blofield hat eine Beispielkonfiguration angegeben.
Ich z.B. habe meine E3DC so konfiguriert: https://github.com/rellla/fhemcfg/blob/master/fhem.cfg#L338

Bin mir nicht mehr sicher, aber ich meine, mehr hats gar nicht gebraucht, als das device zu definieren.

Gruß
Andreas

PS: Offtopic und passt nur als Ergänzung: E3DC lassen sich auch über das RSCP-Protokoll ansprechen. Darüber kann auch man auch Werte schreiben. Allerdings weiß ich nicht, ob es dazu schon was in FHEM gibt. Beispielcode zum Testen würde hier liegen: https://github.com/rellla/E3DC-Rscp ...

Hallo Andreas,

da hattest du recht. Das Menü im E3DC Speicher hat sich verändert und man muss eine Seite umblättern um den Modbus zu aktivieren. Funktioniert nun einwandfrei ;)

Vielen Dank.

Gruß,
Manuel

Faber38

#29
Zuerst mal "DANKE"  an alle die hier geschrieben haben.

durch diesen Thread konnte ich meine E3DC in FHEM einbinden...
Anmerkend noch einen kleinen Zusatz
Ich habe eine ext.Quelle und konnte diese wie folgt einbinden

Zitatattr S10 obj-h40074-len 2
attr S10 obj-h40074-poll 1
attr S10 obj-h40074-reading zusatzwatt
attr S10 obj-h40074-unpack N


attr S10 userReadings gridwatt { if (ReadingsVal("S10", "gridwatt0", "") <= 32768 ) {(ReadingsVal("S10", "gridwatt0", ""))} else {(ReadingsVal("S10", "gridwatt0", "")) - 65536 };; },\
battwatt { if (ReadingsVal("S10", "battwatt0", "") <= 32768 ) {(ReadingsVal("S10", "battwatt0", ""))} else {(ReadingsVal("S10", "battwatt0", "")) - 65536 };; },\
homewatt { if (ReadingsVal("S10", "homewatt0", "") <= 4294901759 ) {(ReadingsVal("S10", "homewatt0", ""))} else {(ReadingsVal("S10", "homewatt0", "")) - 4294967295 + 65536 };; },\
notstrom { ((ReadingsVal("S10", "ems", "")) & 0x4) >> 2;; },\
sun2watt { if (ReadingsVal("S10", "zusatzwatt", "") <= 4294901759 ) {(ReadingsVal("S10", "zusatzwatt", "")) - 65536 } else {(ReadingsVal("S10", "zusatzwatt", "")) - 4294967295 + 65536 };; },\
sun2watt2 { (ReadingsVal("S10", "sun2watt", "")) *-1 ;; },\

Leistung { (ReadingsVal("S10", "sun2watt2", "")) + (ReadingsVal("S10", "sunwatt", "")) ;; }

wichtig war ...  das der Modbus die Quelle als negative Zahl ausgibt...
daher die biegerei mit dem "*-1"