@frankthetank vielen Dank für diese Lösung. Allerdings kommen bei setzen der 50% Leistung sehr seltsame Werte zustande. Dabei wird auch der Status Code 3 gesetzt, welcher auf einen Fehler hinweist. Die zuvor genannte Variante mit dem Number Slider erzeugt die gleichen Ergebnisse.
Das ganze läuft auf dem Growatt Wifi Shine X.
Kannst du mir da ggfs. weiterhelfen wieso das zu diesem Verhalten führt?
Vor Ausführung vom Lambda:
Nach Ausführen:
Ich habe folgende Konfiguration:
output: - id: light_bl platform: gpio pin: 16 - id: light_gr platform: gpio pin: 0 - id: light_rd platform: gpio pin: 2 # Example configuration entry uart: - id: uart1 baud_rate: 115200 tx_pin: GPIO1 rx_pin: GPIO3 modbus: id: modbus1 uart_id: uart1 flow_control_pin: GPIO4 modbus_controller: - id: growatt address: 0x1 modbus_id: modbus1 setup_priority: -10 switch: - platform: gpio id: led internal: true pin: 2 - platform: template id: toggle_limit name: "Leistung einschränken" icon: mdi:fraction-one-half lambda: 'return id(led).state;' turn_on_action: - logger.log: "Switch Turned On!" - switch.turn_on: led - lambda: !lambda |- esphome::modbus_controller::ModbusController *controller = id(growatt); int16_t relOutputPower = 50; // Max output active power (0 - 100 %) uint16_t reg = 3; // Register: 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); turn_off_action: - logger.log: "Switch Turned Off!" - switch.turn_off: led - lambda: !lambda |- esphome::modbus_controller::ModbusController *controller = id(growatt); int16_t relOutputPower = 100; // Max output active power (0 - 100 %) uint16_t reg = 3; // Register: 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);
@azoninc Wegen deiner Fehlercodes bin ich da vorsichtig 😉
Meine bisherige Lösung: ein Number Sensor =
#test power factor 02/2023 Number Sernsor für ShineWifi-X.yaml number: platform: modbus_controller modbus_controller_id: growatt id: growatt600_pv_powerfactor name: "${devicename} Power factor" address: 0x3 value_type: U_WORD lambda: "return x; " write_lambda: |- ESP_LOGD("main","Modbus Number incoming value = %f",x); uint16_t powerfactor = x ; payload.push_back(powerfactor); return x;
Jetzt kann ich zumindest den Powerfaktor in HA auslesen, ändern geht irgendwie noch nicht:
espHome Logger (Wechsel von 35% auf 36% =): [10:44:32][D][number:054]: 'Solar West Power factor' - Setting number value [10:44:32][D][number:113]: New number value: 36.000000 [10:44:32][D][main:209]: Modbus Number incoming value = 36.000000 [10:44:32][D][number:012]: 'Solar West Power factor': Sending state 36.000000 [10:44:32][D][modbus_controller:029]: Modbus command to device=1 register=0x00 countdown=0 no response received - removed from send queue
Wieso schreibt er hier register=0x00 ?? Müsste da nicht 0x03 stehen?
Der Weg scheint aber ein komplett anderer zu sein, als dein Codebeispiel. ESPHome ist schon komisch 😉
Vielleicht finden wir bald ne Lösung für uns,
rkr
Guten Abend zusammen ich habe mal eine frage ich habe das ganze jetzt mal wie ihr hier geschrieben habt nach gemacht mit einem Wemos D1 mini
es funzt alles auch soweit wie kann man das jetzt am besten mit Hassio verwirklichen das man eine null einspeisung automatisiert
mein aufbau zuhause
Hassio
Hichi smartmeter Daten per Mqtt
Growatt WR mit Wemos D1 Mini Daten per Esphome
ich danke euch schon mal im vorraus /p>
Bin bisher nicht fündig geworden leider
Guten Abend zusammen ich habe mal eine frage ich habe das ganze jetzt mal wie ihr hier geschrieben habt nach gemacht mit einem Wemos D1 mini
es funzt alles auch soweit wie kann man das jetzt am besten mit Hassio verwirklichen das man eine null einspeisung automatisiert
mein aufbau zuhause
Hassio
Hichi smartmeter Daten per Mqtt
Growatt WR mit Wemos D1 Mini Daten per Esphome
ich danke euch schon mal im vorraus /p>
Hast du Esphome einfach so auf den Wemos geflasht und dann dort eingerichtet? Frage, weil ich das lieber mit nem Wemos teste als das ich meinen Shine-Stick zerschieße.
Ich hatte das Ganze schon mal per RS485 probiert. Da war die Regelung dann aber recht träge. Also ne "flotte" 0-Einspeiseregelung ist das eher nicht.
Die Wirkleistung bezieht sich, wenn ich das richtig interpretiert habe, immer auf die theoretische Gesamtleistung des WR. Sprich bei nem 600er -> 100% = 600Watt. Bei nem 3000er -> 100% = 3000Watt.
Meine Idee war da, mir über nen Dreisatz ne Regelstrecke zu bauen. Da ich eh NodeRed am laufen habe, würde ich das vermutlich da einbauen. Denn das runterregeln, sehe ich als letzten Schritt, vorher schalte ich lieber noch ein paar Verbraucher (Infrarotheizung im Winter..... im Sommer dann ne Split-Klima, etc.).
Das ist jetzt kein finaler Code, sondern vielmehr die Idee wie ich das in nen functions-Block in NodeRed verpacken würde.
var WR_max = 3000 //Maximalleistung des WR var neue_WL = 100 //100% als Startwert festlegen var aktueller_Bezug = 3000 // Damit wir im Falle 3000Watt als Bezug defineirt haben var offest_Bezug = 150 // Ich gebe dem aktuellen Bezug noch 150Watt oben drauf. Einfach damit immer 150Watt mehr Leistung geliefert werden. Kann man natürlich anpassen aktueller_Bezug = muss man sich per MQTT erst holen und hier in die Variable speichern aktueller_Bezug = aktueller_Bezug+offset_Bezug; neue_WL = aktueller_Bezug*100/WL_max; return = neue_WL;
danke dir erst mal für den code Node-Red kenne ich mich so garnicht aus aber ich versuche es mal
wie kann man das jetzt am besten mit Hassio verwirklichen das man eine null einspeisung automatisiert
mein aufbau zuhause
Hassio
Hichi smartmeter Daten per Mqtt
Growatt WR mit Wemos D1 Mini Daten per Esphome
Du kannst einen Automatisierung erstellen die den Growatt anweist den Überschuss in den Akku zu stecken bzw. raus zu holen.
Ich würde dazu aber ein Venus OS installieren und dort die Daten einbinden via MQTT oder Modbus.
@profantus ich würde das schon gern mit Hassio machen das Hassio am besten den eigendlichen verbrauch abliest und dann den wemos D1 sagt hey du brauchst nicht soviel und den dann automatisch runter regelt
Ok, dann eine Automation erstellen die z.B. alle 30 Sec. automatisch läuft. Die holt sich den Zählerstand vom Stromzähler. Ich hoffe mal du hast einen 2 Richtungszähler ansonsten geht das nicht.
Also 1.8.1 und 2.8.1 holen. Wenn du Einspeist (2.8.1) dann über MQTT einen Befehl schicken zum Akku laden.
Wenn du Verbrauch hast umgekehrt.
Du brauchst dann auch noch den SOC vom Akku und eine Hysterese z.B 50W damit du nicht ständig hoch und runter regelst.
Im ESPHome musst du dann noch ein MQTT Subscribe Sensor einrichten der auf deine Nachricht aus Home Assistant hört und das auf die korrekten Modbus Register umsetzt.
@profantus wie geht das Ganze den ohne Akku da ich kein habe des Wegen 0 Einspeisung
@rattenfaenger Wenn du keinen Akku hast musst du dem WR sagen was er an PV Einspeisung generieren darf. Wenn der WR das kann dann Regelt der die Leistung passen runter. Das musst du auch machen wenn du einen Akku hast. Darin unterscheiden sich die Anlagen nicht. Ist der Akku voll und du möchtest nicht einspeisen muss du auch dann den WR runter regeln.
Hast du die Modbus-Spezifikation von deinem Wechselrichter? Dann kannst du die ja mal teilen. Dort muss ja beschrieben sein auf welches Register du schreiben musst um die Einspeiseleistung zu regeln.
Ich habe den growatt mic 600tl-x
hab da was gefunden weiß nur nicht ob das mit meinem WSR zusammen passt
Growatt_Manual modbus RTU Protocol.pdf
das ist der Befehl aus der esphome mit dem ich mein WSR regeln kann habe in Hassio auch den slider um ihn runter zu regeln
platform: modbus_controller modbus_controller_id: growatt id: growatt600_pv_powerfactor name: "${devicename} Power factor" address: 0x3 value_type: U_WORD min_value: 0 max_value: 100 step: 1