Feierprinz / -bemilamedia

@bemilamedia
0 stars 0 forks source link

@bemilamedia #1

Open Feierprinz opened 1 year ago

Feierprinz commented 1 year ago

@bemilamedia Bist du schon weitergekommen bei dem Shelly3EM Emulator zu Modbus?

bemilamedia commented 1 year ago

Hi, ja etwas. Mein Growatt liegt immer noch verpackt rum. Hab mir ne Knieverletzung zugesezogen, deshalb zieht sich das etwas. Muss ja erstmal noch die Module an die Wand bringen.

Zur Software bin ich aber weitergekommen. Ich habe mir das etwas umprogrammiert damit der ESP8266 direkt alle drei Phasen des 3EM per MQTT einliest und dann intern saldiert und letztlich die saldierte Leistung ausgibt bzw. ausgeben soll per Modbus. Das konnte ich in der Praxis natürlich noch nicht testen. Aber da ich mir den saldierten Wert ja per Serial auch ausgeben lassen kann, sollte das wohl klappen, wenn exakt dieser Wert dann per Modbus rausgegebn wird.

Ich schau mal ob oder vielmehr wie ich da einen Fork erstellen kann von „That-Dudes“ Code. Weil er hat das nur 1-phasig

LG Dominic

Am 05.10.2022 um 13:26 schrieb Feierprinz @.***>:

@bemilamedia https://github.com/bemilamedia Bist du schon weitergekommen bei dem Shelly3EM Emulator zu Modbus?

— Reply to this email directly, view it on GitHub https://github.com/Feierprinz/-bemilamedia/issues/1, or unsubscribe https://github.com/notifications/unsubscribe-auth/AWERRJN3KSO6S2FAOPSBOC3WBVQVRANCNFSM6AAAAAAQ5PRZHQ. You are receiving this because you were mentioned.

bemilamedia commented 1 year ago

So, hab mir nen Fork erstellt und meinen Code reinkopiert.

Damit werden alle 3 Phasen des 3EM per MQTT eingelesen, das Ganze direkt im ESP8266 saldiert und dann der saldierte Wert ausgegeben.

https://github.com/bemilamedia/Emulated-Eastrom-SDM-Power-Meter-with-Shelly-3EM

Feierprinz commented 1 year ago

Hi,

zunächst tausend mal danke das du dich gemeldet hast. Hätte ehrlich gesagt nicht damit gerechnet :) Wünsche dir natürlich gute Besserung und das du dann Zeitnahe die Module aufs dach/Wand bringen kannst!

Dein Fork habe ich mir gleich runter geladen aber noch nicht weiter rein geschaut. Meine Idee geht eigentlich darin, dass alles MQTT-Unabhängig zu machen. Der Shelly3EM bringt sogar den Saldierten Wert in seiner eigenen API mit, welchen man eventuell mit Json auslesen kann, ergo der ESP8266 braucht den nicht berechnen. Weiterer Vorteil wäre das ganze unabhängig von MQTT und eines Raspi (HomeAssistent oder was auch immer) zu machen, weil jedes weitere Bauteil bürgt natürlich auch Fehlerquellen. Bei mir z.B. hängt sich sporadisch der MQTT-Broker einfach auf...warum auch immer. Da bin ich noch nicht dahinter gekommen warum.

http://shelly-IP/status Dort ist es dann der "total_power"-Wert, welche die Saldierung anzeigt :)

bemilamedia commented 1 year ago

Hi, ja wird Zeit das die Module da ran kommen. Die stehen hier und warten nur darauf.... das ist ja fast shcon wie aktives Geld verbrennen. ggg Und da meld ich mich auf jeden Fall wenn es rund ums Thema "SDM vermeiden" geht. Weil ich keine Lust habe mir nun noch nen SDM zuzulegen nur das der Growatt da auf 0 Watt regeln kann. Zumal man mit einer eigenen Lösung nun viel mehr Möglichkeiten hat. Akku laden mit x Watt und was weiß ich. Und ich bin ja nun schon heilfroh das es hier endlich Projekte dazu gibt, einen Growatt nicht nur auszulesen sondern eben auch Werte in den reinzuschreiben. :-)

Aber generell ist dein Ansatz auch ne gute Idee. Wenn der ESP das direkt per JSON einlliest und verarbeitet. MQTT Status und so kann man ja optional verwenden. Weil, wie du sagst, alles was ne Schnittstelle (Software) weniger ist ist gut. Und so nen JSON Wert bekommt man sicher in einen Arduino eingelesen. Und dann kann man ja damit arbeiten wie man will. :-)

LG

Nachtrag: Damit lässt sich das doch sicher implementieren: https://arduinojson.org/

Feierprinz commented 1 year ago

Jetzt muss ich mal ganz blöde fragen, welchen Growatt hast du eigentlich? Ich möchte mir den Growatt SPH 3000 oder 4000 holen und bereite schon mal alles dazu vor :D

bemilamedia commented 1 year ago

Ich habe hier den MIC 3000 liegen

Feierprinz commented 1 year ago

Na schauen wir mal ob es mit unseren beiden klappt. Vermutlich muss man wenn nur die RX/TX anders verknoten^^

Feierprinz commented 1 year ago

Hast du dir mal die Verkabelung angeschaut? Irgendwie passt da was bei That-Dude nicht in der Readme. D2 und D3 gibt es doch bei dem MAX485 gar nicht? Ich habe jetzt folgendes aus dem Wiring und dem Quellcode:

MAX485 --> ESP8266 RE/DE --> D0 Vcc --> 3.3V GND --> G D1 --> D2 (bei anderen an Wirings zu TX) ? R0 --> D3 (bei anderen Wirings zu RX) ?

Anstatt in der Readme: MAX485 --> ESP8266 D2 ---> D1 D3 ---> R0 D0 ---> RE D0 ---> DE Vcc ---> 3.3V GND ---> GND

jetzt macht es klick, er hat vermutlich einfach nur bei den 2 Angaben die Seite vertauscht (MAX <--> ESP)

LG^^

bemilamedia commented 1 year ago

Die Verkabelung habe ich mir noch nicht vorgenommen / angeschaut. Das mach ich wenn es dann soweit ist. :-) Aber gut zu wissen..... ja ist immer so. Lieber nochmal selbst nachprüfen / überprüfen und mit dem eigenen Modell abgleichen.

Feierprinz commented 1 year ago

Hi Dominic,

ich hoffe du konntest die Anlage etwas weiter bauen? Mein Wechselrichter hat es nach Monaten endlich zu mir geschafft und ich habe gestern alles angeschlossen. Was nicht klappt:

Hast du ne Idee wo der Wurm drin stecken könnte?

LG Swen

bemilamedia commented 1 year ago

Hi Swen, sorry das ich jetzt erst zurückschreibe. Zu viel zu tun um Moment.

Leider bin ich mit meienr Solaranlagen noch kein Stückchen weiter gekommen. Meine Kniebeschwerden waren deutlich langwieriger als ich mir erhofft hatte. Jetzt sind die Knie wieder i.O abers Wetter äusserst unpassend um d da an der Fassade rumzuklettern. Aber die Dinger müssen jetzt ran, der neue Stromtarif kam und ab 01.02 wirds sonst schön teuer.

Von daher kann ich da jetzt so gar nichts dazu sagen, warum der 0 anzeigt. Ich bin dann da auch eher, der der das dann am praktischen Teil ausprobiert.

bemilamedia commented 1 year ago

Heisst also, der Shelly "überträgt", egal was wirklich Sache ist, immer 0 Watt? Hast du das jetzt bei dir über den direkten saldierten Wert vom Shelly gemacht, oder über MQTT und dann halt im ESP die Saldierung ausrechnen lassen? Weil dann könnte man ja zumindest per MQTT schon mal schauen ob der Shelly das überhaupt richtig ausgibt, also die 3 Phasen.

Feierprinz commented 1 year ago

Hi, danke für die Antwort. Gut das jetzt deine Knie wieder heile sind 😊

Ich habe dein letztes Fork genommen und nur angepasst auf meinen MQTT. Also rechnen tut er im ESP. Der Debugmonitor spuckt auch schön werte aus und der Wechselrichter erkennt auch den E-Meter. Auf dem Display vom WR zeigt er aber beim Hausverbrauch (Pm) 0 Watt. Ich habe jetzt mal bei The-Dude angefragt ob er mal die Libarys für Arduino richtig benennen kann. Ich vermute ja schon fast das ich eine falsche drin habe für den ModbusRTU.

Lg Swen

bemilamedia commented 1 year ago

Hm, ja ok, das könnte natürlich ne Möglichkeit sein. Bei all den Librarys, die es ja gibt...hatte ich auch schonmal. Oder es liegt am Growatt selber. Weil ich habe da auch noch nicht so wirklich durchgeblickt, WO sich die alle im Protokoll unterscheiden. Nur das wohl die unterschiedlichen Modelle, gerade die MIC und SPH oder wie die heisen, doch wohl ein leicht anderes Protokoll haben. Also in der Adressierung..... hab mich da aber auch noch nicht weiter reingefuchst in diesen Theoriekram. :-)

Feierprinz commented 1 year ago

Ich glaube aber das die unterschiedlichen Protokolle nur beim Auslesen eine Rolle spielen, weil der SDM wird ja sein Protokoll nicht verändern und der soll ja Emuliert werden. Komisch ist, dass der WR ja den ESP als E-Meter erkennt....ziehe ich den raus, dann schmeißt er den Fehler 401 (Kommunikation prüfen mit E-Meter).

bemilamedia commented 1 year ago

Hiho Swen,, wollte mich mal zurückmelden. 4 Module hängen nun endlich und ich habe gestern den Growatt erstmalig in Betrieb genommen. woohooo Jetzt gehts dran die Nulleinspeisung zu realisieren. Ich hatte gedacht, das geht doch sicher auch ohne den ganzen Original Growatt Wifi und Chinaserver Kram. Aber ich glaub, das wird wohl nix. Oder bzw. wie hast du das bei dir gemacht? Über das Touchpanel kann man ja nicht allzuviel einstellen. Haben die SHP überhaupt ein Touchpanel?

Angeschlossen habe ich jetzt zwar mal. Aber sobald ich aufm Touchpanel in die Wirkleistungseinstellungen gehe, kann ich da nur % einstellen. Das hat ja mit ZeroExport nichts viel gemein. Habe mir auch ein Video auf YT angeschaut (https://www.youtube.com/watch?v=sBRUSvBNs80). Aber der hat halt so ein Original Smartmeter und damit bekommt man das wohl recht easy in die Growatt-Shine App.

Wäre super, wenn du mir da kurz sagen könntest wie du das bei dir eingestellt hast? Sprich, geht das nur mit dem Original Wifi-Stick über den Chinaserver?

Feierprinz commented 1 year ago

Moins,

Sowas Banales muss auch über das Displaymenü gehen. Beim SPH lässt sich das auch übers Menü einstellen. Beim SPH muss man den Meter auf eMeter anstatt CT einstellen und wenn man ZeroExport möchte muss man die Exportfunktion auf 0% stellen. Sehen tue ich den Stromverbrauch vom Haus auch über das Menü unter dem Punkt "PM" (PowerMeter vermutlich).

Habs ja noch nicht über das o.g. Script hinbekommen, aber was über Phython realisiert bekommen und FHEM. Möchte das o.g. Script für den Esp8266 noch anpassen das es läuft. Der Raspi mit FHEM ist mir dazu zu Schade 🤪

Auslesen tue ich es dann über die VPP-Funktion in Solaranzeige.de was ich auch auf nem Raspi laufen habe und welches mir die ausgelesenen Daten auf mein Homeassistent-MQTT sendet. Also grundsätzlich brauch man den China-Cloudstick nicht. (Habe ich aber zusätzlich trotzdem)

Lg Swen

bemilamedia commented 1 year ago

Hi Swen, so, angeschlossen und es passiert nix. Aufm Display habe ich das wie Du eingestellt, ExportLimit-Smartmeter und ich habe jetzt einfach mal 10.0% eingestellt. Aber da tut sich nichts. Der ballert raus was geht. Einen Punkt "PM" auf der Anzeige gibts beim MIC nicht.

Witzigerweise, wenn ich den ESP vom Strom trenne, geht kurz darauf der Growatt in Störung (das Blatt blinkt dann rot) und er regelt komplett runter. Was ja an sich richtig ist. Bei Störung System runterfahren. Das heißt aber auch, das er merkt das "ein Smartmeter" angehängt ist oder eben nicht.

Ich werde mich jetzt auch mal durch den Code wühlen. Vielleicht liegt es ja an der ID. Weil bei den SDMs kann man wohl 1 oder 2 als ID vergeben, bei den 3-phasigen SDMs soll man als ID 2 einstellen, weil das der Growatt sonst nicht blickt.... ist halt die Frage ob das was bewirkt in unserem Fake-SDM Fall.

Den Shine Wifi Stick habe ich auch hier, den werde ich nun wohl doch auch mal in Betrieb nehmen. Wollte mir das hickhack damit eigentlich ersparen.

Und da du es ja über Python hinbekommen hast, muss das ja prinzipiell umsetzbar sein. :-) Auch wenn der Weg so, natürlich über ein paar Datenecken mehr geht. :-)

Nachtrag: Über #define SLAVE_ID 2 geht es schonmal nicht. Da geht der bei mir dann sofort in Störung. Istr natürlich die Frage wie ein 3-phasiger SDM mit dem Growatt kommuniziert, Ob der nen saldierten Wert hinschickt, oder alle 3 Phasen einzeln und der Growatt rechnet das dann für sich aus.

Wäre interessant zu wissen wie du das in Phyton hinbekommen hast. Ggf. kann man das ja adaptieren. Oder in Python kann man doch sicher auch nen MQTT Server direkt ansprechen.

LG Dominic

bemilamedia commented 1 year ago

Ich werde auch aus den Registerdefinitionen von ThatDude nicht so ganz schlau. Wenn ich die mit dem PDF zum Modbus von Growatt vergleiche, passt das doch nicht. Oder? image

Und das Register für den Input in Watt wären dann Register 5 und 6 (6 wenn mans kommagenau machen will)

Hier mal der Link zum PDF das ich gefunden habe: https://forum.iobroker.net/assets/uploads/files/1550402978050-growatt-pv-inverter-modbus-rs485-rtu-protocol-v3.05-%E5%AE%A2%E6%88%B7%E7%89%88.pdf

Dann stellt sich natürlich auch die Frage, braucht es überhaupt alle Register, wenn man dem WR nur mitteilen muss wie viel Watt +oder minus es sind?

Feierprinz commented 1 year ago

In Phython hole ich mir die Werte auch per MQTT. Ich spreche bei mir nur Register 30013, 30014 & 30015 an mit SlaveID 2. Habe es aber auch kombiniert als 30013 getestet, klappt genauso. Bei o.g. Code wäre das dann RegID12 lt. dem Entwickler der ModbusLibrary, bei dem hatte ich schon angefragt.

Normalerweise sollten sich die Register ja nicht unterscheiden, da der SDM ja nur die SlaveID geändert bekommt und nicht die Register noch angepasst werden.

Sobald ich mein LAN- Kabel raus ziehe, kommt sofort der Fehlercode 401 für Kommunikationsfehler mit dem SmartMeter. Weiß nicht wie das bei deinem ist.

An deiner Stelle würde ich mal den Growatt Stick anhängen und schauen ob überhaupt der FakeSDM Daten zum Growatt schickt. Ich hatte mal kurzzeitig nen Sniffer an dem ThatDude-Code und an dem Phython, die Datenstrukturen sehen komplett anders aus.....mMn. Funktioniert der Code von ThatDude so nicht.

bemilamedia commented 1 year ago

Shine habe ich mittlerweile installiert. Jo, da sieht man so gar nix. Habe mir auch das SDM Modus PDF zum Protokoll angeschaut und in nem ioBroker Forum hatten sie es auch über die ganzen Register und eben, dass der SDM mir 30001 startet an Registern. Wenn man das parallel mit dem Growatt Modbus anschaut, stimmt das irgendwie nicht überein. freaky

Und wenn du schon rausgefunden hast, dass das mit Python aufm Rapsi mit FHEM läuft und der Sniffer auch komplett unterschiedliche Daten gebracht hat, dann ist ja offensichtlich, dass da was im argen liegt.

Bei mir kommt auch der 401 sobald der ESP keinen Strom mehr bekommt.

Mit Register 12 und SLAVE ID habe ich jetzt auch probiert.... aber da ich denke, dass du das auch schon durch hast, kennste die Antwort schon. Geht natürlich nicht,

bemilamedia commented 1 year ago

Hast du dir https://docs.micropython.org/en/latest/esp8266/tutorial/intro.html schonmal angeschaut, um Python aufm ESP8266 laufen zu lassen? Vielleicht ist das ja ein Ansatz um nicht nen Raspi dafür "hergeben" zu müssen. Gerade bei den derzeitigen Preisen die für Raspis aufgerufen werden bzw. die Verfügbarkeit derer.

Denn prinzipiell bist du ja da nun schon ziemlich weit. Daten (sprich die Wattzahl 3 Phasen?) werden per MQTT geholt und dann an den Growatt per RS485 gesendet. Dann sollte man vielmehr da dran weiter machen. :-)

Feierprinz commented 1 year ago

Jepp, da habe ich meinen Bruder (Programmierer) drauf angesetzt (Microphython). Wir hatten uns nur (fälschlicherweise) an dem ThatDude-Code gehalten, was nicht geklappt hat. Dann hat mich der Elan verlassen weil es ja erstmal läuft. Ich muss echt den Sniffer nochmal anschmeißen und schauen was die Unterschiede sind. Klar, per ESP8266 wäre es tausend mal angenehmer das zu realisieren. Das mit FHEM gefällt mir echt auch nicht. Momentan drückt aber nicht wirklich die Zeit, weil von oben kommt nicht wirklich viel 😅

Feierprinz commented 1 year ago

Wenn der den 401er Fehler nicht bringt, hat er ja schon mal den Handshake und die Verkabelung passt. Fehlen nur noch die Daten (Watt). Bekommen wir noch hin 😉

bemilamedia commented 1 year ago

Ich schiele auch gerade ml etwas in die Richtung Micropython... auch wenn das quasi wieder von 0 an starten ist. Aber hier habe ich auch ein Script gefunden mit dem "ich" anfangen kann. Fehlt am Ende nur noch der mqtt Part und das zusammenrechnen und dann weiterreichen.

https://github.com/EmbedME/growatt_simulate_sdm630

Man findet auch einfach zig unterschiedliche Daten und Angaben was, welches Register wie und überhaupt. mal 3-4, dann 5-6. Dann die 3000er aus dem SDM. Dann habe ich noch ein PDF gefunden, wo man anscheinend Register 122 beschreiben soll. Das ist fast schon frustirerend. Dabei kann das doch eigentlich nicht so schwer sein. Ist ja kein geheimes Protokoll wo man erst mal mit Reverse-Egeneering und nem Logicanalyzer ran muss.

bemilamedia commented 1 year ago

Mir ist das am Ende auch wurscht obs Arduino oder Python ist, so lange der Growatt einfach die Info bekommt, die er braucht, damit er dynamisch auf Nulleinspeisung runterregelt. OK fein wäre noch sowas wie ein Offset, so das man zum Bsp. auch sagen kann 200W einspeisen. So hätte man immer nen kleinen Überschuss, der im Rahmen eines BKW liegt und könnte dennoch kleine Leistungsspitzen etwas abfangen.... der Growatt braucht ja auch seine 1,3, Sekunden um hochzuregeln. Aber das wäre ja nur ein nice to have feature. :-) Das könnte man ja letztlich auch über ein Exportlimit mit x Prozent, in den Einstellungen des WR, lösen.

PS: Hier war heuter bester Sonnenschein. Hba ja noch nicht alle Module an der Wand. Aber vier laufen und die haben mir heute direkt satte 5,5KWh eingebracht.... bzw. 2 davon an den Netzbetreiber geschenkt. :-)

Feierprinz commented 1 year ago

Das Script kannte ich noch nicht. 30053 scheint irgendwie ne Gesamtsumme zu sein. Ich bleibe bei den 30013/15&17 😎 Habe ich noch nicht getestet, aber sieht Plausibel aus: https://github.com/ChrisSiedler/dtsu666-Emulator

Habe ich auch ne Struktur als Issue angefordert was MQTT bedarf.

Ansonsten nen FHEM aufsetzen?

Feierprinz commented 1 year ago

30053 sind in der Tat die kompletten Watt. Die 30013-30017 die einzelnen Watt pro Phase. Habe mal den SDM-Modbus angeschaut: https://bg-etech.de/download/manual/SDM630-Modbus-V2.pdf

bemilamedia commented 1 year ago

Hiho, joa nen FHEM könnte ich natürlich nun auch noch dazu bauen. Aber das ist ja irgendwie auch etwas hingebastelt. Das von ChrisSiedler schaue ich mir auch mal an. Schlage mich noch etwas mit dem Micrpython rum... hab zwar die grundlegende Firmware aufm ESP aber mit den Programmen wie "Thonny" komm ich noch nicht so drauf klar. ggg

Und ja klar, ich würde da auch bei dem bleiben was eh schon funktioniert. :-)

bemilamedia commented 1 year ago

Hi Swen, ich probiere es jetzt nochmal mit dem Code von ThatDude..... das mit Python ist mir zu abstrakt. ggg Was mir aufgefallen ist, das der FakeSDM aufm Growatt-Server eingebunden wird, wenn ich als SLAVE ID 1 eingebe. Mit der 2 kommt bei mir sofort der 401. Bei mir heisst das Ding dann "SDM-One" aufm Growatt Server.

Soweit ich mich aber erinnere muss man aber für den 3-Phasen SDM als SLAVE die 2 eingeben.......hmmmm. Der Growatt hat bei mir als Adresse 001 (Werkeinstellung). Weißt du da was?

Naja, immerhin sehe ich den SDM mit SLAVE 1 aufm Growattserver..... nur muss ich jetzt noch die passenden Register finden. Denn in der Grafik wird mir bis jetzt noch nichts angezeigt an irgendwelchen ACVTIVE_POWERs und so. Bzw. alle Werte sind da bis jetzt immer bei 0.0.