Hi an alle,
ich stelle hier meine ESPHome Konfiguration ein um meinen Growatt 600TL-X zu überwachen.
Nutzen tue ich dafür einen Growatt ShineWiFI-X - WiFi-Stick. Dieser wird per USB an den Growatt angeschlossen und kann sehr leicht mit einer anderen Firmware geflasht werden.
Dazu den Stick einfach per USB in den PC stecken. Es wird ein neuer COM Port erstellt. z.B. COM4.
Jetzt lässt sich der Stick einfach mit den ESPHome Flasher versorgen.
substitutions:
devicename: "esphome-growatt-01"
upper_devicename: "ESPHome Growatt 01"
esphome:
name: $devicename
platform: ESP8266
board: esp07s
# Enable logging
logger:
baud_rate: 0
# Enable Home Assistant API
api:
ota:
password: !secret ota_passwd
wifi:
ssid: !secret iot_ssid
password: !secret iot_passwd
fast_connect: on
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Growatt 01 Fallback Hotspot"
password: "xxxxxxxx"
# Enable Web server
web_server:
port: 80
captive_portal:
time:
- platform: homeassistant
id: homeassistant_time
output:
# Blue Led
- id: light_bl
platform: gpio
pin: 16
# Green Led
- id: light_gr
platform: gpio
pin: 0
# Red Led
- id: light_rd
platform: gpio
pin: 2
uart:
id: mod_bus
tx_pin: 1
rx_pin: 3
baud_rate: 115200
modbus:
id: modbus1
uart_id: mod_bus
modbus_controller:
- id: growatt
## the Modbus device addr
address: 0x1
modbus_id: modbus1
setup_priority: -10
text_sensor:
- platform: modbus_controller
name: "${devicename} Firmware Version"
address: 9
register_count: 3
register_type: holding
#internal: true
entity_category: diagnostic
number:
- platform: modbus_controller
name: "${devicename} Max Output Power"
address: 3
value_type: U_WORD
min_value: 0
max_value: 100
sensor:
- platform: modbus_controller
name: "${devicename} DcPower"
address: 3005 #5
register_type: "read"
unit_of_measurement: W
device_class: power
icon: mdi:flash
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} DcVoltage"
address: 3003 #3
register_type: "read"
unit_of_measurement: V
device_class: voltage
icon: mdi:flash
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} DcInputCurrent"
address: 3004 #4
register_type: "read"
unit_of_measurement: A
device_class: current
icon: mdi:flash
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} AcPower"
address: 3023 #40
register_type: "read"
unit_of_measurement: W
device_class: power
icon: mdi:flash
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} AcFrequency"
address: 3025 #37
register_type: "read"
unit_of_measurement: Hz
icon: mdi:flash
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
name: "${devicename} AcVoltage"
address: 3026 #38
register_type: "read"
unit_of_measurement: V
device_class: voltage
icon: mdi:flash
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} AcOutputCurrent"
address: 3027 #39
register_type: "read"
unit_of_measurement: A
device_class: current
icon: mdi:flash
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} AcPowerVA"
address: 3028 #40
register_type: "read"
unit_of_measurement: VA
icon: mdi:flash
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} EnergyToday"
address: 3049 #53
register_type: "read"
unit_of_measurement: kWh
device_class: energy
icon: mdi:flash
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} EnergyTotal"
address: 3051 #55
register_type: "read"
unit_of_measurement: kWh
state_class: total_increasing
device_class: energy
icon: mdi:flash
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} Temperature"
address: 3093
register_type: "read"
unit_of_measurement: C
device_class: temperature
icon: mdi:thermometer
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
Es lässt sich auch nicht viel mehr aus dem Wechselrichter auslesen. Wenn Ihr in der Suchmaschine eures vertauens nach
Growatt PV Inverter Modbus RS485 RTU Protocol v120
sucht, findet Ihr ein PDF mit den Registern die ausgelesen oder gesetzt werden können.
Ich hoffe, das es euch weiter hilft. Bei Fragen einfach melden.
Danke für die Infos. Werde ich mal ausprobieren.
Besteht irgendwie die Möglichkeit, die Wirkleistung (Begrenzung auf x Watt) über den Adapter zu ändern? Das geht zumindest über die Original App ...
Grüße, Ralf
Hi,
vielen Dank fürs teilen des Codes. Ich bin da auch gerade dran alles vorzubereiten, wenn mein Growatt dann kommt und alles installiert ist, diesen dann in HomeAssistant zu bekommen.
Und ich bin auch am suchen nach der Möglichkeit das ExportLimit über HA setzen zu können. Scheint aber nicht ganz so trivial wie das lesenden zu sein. Zum Schreiben von Registern oder was auch immer habe ich unter folgendem Link was gefunden: https://esphome.io/components/modbus_controller.html
Ziemlich weit unten erfährt man was, das es wohl mit „lambda“ geht. Das übersteigt aber mein KnowHow über ESPHome und so.
LG Dominic
Hallo zusammen,
ich würde gern auch meinen ShineWiFi X mit ESP Home betreiben, habe aber 0 Erfahrung mit ESP Controllern und dem Umgang damit. Ob Ihr kurz erklären könntet, wie ich auf einfachem Wege ESP Home da drauf bekomme und wo genau die Konfigurationsdatei dann hin muss, die pasarn gepostet hat?
Ich nutze HomeAssistant auf einer Synology NAS im Docker, habe also keinen Supervisor Zugriff, falls das wichtig ist. Wenn ich das richtig verstanden habe, brauche ich das mit dem esphome-flasher ja auch gar nicht, allerdings weiß ich nicht, welche Firmware ich dem tool da angeben soll.
Über Unterstützung wäre ich sehr dankbar
Ob sich vielleicht irgendwer erbarmen könnte, einem ESP Neuling ein wenig auf die Sprünge zu helfen? Ich würde halt gern die Original Firmware vor dem flashen sichern, damit ich zur Not wieder alles zurücksetzen kann. Aber auch dies will mir bisher einfach nicht gelingen. Ein wenig Unterstützung wäre super hilfreich. Vielen Dank
Es gibt tolle Neuigkeiten.
Zufällig bin ich auch Github auf ein ESP Projekt zu Growatt-WR gestoßen. Aber auch das war mehr zum auslesen der Daten.
Dort hat sich aber ein User aus England (that-Dude) mit eingefunden, der eine Nulleinspeisung probieren wollte. Ich habe mit ihm ein bisschen geschrieben und er war schon fleissig am Testen und programmieren.
So hat es sich ergeben, dass er nun einen Emulator des EAStrom gebaut hat, mit einem ESP8266 und RS485 Konverter. Das Ganze hat er jetzt als eigenes GitHub Projekt hochgeladen.
Es ist hier zu finden: https://github.com/That-Dude/Emulated-Eastrom-SDM-Power-Meter/
Ich teile das, weil ich das einfach sau cool finde. Endlich mal jemand der nicht nur aufs Auslesen aus ist, sondern auch um die Einspeisung zu begrenzen.
Das Ganze ist natürlich in einem Alphastatus. Aber ich finds trotzdem geil. Auch weil man nicht den original Stick neu flaschen muss. Man nimmt nen ESP8266, RS485 Modul und los. Das muss einfach verbeitet werden.
Ich selbst konnte es noch nicht testen. Muss erst meine Module an die Fassade bringen und dann gehts da weiter.
Ich werde da auch mein bestes geben (trotz schwacher Arduinokenntnisse). Aber ich feier das gerade total, weil ich nen Shelly EM3 habe und mir nur nun so den SDM sparen kann (wenn es mit meinem Growatt auch läuft).
LG Dominic
Hey dominicbag, bist du mit deiner Konfiguration weiter?
Stehe gerade vor der Frage welcher WR es für meine kleine PV Anlage werden soll und fände die Möglichkeit per Shelly 3EM und ESP8266 den Growatt steuern zu können sehr spannend.
Vielleicht hast du ja einen ersten Erfahrungsbericht.
VG
Hey dominicbag, bist du mit deiner Konfiguration weiter?
Stehe gerade vor der Frage welcher WR es für meine kleine PV Anlage werden soll und fände die Möglichkeit per Shelly 3EM und ESP8266 den Growatt steuern zu können sehr spannend.Vielleicht hast du ja einen ersten Erfahrungsbericht.
VG
In der praktischen Umsetzung noch nicht. Ich habe mir aber einen Fork erstellt und auf den Shelly 3EM angepasst.
Jetzt werden alle 3 Phasen direkt per MQTT eingelesen und im ESP saldiert. Der saldierte Wert wird dann weitergegeben an die Modbus Schnittstelle.
Wie gesagt, praktisch ausprobiert mit dem Growatt habe ich das noch nicht. Habe es bisher nur mit HomeAssistant und NodeRed simuliert, sprich Werte reingeworfen per MQTT um zu sehen ob die Saldierung klappt.
Hier der Link zu meinem Fork/ Code:
https://github.com/bemilamedia/Emulated-Eastrom-SDM-Power-Meter-with-Shelly-3EM
Danke für die Infos. Werde ich mal ausprobieren.
Besteht irgendwie die Möglichkeit, die Wirkleistung (Begrenzung auf x Watt) über den Adapter zu ändern? Das geht zumindest über die Original App ...
Grüße, Ralf
Ja, das geht wunderbar mit ESPHome in einem lambda Call:
...
modbus_controller:
- id: growatt
## the Modbus device addr
address: 0x1
modbus_id: modbus1
setup_priority: -10
...
- lambda: !lambda |-
...
esphome::modbus_controller::ModbusController *controller = id(growatt);
int16_t relOutputPower = 50; // Max output active power (0 - 100 %), 50 % in the example
uint16_t reg = 3; // Max output active power (in %)
modbus_controller::ModbusCommandItem setOutputPower_command = modbus_controller::ModbusCommandItem::create_write_single_command(controller, reg, relOutputPower);
controller->queue_command(setOutputPower_command);
Viele Grüße
Frank
Hallo an Alle,
ich bin neu hier und hoffe ihr könnt mir helfen.
Ich habe einen Growatt SPH10000TL3 BH UP mit Wifi Shine X, wie ja hier allen klar ist, ist das System der Cloud von Growatt nicht so toll und ich möchte die Daten auch Lokal erfassen ohne der Growatt Server.
Leider bin ich auf dem gebiet ein absoluter Neuling.
Einen Raspberry mit Home Assistent habe ich vorbereitet und einen mit Grafana, IO Broker und influxDB um zu üben wie das geht.
Stick ist auch fertig, nur werden hier Fehler angezeigt.
Vielen Dank für eure Hilfe!
Moin,
ich hab mir vor ein paar Tagen einen gebrauchten Shinewifi X Stick gekauft damit ich das mal testen kann, bevor man mal eben seinen funktionierenden Stick ggf. "zerlegt".
A fatal error occurred: Failed to connect to ESP8266: No serial data received.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
INFO Upload with baud rate 460800 failed. Trying again with baud rate 115200.
esptool.py v3.3.1
Serial port /dev/ttyUSB3
Connecting......................................
Ebenso mit dem "esphomeflasher" gibt es einen Fehler, dass man den Serial Port nicht öffnen konnte..
Using '/dev/ttyUSB3' as serial port.
Connecting......................................
Unexpected error: ESP Chip Auto-Detection failed: Failed to connect to Espressif device: No serial data received.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
Sofern es nicht bekannt ist, der Port GPIO0 und GND müssen gebrückt sein, damit man den Stick flashen kann.
Anschließend kann man die Brücke wieder entfernen und den Shinewifi Stick wie üblich OTA mit esphome flashen
Moin,
ich habe eine Frage zur Funktion nach dem Flashen.
Ich habe einen kleinen Homeserver von Gira im Einsatz und werte damit meine Fronius WR, meine Mitsubishi WP und Wallbox aus und steuere entsprechend mit Überschussenergie. Nun ist wegen der Größe auf dem Carport ein Growatt Wechselrichter eingezogen und diesen möchte ich gerne intern über einen http Request ebenfalls einbinden. Mir reicht die aktuelle Energie, Tagesertrag und Gesamtertrag.
@pasarn Ist der Shine WiFi Stick nach dem Flashen im Netzwerk intern erreichbar und könnte mir Antworten liefern?
Vielen Dank für Arbeit!
Herzliche Grüße aus Wienhausen, Martin
Hi an alle,
ich stelle hier meine ESPHome Konfiguration ein um meinen Growatt 600TL-X zu überwachen.
Nutzen tue ich dafür einen Growatt ShineWiFI-X - WiFi-Stick. Dieser wird per USB an den Growatt angeschlossen und kann sehr leicht mit einer anderen Firmware geflasht werden.Dazu den Stick einfach per USB in den PC stecken. Es wird ein neuer COM Port erstellt. z.B. COM4.
Jetzt lässt sich der Stick einfach mit den ESPHome Flasher versorgen.
substitutions:
devicename: "esphome-growatt-01"
upper_devicename: "ESPHome Growatt 01"
esphome:
name: $devicename
platform: ESP8266
board: esp07s
# Enable logging
logger:
baud_rate: 0
# Enable Home Assistant API
api:
ota:
password: !secret ota_passwd
wifi:
ssid: !secret iot_ssid
password: !secret iot_passwd
fast_connect: on
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Growatt 01 Fallback Hotspot"
password: "xxxxxxxx"
# Enable Web server
web_server:
port: 80
captive_portal:
time:
- platform: homeassistant
id: homeassistant_time
output:
# Blue Led
- id: light_bl
platform: gpio
pin: 16
# Green Led
- id: light_gr
platform: gpio
pin: 0
# Red Led
- id: light_rd
platform: gpio
pin: 2
uart:
id: mod_bus
tx_pin: 1
rx_pin: 3
baud_rate: 115200
modbus:
id: modbus1
uart_id: mod_bus
modbus_controller:
- id: growatt
## the Modbus device addr
address: 0x1
modbus_id: modbus1
setup_priority: -10
text_sensor:
- platform: modbus_controller
name: "${devicename} Firmware Version"
address: 9
register_count: 3
register_type: holding
#internal: true
entity_category: diagnostic
number:
- platform: modbus_controller
name: "${devicename} Max Output Power"
address: 3
value_type: U_WORD
min_value: 0
max_value: 100
sensor:
- platform: modbus_controller
name: "${devicename} DcPower"
address: 3005 #5
register_type: "read"
unit_of_measurement: W
device_class: power
icon: mdi:flash
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} DcVoltage"
address: 3003 #3
register_type: "read"
unit_of_measurement: V
device_class: voltage
icon: mdi:flash
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} DcInputCurrent"
address: 3004 #4
register_type: "read"
unit_of_measurement: A
device_class: current
icon: mdi:flash
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} AcPower"
address: 3023 #40
register_type: "read"
unit_of_measurement: W
device_class: power
icon: mdi:flash
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} AcFrequency"
address: 3025 #37
register_type: "read"
unit_of_measurement: Hz
icon: mdi:flash
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
name: "${devicename} AcVoltage"
address: 3026 #38
register_type: "read"
unit_of_measurement: V
device_class: voltage
icon: mdi:flash
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} AcOutputCurrent"
address: 3027 #39
register_type: "read"
unit_of_measurement: A
device_class: current
icon: mdi:flash
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} AcPowerVA"
address: 3028 #40
register_type: "read"
unit_of_measurement: VA
icon: mdi:flash
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} EnergyToday"
address: 3049 #53
register_type: "read"
unit_of_measurement: kWh
device_class: energy
icon: mdi:flash
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} EnergyTotal"
address: 3051 #55
register_type: "read"
unit_of_measurement: kWh
state_class: total_increasing
device_class: energy
icon: mdi:flash
value_type: U_DWORD
accuracy_decimals: 1
filters:
- multiply: 0.1
- platform: modbus_controller
name: "${devicename} Temperature"
address: 3093
register_type: "read"
unit_of_measurement: C
device_class: temperature
icon: mdi:thermometer
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.1
Es lässt sich auch nicht viel mehr aus dem Wechselrichter auslesen. Wenn Ihr in der Suchmaschine eures vertauens nach
Growatt PV Inverter Modbus RS485 RTU Protocol v120
sucht, findet Ihr ein PDF mit den Registern die ausgelesen oder gesetzt werden können.
Ich hoffe, das es euch weiter hilft. Bei Fragen einfach melden.
Hi @parsan,
das ist mal super hilfreich! Vielen Dank für die ESPHome Vorlage. Man muss noch wissen, dass man zum initialen Flaschen die Platine aus dem Gehäuse ziehen muss und GPIO0 und Ground beim Starten / Einstecken des Sticks Brücken muss, dann klappt es wunderbar
Eine Frage: Warum rechnest du auf die Input-Read-Register immer dezimal 3000 drauf im Vergleich zu den Register Adressen aus der Dokumentation?
Hier zum Beispiel 3005 anstatt 5 wie in der Doku:
name: "${devicename} DcPower"
address: 3005 #5
Wäre super wenn du mir dieses Rätsel aufklären könntest!
Viele Grüße und vielen Dank,
Luki
@frankthetank Hallo, danke für die Denkansätze. Aber mit dem Lamdda Befehlen komme ich nicht weiter. Kann ich nicht einen "Number:"-Sensor im EspHome generieren und von HomeAsiistant die Ausgangsleistung regeln? Ich komme leider nicht weiter und im Netz finde ich wenig.
Ganz vielen Dank, Ralf
Danke für die Infos. Werde ich mal ausprobieren.
Besteht irgendwie die Möglichkeit, die Wirkleistung (Begrenzung auf x Watt) über den Adapter zu ändern? Das geht zumindest über die Original App ...
Grüße, Ralf
Ja, das geht wunderbar mit ESPHome in einem lambda Call:
...
modbus_controller:
- id: growatt
## the Modbus device addr
address: 0x1
modbus_id: modbus1
setup_priority: -10
...
- lambda: !lambda |-
...
esphome::modbus_controller::ModbusController *controller = id(growatt);
int16_t relOutputPower = 50; // Max output active power (0 - 100 %), 50 % in the example
uint16_t reg = 3; // Max output active power (in %)
modbus_controller::ModbusCommandItem setOutputPower_command = modbus_controller::ModbusCommandItem::create_write_single_command(controller, reg, relOutputPower);
controller->queue_command(setOutputPower_command);
Viele GrüßeFrank
@rkrkr Ja, das sollte auch gehen, z.B. mit:
number:
- platform: modbus_controller
name: "${devicename} Max Output Active Power"
address: 3
value_type: U_WORD
min_value: 0
max_value: 100