Brauche ich ein Shelly EM3, um da was zu basteln, oder sind die von der Software alle gleich und ich kann auch etwas billigeren verwenden?
Gruß Trucki
Kommt drauf an wie du den anbindest. Das einfachste mit den Std-Shellys wäre über Rest. Da sind die 3EM als Gen.1 ansich alle relativ gleich anzusprechen:
https://shelly-api-docs.shelly.cloud/gen1/#shelly-3em
Das funktioniert dann aber auch mit anderen wie dem 1-phasigen EM...
Ich bin auch gerade am recherchieren. Die Shelly kann man auch mit Tasmota bzw ESPHome flashen. Dann könnte man auch ein summierten Wert bekommen. Da wäre dann gleich das Homeassistant API auch mit dabei... Einzig auf die Kalibrierungsdaten muss man da scheinbar aufpassen bzw die sichern.
Wäre da nicht eine Anbindung einfacher?
-Klaus
Ja direkte Anbindung klingt gut. Geht auch ein Shelly 1PM?
Meinst du per ESPHome, soweit ich das sehe gehen da alle Gen.1. Rest wäre sonst auch relativ gleich wenn man sich die Status-Meldung ansieht.
Ich meine: Wemos auf meine Platine aufstecken und so programmieren, dass er z.B. via Rest API den aktuellen Verbrauch vom Shelly holt und and die Platine weiter gibt.
Ein Beispiel für den 3em:
http://192.168.1.100/status
{"wifi_sta":{"connected":true,"ssid":"XXXXXXX","ip":"192.168.1.100","rssi":-80},"cloud":{"enabled":true,"connected":false},"mqtt":{"connected":false},"time":"21:47","unixtime":1664999262,"serial":XXXXXXx,"has_update":true,"mac":"XXXX","cfg_changed_cnt":0,"actions_stats":{"skipped":0},"relays":[{"ison":false,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"overpower":false,"is_valid":true,"source":"input"}],
"emeters":[{"power":17.20,"pf":0.64,"current":0.11,"voltage":240.40,"is_valid":true,"total":120524.8,"total_returned":63641.6},{"power":101.07,"pf":0.92,"current":0.45,"voltage":239.65,"is_valid":true,"total":127658.9,"total_returned":30974.8},{"power":8.98,"pf":0.46,"current":0.08,"voltage":240.15,"is_valid":true,"total":57719.1,"total_returned":0.0}],
"total_power":127.25,"fs_mounted":true,
"update":{"status":"pending","has_update":true,"new_version":"20220830-080542/v1.12-3EM-gcf4f7c2","old_version":"20220415-105853/v1.11.7-25-gb3b096857-v1.11.7-3em"},"ram_total":49288,"ram_free":28880,"fs_size":233681,"fs_free":157126,"uptime":2482848}
Bei einem 1-phasigen wäre es entsprechend weniger. Info darüber gibt
http://192.168.1.100/shelly
{"type":"SHEM-3","mac":"XXXXXX","auth":false,"fw":"20220415-105853/v1.11.7-25-gb3b096857-v1.11.7-3em","longid":1,"num_outputs":1,"num_meters":0,"num_emeters":3,"report_period":1}
Es gäbe noch die Möglichkeit das der User ein Passwort eingegeben hat… das würde über Basic HTTP authentication laufen.
Beim 1pm wäre es ein „meter“ statt „emeter“:
https://shelly-api-docs.shelly.cloud/gen1/#shelly1-1pm-status
da wären wir dann immer noch da, wo ich gefragt habe, wie man diesen abgefragten Wert dann in der yaml als ac output setzen kann.
Die selbstgebastelte Lösung bei einem wemos (tasmota) mit ir diode am digitalen Stromzähler sieht bei mir (nach vielen und langen Versuchen) zumindest in der Abfrage so aus
(Daten werden abgefragt und kommen auch an und ich kann sie anzeigen lassen aber die Umsetzung von da an als ac output fehlt mir...
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ich frage über den explorer z. B. mit
http://192.168.178.91/cm?cmnd=Status%208
den Wert "Leistung gesamt" ab und als Antwort kommt dann :
{"StatusSNS":{"Time":"2022-10-05T22:48:36","":{"Zählerstand":2550787.65742000,"Leistung gesamt":259.89,"Leistung L1":9.38,"Leistung L2":109.44,"Leistung L3":141.07,"Spannung L1":237.1,"Spannung L2":234.7,"Spannung L3":234.7,"0_0_0":"1EBZ0123456789"}}}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
in der yaml kann ich das ganze auch abfragen und als string bekommen:
interval:
- interval: 5sec
then: - http_request.get:
url: http://192.168.178.123/cm?cmnd=Status%208
headers:
Content-Type: application/json
verify_ssl: false
on_response:
then: lambda: |-
json::parse_json(id(http_request_test).get_string(),(JsonObject root){id(zaehler).publish_state(root["StatusSNS"][""]["Leistung gesamt"]);});
Die Antwort ist dann: 259.89
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Die Frage lautet nun, wie kann ich das in der yaml als ac output setzen? ist ja mit dem shelly das gleiche (Abfrage nach "total_power") oder übersehe ich da etwas?
PS den weg über iobroker gehe ich ja aktuell auch aber die direkte Kommunikation hängt nur an der Einstellung in der yaml
Ich hätte gesagt über publish_state... https://esphome.io/components/sensor/custom.html
Den Ansatz kann man für alle Interfaces mit Rest anpassen, danke!
Hallo Maxim,Hallo Trucki,
super! Funktioniert der ESP(Home) zum loggen auch? Vielleicht hast Du Lust noch ein paar Bilder zu posten?
Danke
Viele Grüße,
Trucki
ja gerne.
Die Anlage läuft jetzt bereits 8 Tage tadellos.
Mein IoBroker ist in der Zeit schon zwei-drei mal hängen geblieben daher ist für mich die SDM630 Mode Lösung optimal.
Ein Raspberry PI 3 ist zu schwach für den IoBroker.
Zu meiner Anlage:
Ich habe jeweils 1,1kWp Ost und West. Diese Panele laden die LiFePo4 (16x CALB 230Ah von Shengzen Basen mit JK BMS) über zwei Victron MPPT 100/20 48V. Der Sun2000 ist an die 48V Schiene angeschlossen.

Es wird immer ca 30-100W aus dem Netz genommen.

Hier sieht man mein Verbrauch und die Batterieladung.
Auch ist gut zuerkennen das ein Sun2000 Spitzenlasten nicht ausgleichen kann. 1850W sind etwas zu wenig.
Meine Wünsche für ein Update:
- Schnelleres Regel des Sun2000 um die aus dem Netz kommende Leistung zu reduzieren
- genauer regeln um noch weniger aus dem Netz zu nehmen (ist vermutlich aufgrund des DAC nicht möglich oder ?)
- ein parallel Betrieb für zwei bis drei Sun1000/2000 um im SDM630 Mode die Spitzenlasten abdecken zu können (oder eine Warmwasserwärmepumpe zu betreiben)
Danke
Gruß Maxim
Hallo Maxim,
toll, vielen Dank für die schönen Bilder. Es ist jedes Mal spannend in andere Keller gucken zu können
Schneller und genauer Regeln:
Nein, das liegt nicht am DAC. Der ist schnell und genau. Es liegt an meinen sehr konservativen Regelparametern, die ich für den SMD630 Modus verwende:
- Immer zwischen 25-75W aus dem Netz beziehen
- Inverter-Output langsam hochfahren (über ca. 60s) und schnell runterfahren (ca.1-2s)
Die Motivation dahinter ist, so wenig wie möglich ins Netz einzuspeisen.
Mit einem eigenen Arduino könntest Du die Parameter so anpassen, wie es für Dich am besten passt. Aus diesem Grund habe ich den SDM630 Regler als eigenes Projekt hier veröffentlicht:
https://github.com/trucki-eu/SDM630-zero-export-controller-Arduino-
Der Code ist nicht ganz aktuell. Z.B. fehlt das Status-Telegramm für den ESP8266 oder die Begrenzung auf 850/1850W. Wenn ich die ganzen Platinen-Anfragen bewältigt habe, dann mache ich mal ein Update.
Damit könnte man auch mehrere SUNs/Platinen ansprechen und kaskadieren. Hier wird es auch so individuell, dass es keinen Sinn macht das in die Firmware meiner Platine zu integrieren.
Viele Grüße,
Trucki
Gibt es hier jemanden der mich bei der Umsetzung Steuerung via Iobroker/Shelly 3EM unterstützen könnte? Zahle auch gern dafür.
Vielen Dank vorab.
Hallo Maxim,Hallo Trucki,
toll, vielen Dank für die schönen Bilder. Es ist jedes Mal spannend in andere Keller gucken zu können ;-)
Schneller und genauer Regeln:
Nein, das liegt nicht am DAC. Der ist schnell und genau. Es liegt an meinen sehr konservativen Regelparametern, die ich für den SMD630 Modus verwende:
- Immer zwischen 25-75W aus dem Netz beziehen
- Inverter-Output langsam hochfahren (über ca. 60s) und schnell runterfahren (ca.1-2s)
Die Motivation dahinter ist, so wenig wie möglich ins Netz einzuspeisen.
Mit einem eigenen Arduino könntest Du die Parameter so anpassen, wie es für Dich am besten passt. Aus diesem Grund habe ich den SDM630 Regler als eigenes Projekt hier veröffentlicht:
https://github.com/trucki-eu/SDM630-zero-export-controller-Arduino-
Der Code ist nicht ganz aktuell. Z.B. fehlt das Status-Telegramm für den ESP8266 oder die Begrenzung auf 850/1850W. Wenn ich die ganzen Platinen-Anfragen bewältigt habe, dann mache ich mal ein Update.
Damit könnte man auch mehrere SUNs/Platinen ansprechen und kaskadieren. Hier wird es auch so individuell, dass es keinen Sinn macht das in die Firmware meiner Platine zu integrieren.
Viele Grüße,
Trucki
das ist ja genau was ich alles gesucht habe! Danke.
So wäre es mir möglich:
1. Mehr Werte aus dem SDM630 zu lesen und zum Iobroker zu senden (mit einem ESP8266 und Erweiterung des Codes)
2. Regel-Parameter anpassen (Ob das "besser" als deine Voreinstellung ist muss sich erst zeigen oder es saugt unnötig meine Batterie leer :?)
3. Kaskadieren von mehreren SUN Grid Tie
Zu Punkt 3 habe ich noch eine Frage. Hier wird im Projekt SDM630-zero-export-controller-Arduino explizit von Modbus ID4 gesprochen.
Jedoch müsste ich doch den SUNs verschiedene IDs vergeben oder?
Reagiert das RS485 Interface in allen IDs gleich (ausser in der ID16 - SDM630 Mode)?
Gruß Maxim
Hallo Maxim,
ja alles richtig.Du gibst jedem SUN eine eigene ID und sprichst die an. Ja, jede ID verhält sich gleich. Bei ID16 wird nach dem Start kurz geguckt, ob ein SDM630 erreicht werden kann. Wenn nicht, dann arbeitet auch die ID16 so wie alle anderen IDs.
Gruß,
Trucki
Gibt es hier jemanden der mich bei der Umsetzung Steuerung via Iobroker/Shelly 3EM unterstützen könnte? Zahle auch gern dafür.Hallo Daniel,
Vielen Dank vorab.
worin liegt denn genau das Problem?
Mit einem Shelly 3EM ist es eigentlich ganz einfach.
Wie ist dein Setup aktuell aufgebaut? Welcher Hard-/Software benutzt du?
Was klappt aktuell noch nicht?
Gern auch per PN,
Gruß Sven
Hast PNGibt es hier jemanden der mich bei der Umsetzung Steuerung via Iobroker/Shelly 3EM unterstützen könnte? Zahle auch gern dafür.Hallo Daniel,
Vielen Dank vorab.
worin liegt denn genau das Problem?
Mit einem Shelly 3EM ist es eigentlich ganz einfach.
Wie ist dein Setup aktuell aufgebaut? Welcher Hard-/Software benutzt du?
Was klappt aktuell noch nicht?
Gern auch per PN,
Gruß Sven
Wäre schön von euch ein Update zu bekommen! Bin auch gerade dabei mein System auf- bzw umzubauen. Nutze auch einen Shelly 3EM mit 2 GTIL1k. Meine werden dann in Homeassistant integriert, Steuerung soll aber möglichst direkt laufen.
Hast PN
Ich habe mir ein Blockly Skript gebaut, jedoch habe ich einen Fehler drin.https://i.ibb.co/Yy3WdQL/image.png
Wenn mein Skript startet und mein Shelly 3EM misst gesamt 400 Watt, dann wird 4000 an die Platine übergeben und der Sun produziert 400 Watt. Mein Shelly 3EM misst nun im Idealfall 0. Mein script übergibt nun die 100 an den Sun und der shelly 3Em zeigt wieder 400 Watt Verbrauch an, danach werden wieder 4000 übergeben. Zweites Problem, sollte zwischen dem schalten ein neuer Verbraucher dazu kommen, erreiche ich keine Nulleinspeisung mehr.
Das Problem bei meinem Skript ist auch falls der Bezug grösser 999 Watt ist und ich somit >10000 übergeben muss, geht der SUN runter auf 274 Watt.
Hallo Daniel,
Das sieht ja schon ganz gut aus. Bei Leistungen größer ~965W geht der SUN in den mppt Modus. Deshalb macht er nur noch 274W. Du solltest die maximale Leistung ja eh auf 850W begrenzen, da der SUN1000 das maximal als Dauerlast kann. Beim SUN2000 sind es übrigens 1850W.
Noch ein Tipp (den bislang keiner machen wollte):
Meine Nulleinspeisung funktioniert viel besser seit ich die aktuell erzeugte Leistung (AC Display) verwende um die neue Leistung (AC Setpoint) zu berechnen.
ACSetpoint = ACDisplay + Netzbezug
Als Feinheiten ziehe ich noch 50W ab und Filter noch mit einem1/60 Mittelwert:
ACSetpoint=ACSetpoint-50W
ACSetpoint_new = (ACSetpoint_old*59+ACSetpoint)/60
Viele Grüße
Trucki
Hallo Trucki,
jetzt muss ich doch auch im Forum mein Feedback zu deiner Platine geben, nach dem ich diese bereits Ende August von dir bekommen habe.
Die Platine ist super von der Idee und der Umsetzung her. Die Montage in meinem GTIL1000 war dank der Beschreibung in github, deiner Abstandsbolzen und der Kabel problemlos.
Ich wollte die Platine eigentlich über einen USB zu RS485 Konverter direkt an meinen Raspberry Pi anschließen, über den ich u.a meinen Solarcontroller auslese und verschiedene Daten an mein volkszaehler-System schicke. Leider gab es allerdings über den raspi sehr viele Kommunikationsfehler (ein Test von einem Windows Notebook funktionierte einwandfrei).
Ich wählte dann eine andere Lösung über einen ESP8266 ESP-12F WiFi Microcontroller mit einem "MAX485 / RS485 Modul TTL auf RS-485", von dem aus ich zur Platine gehe.
Über den USB-Anschluss läuft nur die Stromversorgung und das ESP-Logging, welches ich am raspi auslese und speichere.
Ich habe deinen ursprünglichen Code noch ergänzt um umfangreicheres Logging, das Senden der aktuellen GTIL-Werte (Vbat, Vnetz, Power) an meinen mqtt-Broker und eine Möglichkeit zum Umkonfigurieren zur Laufzeit (über mqtt). Daneben lasse ich die on-board LED des ESP blinken, falls Kommunikationsprobleme zu deiner Platine auftreten. Es gibt ab und zu noch Kommunikationsfehler, die aber die Funktionsweise nicht weiter beeinträchtigen.
Bisher läuft diese Lösung sehr gut und ich bin echt froh, dass ich in diesem Forum auf deine Platine gestoßen bin. Meine vorherigen Lösungen mit Digitalpotentiometer oder Servo mit Potentiometer waren nur workarounds und nicht vergleichbar mit der aktuellen Lösung, die für mich jetzt perfekt ist.
Viele Grüße,
Walter